[{"data":1,"prerenderedAt":352},["ShallowReactive",2],{"/docs/jobs/dojjob/features/elections":3,"/docs/jobs/dojjob/features/elections-surround":342,"/docs/jobs/dojjob/features/elections-implemented-suggestions":351},{"id":4,"title":5,"body":6,"description":332,"extension":333,"head":334,"implementedSuggestions":334,"meta":335,"navigation":336,"path":337,"schemaOrg":334,"seo":338,"sitemap":339,"stem":340,"__hash__":341},"docs/1.docs/0.jobs/5.dojjob/3.features/10.elections.md","Elections & Public Displays",{"type":7,"value":8,"toc":320},"minimark",[9,14,23,29,33,71,87,98,101,105,125,132,135,139,142,149,152,157,164,167,170,174,184,187,239,247,251,305,316],[10,11,13],"h2",{"id":12},"election-management","Election management",[15,16,17,18,22],"p",{},"DOJ staff manage election drafts, choices, voting periods and results in the ",[19,20,21],"strong",{},"Elections"," app. Citizens cast their vote at a configured digital booth. A courtroom's evidence screens and the courthouse's public schedule displays are separate systems.",[15,24,25],{},[26,27],"img",{"alt":13,"src":28},"/products/doj/election-management-preview-5c044f292d.webp",[10,30,32],{"id":31},"setup","Setup",[34,35,36,53,68],"ol",{},[37,38,39,40,44,45,48,49,52],"li",{},"Enable ",[41,42,43],"code",{},"Config.ToggleFeatures.elections"," and allow the ",[41,46,47],{},"doj_elections"," app for the intended grades. Assign ",[19,50,51],{},"Manage elections"," to the staff who administer ballots. The normal tablet duty requirement applies.",[37,54,55,56,59,60,63,64,67],{},"Select the DOJ job and courthouse in ",[41,57,58],{},"/jobconfig",". Add a ",[19,61,62],{},"Digital voting booth"," to its locations and place it with an accessible entrance. The default model is ",[41,65,66],{},"sky_doj_voting_booth_01",".",[37,69,70],{},"Configure a private election pepper before publishing or testing a ballot. Use at least 32 random characters, saved only in the server configuration:",[72,73,78],"pre",{"className":74,"code":75,"language":76,"meta":77,"style":77},"language-cfg shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","set sky_dojjob_election_pepper \"REPLACE_WITH_A_PRIVATE_RANDOM_VALUE_OF_AT_LEAST_32_CHARACTERS\"\n","cfg","",[41,79,80],{"__ignoreMap":77},[81,82,85],"span",{"class":83,"line":84},"line",1,[81,86,75],{},[15,88,89,90,93,94,97],{},"Generate a real secret; the example is a placeholder. Do not use a replicated or server-info setting such as ",[41,91,92],{},"setr"," or ",[41,95,96],{},"sets",". Restrict access to the secret and include it in your protected server backups.",[15,99,100],{},"The database migrations must include the election tables and their voter-key uniqueness constraint. Voting refuses to start with an incompatible or incomplete schema. Do not remove the uniqueness constraint to work around an error.",[10,102,104],{"id":103},"create-and-run-a-ballot","Create and run a ballot",[34,106,107,110,113,116,119,122],{},[37,108,109],{},"Create a draft with its public title, description, opening time, closing time and answer options.",[37,111,112],{},"Review the ballot text and schedule. Defaults allow 2–12 options, a minimum duration of 5 minutes and a maximum duration of 30 days.",[37,114,115],{},"Save the draft. Draft edits use version checks so a second editor cannot silently overwrite the version you opened.",[37,117,118],{},"Publish the draft when it is ready. A published future election is scheduled; voters cannot vote before its opening time.",[37,120,121],{},"During the voting period, citizens approach a booth, open the ballot, choose an option and submit their vote. The server checks their current booth access, election state and whether they have already voted.",[37,123,124],{},"Review results after the voting period has ended, or close the election through the staff controls. Cancel a draft or published election when the ballot should no longer proceed.",[15,126,127,128,131],{},"An elapsed closing time and the staff ",[19,129,130],{},"Close"," action are distinct: the time-ended election no longer accepts votes, but its persisted status may still be published until staff close it. This matters when rotating the secret.",[15,133,134],{},"The standard booth interaction opens the ballot at the booth; Escape closes it. Keep the entrance clear and place the booth so players can stand inside the interaction area. This is in-world voting, not an unrestricted remote ballot from any location.",[10,136,138],{"id":137},"one-vote-and-privacy","One vote and privacy",[15,140,141],{},"The server enforces one recorded vote per election and citizen identity. Repeated submissions or visiting a second booth do not create a second vote for the same identity.",[15,143,144,145,148],{},"Vote rows use an election-scoped pseudonymous voter key instead of storing the citizen identifier directly. ",[19,146,147],{},"This is pseudonymisation, not anonymity."," Protect the pepper, database access and ordinary server logs. This does not implement real-world electoral certification or establish one vote per real person across independently created game identities.",[15,150,151],{},"The public ballot payload excludes staff identifiers, internal fields and live option counts. Staff and public terminal views are separate payloads; do not treat a screenshot of the staff view as the citizen view.",[153,154,156],"h3",{"id":155},"secret-rotation","Secret rotation",[15,158,159,160,163],{},"Publishing binds the election to a fingerprint of the current pepper. Changing the pepper while any election still has persisted status ",[19,161,162],{},"Published"," locks voting rather than generating a second voter key.",[15,165,166],{},"Before rotation, close or cancel every published election, including scheduled elections and time-ended elections awaiting administrative closure. Then update the private secret and publish new drafts. Do not overwrite stored fingerprints to force old published elections to accept a new pepper. Restore the original secret or close/cancel and recreate the affected ballot.",[15,168,169],{},"Historical elections using an older pepper remain available to staff but are omitted from the public terminal after rotation.",[10,171,173],{"id":172},"public-hearing-displays","Public hearing displays",[15,175,39,176,179,180,183],{},[41,177,178],{},"Config.ToggleFeatures.publicDisplays"," and ",[41,181,182],{},"Config.PublicDisplays.enabled",". Under the courthouse's locations, place the desired public wall screen, desk monitor or floor terminal. Fresh installations have no display placements.",[15,185,186],{},"The public docket shows public hearings, courtroom occupancy, times, status and directions. Only hearings enabled for public display are included; the related calendar visibility also applies. Use the hearing's subject and judge reveal controls deliberately:",[188,189,190,203],"table",{},[191,192,193],"thead",{},[194,195,196,200],"tr",{},[197,198,199],"th",{},"Setting",[197,201,202],{},"Public effect",[204,205,206,215,223,231],"tbody",{},[194,207,208,212],{},[209,210,211],"td",{},"Public hearing enabled",[209,213,214],{},"Allows the hearing to appear on the docket.",[194,216,217,220],{},[209,218,219],{},"Reveal subject",[209,221,222],{},"Shows the configured public subject; otherwise the case label stays neutral.",[194,224,225,228],{},[209,226,227],{},"Reveal judge",[209,229,230],{},"Includes the configured judge display name.",[194,232,233,236],{},[209,234,235],{},"Wayfinding",[209,237,238],{},"Helps visitors find the courtroom without exposing the private case record.",[15,240,241,242,67],{},"The default display window covers the previous 120 minutes and the next 48 hours, with up to six visible rows. A public docket does not grant access to case files, witness statements or evidence. To show admitted exhibits inside a room, configure that room's evidence displays instead; see ",[243,244,246],"a",{"href":245},"/docs/jobs/dojjob/features/hearings","Hearings & Courtrooms",[10,248,250],{"id":249},"troubleshooting","Troubleshooting",[188,252,253,263],{},[191,254,255],{},[194,256,257,260],{},[197,258,259],{},"Symptom",[197,261,262],{},"Check",[204,264,265,273,281,289,297],{},[194,266,267,270],{},[209,268,269],{},"Publishing or voting reports a secret error",[209,271,272],{},"Private pepper length, server configuration and the election's existing fingerprint.",[194,274,275,278],{},[209,276,277],{},"An election is missing from a booth",[209,279,280],{},"Publication state, schedule, active pepper and booth configuration.",[194,282,283,286],{},[209,284,285],{},"A second submission is refused",[209,287,288],{},"The existing vote is retained; do not clear the constraint to permit another.",[194,290,291,294],{},[209,292,293],{},"A public screen shows no hearing",[209,295,296],{},"Display placement/activation, time window, hearing public flag and calendar visibility.",[194,298,299,302],{},[209,300,301],{},"A participant's name is missing",[209,303,304],{},"Public subject/judge reveal controls; private participant data is intentionally omitted.",[15,306,307,308,179,312,67],{},"General installation and permission setup are covered under ",[243,309,311],{"href":310},"/docs/jobs/dojjob/setup/installation","Installation",[243,313,315],{"href":314},"/docs/jobs/dojjob/setup/permissions","Permissions",[317,318,319],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":77,"searchDepth":84,"depth":321,"links":322},2,[323,324,325,326,330,331],{"id":12,"depth":321,"text":13},{"id":31,"depth":321,"text":32},{"id":103,"depth":321,"text":104},{"id":137,"depth":321,"text":138,"children":327},[328],{"id":155,"depth":329,"text":156},3,{"id":172,"depth":321,"text":173},{"id":249,"depth":321,"text":250},"Set up digital voting, protect the election secret and configure public courthouse information.","md",null,{},true,"/docs/jobs/dojjob/features/elections",{"title":5,"description":332},{"loc":337},"1.docs/0.jobs/5.dojjob/3.features/10.elections","C4wTFkTvzKKuBJuEgKXFG4eBnoKpUUE6oF8qYnZ6DAo",[343,346],{"title":246,"path":245,"stem":344,"description":345,"children":-1},"1.docs/0.jobs/5.dojjob/3.features/09.hearings","Schedule hearings, configure courtroom points and run proceedings with admitted evidence.",{"title":347,"path":348,"stem":349,"description":350,"children":-1},"Conditions & Optional Asset Taxes","/docs/jobs/dojjob/features/conditions","1.docs/0.jobs/5.dojjob/3.features/11.conditions","Track court-imposed obligations, provider actions and review deadlines, with a separate optional tax collector.",[],1790629497010]