[{"data":1,"prerenderedAt":2466},["ShallowReactive",2],{"/docs/jobs/dojjob/api/server-exports":3,"/docs/jobs/dojjob/api/server-exports-surround":2455,"/docs/jobs/dojjob/api/server-exports-implemented-suggestions":2465},{"id":4,"title":5,"body":6,"description":2446,"extension":2447,"head":2448,"implementedSuggestions":2448,"meta":2449,"navigation":350,"path":2450,"schemaOrg":2448,"seo":2451,"sitemap":2452,"stem":2453,"__hash__":2454},"docs/1.docs/0.jobs/5.dojjob/5.api/2.server-exports.md","Server Exports",{"type":7,"value":8,"toc":2424},"minimark",[9,24,32,61,68,83,89,94,204,208,214,412,480,535,542,547,560,829,934,951,958,961,966,1090,1103,1132,1135,1139,1247,1250,1254,1259,1435,1469,1481,1486,1606,1634,1637,1641,1646,1728,1766,1771,1884,1898,1928,1957,1961,1966,2225,2261,2281,2284,2289,2361,2385,2389,2402,2420],[10,11,12,13,17,18,23],"p",{},"Call these exports from your resource's ",[14,15,16],"strong",{},"server Lua",". To open a tablet application from a player's menu, use ",[19,20,22],"a",{"href":21},"/docs/jobs/dojjob/api/client-exports","Client Exports",".",[10,25,26,27,31],{},"Declare DOJ as a dependency in your resource's ",[28,29,30],"code",{},"fxmanifest.lua",":",[33,34,39],"pre",{"className":35,"code":36,"language":37,"meta":38,"style":38},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dependency \"sky_dojjob\"\n","lua","",[28,40,41],{"__ignoreMap":38},[42,43,46,50,54,58],"span",{"class":44,"line":45},"line",1,[42,47,49],{"class":48},"s2Zo4","dependency",[42,51,53],{"class":52},"sMK4o"," \"",[42,55,57],{"class":56},"sfazB","sky_dojjob",[42,59,60],{"class":52},"\"\n",[10,62,63,64,67],{},"Let DOJ finish its normal database startup before requesting records. Database-backed calls can yield; use a normal FiveM event, callback or thread, keep results local to the request and handle failure before using ",[28,65,66],{},"data",". These exports do not expose a public HTTP API.",[10,69,70,71,74,75,78,79,82],{},"The document and condition APIs take an ",[14,72,73],{},"online player server ID",". DOJ resolves that player's current job, duty and permissions on the server. Passing ",[28,76,77],{},"0",", a character identifier or an actor table does not create a service-account bypass. If your script accepts a client request, capture the event's actual ",[28,80,81],{},"source","; never accept a player ID or author identity from the request body.",[10,84,85,88],{},[28,86,87],{},"SetHearingStatus"," has a different contract: it is a trusted server automation API, and its optional actor is only an audit identity. An evidence provider must authorize its own records. Read those sections before connecting a player-facing action.",[90,91,93],"h2",{"id":92},"api-overview","API overview",[95,96,97,110],"table",{},[98,99,100],"thead",{},[101,102,103,107],"tr",{},[104,105,106],"th",{},"Export",[104,108,109],{},"Purpose",[111,112,113,124,134,144,154,164,174,184,194],"tbody",{},[101,114,115,121],{},[116,117,118],"td",{},[28,119,120],{},"GetDocumentTemplates(source, options?)",[116,122,123],{},"List templates available to the acting player.",[101,125,126,131],{},[116,127,128],{},[28,129,130],{},"CreateCaseDocument(source, payload)",[116,132,133],{},"Create a draft from a published template, optionally in an existing case file.",[101,135,136,141],{},[116,137,138],{},[28,139,140],{},"GetCaseDocument(source, reference)",[116,142,143],{},"Read an accessible document and its saved draft.",[101,145,146,151],{},[116,147,148],{},[28,149,150],{},"GetConditionOrders(source, filters?)",[116,152,153],{},"List court-condition orders with bounded filters.",[101,155,156,161],{},[116,157,158],{},[28,159,160],{},"GetConditionOrder(source, reference)",[116,162,163],{},"Read an order, conditions, evidence, violations and event history.",[101,165,166,171],{},[116,167,168],{},[28,169,170],{},"GetPublicHearingPayload()",[116,172,173],{},"Read the public courthouse timetable.",[101,175,176,181],{},[116,177,178],{},[28,179,180],{},"SetHearingStatus(reference, status, actor?, options?)",[116,182,183],{},"Change hearing status from trusted server automation.",[101,185,186,191],{},[116,187,188],{},[28,189,190],{},"RegisterCourtroomEvidenceProvider(name, resolver)",[116,192,193],{},"Register a source of courtroom evidence.",[101,195,196,201],{},[116,197,198],{},[28,199,200],{},"GetCourtroomPresentationForPlayer(source, reference?)",[116,202,203],{},"Read the presentation that the player is allowed to see.",[90,205,207],{"id":206},"documents","Documents",[209,210,212],"h3",{"id":211},"getdocumenttemplatessource-options",[28,213,120],{},[33,215,217],{"className":35,"code":216,"language":37,"meta":38,"style":38},"local result = exports[\"sky_dojjob\"]:GetDocumentTemplates(player_source, {\n    publishedOnly = true,\n    summaryOnly = true,\n})\nif not result.success then\n    print((\"Template lookup failed: %s\"):format(result.error))\n    return\nend\n\nfor _, template in ipairs(result.data.templates) do\n    print(template.id, template.key, template.displayName)\nend\n",[28,218,219,250,264,276,282,302,333,339,345,352,382,407],{"__ignoreMap":38},[42,220,221,224,228,231,234,237,239,241,244,247],{"class":44,"line":45},[42,222,223],{"class":52},"local",[42,225,227],{"class":226},"sTEyZ"," result ",[42,229,230],{"class":52},"=",[42,232,233],{"class":226}," exports[",[42,235,236],{"class":52},"\"",[42,238,57],{"class":56},[42,240,236],{"class":52},[42,242,243],{"class":226},"]:",[42,245,246],{"class":48},"GetDocumentTemplates",[42,248,249],{"class":226},"(player_source, {\n",[42,251,253,256,258,261],{"class":44,"line":252},2,[42,254,255],{"class":226},"    publishedOnly ",[42,257,230],{"class":52},[42,259,260],{"class":52}," true",[42,262,263],{"class":226},",\n",[42,265,267,270,272,274],{"class":44,"line":266},3,[42,268,269],{"class":226},"    summaryOnly ",[42,271,230],{"class":52},[42,273,260],{"class":52},[42,275,263],{"class":226},[42,277,279],{"class":44,"line":278},4,[42,280,281],{"class":226},"})\n",[42,283,285,289,292,295,299],{"class":44,"line":284},5,[42,286,288],{"class":287},"s7zQu","if",[42,290,291],{"class":52}," not",[42,293,294],{"class":226}," result.",[42,296,298],{"class":297},"sBMFI","success",[42,300,301],{"class":287}," then\n",[42,303,305,308,311,313,316,318,321,324,327,330],{"class":44,"line":304},6,[42,306,307],{"class":48},"    print",[42,309,310],{"class":226},"((",[42,312,236],{"class":52},[42,314,315],{"class":56},"Template lookup failed: %s",[42,317,236],{"class":52},[42,319,320],{"class":226},"):",[42,322,323],{"class":48},"format",[42,325,326],{"class":226},"(result.",[42,328,329],{"class":297},"error",[42,331,332],{"class":226},"))\n",[42,334,336],{"class":44,"line":335},7,[42,337,338],{"class":287},"    return\n",[42,340,342],{"class":44,"line":341},8,[42,343,344],{"class":287},"end\n",[42,346,348],{"class":44,"line":347},9,[42,349,351],{"emptyLinePlaceholder":350},true,"\n",[42,353,355,358,361,364,367,369,371,373,376,379],{"class":44,"line":354},10,[42,356,357],{"class":287},"for",[42,359,360],{"class":226}," _, template ",[42,362,363],{"class":287},"in",[42,365,366],{"class":48}," ipairs",[42,368,326],{"class":226},[42,370,66],{"class":297},[42,372,23],{"class":226},[42,374,375],{"class":297},"templates",[42,377,378],{"class":226},") ",[42,380,381],{"class":287},"do\n",[42,383,385,387,390,393,396,399,401,404],{"class":44,"line":384},11,[42,386,307],{"class":48},[42,388,389],{"class":226},"(template.",[42,391,392],{"class":297},"id",[42,394,395],{"class":226},", template.",[42,397,398],{"class":297},"key",[42,400,395],{"class":226},[42,402,403],{"class":297},"displayName",[42,405,406],{"class":226},")\n",[42,408,410],{"class":44,"line":409},12,[42,411,344],{"class":287},[95,413,414,424],{},[98,415,416],{},[101,417,418,421],{},[104,419,420],{},"Option",[104,422,423],{},"Meaning",[111,425,426,440,456,466],{},[101,427,428,433],{},[116,429,430],{},[28,431,432],{},"publishedOnly",[116,434,435,436,439],{},"Use ",[28,437,438],{},"true"," when selecting a template for document creation. Managers can otherwise see their latest unpublished revisions.",[101,441,442,447],{},[116,443,444],{},[28,445,446],{},"summaryOnly",[116,448,435,449,451,452,455],{},[28,450,438],{}," for a picker. Omit or use ",[28,453,454],{},"false"," to include body, field schema and page settings.",[101,457,458,463],{},[116,459,460],{},[28,461,462],{},"templateId",[116,464,465],{},"Optional template UUID returned by an earlier lookup.",[101,467,468,473],{},[116,469,470],{},[28,471,472],{},"registryKey",[116,474,475,476,479],{},"Defaults to ",[28,477,478],{},"criminal_justice",". Leave this default for the normal File Explorer.",[10,481,482,483,486,487,489,490,489,492,489,494,489,496,489,499,489,502,505,506,509,510,512,513,489,515,489,517,489,520,489,523,489,526,489,529,505,532,23],{},"Success returns ",[28,484,485],{},"{ success = true, data = { templates, registryKey, permissions, unavailableTemplates } }",". Each template includes ",[28,488,392],{},", ",[28,491,398],{},[28,493,28],{},[28,495,403],{},[28,497,498],{},"revision",[28,500,501],{},"status",[28,503,504],{},"publishedVersionId"," and ",[28,507,508],{},"version",". A full ",[28,511,508],{}," includes ",[28,514,392],{},[28,516,508],{},[28,518,519],{},"fieldSchema",[28,521,522],{},"bodyTemplate",[28,524,525],{},"pageMaster",[28,527,528],{},"pageSettings",[28,530,531],{},"referenceFormat",[28,533,534],{},"signaturePolicy",[10,536,537,538,541],{},"IDs belong to the current database. Use the returned UUID, not a UUID copied from demo data. The shipped arrest-warrant key is ",[28,539,540],{},"doj-hb","; servers can customize templates, so inspect the returned schema before supplying fields. The template UUID and template-version UUID are different IDs.",[209,543,545],{"id":544},"createcasedocumentsource-payload",[28,546,130],{},[10,548,549,550,489,553,505,556,559],{},"Call this after the user chooses a published template and your integration has collected its fields. ",[28,551,552],{},"player_source",[28,554,555],{},"selected_template_id",[28,557,558],{},"prepared_fields"," below come from that existing server workflow.",[33,561,563],{"className":35,"code":562,"language":37,"meta":38,"style":38},"local result = exports[\"sky_dojjob\"]:CreateCaseDocument(player_source, {\n    templateId = selected_template_id,\n    caseTitle = \"Hearing preparation\",\n    subject = \"Example Subject\",\n    authorCode = \"AM\",\n    fieldValues = prepared_fields,\n})\nif not result.success then\n    print((\"Document creation failed: %s\"):format(result.error))\n    return\nend\n\nlocal document = result.data.document\nprint(document.id, document.caseFileId, document.documentNumber)\nif not document.draft.valid then\n    -- Keep the created draft and let the author complete the listed fields.\n    for _, failure in ipairs(document.draft.validationErrors) do\n        print(json.encode(failure))\n    end\nend\n",[28,564,565,588,598,614,630,646,656,660,672,695,699,703,707,726,750,770,777,803,818,824],{"__ignoreMap":38},[42,566,567,569,571,573,575,577,579,581,583,586],{"class":44,"line":45},[42,568,223],{"class":52},[42,570,227],{"class":226},[42,572,230],{"class":52},[42,574,233],{"class":226},[42,576,236],{"class":52},[42,578,57],{"class":56},[42,580,236],{"class":52},[42,582,243],{"class":226},[42,584,585],{"class":48},"CreateCaseDocument",[42,587,249],{"class":226},[42,589,590,593,595],{"class":44,"line":252},[42,591,592],{"class":226},"    templateId ",[42,594,230],{"class":52},[42,596,597],{"class":226}," selected_template_id,\n",[42,599,600,603,605,607,610,612],{"class":44,"line":266},[42,601,602],{"class":226},"    caseTitle ",[42,604,230],{"class":52},[42,606,53],{"class":52},[42,608,609],{"class":56},"Hearing preparation",[42,611,236],{"class":52},[42,613,263],{"class":226},[42,615,616,619,621,623,626,628],{"class":44,"line":278},[42,617,618],{"class":226},"    subject ",[42,620,230],{"class":52},[42,622,53],{"class":52},[42,624,625],{"class":56},"Example Subject",[42,627,236],{"class":52},[42,629,263],{"class":226},[42,631,632,635,637,639,642,644],{"class":44,"line":284},[42,633,634],{"class":226},"    authorCode ",[42,636,230],{"class":52},[42,638,53],{"class":52},[42,640,641],{"class":56},"AM",[42,643,236],{"class":52},[42,645,263],{"class":226},[42,647,648,651,653],{"class":44,"line":304},[42,649,650],{"class":226},"    fieldValues ",[42,652,230],{"class":52},[42,654,655],{"class":226}," prepared_fields,\n",[42,657,658],{"class":44,"line":335},[42,659,281],{"class":226},[42,661,662,664,666,668,670],{"class":44,"line":341},[42,663,288],{"class":287},[42,665,291],{"class":52},[42,667,294],{"class":226},[42,669,298],{"class":297},[42,671,301],{"class":287},[42,673,674,676,678,680,683,685,687,689,691,693],{"class":44,"line":347},[42,675,307],{"class":48},[42,677,310],{"class":226},[42,679,236],{"class":52},[42,681,682],{"class":56},"Document creation failed: %s",[42,684,236],{"class":52},[42,686,320],{"class":226},[42,688,323],{"class":48},[42,690,326],{"class":226},[42,692,329],{"class":297},[42,694,332],{"class":226},[42,696,697],{"class":44,"line":354},[42,698,338],{"class":287},[42,700,701],{"class":44,"line":384},[42,702,344],{"class":287},[42,704,705],{"class":44,"line":409},[42,706,351],{"emptyLinePlaceholder":350},[42,708,710,712,715,717,719,721,723],{"class":44,"line":709},13,[42,711,223],{"class":52},[42,713,714],{"class":226}," document ",[42,716,230],{"class":52},[42,718,294],{"class":226},[42,720,66],{"class":297},[42,722,23],{"class":226},[42,724,725],{"class":297},"document\n",[42,727,729,732,735,737,740,743,745,748],{"class":44,"line":728},14,[42,730,731],{"class":48},"print",[42,733,734],{"class":226},"(document.",[42,736,392],{"class":297},[42,738,739],{"class":226},", document.",[42,741,742],{"class":297},"caseFileId",[42,744,739],{"class":226},[42,746,747],{"class":297},"documentNumber",[42,749,406],{"class":226},[42,751,753,755,757,760,763,765,768],{"class":44,"line":752},15,[42,754,288],{"class":287},[42,756,291],{"class":52},[42,758,759],{"class":226}," document.",[42,761,762],{"class":297},"draft",[42,764,23],{"class":226},[42,766,767],{"class":297},"valid",[42,769,301],{"class":287},[42,771,773],{"class":44,"line":772},16,[42,774,776],{"class":775},"sHwdD","    -- Keep the created draft and let the author complete the listed fields.\n",[42,778,780,783,786,788,790,792,794,796,799,801],{"class":44,"line":779},17,[42,781,782],{"class":287},"    for",[42,784,785],{"class":226}," _, failure ",[42,787,363],{"class":287},[42,789,366],{"class":48},[42,791,734],{"class":226},[42,793,762],{"class":297},[42,795,23],{"class":226},[42,797,798],{"class":297},"validationErrors",[42,800,378],{"class":226},[42,802,381],{"class":287},[42,804,806,809,812,815],{"class":44,"line":805},18,[42,807,808],{"class":48},"        print",[42,810,811],{"class":226},"(json.",[42,813,814],{"class":48},"encode",[42,816,817],{"class":226},"(failure))\n",[42,819,821],{"class":44,"line":820},19,[42,822,823],{"class":287},"    end\n",[42,825,827],{"class":44,"line":826},20,[42,828,344],{"class":287},[95,830,831,840],{},[98,832,833],{},[101,834,835,838],{},[104,836,837],{},"Field",[104,839,423],{},[111,841,842,851,860,870,880,890,900,914,924],{},[101,843,844,848],{},[116,845,846],{},[28,847,462],{},[116,849,850],{},"Required published template UUID. The current published version is captured by the server.",[101,852,853,857],{},[116,854,855],{},[28,856,742],{},[116,858,859],{},"Optional existing case UUID. The player must be allowed to edit that case.",[101,861,862,867],{},[116,863,864],{},[28,865,866],{},"caseTitle",[116,868,869],{},"Required only when creating a new case, maximum 160 characters.",[101,871,872,877],{},[116,873,874],{},[28,875,876],{},"subject",[116,878,879],{},"Optional new-case subject, maximum 240 characters. Existing cases retain their subject.",[101,881,882,887],{},[116,883,884],{},[28,885,886],{},"authorCode",[116,888,889],{},"Required code, 1–8 characters, beginning with a letter; letters, digits and hyphens. Normalized to uppercase. It is a reference component, not the author's authenticated identity.",[101,891,892,897],{},[116,893,894],{},[28,895,896],{},"fieldValues",[116,898,899],{},"Table keyed by the chosen template's field keys. Values are validated against its schema.",[101,901,902,907],{},[116,903,904],{},[28,905,906],{},"referenceInput",[116,908,909,910,913],{},"Required when the template's reference format uses ",[28,911,912],{},"{REFERENCE}",". Otherwise may be omitted.",[101,915,916,921],{},[116,917,918],{},[28,919,920],{},"folderId",[116,922,923],{},"Optional destination folder UUID for a newly created case. Must be writable by the actor.",[101,925,926,931],{},[116,927,928],{},[28,929,930],{},"workspaceOwner",[116,932,933],{},"Optional existing shared workspace owner. Existing workspace permissions apply. Omit for the actor's workspace.",[10,935,482,936,939,940,943,944,505,947,950],{},[28,937,938],{},"{ success = true, data = { caseFile, link, document, draft } }",". ",[28,941,942],{},"link"," is present for a newly created case. A successful creation can contain an incomplete draft: inspect ",[28,945,946],{},"draft.valid",[28,948,949],{},"draft.validationErrors",". Signing remains an explicit authorized action in the document editor.",[10,952,953,954,957],{},"The server generates case/document identifiers, renders the published template, writes the audit event and captures header, footer, watermark and page settings. Supplying ",[28,955,956],{},"renderedContent",", a template code or another author's identity does not replace those server-owned values. Editing a template later does not rewrite this document's captured version.",[10,959,960],{},"Persist the returned document/case IDs in your integration record. This is a create operation, not an upsert: do not blindly repeat it after an uncertain response. Check the File Explorer before retrying an operation that may already have committed.",[209,962,964],{"id":963},"getcasedocumentsource-reference",[28,965,140],{},[33,967,969],{"className":35,"code":968,"language":37,"meta":38,"style":38},"local result = exports[\"sky_dojjob\"]:GetCaseDocument(player_source, {\n    documentId = stored_document_id,\n})\nif not result.success then\n    print((\"Document lookup failed: %s\"):format(result.error))\n    return\nend\nlocal document = result.data.document\nprint(document.documentNumber, document.title, document.draft.revision)\n",[28,970,971,994,1004,1008,1020,1043,1047,1051,1067],{"__ignoreMap":38},[42,972,973,975,977,979,981,983,985,987,989,992],{"class":44,"line":45},[42,974,223],{"class":52},[42,976,227],{"class":226},[42,978,230],{"class":52},[42,980,233],{"class":226},[42,982,236],{"class":52},[42,984,57],{"class":56},[42,986,236],{"class":52},[42,988,243],{"class":226},[42,990,991],{"class":48},"GetCaseDocument",[42,993,249],{"class":226},[42,995,996,999,1001],{"class":44,"line":252},[42,997,998],{"class":226},"    documentId ",[42,1000,230],{"class":52},[42,1002,1003],{"class":226}," stored_document_id,\n",[42,1005,1006],{"class":44,"line":266},[42,1007,281],{"class":226},[42,1009,1010,1012,1014,1016,1018],{"class":44,"line":278},[42,1011,288],{"class":287},[42,1013,291],{"class":52},[42,1015,294],{"class":226},[42,1017,298],{"class":297},[42,1019,301],{"class":287},[42,1021,1022,1024,1026,1028,1031,1033,1035,1037,1039,1041],{"class":44,"line":284},[42,1023,307],{"class":48},[42,1025,310],{"class":226},[42,1027,236],{"class":52},[42,1029,1030],{"class":56},"Document lookup failed: %s",[42,1032,236],{"class":52},[42,1034,320],{"class":226},[42,1036,323],{"class":48},[42,1038,326],{"class":226},[42,1040,329],{"class":297},[42,1042,332],{"class":226},[42,1044,1045],{"class":44,"line":304},[42,1046,338],{"class":287},[42,1048,1049],{"class":44,"line":335},[42,1050,344],{"class":287},[42,1052,1053,1055,1057,1059,1061,1063,1065],{"class":44,"line":341},[42,1054,223],{"class":52},[42,1056,714],{"class":226},[42,1058,230],{"class":52},[42,1060,294],{"class":226},[42,1062,66],{"class":297},[42,1064,23],{"class":226},[42,1066,725],{"class":297},[42,1068,1069,1071,1073,1075,1077,1080,1082,1084,1086,1088],{"class":44,"line":347},[42,1070,731],{"class":48},[42,1072,734],{"class":226},[42,1074,747],{"class":297},[42,1076,739],{"class":226},[42,1078,1079],{"class":297},"title",[42,1081,739],{"class":226},[42,1083,762],{"class":297},[42,1085,23],{"class":226},[42,1087,498],{"class":297},[42,1089,406],{"class":226},[10,1091,1092,1093,1096,1097,1096,1100,1102],{},"Supply either ",[28,1094,1095],{},"documentId"," ",[14,1098,1099],{},"or",[28,1101,742],{},", never both. Prefer the exact document UUID when a case contains several documents. The case-only form selects the case's first document using the service's existing ordering.",[10,1104,1105,1108,1109,1111,1112,1114,1115,1117,1118,489,1120,489,1123,489,1125,489,1128,505,1130,23],{},[28,1106,1107],{},"data.document"," includes document and case IDs, display references, title, status, document ",[28,1110,498],{},", template snapshot, ",[28,1113,762],{},", signing summary and resolved case references. ",[28,1116,762],{}," includes its separate ",[28,1119,498],{},[28,1121,1122],{},"fields",[28,1124,956],{},[28,1126,1127],{},"renderedPageMaster",[28,1129,767],{},[28,1131,798],{},[10,1133,1134],{},"The returned content is structured editor data; it is not a PDF URL or a license to reveal the file to another player. Forward content only to the same authorized actor. Use the established Share and Print workflow for other recipients and physical copies.",[209,1136,1138],{"id":1137},"document-failures","Document failures",[95,1140,1141,1151],{},[98,1142,1143],{},[101,1144,1145,1148],{},[104,1146,1147],{},"Error",[104,1149,1150],{},"Action",[111,1152,1153,1173,1183,1205,1215,1231],{},[101,1154,1155,1166],{},[116,1156,1157,489,1160,489,1163],{},[28,1158,1159],{},"not_authorized",[28,1161,1162],{},"edit_not_authorized",[28,1164,1165],{},"AUTH_*",[116,1167,1168,1169,1172],{},"Check job, duty, role mapping, clearance and case/workspace access. Keep the returned ",[28,1170,1171],{},"correlationId"," for diagnostics when present.",[101,1174,1175,1180],{},[116,1176,1177],{},[28,1178,1179],{},"document_not_found",[116,1181,1182],{},"The document is missing or outside the actor's accessible scope.",[101,1184,1185,1202],{},[116,1186,1187,489,1190,489,1193,489,1196,489,1199],{},[28,1188,1189],{},"invalid_template_id",[28,1191,1192],{},"invalid_document_reference",[28,1194,1195],{},"invalid_fields",[28,1197,1198],{},"invalid_author_code",[28,1200,1201],{},"invalid_reference_input",[116,1203,1204],{},"Correct the payload using current IDs and schema.",[101,1206,1207,1212],{},[116,1208,1209],{},[28,1210,1211],{},"version_conflict",[116,1213,1214],{},"Reopen/read the current state before continuing.",[101,1216,1217,1228],{},[116,1218,1219,489,1222,489,1225],{},[28,1220,1221],{},"rate_limited",[28,1223,1224],{},"busy",[28,1226,1227],{},"network_unstable",[116,1229,1230],{},"Stop repeated requests; let the current operation finish or resolve the connection issue.",[101,1232,1233,1244],{},[116,1234,1235,489,1238,489,1241],{},[28,1236,1237],{},"database_error",[28,1239,1240],{},"invalid_stored_template",[28,1242,1243],{},"invalid_stored_document",[116,1245,1246],{},"Inspect server diagnostics and migrations; do not treat failure as an empty list.",[10,1248,1249],{},"Document exports share the tablet's per-player throttles: template reads 250 ms, creation 1,000 ms and document reads 150 ms. They do not bypass the current ACL, mutation lock or audit path.",[90,1251,1253],{"id":1252},"court-conditions","Court conditions",[209,1255,1257],{"id":1256},"getconditionorderssource-filters",[28,1258,150],{},[33,1260,1262],{"className":35,"code":1261,"language":37,"meta":38,"style":38},"local result = exports[\"sky_dojjob\"]:GetConditionOrders(player_source, {\n    subjectIdentifier = subject_identifier,\n    status = \"active\",\n    limit = 25,\n    offset = 0,\n})\nif not result.success then\n    print((\"Condition lookup failed: %s\"):format(result.error))\n    return\nend\nfor _, order in ipairs(result.data.items) do\n    print(order.orderKey, order.status, order.conditionCount)\nend\n",[28,1263,1264,1287,1297,1313,1326,1338,1342,1354,1377,1381,1385,1409,1431],{"__ignoreMap":38},[42,1265,1266,1268,1270,1272,1274,1276,1278,1280,1282,1285],{"class":44,"line":45},[42,1267,223],{"class":52},[42,1269,227],{"class":226},[42,1271,230],{"class":52},[42,1273,233],{"class":226},[42,1275,236],{"class":52},[42,1277,57],{"class":56},[42,1279,236],{"class":52},[42,1281,243],{"class":226},[42,1283,1284],{"class":48},"GetConditionOrders",[42,1286,249],{"class":226},[42,1288,1289,1292,1294],{"class":44,"line":252},[42,1290,1291],{"class":226},"    subjectIdentifier ",[42,1293,230],{"class":52},[42,1295,1296],{"class":226}," subject_identifier,\n",[42,1298,1299,1302,1304,1306,1309,1311],{"class":44,"line":266},[42,1300,1301],{"class":226},"    status ",[42,1303,230],{"class":52},[42,1305,53],{"class":52},[42,1307,1308],{"class":56},"active",[42,1310,236],{"class":52},[42,1312,263],{"class":226},[42,1314,1315,1318,1320,1324],{"class":44,"line":278},[42,1316,1317],{"class":226},"    limit ",[42,1319,230],{"class":52},[42,1321,1323],{"class":1322},"sbssI"," 25",[42,1325,263],{"class":226},[42,1327,1328,1331,1333,1336],{"class":44,"line":284},[42,1329,1330],{"class":226},"    offset ",[42,1332,230],{"class":52},[42,1334,1335],{"class":1322}," 0",[42,1337,263],{"class":226},[42,1339,1340],{"class":44,"line":304},[42,1341,281],{"class":226},[42,1343,1344,1346,1348,1350,1352],{"class":44,"line":335},[42,1345,288],{"class":287},[42,1347,291],{"class":52},[42,1349,294],{"class":226},[42,1351,298],{"class":297},[42,1353,301],{"class":287},[42,1355,1356,1358,1360,1362,1365,1367,1369,1371,1373,1375],{"class":44,"line":341},[42,1357,307],{"class":48},[42,1359,310],{"class":226},[42,1361,236],{"class":52},[42,1363,1364],{"class":56},"Condition lookup failed: %s",[42,1366,236],{"class":52},[42,1368,320],{"class":226},[42,1370,323],{"class":48},[42,1372,326],{"class":226},[42,1374,329],{"class":297},[42,1376,332],{"class":226},[42,1378,1379],{"class":44,"line":347},[42,1380,338],{"class":287},[42,1382,1383],{"class":44,"line":354},[42,1384,344],{"class":287},[42,1386,1387,1389,1392,1394,1396,1398,1400,1402,1405,1407],{"class":44,"line":384},[42,1388,357],{"class":287},[42,1390,1391],{"class":226}," _, order ",[42,1393,363],{"class":287},[42,1395,366],{"class":48},[42,1397,326],{"class":226},[42,1399,66],{"class":297},[42,1401,23],{"class":226},[42,1403,1404],{"class":297},"items",[42,1406,378],{"class":226},[42,1408,381],{"class":287},[42,1410,1411,1413,1416,1419,1422,1424,1426,1429],{"class":44,"line":409},[42,1412,307],{"class":48},[42,1414,1415],{"class":226},"(order.",[42,1417,1418],{"class":297},"orderKey",[42,1420,1421],{"class":226},", order.",[42,1423,501],{"class":297},[42,1425,1421],{"class":226},[42,1427,1428],{"class":297},"conditionCount",[42,1430,406],{"class":226},[42,1432,1433],{"class":44,"line":709},[42,1434,344],{"class":287},[10,1436,1437,1438,489,1441,489,1443,489,1446,505,1449,939,1452,1454,1455,489,1457,489,1460,489,1463,505,1466,23],{},"Filters are optional: ",[28,1439,1440],{},"subjectIdentifier",[28,1442,501],{},[28,1444,1445],{},"search",[28,1447,1448],{},"limit",[28,1450,1451],{},"offset",[28,1453,1445],{}," matches order key, case reference, source reference and subject name. Default limit is 50; the configured maximum defaults to 100. Offsets must be integers from 0 to 1,000,000. Order statuses are ",[28,1456,1308],{},[28,1458,1459],{},"completed",[28,1461,1462],{},"review_required",[28,1464,1465],{},"continuation_requested",[28,1467,1468],{},"cancelled",[10,1470,482,1471,1474,1475,1477,1478,1480],{},[28,1472,1473],{},"{ success = true, data = { items, total, limit, offset } }",". An empty ",[28,1476,1404],{}," list is a valid result. Each item includes ",[28,1479,1418],{},", subject, source/case references, status and condition/violation counts.",[209,1482,1484],{"id":1483},"getconditionordersource-reference",[28,1485,160],{},[33,1487,1489],{"className":35,"code":1488,"language":37,"meta":38,"style":38},"local result = exports[\"sky_dojjob\"]:GetConditionOrder(player_source, {\n    orderKey = selected_order_key,\n})\nif result.success then\n    local order = result.data\n    print(order.orderKey, #order.conditions)\nelse\n    print((\"Order detail failed: %s\"):format(result.error))\nend\n",[28,1490,1491,1514,1524,1528,1538,1553,1574,1579,1602],{"__ignoreMap":38},[42,1492,1493,1495,1497,1499,1501,1503,1505,1507,1509,1512],{"class":44,"line":45},[42,1494,223],{"class":52},[42,1496,227],{"class":226},[42,1498,230],{"class":52},[42,1500,233],{"class":226},[42,1502,236],{"class":52},[42,1504,57],{"class":56},[42,1506,236],{"class":52},[42,1508,243],{"class":226},[42,1510,1511],{"class":48},"GetConditionOrder",[42,1513,249],{"class":226},[42,1515,1516,1519,1521],{"class":44,"line":252},[42,1517,1518],{"class":226},"    orderKey ",[42,1520,230],{"class":52},[42,1522,1523],{"class":226}," selected_order_key,\n",[42,1525,1526],{"class":44,"line":266},[42,1527,281],{"class":226},[42,1529,1530,1532,1534,1536],{"class":44,"line":278},[42,1531,288],{"class":287},[42,1533,294],{"class":226},[42,1535,298],{"class":297},[42,1537,301],{"class":287},[42,1539,1540,1543,1546,1548,1550],{"class":44,"line":284},[42,1541,1542],{"class":52},"    local",[42,1544,1545],{"class":226}," order ",[42,1547,230],{"class":52},[42,1549,294],{"class":226},[42,1551,1552],{"class":297},"data\n",[42,1554,1555,1557,1559,1561,1563,1566,1569,1572],{"class":44,"line":304},[42,1556,307],{"class":48},[42,1558,1415],{"class":226},[42,1560,1418],{"class":297},[42,1562,489],{"class":226},[42,1564,1565],{"class":52},"#",[42,1567,1568],{"class":226},"order.",[42,1570,1571],{"class":297},"conditions",[42,1573,406],{"class":226},[42,1575,1576],{"class":44,"line":335},[42,1577,1578],{"class":287},"else\n",[42,1580,1581,1583,1585,1587,1590,1592,1594,1596,1598,1600],{"class":44,"line":341},[42,1582,307],{"class":48},[42,1584,310],{"class":226},[42,1586,236],{"class":52},[42,1588,1589],{"class":56},"Order detail failed: %s",[42,1591,236],{"class":52},[42,1593,320],{"class":226},[42,1595,323],{"class":48},[42,1597,326],{"class":226},[42,1599,329],{"class":297},[42,1601,332],{"class":226},[42,1603,1604],{"class":44,"line":347},[42,1605,344],{"class":287},[10,1607,1608,1609,489,1611,505,1614,1617,1618,505,1621,1623,1624,1626,1627,1630,1631,23],{},"The detail response includes the order plus ",[28,1610,1571],{},[28,1612,1613],{},"violations",[28,1615,1616],{},"events",". Each condition contains its own ",[28,1619,1620],{},"evidence",[28,1622,1613],{}," lists. ",[28,1625,1418],{}," is the stable string key, not the numeric database ID. Missing orders return ",[28,1628,1629],{},"not_found","; malformed references return ",[28,1632,1633],{},"invalid_order_key",[10,1635,1636],{},"These calls require the configured DOJ job, enabled Tablet/Conditions modules, required duty state and application access. They do not grant civilians access to orders about themselves. They reuse normal condition refresh: provider progress is reconciled and overdue conditions are checked before results are returned. Use them when opening or updating the relevant screen, not in a per-frame loop. Execution and compliance updates continue through the configured adapters and authorized DOJ workflow.",[90,1638,1640],{"id":1639},"hearings","Hearings",[209,1642,1644],{"id":1643},"getpublichearingpayload",[28,1645,170],{},[33,1647,1649],{"className":35,"code":1648,"language":37,"meta":38,"style":38},"local timetable = exports[\"sky_dojjob\"]:GetPublicHearingPayload()\nfor _, hearing in ipairs(timetable.hearings) do\n    print(hearing.publicReference, hearing.courtroom, hearing.startsAt, hearing.statusLabel)\nend\n",[28,1650,1651,1676,1696,1724],{"__ignoreMap":38},[42,1652,1653,1655,1658,1660,1662,1664,1666,1668,1670,1673],{"class":44,"line":45},[42,1654,223],{"class":52},[42,1656,1657],{"class":226}," timetable ",[42,1659,230],{"class":52},[42,1661,233],{"class":226},[42,1663,236],{"class":52},[42,1665,57],{"class":56},[42,1667,236],{"class":52},[42,1669,243],{"class":226},[42,1671,1672],{"class":48},"GetPublicHearingPayload",[42,1674,1675],{"class":226},"()\n",[42,1677,1678,1680,1683,1685,1687,1690,1692,1694],{"class":44,"line":252},[42,1679,357],{"class":287},[42,1681,1682],{"class":226}," _, hearing ",[42,1684,363],{"class":287},[42,1686,366],{"class":48},[42,1688,1689],{"class":226},"(timetable.",[42,1691,1639],{"class":297},[42,1693,378],{"class":226},[42,1695,381],{"class":287},[42,1697,1698,1700,1703,1706,1709,1712,1714,1717,1719,1722],{"class":44,"line":266},[42,1699,307],{"class":48},[42,1701,1702],{"class":226},"(hearing.",[42,1704,1705],{"class":297},"publicReference",[42,1707,1708],{"class":226},", hearing.",[42,1710,1711],{"class":297},"courtroom",[42,1713,1708],{"class":226},[42,1715,1716],{"class":297},"startsAt",[42,1718,1708],{"class":226},[42,1720,1721],{"class":297},"statusLabel",[42,1723,406],{"class":226},[42,1725,1726],{"class":44,"line":278},[42,1727,344],{"class":287},[10,1729,1730,1731,1734,1735,1738,1739,489,1742,489,1745,489,1748,489,1751,489,1754,489,1757,489,1760,505,1762,1765],{},"This export returns the ",[14,1732,1733],{},"payload directly",", without a ",[28,1736,1737],{},"{ success, data }"," envelope. Fields include ",[28,1740,1741],{},"generatedAt",[28,1743,1744],{},"locale",[28,1746,1747],{},"heading",[28,1749,1750],{},"subheading",[28,1752,1753],{},"maxRows",[28,1755,1756],{},"compact",[28,1758,1759],{},"rooms",[28,1761,1639],{},[28,1763,1764],{},"syncSequence",". It queries the configured public display time window and returns only enabled public hearing entries. Subject and judge names obey each hearing's disclosure flags. Private notes, full case content and participant assignments are not in this payload.",[209,1767,1769],{"id":1768},"sethearingstatusreference-status-actor-options",[28,1770,180],{},[33,1772,1774],{"className":35,"code":1773,"language":37,"meta":38,"style":38},"local result = exports[\"sky_dojjob\"]:SetHearingStatus(hearing_key, \"in_progress\", {\n    identifier = \"system:court_scheduler\",\n    name = \"Court scheduler\",\n})\nif not result.success then\n    print((\"Hearing transition failed: %s\"):format(result.error))\nend\n",[28,1775,1776,1809,1825,1841,1845,1857,1880],{"__ignoreMap":38},[42,1777,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796,1799,1801,1804,1806],{"class":44,"line":45},[42,1779,223],{"class":52},[42,1781,227],{"class":226},[42,1783,230],{"class":52},[42,1785,233],{"class":226},[42,1787,236],{"class":52},[42,1789,57],{"class":56},[42,1791,236],{"class":52},[42,1793,243],{"class":226},[42,1795,87],{"class":48},[42,1797,1798],{"class":226},"(hearing_key, ",[42,1800,236],{"class":52},[42,1802,1803],{"class":56},"in_progress",[42,1805,236],{"class":52},[42,1807,1808],{"class":226},", {\n",[42,1810,1811,1814,1816,1818,1821,1823],{"class":44,"line":252},[42,1812,1813],{"class":226},"    identifier ",[42,1815,230],{"class":52},[42,1817,53],{"class":52},[42,1819,1820],{"class":56},"system:court_scheduler",[42,1822,236],{"class":52},[42,1824,263],{"class":226},[42,1826,1827,1830,1832,1834,1837,1839],{"class":44,"line":266},[42,1828,1829],{"class":226},"    name ",[42,1831,230],{"class":52},[42,1833,53],{"class":52},[42,1835,1836],{"class":56},"Court scheduler",[42,1838,236],{"class":52},[42,1840,263],{"class":226},[42,1842,1843],{"class":44,"line":278},[42,1844,281],{"class":226},[42,1846,1847,1849,1851,1853,1855],{"class":44,"line":284},[42,1848,288],{"class":287},[42,1850,291],{"class":52},[42,1852,294],{"class":226},[42,1854,298],{"class":297},[42,1856,301],{"class":287},[42,1858,1859,1861,1863,1865,1868,1870,1872,1874,1876,1878],{"class":44,"line":304},[42,1860,307],{"class":48},[42,1862,310],{"class":226},[42,1864,236],{"class":52},[42,1866,1867],{"class":56},"Hearing transition failed: %s",[42,1869,236],{"class":52},[42,1871,320],{"class":226},[42,1873,323],{"class":48},[42,1875,326],{"class":226},[42,1877,329],{"class":297},[42,1879,332],{"class":226},[42,1881,1882],{"class":44,"line":335},[42,1883,344],{"class":287},[10,1885,1886,1889,1890,1893,1894,1897],{},[28,1887,1888],{},"reference"," accepts the hearing key or numeric hearing ID. This existing export is for ",[14,1891,1892],{},"trusted server automation",": ",[28,1895,1896],{},"actor"," is an audit identity and does not authenticate a player. Do not forward a client-supplied reference/status/actor directly to it. Player actions should use the existing permission-checked hearing interface.",[10,1899,1900,1901,1904,1905,1908,1909,489,1911,505,1914,1917,1918,1921,1922,505,1925,1927],{},"Allowed changes follow the hearing lifecycle: ",[28,1902,1903],{},"reserved","/",[28,1906,1907],{},"delayed"," can start; ",[28,1910,1803],{},[28,1912,1913],{},"paused",[28,1915,1916],{},"deliberation"," can transition between their supported phases and finish/close; ",[28,1919,1920],{},"finished"," can close; ",[28,1923,1924],{},"closed",[28,1926,1468],{}," cannot reopen. Cancellation is available before the hearing starts. A repeated current status is accepted for synchronization.",[10,1929,1930,1931,1934,1935,1938,1939,489,1941,489,1944,489,1947,505,1950,1952,1953,1956],{},"Returns ",[28,1932,1933],{},"{ success = true, data = hearing }"," or ",[28,1936,1937],{},"{ success = false, error }",". Status and active courtroom state are synchronized through the normal transaction/lock path. Common failures include ",[28,1940,1629],{},[28,1942,1943],{},"invalid_status_transition",[28,1945,1946],{},"courtroom_occupied",[28,1948,1949],{},"courtroom_unavailable",[28,1951,1237],{},". Leave ",[28,1954,1955],{},"options"," unset unless working with the maintained courtroom integration; internal options are not a player-facing configuration API.",[90,1958,1960],{"id":1959},"courtroom-evidence","Courtroom evidence",[209,1962,1964],{"id":1963},"registercourtroomevidenceprovidername-resolver",[28,1965,190],{},[33,1967,1969],{"className":35,"code":1968,"language":37,"meta":38,"style":38},"-- server.lua; Archive is your resource's own server-side data/permission service.\nlocal registered = exports[\"sky_dojjob\"]:RegisterCourtroomEvidenceProvider(\"archive\", function(player_source, reference, context)\n    local record = Archive.FindReadable(player_source, reference.reference)\n    if not record then\n        return nil, \"evidence_not_found\"\n    end\n    return {\n        sourceType = \"archive\",\n        sourceReference = reference.canonical,\n        sourceVersion = record.immutableVersion,\n        label = record.title,\n        mediaType = \"document\",\n        assetUrl = record.httpsUrl,\n        pageCount = record.pageCount,\n    }\nend)\nassert(registered, \"DOJ evidence provider registration failed\")\n",[28,1970,1971,1976,2031,2053,2065,2082,2086,2094,2109,2124,2139,2152,2168,2182,2196,2201,2208],{"__ignoreMap":38},[42,1972,1973],{"class":44,"line":45},[42,1974,1975],{"class":775},"-- server.lua; Archive is your resource's own server-side data/permission service.\n",[42,1977,1978,1980,1983,1985,1987,1989,1991,1993,1995,1998,2001,2003,2006,2008,2010,2013,2015,2018,2021,2024,2026,2029],{"class":44,"line":252},[42,1979,223],{"class":52},[42,1981,1982],{"class":226}," registered ",[42,1984,230],{"class":52},[42,1986,233],{"class":226},[42,1988,236],{"class":52},[42,1990,57],{"class":56},[42,1992,236],{"class":52},[42,1994,243],{"class":226},[42,1996,1997],{"class":48},"RegisterCourtroomEvidenceProvider",[42,1999,2000],{"class":226},"(",[42,2002,236],{"class":52},[42,2004,2005],{"class":56},"archive",[42,2007,236],{"class":52},[42,2009,489],{"class":226},[42,2011,2012],{"class":287},"function",[42,2014,2000],{"class":52},[42,2016,552],{"class":2017},"sHdIc",[42,2019,2020],{"class":52},",",[42,2022,2023],{"class":2017}," reference",[42,2025,2020],{"class":52},[42,2027,2028],{"class":2017}," context",[42,2030,406],{"class":52},[42,2032,2033,2035,2038,2040,2043,2046,2049,2051],{"class":44,"line":266},[42,2034,1542],{"class":52},[42,2036,2037],{"class":226}," record ",[42,2039,230],{"class":52},[42,2041,2042],{"class":226}," Archive.",[42,2044,2045],{"class":48},"FindReadable",[42,2047,2048],{"class":226},"(player_source, reference.",[42,2050,1888],{"class":297},[42,2052,406],{"class":226},[42,2054,2055,2058,2060,2062],{"class":44,"line":278},[42,2056,2057],{"class":287},"    if",[42,2059,291],{"class":52},[42,2061,2037],{"class":226},[42,2063,2064],{"class":287},"then\n",[42,2066,2067,2070,2073,2075,2077,2080],{"class":44,"line":284},[42,2068,2069],{"class":287},"        return",[42,2071,2072],{"class":52}," nil",[42,2074,489],{"class":226},[42,2076,236],{"class":52},[42,2078,2079],{"class":56},"evidence_not_found",[42,2081,60],{"class":52},[42,2083,2084],{"class":44,"line":304},[42,2085,823],{"class":287},[42,2087,2088,2091],{"class":44,"line":335},[42,2089,2090],{"class":287},"    return",[42,2092,2093],{"class":226}," {\n",[42,2095,2096,2099,2101,2103,2105,2107],{"class":44,"line":341},[42,2097,2098],{"class":226},"        sourceType ",[42,2100,230],{"class":52},[42,2102,53],{"class":52},[42,2104,2005],{"class":56},[42,2106,236],{"class":52},[42,2108,263],{"class":226},[42,2110,2111,2114,2116,2119,2122],{"class":44,"line":347},[42,2112,2113],{"class":226},"        sourceReference ",[42,2115,230],{"class":52},[42,2117,2118],{"class":226}," reference.",[42,2120,2121],{"class":297},"canonical",[42,2123,263],{"class":226},[42,2125,2126,2129,2131,2134,2137],{"class":44,"line":354},[42,2127,2128],{"class":226},"        sourceVersion ",[42,2130,230],{"class":52},[42,2132,2133],{"class":226}," record.",[42,2135,2136],{"class":297},"immutableVersion",[42,2138,263],{"class":226},[42,2140,2141,2144,2146,2148,2150],{"class":44,"line":384},[42,2142,2143],{"class":226},"        label ",[42,2145,230],{"class":52},[42,2147,2133],{"class":226},[42,2149,1079],{"class":297},[42,2151,263],{"class":226},[42,2153,2154,2157,2159,2161,2164,2166],{"class":44,"line":409},[42,2155,2156],{"class":226},"        mediaType ",[42,2158,230],{"class":52},[42,2160,53],{"class":52},[42,2162,2163],{"class":56},"document",[42,2165,236],{"class":52},[42,2167,263],{"class":226},[42,2169,2170,2173,2175,2177,2180],{"class":44,"line":709},[42,2171,2172],{"class":226},"        assetUrl ",[42,2174,230],{"class":52},[42,2176,2133],{"class":226},[42,2178,2179],{"class":297},"httpsUrl",[42,2181,263],{"class":226},[42,2183,2184,2187,2189,2191,2194],{"class":44,"line":728},[42,2185,2186],{"class":226},"        pageCount ",[42,2188,230],{"class":52},[42,2190,2133],{"class":226},[42,2192,2193],{"class":297},"pageCount",[42,2195,263],{"class":226},[42,2197,2198],{"class":44,"line":752},[42,2199,2200],{"class":226},"    }\n",[42,2202,2203,2206],{"class":44,"line":772},[42,2204,2205],{"class":287},"end",[42,2207,406],{"class":226},[42,2209,2210,2213,2216,2218,2221,2223],{"class":44,"line":779},[42,2211,2212],{"class":48},"assert",[42,2214,2215],{"class":226},"(registered, ",[42,2217,236],{"class":52},[42,2219,2220],{"class":56},"DOJ evidence provider registration failed",[42,2222,236],{"class":52},[42,2224,406],{"class":226},[10,2226,2227,2228,2231,2232,505,2235,2238,2239,489,2242,489,2244,2246,2247,489,2250,489,2253,2256,2257,2260],{},"Users enter ",[28,2229,2230],{},"archive:\u003Cyour-record-id>"," in the evidence reference field. Provider names are 1–40 lowercase letters/digits/underscores/hyphens; ",[28,2233,2234],{},"police_case",[28,2236,2237],{},"doj_file"," are reserved. Registration returns a boolean. The resolver receives the acting player, normalized reference (",[28,2240,2241],{},"provider",[28,2243,1888],{},[28,2245,2121],{},") and courtroom context (",[28,2248,2249],{},"sessionKey",[28,2251,2252],{},"hearingKey",[28,2254,2255],{},"job","). It must verify the actor's read access itself and return ",[28,2258,2259],{},"nil, errorCode"," when inaccessible.",[10,2262,2263,2264,489,2267,2270,2271,505,2274,2276,2277,2280],{},"Return a stable ",[28,2265,2266],{},"sourceVersion",[28,2268,2269],{},"label",", media type, HTTPS ",[28,2272,2273],{},"assetUrl",[28,2275,2193],{}," (1–5,000). The exact media host must be in ",[28,2278,2279],{},"Config.Courtroom.allowedMediaHosts",", configured through Job Configurator. A provider cannot skip evidence approval or the audience's room/bucket checks. The remote asset must remain available and unchanged; the stored reference hash does not freeze bytes hosted by an external website.",[10,2282,2283],{},"Providers are removed when their resource stops. Re-register after the provider or DOJ restarts. Never keep a cached export function or resolver from an earlier resource instance.",[209,2285,2287],{"id":2286},"getcourtroompresentationforplayersource-reference",[28,2288,200],{},[33,2290,2292],{"className":35,"code":2291,"language":37,"meta":38,"style":38},"local result = exports[\"sky_dojjob\"]:GetCourtroomPresentationForPlayer(player_source, {\n    courtroomKey = configured_room_key,\n})\nif result.success and result.data.active then\n    -- Send only this authorized presentation to player_source's own display.\nend\n",[28,2293,2294,2317,2327,2331,2352,2357],{"__ignoreMap":38},[42,2295,2296,2298,2300,2302,2304,2306,2308,2310,2312,2315],{"class":44,"line":45},[42,2297,223],{"class":52},[42,2299,227],{"class":226},[42,2301,230],{"class":52},[42,2303,233],{"class":226},[42,2305,236],{"class":52},[42,2307,57],{"class":56},[42,2309,236],{"class":52},[42,2311,243],{"class":226},[42,2313,2314],{"class":48},"GetCourtroomPresentationForPlayer",[42,2316,249],{"class":226},[42,2318,2319,2322,2324],{"class":44,"line":252},[42,2320,2321],{"class":226},"    courtroomKey ",[42,2323,230],{"class":52},[42,2325,2326],{"class":226}," configured_room_key,\n",[42,2328,2329],{"class":44,"line":266},[42,2330,281],{"class":226},[42,2332,2333,2335,2337,2339,2342,2344,2346,2348,2350],{"class":44,"line":278},[42,2334,288],{"class":287},[42,2336,294],{"class":226},[42,2338,298],{"class":297},[42,2340,2341],{"class":52}," and",[42,2343,294],{"class":226},[42,2345,66],{"class":297},[42,2347,23],{"class":226},[42,2349,1308],{"class":297},[42,2351,301],{"class":287},[42,2353,2354],{"class":44,"line":284},[42,2355,2356],{"class":775},"    -- Send only this authorized presentation to player_source's own display.\n",[42,2358,2359],{"class":44,"line":304},[42,2360,344],{"class":287},[10,2362,2363,2364,489,2367,1904,2369,1934,2372,1904,2374,2377,2378,505,2381,2384],{},"The reference can specify ",[28,2365,2366],{},"courtroomKey",[28,2368,2249],{},[28,2370,2371],{},"sessionId",[28,2373,2252],{},[28,2375,2376],{},"hearingId",". With no reference, DOJ resolves the player's nearby active room; ambiguous rooms fail explicitly. The current room, routing bucket, participant/audience entitlement and evidence approval govern the response. An accessible session with no active evidence returns ",[28,2379,2380],{},"success = true",[28,2382,2383],{},"data.active = false",". This is not a global broadcast API.",[90,2386,2388],{"id":2387},"internal-compatibility-exports","Internal compatibility exports",[10,2390,2391,2394,2395,2398,2399,2401],{},[28,2392,2393],{},"ImportPoliceDocumentEvent"," accepts only the ",[28,2396,2397],{},"sky_policejob"," server resource and its validated JSON event contract. It is not a generic third-party import endpoint. Use ",[28,2400,585],{}," for an authorized actor's new documents.",[10,2403,2404,489,2407,489,2410,505,2413,2416,2417,23],{},[28,2405,2406],{},"GetDojRecordsGradeOptions",[28,2408,2409],{},"GetDojTaxSocietyJobOptions",[28,2411,2412],{},"GetDojTaxCurrencyOptions",[28,2414,2415],{},"GetDojTaxPaymentModeOptions"," supply Job Configurator choices. They are configuration providers, not record access APIs. Client-side shared-preview and radial compatibility exports are listed in ",[19,2418,22],{"href":2419},"/docs/jobs/dojjob/api/client-exports#internal-compatibility-exports",[2421,2422,2423],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":38,"searchDepth":45,"depth":252,"links":2425},[2426,2427,2433,2437,2441,2445],{"id":92,"depth":252,"text":93},{"id":206,"depth":252,"text":207,"children":2428},[2429,2430,2431,2432],{"id":211,"depth":266,"text":120},{"id":544,"depth":266,"text":130},{"id":963,"depth":266,"text":140},{"id":1137,"depth":266,"text":1138},{"id":1252,"depth":252,"text":1253,"children":2434},[2435,2436],{"id":1256,"depth":266,"text":150},{"id":1483,"depth":266,"text":160},{"id":1639,"depth":252,"text":1640,"children":2438},[2439,2440],{"id":1643,"depth":266,"text":170},{"id":1768,"depth":266,"text":180},{"id":1959,"depth":252,"text":1960,"children":2442},[2443,2444],{"id":1963,"depth":266,"text":190},{"id":2286,"depth":266,"text":200},{"id":2387,"depth":252,"text":2388},"Create DOJ template documents, query court conditions and connect hearings or courtroom evidence from server resources.","md",null,{},"/docs/jobs/dojjob/api/server-exports",{"title":5,"description":2446},{"loc":2450},"1.docs/0.jobs/5.dojjob/5.api/2.server-exports","qt90ukPtTuEXH1TdzvnsOMALIgx-OsohGogg0ALJEuQ",[2456,2459],{"title":22,"path":21,"stem":2457,"description":2458,"children":-1},"1.docs/0.jobs/5.dojjob/5.api/1.client-exports","Open DOJ tablet applications from your client-side menus and integrations.",{"title":2460,"path":2461,"stem":2462,"description":2463,"icon":2464,"children":-1},"First Steps","/docs/guide/first-steps","1.docs/1.guide/1.first-steps","A practical first-read guide for FiveM server owners using Sky-Systems resources.","i-lucide-sparkles",[],1790629497126]