[{"data":1,"prerenderedAt":2198},["ShallowReactive",2],{"/docs/base/jobs-base/features/emergency-dispatch":3,"/docs/base/jobs-base/features/emergency-dispatch-surround":2185,"/docs/base/jobs-base/features/emergency-dispatch-implemented-suggestions":2197},{"id":4,"title":5,"body":6,"description":2174,"extension":2175,"head":2176,"implementedSuggestions":2176,"meta":2177,"navigation":2178,"path":2180,"schemaOrg":2176,"seo":2181,"sitemap":2182,"stem":2183,"__hash__":2184},"docs/1.docs/base/2.jobs-base/2.features/1.emergency-dispatch.md","Emergency Dispatch",{"type":7,"value":8,"toc":2152},"minimark",[9,14,18,86,107,111,121,128,193,199,203,209,258,278,284,288,297,355,361,379,382,439,454,463,467,524,536,543,547,553,600,606,609,624,628,634,660,663,741,747,750,754,761,841,844,850,857,896,902,905,909,915,918,996,1002,1016,1020,1030,1036,1043,1049,1053,1056,1072,1078,1084,1088,1091,1156,1162,1168,1174,1180,1186,1192,1196,1202,1349,1369,1372,1378,1384,1389,1506,1516,1520,1526,1623,1634,1638,1641,1673,1679,1685,1691,1697,1703,1709,1715,1721,1725,1728,1855,1862,1889,1893,2028,2032,2038,2133,2148],[10,11,13],"h2",{"id":12},"one-dispatch-center-for-every-emergency-service","One dispatch center for every emergency service",[15,16,17],"p",{},"Emergency Dispatch adds a shared, server-authoritative control center to the Jobs Base tablet.\nPolice, ambulance, fire, mechanic, and other configured jobs can receive incidents, staff virtual\nunits, use job-specific radio channels, and work with response plans in one synchronized app.",[19,20,21,34],"table",{},[22,23,24],"thead",{},[25,26,27,31],"tr",{},[28,29,30],"th",{},"Feature",[28,32,33],{},"What it provides",[35,36,37,46,54,62,70,78],"tbody",{},[25,38,39,43],{},[40,41,42],"td",{},"Incident overview",[40,44,45],{},"Active calls, locations, status, assigned units, logs, and history",[25,47,48,51],{},[40,49,50],{},"Dispatch workspace",[40,52,53],{},"Unit suggestions, assignments, response plans, POIs, and incident notes",[25,55,56,59],{},[40,57,58],{},"Emergency intake",[40,60,61],{},"A phone app with selectable services, caller information, and location data",[25,63,64,67],{},[40,65,66],{},"Virtual units",[40,68,69],{},"Callsigns, unit types, crew, FMS status, radio channel, and active assignment",[25,71,72,75],{},[40,73,74],{},"Radio HUD",[40,76,77],{},"Channel control, status buttons, alerts, and direct incident navigation",[25,79,80,83],{},[40,81,82],{},"Audit trail",[40,84,85],{},"Persistent incident logs and dispatcher actions",[87,88,91],"callout",{"color":89,"icon":90},"info","i-lucide-info",[15,92,93,94,98,99,102,103,106],{},"The Dispatch App described on this page is the built-in ",[95,96,97],"code",{},"sky_jobs_base"," system. The optional\n",[95,100,101],{},"Config.EmergencyDispatch"," block integrates the separate ",[95,104,105],{},"emergencydispatch"," resource and is not\nrequired for this setup.",[10,108,110],{"id":109},"_1-requirements-and-start-order","1. Requirements and start order",[15,112,113,114,117,118,120],{},"Emergency Dispatch requires ",[95,115,116],{},"sky_base",", ",[95,119,97],{},", a supported voice resource, and a\nconfigured job resource. A supported phone is required only when citizens should submit calls\nthrough the Emergency phone app.",[15,122,123,124,127],{},"Start the database, phone, and voice resources before the Sky resources in ",[95,125,126],{},"server.cfg",":",[129,130,135],"pre",{"className":131,"code":132,"filename":126,"language":133,"meta":134,"style":134},"language-cfg shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ensure oxmysql\nensure \u003Cyour_phone_resource>\nensure \u003Cyour_voice_resource>\nensure sky_base\nensure sky_jobs_base\nensure sky_policejob\nensure sky_ambulancejob\nensure sky_firejob\nensure sky_mechanicjob\n","cfg","",[95,136,137,145,151,157,163,169,175,181,187],{"__ignoreMap":134},[138,139,142],"span",{"class":140,"line":141},"line",1,[138,143,144],{},"ensure oxmysql\n",[138,146,148],{"class":140,"line":147},2,[138,149,150],{},"ensure \u003Cyour_phone_resource>\n",[138,152,154],{"class":140,"line":153},3,[138,155,156],{},"ensure \u003Cyour_voice_resource>\n",[138,158,160],{"class":140,"line":159},4,[138,161,162],{},"ensure sky_base\n",[138,164,166],{"class":140,"line":165},5,[138,167,168],{},"ensure sky_jobs_base\n",[138,170,172],{"class":140,"line":171},6,[138,173,174],{},"ensure sky_policejob\n",[138,176,178],{"class":140,"line":177},7,[138,179,180],{},"ensure sky_ambulancejob\n",[138,182,184],{"class":140,"line":183},8,[138,185,186],{},"ensure sky_firejob\n",[138,188,190],{"class":140,"line":189},9,[138,191,192],{},"ensure sky_mechanicjob\n",[15,194,195,196,198],{},"Use the real resource folder names in place of the placeholders. The start order matters because\n",[95,197,116],{}," detects providers while it starts.",[10,200,202],{"id":201},"_2-enable-the-complete-dispatch-system","2. Enable the complete Dispatch system",[15,204,205,206,127],{},"The master switch is located in ",[95,207,208],{},"sky_jobs_base/config/config.lua",[129,210,214],{"className":211,"code":212,"filename":208,"language":213,"meta":134,"style":134},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Config.Dispatch = {\n    enabled = true,\n    -- Keep the remaining Dispatch settings from the supplied config.\n}\n","lua",[95,215,216,233,247,253],{"__ignoreMap":134},[138,217,218,222,226,230],{"class":140,"line":141},[138,219,221],{"class":220},"sTEyZ","Config.",[138,223,225],{"class":224},"sBMFI","Dispatch",[138,227,229],{"class":228},"sMK4o"," =",[138,231,232],{"class":220}," {\n",[138,234,235,238,241,244],{"class":140,"line":147},[138,236,237],{"class":220},"    enabled ",[138,239,240],{"class":228},"=",[138,242,243],{"class":228}," true",[138,245,246],{"class":220},",\n",[138,248,249],{"class":140,"line":153},[138,250,252],{"class":251},"sHwdD","    -- Keep the remaining Dispatch settings from the supplied config.\n",[138,254,255],{"class":140,"line":159},[138,256,257],{"class":220},"}\n",[259,260,261,268],"ul",{},[262,263,264,267],"li",{},[95,265,266],{},"enabled = true"," registers the Dispatch tablet app, radio, Emergency phone app, callbacks, and\nJob Configurator sections.",[262,269,270,273,274,277],{},[95,271,272],{},"enabled = false"," disables the complete integration. Existing ",[95,275,276],{},"createDispatch"," calls return to\nthe legacy map dispatch and top-center notification.",[15,279,280,281,283],{},"Restart ",[95,282,97],{}," after changing this value.",[10,285,287],{"id":286},"_3-configure-the-voice-and-phone-providers","3. Configure the voice and phone providers",[15,289,290,291,294,295,127],{},"Both providers are selected in ",[95,292,293],{},"sky_base/config/config.lua",", not in a job resource and not in\n",[95,296,97],{},[129,298,300],{"className":211,"code":299,"filename":293,"language":213,"meta":134,"style":134},"Config = {\n    phone = \"auto\", -- auto, lb, codem, okok, roadphone, yseries, 17mov, qs, ...\n    voice = \"auto\", -- auto, none, pma, saltychat, yaca\n}\n",[95,301,302,311,333,351],{"__ignoreMap":134},[138,303,304,307,309],{"class":140,"line":141},[138,305,306],{"class":220},"Config ",[138,308,240],{"class":228},[138,310,232],{"class":220},[138,312,313,316,318,321,325,328,330],{"class":140,"line":147},[138,314,315],{"class":220},"    phone ",[138,317,240],{"class":228},[138,319,320],{"class":228}," \"",[138,322,324],{"class":323},"sfazB","auto",[138,326,327],{"class":228},"\"",[138,329,117],{"class":220},[138,331,332],{"class":251},"-- auto, lb, codem, okok, roadphone, yseries, 17mov, qs, ...\n",[138,334,335,338,340,342,344,346,348],{"class":140,"line":153},[138,336,337],{"class":220},"    voice ",[138,339,240],{"class":228},[138,341,320],{"class":228},[138,343,324],{"class":323},[138,345,327],{"class":228},[138,347,117],{"class":220},[138,349,350],{"class":251},"-- auto, none, pma, saltychat, yaca\n",[138,352,353],{"class":140,"line":159},[138,354,257],{"class":220},[15,356,357,360],{},[95,358,359],{},"voice = \"auto\""," checks for these started resources in order:",[362,363,364,369,374],"ol",{},[262,365,366],{},[95,367,368],{},"pma-voice",[262,370,371],{},[95,372,373],{},"saltychat",[262,375,376],{},[95,377,378],{},"yaca-voice",[15,380,381],{},"If automatic detection is not possible, select the adapter explicitly:",[19,383,384,397],{},[22,385,386],{},[25,387,388,391],{},[28,389,390],{},"Voice resource",[28,392,393,396],{},[95,394,395],{},"Config.voice"," value",[35,398,399,409,419,429],{},[25,400,401,404],{},[40,402,403],{},"PMA Voice",[40,405,406],{},[95,407,408],{},"\"pma\"",[25,410,411,414],{},[40,412,413],{},"SaltyChat",[40,415,416],{},[95,417,418],{},"\"saltychat\"",[25,420,421,424],{},[40,422,423],{},"YACA",[40,425,426],{},[95,427,428],{},"\"yaca\"",[25,430,431,434],{},[40,432,433],{},"No radio integration",[40,435,436],{},[95,437,438],{},"\"none\"",[87,440,443],{"color":441,"icon":442},"warning","i-lucide-radio",[15,444,445,446,449,450,453],{},"With SaltyChat, enable ",[95,447,448],{},"RequestRadioTrafficStates"," in the SaltyChat ",[95,451,452],{},"config.json",". Without it, the\nradio channel still works, but the Dispatch HUD cannot reliably display transmitting and receiving\nstates.",[15,455,456,457,459,460,462],{},"Restart the voice resource and then ",[95,458,116],{}," after changing the provider. Restart\n",[95,461,97],{}," afterwards so Dispatch receives the new capabilities.",[10,464,466],{"id":465},"_4-enable-dispatch-for-a-job","4. Enable Dispatch for a job",[362,468,469,476,479,487,493,499,505,511,518,521],{},[262,470,471,472,475],{},"Run ",[95,473,474],{},"/jobconfig"," as an administrator.",[262,477,478],{},"Select the job you want to configure.",[262,480,481,482,486],{},"Open ",[483,484,485],"strong",{},"Dispatch → Dispatch settings",".",[262,488,489,490,486],{},"Enable ",[483,491,492],{},"Enable dispatch",[262,494,489,495,498],{},[483,496,497],{},"Show in Emergency App"," if citizens may select this service in the phone app.",[262,500,489,501,504],{},[483,502,503],{},"Enable dispatch center"," if authorized employees may staff the control center.",[262,506,489,507,510],{},[483,508,509],{},"Enable emergency assessment"," if the full incident intake should show medical and\ndanger assessment questions.",[262,512,513,514,517],{},"Decide whether ",[483,515,516],{},"Notify on-duty staff without units"," should be used as the last fallback.",[262,519,520],{},"Set the estimated response speed used for the displayed arrival time.",[262,522,523],{},"Save the job.",[15,525,526,528,529,531,532,535],{},[95,527,492],{}," is the per-job master switch. Disabling only ",[483,530,497],{}," keeps the\ninternal Dispatch App available while hiding the job from public callers. Jobs in the ",[95,533,534],{},"crime"," group\nare never listed in the public Emergency app.",[15,537,538],{},[539,540],"img",{"alt":541,"src":542},"Dispatch settings for a police job","/docs/jobs-base/emergency-dispatch/04-dispatch-settings.png",[10,544,546],{"id":545},"_5-create-radio-channels","5. Create radio channels",[15,548,481,549,552],{},[483,550,551],{},"Dispatch → Radio channels"," and create at least one channel:",[19,554,555,568],{},[22,556,557],{},[25,558,559,562,565],{},[28,560,561],{},"Field",[28,563,564],{},"Example",[28,566,567],{},"Meaning",[35,569,570,587],{},[25,571,572,575,584],{},[40,573,574],{},"Channel ID",[40,576,577,580,581],{},[95,578,579],{},"2500"," or ",[95,582,583],{},"POLICE_MAIN",[40,585,586],{},"Identifier sent to the configured voice adapter",[25,588,589,592,597],{},[40,590,591],{},"Label",[40,593,594],{},[95,595,596],{},"Police Main",[40,598,599],{},"Name displayed in the tablet and radio HUD",[15,601,602],{},[539,603],{"alt":604,"src":605},"Configured Police Main and Police Tactical radio channels","/docs/jobs-base/emergency-dispatch/05-radio-channels.png",[15,607,608],{},"Numeric IDs remain unchanged. PMA Voice maps text IDs to a stable positive number, while SaltyChat\nuses the text ID and YACA uses it as the slot frequency.",[15,610,611,612,615,616,619,620,623],{},"Return to ",[483,613,614],{},"Dispatch settings",", select the new channel as ",[483,617,618],{},"Default radio channel",", and save. The\ndefault remains available as the job or job-group fallback. It does not connect a dispatcher or\nunit automatically; both join a channel manually from the ",[483,621,622],{},"Radio"," tab.",[10,625,627],{"id":626},"_6-create-fms-status-codes","6. Create FMS status codes",[15,629,481,630,633],{},[483,631,632],{},"Dispatch → Status codes",". Each entry contains:",[259,635,636,645,654],{},[262,637,638,641,642,486],{},[483,639,640],{},"Code:"," the number shown on the radio, for example ",[95,643,644],{},"1",[262,646,647,650,651,486],{},[483,648,649],{},"Label:"," the readable status, for example ",[95,652,653],{},"Available by radio",[262,655,656,659],{},[483,657,658],{},"Available for dispatch:"," whether a unit in this status may be suggested or automatically\nassigned to a new incident.",[15,661,662],{},"A practical default set is:",[19,664,665,679],{},[22,666,667],{},[25,668,669,673,675],{},[28,670,672],{"align":671},"right","Code",[28,674,591],{},[28,676,678],{"align":677},"center","Available for dispatch",[35,680,681,690,700,711,721,731],{},[25,682,683,685,687],{},[40,684,644],{"align":671},[40,686,653],{},[40,688,689],{"align":677},"Yes",[25,691,692,695,698],{},[40,693,694],{"align":671},"2",[40,696,697],{},"Available at station",[40,699,689],{"align":677},[25,701,702,705,708],{},[40,703,704],{"align":671},"3",[40,706,707],{},"Responding",[40,709,710],{"align":677},"No",[25,712,713,716,719],{},[40,714,715],{"align":671},"4",[40,717,718],{},"On scene",[40,720,710],{"align":677},[25,722,723,726,729],{},[40,724,725],{"align":671},"5",[40,727,728],{},"Request to speak",[40,730,710],{"align":677},[25,732,733,736,739],{},[40,734,735],{"align":671},"6",[40,737,738],{},"Unavailable",[40,740,710],{"align":677},[15,742,743],{},[539,744],{"alt":745,"src":746},"FMS status codes and their availability flags","/docs/jobs-base/emergency-dispatch/06-status-codes.png",[15,748,749],{},"At least one status should be marked available. Otherwise, no staffed unit can satisfy a response\nplan or be suggested for a new call.",[10,751,753],{"id":752},"_7-create-unit-types-and-virtual-units","7. Create unit types and virtual units",[15,755,756,757,760],{},"First open ",[483,758,759],{},"Dispatch → Dispatch vehicle types",". Create the categories used by response plans:",[19,762,763,774],{},[22,764,765],{},[25,766,767,769,771],{},[28,768,672],{},[28,770,591],{},[28,772,773],{},"Typical use",[35,775,776,789,802,815,828],{},[25,777,778,783,786],{},[40,779,780],{},[95,781,782],{},"PATROL",[40,784,785],{},"Patrol",[40,787,788],{},"Standard police unit",[25,790,791,796,799],{},[40,792,793],{},[95,794,795],{},"CRIME",[40,797,798],{},"Crime Unit",[40,800,801],{},"Investigation unit",[25,803,804,809,812],{},[40,805,806],{},[95,807,808],{},"EMS",[40,810,811],{},"Ambulance",[40,813,814],{},"Medical response",[25,816,817,822,825],{},[40,818,819],{},[95,820,821],{},"FIRE",[40,823,824],{},"Fire Engine",[40,826,827],{},"Fire suppression",[25,829,830,835,838],{},[40,831,832],{},[95,833,834],{},"RESCUE",[40,836,837],{},"Rescue",[40,839,840],{},"Technical rescue",[15,842,843],{},"The code is the stable value referenced by response plans. The label and selected icon are shown to\nplayers.",[15,845,846],{},[539,847],{"alt":848,"src":849},"Dispatch vehicle types used by response plans","/docs/jobs-base/emergency-dispatch/07-vehicle-types.png",[15,851,852,853,856],{},"Then open ",[483,854,855],{},"Dispatch → Dispatch fleet data"," and create the virtual units:",[19,858,859,869],{},[22,860,861],{},[25,862,863,865,867],{},[28,864,561],{},[28,866,564],{},[28,868,567],{},[35,870,871,884],{},[25,872,873,876,881],{},[40,874,875],{},"Callsign",[40,877,878],{},[95,879,880],{},"ADAM-21",[40,882,883],{},"Unique radio callsign for this job",[25,885,886,889,893],{},[40,887,888],{},"Response unit type",[40,890,891],{},[95,892,782],{},[40,894,895],{},"One of the unit types created above",[15,897,898],{},[539,899],{"alt":900,"src":901},"Virtual Dispatch fleet with callsigns and response unit types","/docs/jobs-base/emergency-dispatch/07-fleet-data.png",[15,903,904],{},"Dispatch vehicles are virtual. A player does not need to spawn or enter a world vehicle to staff\none. Create enough callsigns for the maximum number of units you expect to be active at once.",[10,906,908],{"id":907},"_8-create-keywords-and-response-plans","8. Create keywords and response plans",[15,910,481,911,914],{},[483,912,913],{},"Dispatch → Keywords and response plans",". A plan combines an incident keyword with the unit\ntypes and jobs required for the response.",[15,916,917],{},"Example structure:",[19,919,920,928],{},[22,921,922],{},[25,923,924,926],{},[28,925,561],{},[28,927,564],{},[35,929,930,940,949,959,969,978,988],{},[25,931,932,935],{},[40,933,934],{},"Keyword code",[40,936,937],{},[95,938,939],{},"ROBBERY_ACTIVE",[25,941,942,944],{},[40,943,591],{},[40,945,946],{},[95,947,948],{},"Active robbery",[25,950,951,954],{},[40,952,953],{},"Category",[40,955,956],{},[95,957,958],{},"Police",[25,960,961,964],{},[40,962,963],{},"Required units",[40,965,966],{},[95,967,968],{},"PATROL:2,CRIME:1",[25,970,971,974],{},[40,972,973],{},"Minimum crew",[40,975,976],{},[95,977,704],{},[25,979,980,983],{},[40,981,982],{},"Target jobs",[40,984,985],{},[95,986,987],{},"police,sheriff",[25,989,990,993],{},[40,991,992],{},"Auto alarm",[40,994,995],{},"Enabled or disabled",[15,997,998],{},[539,999],{"alt":1000,"src":1001},"Active robbery response plan with required units and target jobs","/docs/jobs-base/emergency-dispatch/08-response-plan.png",[15,1003,1004,1005,1008,1009,1012,1013,1015],{},"Write requirements as comma-separated ",[95,1006,1007],{},"TYPE:COUNT"," pairs. The type must exactly match a code from\n",[483,1010,1011],{},"Dispatch vehicle types",". Minimum crew counts the personnel staffed on the units selected for the\nplan. ",[483,1014,992],{}," immediately assigns matching available units when an incident is created with\nthat keyword.",[10,1017,1019],{"id":1018},"_9-create-pois-and-known-reporters","9. Create POIs and known reporters",[15,1021,481,1022,1025,1026,1029],{},[483,1023,1024],{},"Dispatch → Dispatch POIs"," for stations and frequently used incident locations. Enter a\nname, optional type and address, coordinates, and the announcement radius. ",[483,1027,1028],{},"Use current location","\ncopies the administrator's current X, Y, and Z coordinates.",[15,1031,1032],{},[539,1033],{"alt":1034,"src":1035},"Dispatch POI with coordinates and announcement radius","/docs/jobs-base/emergency-dispatch/09-dispatch-pois.png",[15,1037,1038,1039,1042],{},"Known reporters are maintained inside the tablet under ",[483,1040,1041],{},"Dispatch → Resources → Known reporters",".\nThey are persistent and do not need to be added in a Lua config.",[15,1044,1045],{},[539,1046],{"alt":1047,"src":1048},"Known reporters in the Dispatch tablet","/docs/jobs-base/emergency-dispatch/09-known-reporters.png",[10,1050,1052],{"id":1051},"_10-grant-dispatch-permission","10. Grant Dispatch permission",[15,1054,1055],{},"The tablet app requires both of the following:",[259,1057,1058,1061],{},[262,1059,1060],{},"The player is on duty for a Dispatch-enabled job.",[262,1062,1063,1064,1067,1068,1071],{},"The player's grade has the ",[483,1065,1066],{},"Dispatch center"," permission (",[95,1069,1070],{},"DISPATCH",").",[15,1073,1074,1075,1077],{},"Open the job management permissions for the relevant grade and enable ",[483,1076,1066],{},". This\npermission allows the grade to open the app, create incidents, operate the center, and assign\nunits. If the app is missing for one grade but visible for another, check this permission first.",[15,1079,1080],{},[539,1081],{"alt":1082,"src":1083},"Dispatch center permission enabled for the Lieutenant grade","/docs/jobs-base/emergency-dispatch/10-dispatch-permission.png",[10,1085,1087],{"id":1086},"_11-staff-a-unit-join-radio-and-open-the-radio-hud","11. Staff a unit, join radio, and open the radio HUD",[15,1089,1090],{},"Players can work through the tablet or use the supplied commands:",[19,1092,1093,1103],{},[22,1094,1095],{},[25,1096,1097,1100],{},[28,1098,1099],{},"Action",[28,1101,1102],{},"Tablet or command",[35,1104,1105,1116,1127,1141],{},[25,1106,1107,1110],{},[40,1108,1109],{},"Staff a virtual unit",[40,1111,1112,1113],{},"Select a free unit, or run ",[95,1114,1115],{},"/dispatchunit",[25,1117,1118,1121],{},[40,1119,1120],{},"Leave the current unit",[40,1122,1123,1124],{},"Release it in Dispatch, or run ",[95,1125,1126],{},"/dispatchrelease",[25,1128,1129,1132],{},[40,1130,1131],{},"Join a radio channel",[40,1133,481,1134,1137,1138],{},[483,1135,1136],{},"Dispatch → Radio"," and select ",[483,1139,1140],{},"Join channel",[25,1142,1143,1146],{},[40,1144,1145],{},"Interact with the radio HUD",[40,1147,1148,1149,1152,1153],{},"Press ",[483,1150,1151],{},"Left Alt"," or run ",[95,1154,1155],{},"/dispatchradio",[15,1157,1158],{},[539,1159],{"alt":1160,"src":1161},"Staffed and free virtual units in the Dispatch fleet","/docs/jobs-base/emergency-dispatch/11-unit-staffing.png",[15,1163,1164],{},[539,1165],{"alt":1166,"src":1167},"Active and available Dispatch radio channels","/docs/jobs-base/emergency-dispatch/11-radio-channel.png",[15,1169,1170,1171,486],{},"The FiveM key mapping for the radio can be changed by each player. Radio position, size, button\nmapping, sounds, and design are stored under ",[483,1172,1173],{},"Dispatch → Radio settings",[15,1175,1176],{},[539,1177],{"alt":1178,"src":1179},"Radio design, position, size, and sound settings","/docs/jobs-base/emergency-dispatch/11-radio-settings.png",[15,1181,1182,1183,1185],{},"Staffing a unit does not automatically join a radio channel. The player must join one from the\n",[483,1184,622],{}," tab. The compact radio appears after a channel is active.",[15,1187,1188],{},[539,1189],{"alt":1190,"src":1191},"Interactive Dispatch radio HUD after joining a channel","/docs/jobs-base/emergency-dispatch/11-radio-hud.png",[10,1193,1195],{"id":1194},"_12-configure-the-emergency-phone-app","12. Configure the Emergency phone app",[15,1197,1198,1199,127],{},"The global phone-app settings are inside ",[95,1200,1201],{},"Config.Dispatch.phone",[129,1203,1205],{"className":211,"code":1204,"filename":208,"language":213,"meta":134,"style":134},"phone = {\n    enabled = true,\n    autoDetectCallerNumber = true,\n    allowManualCallbackNumber = true,\n    identifier = \"sky_dispatch\",\n    name = \"Emergency\",\n    description = \"Send a structured emergency report to a local service.\",\n    developer = \"Sky-Systems\",\n    icon = \"https://cfx-nui-sky_jobs_base/source/html/img/dispatch_emergency_app.svg\",\n    route = \"/dispatch-call\"\n}\n",[95,1206,1207,1216,1226,1237,1248,1264,1280,1296,1312,1328,1344],{"__ignoreMap":134},[138,1208,1209,1212,1214],{"class":140,"line":141},[138,1210,1211],{"class":220},"phone ",[138,1213,240],{"class":228},[138,1215,232],{"class":220},[138,1217,1218,1220,1222,1224],{"class":140,"line":147},[138,1219,237],{"class":220},[138,1221,240],{"class":228},[138,1223,243],{"class":228},[138,1225,246],{"class":220},[138,1227,1228,1231,1233,1235],{"class":140,"line":153},[138,1229,1230],{"class":220},"    autoDetectCallerNumber ",[138,1232,240],{"class":228},[138,1234,243],{"class":228},[138,1236,246],{"class":220},[138,1238,1239,1242,1244,1246],{"class":140,"line":159},[138,1240,1241],{"class":220},"    allowManualCallbackNumber ",[138,1243,240],{"class":228},[138,1245,243],{"class":228},[138,1247,246],{"class":220},[138,1249,1250,1253,1255,1257,1260,1262],{"class":140,"line":165},[138,1251,1252],{"class":220},"    identifier ",[138,1254,240],{"class":228},[138,1256,320],{"class":228},[138,1258,1259],{"class":323},"sky_dispatch",[138,1261,327],{"class":228},[138,1263,246],{"class":220},[138,1265,1266,1269,1271,1273,1276,1278],{"class":140,"line":171},[138,1267,1268],{"class":220},"    name ",[138,1270,240],{"class":228},[138,1272,320],{"class":228},[138,1274,1275],{"class":323},"Emergency",[138,1277,327],{"class":228},[138,1279,246],{"class":220},[138,1281,1282,1285,1287,1289,1292,1294],{"class":140,"line":177},[138,1283,1284],{"class":220},"    description ",[138,1286,240],{"class":228},[138,1288,320],{"class":228},[138,1290,1291],{"class":323},"Send a structured emergency report to a local service.",[138,1293,327],{"class":228},[138,1295,246],{"class":220},[138,1297,1298,1301,1303,1305,1308,1310],{"class":140,"line":183},[138,1299,1300],{"class":220},"    developer ",[138,1302,240],{"class":228},[138,1304,320],{"class":228},[138,1306,1307],{"class":323},"Sky-Systems",[138,1309,327],{"class":228},[138,1311,246],{"class":220},[138,1313,1314,1317,1319,1321,1324,1326],{"class":140,"line":189},[138,1315,1316],{"class":220},"    icon ",[138,1318,240],{"class":228},[138,1320,320],{"class":228},[138,1322,1323],{"class":323},"https://cfx-nui-sky_jobs_base/source/html/img/dispatch_emergency_app.svg",[138,1325,327],{"class":228},[138,1327,246],{"class":220},[138,1329,1331,1334,1336,1338,1341],{"class":140,"line":1330},10,[138,1332,1333],{"class":220},"    route ",[138,1335,240],{"class":228},[138,1337,320],{"class":228},[138,1339,1340],{"class":323},"/dispatch-call",[138,1342,1343],{"class":228},"\"\n",[138,1345,1347],{"class":140,"line":1346},11,[138,1348,257],{"class":220},[259,1350,1351,1357,1363],{},[262,1352,1353,1356],{},[95,1354,1355],{},"enabled"," registers or disables the complete phone app.",[262,1358,1359,1362],{},[95,1360,1361],{},"autoDetectCallerNumber"," resolves the caller's real number server-side through the active phone\nadapter.",[262,1364,1365,1368],{},[95,1366,1367],{},"allowManualCallbackNumber"," permits a manually entered number only when the adapter cannot\nprovide one.",[15,1370,1371],{},"The server validates the selected job, coordinates, and callback number. Browser-submitted values\nare not trusted directly.",[15,1373,1374],{},[539,1375],{"alt":1376,"src":1377},"Emergency phone app with the available public services","/docs/jobs-base/emergency-dispatch/12-emergency-services.png",[15,1379,1380],{},[539,1381],{"alt":1382,"src":1383},"Structured emergency report with detected callback number","/docs/jobs-base/emergency-dispatch/12-emergency-intake.png",[1385,1386,1388],"h3",{"id":1387},"supported-phones","Supported phones",[19,1390,1391,1407],{},[22,1392,1393],{},[25,1394,1395,1398,1401,1404],{},[28,1396,1397],{},"Phone",[28,1399,1400],{},"Emergency app",[28,1402,1403],{},"Callback number",[28,1405,1406],{},"Additional setup",[35,1408,1409,1422,1433,1444,1455,1466,1477,1493],{},[25,1410,1411,1414,1417,1419],{},[40,1412,1413],{},"LB Phone / LB Phone Unique",[40,1415,1416],{},"Automatic",[40,1418,1416],{},[40,1420,1421],{},"None",[25,1423,1424,1427,1429,1431],{},[40,1425,1426],{},"CodeM Phone",[40,1428,1416],{},[40,1430,1416],{},[40,1432,1421],{},[25,1434,1435,1438,1440,1442],{},[40,1436,1437],{},"okokPhone",[40,1439,1416],{},[40,1441,1416],{},[40,1443,1421],{},[25,1445,1446,1449,1451,1453],{},[40,1447,1448],{},"17Movement Phone",[40,1450,1416],{},[40,1452,1416],{},[40,1454,1421],{},[25,1456,1457,1460,1462,1464],{},[40,1458,1459],{},"YSeries",[40,1461,1416],{},[40,1463,1416],{},[40,1465,1421],{},[25,1467,1468,1471,1473,1475],{},[40,1469,1470],{},"QS Smartphone / Smartphone Pro",[40,1472,1416],{},[40,1474,1416],{},[40,1476,1421],{},[25,1478,1479,1482,1484,1487],{},[40,1480,1481],{},"GKS Phone",[40,1483,1416],{},[40,1485,1486],{},"Manual fallback",[40,1488,1489,1490],{},"Keep ",[95,1491,1492],{},"allowManualCallbackNumber = true",[25,1494,1495,1498,1501,1503],{},[40,1496,1497],{},"RoadPhone",[40,1499,1500],{},"Static app entry",[40,1502,1416],{},[40,1504,1505],{},"Add the JSON below",[15,1507,1508,1511,1512,1515],{},[95,1509,1510],{},"d-phone",", the classic ",[95,1513,1514],{},"qb-phone",", and old ESX/gcPhone variants do not expose a custom\niframe app API through the existing adapters. They require a phone-side extension.",[1385,1517,1519],{"id":1518},"roadphone-setup","RoadPhone setup",[15,1521,1522,1523,127],{},"Add this object to the AppStore section of ",[95,1524,1525],{},"roadphone/public/static/config/config.json",[129,1527,1531],{"className":1528,"code":1529,"filename":1525,"language":1530,"meta":134,"style":134},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"Emergency\",\n  \"light_icon\": \"https://cfx-nui-sky_jobs_base/source/html/img/dispatch_emergency_app.svg\",\n  \"dark_icon\": \"https://cfx-nui-sky_jobs_base/source/html/img/dispatch_emergency_app.svg\",\n  \"default\": true,\n  \"category\": \"apps\",\n  \"custom_app_id\": \"sky_dispatch\",\n  \"redirect\": \"custom_app\",\n  \"url\": \"https://cfx-nui-sky_jobs_base/source/html/index.html?skyPhoneRoute=/dispatch-call&skyPhone=roadphone\",\n  \"darkmode\": true,\n  \"allowJobs\": [],\n  \"disallowJobs\": [],\n  \"custom_event\": {\n    \"active\": false,\n    \"closeWhenOpenApp\": false\n  }\n}\n","json",[95,1532,1533,1538,1543,1548,1553,1558,1563,1568,1573,1578,1583,1588,1594,1600,1606,1612,1618],{"__ignoreMap":134},[138,1534,1535],{"class":140,"line":141},[138,1536,1537],{},"{\n",[138,1539,1540],{"class":140,"line":147},[138,1541,1542],{},"  \"name\": \"Emergency\",\n",[138,1544,1545],{"class":140,"line":153},[138,1546,1547],{},"  \"light_icon\": \"https://cfx-nui-sky_jobs_base/source/html/img/dispatch_emergency_app.svg\",\n",[138,1549,1550],{"class":140,"line":159},[138,1551,1552],{},"  \"dark_icon\": \"https://cfx-nui-sky_jobs_base/source/html/img/dispatch_emergency_app.svg\",\n",[138,1554,1555],{"class":140,"line":165},[138,1556,1557],{},"  \"default\": true,\n",[138,1559,1560],{"class":140,"line":171},[138,1561,1562],{},"  \"category\": \"apps\",\n",[138,1564,1565],{"class":140,"line":177},[138,1566,1567],{},"  \"custom_app_id\": \"sky_dispatch\",\n",[138,1569,1570],{"class":140,"line":183},[138,1571,1572],{},"  \"redirect\": \"custom_app\",\n",[138,1574,1575],{"class":140,"line":189},[138,1576,1577],{},"  \"url\": \"https://cfx-nui-sky_jobs_base/source/html/index.html?skyPhoneRoute=/dispatch-call&skyPhone=roadphone\",\n",[138,1579,1580],{"class":140,"line":1330},[138,1581,1582],{},"  \"darkmode\": true,\n",[138,1584,1585],{"class":140,"line":1346},[138,1586,1587],{},"  \"allowJobs\": [],\n",[138,1589,1591],{"class":140,"line":1590},12,[138,1592,1593],{},"  \"disallowJobs\": [],\n",[138,1595,1597],{"class":140,"line":1596},13,[138,1598,1599],{},"  \"custom_event\": {\n",[138,1601,1603],{"class":140,"line":1602},14,[138,1604,1605],{},"    \"active\": false,\n",[138,1607,1609],{"class":140,"line":1608},15,[138,1610,1611],{},"    \"closeWhenOpenApp\": false\n",[138,1613,1615],{"class":140,"line":1614},16,[138,1616,1617],{},"  }\n",[138,1619,1621],{"class":140,"line":1620},17,[138,1622,257],{},[15,1624,1489,1625,1628,1629,1631,1632,486],{},[95,1626,1627],{},"custom_app_id"," exactly as ",[95,1630,1259],{},", then restart RoadPhone and ",[95,1633,97],{},[10,1635,1637],{"id":1636},"_13-test-the-complete-workflow","13. Test the complete workflow",[15,1639,1640],{},"Use at least two players for the final test:",[362,1642,1643,1649,1652,1655,1661,1667,1670],{},[262,1644,1645,1646,1648],{},"Put a responder on duty with the ",[483,1647,1066],{}," permission.",[262,1650,1651],{},"Staff a virtual unit and set it to an available FMS status.",[262,1653,1654],{},"Join a configured radio channel.",[262,1656,1657,1658,1660],{},"On a civilian player, open ",[483,1659,1275],{},", select the service, describe the incident, and submit\nit.",[262,1662,1663,1664,486],{},"Confirm that the call appears under ",[483,1665,1666],{},"Incoming emergencies",[262,1668,1669],{},"Assign the unit, accept the incident on the radio, and verify navigation and status updates.",[262,1671,1672],{},"Add an incident log, close the incident, and confirm that it appears in history.",[15,1674,1675],{},[539,1676],{"alt":1677,"src":1678},"New phone report in Incoming emergencies","/docs/jobs-base/emergency-dispatch/13-incoming-calls.png",[15,1680,1681],{},[539,1682],{"alt":1683,"src":1684},"Suggested units selected for the incident alarm","/docs/jobs-base/emergency-dispatch/13-incident-assignment.png",[15,1686,1687],{},[539,1688],{"alt":1689,"src":1690},"Full caller and emergency assessment intake","/docs/jobs-base/emergency-dispatch/13-incident-intake.png",[15,1692,1693],{},[539,1694],{"alt":1695,"src":1696},"Active incident with assigned virtual units","/docs/jobs-base/emergency-dispatch/13-incident-workspace.png",[15,1698,1699],{},[539,1700],{"alt":1701,"src":1702},"Incoming incident on the interactive radio HUD","/docs/jobs-base/emergency-dispatch/13-radio-assignment.png",[15,1704,1705],{},[539,1706],{"alt":1707,"src":1708},"Situation report recorded in the incident log","/docs/jobs-base/emergency-dispatch/13-incident-log.png",[15,1710,1711],{},[539,1712],{"alt":1713,"src":1714},"Closed incident in the Dispatch archive","/docs/jobs-base/emergency-dispatch/13-incident-history.png",[15,1716,1717,1718,1720],{},"When no center is staffed, the next available unit receives the incident on its radio. If no unit\nis available, ",[483,1719,516],{}," can send the final fallback notification.",[10,1722,1724],{"id":1723},"create-an-incident-from-another-resource","Create an incident from another resource",[15,1726,1727],{},"Existing integrations can create a persistent Dispatch incident with the public export. This\nclient-side example sends an incident to the police job and selects a matching response plan:",[129,1729,1732],{"className":211,"code":1730,"filename":1731,"language":213,"meta":134,"style":134},"local coords = GetEntityCoords(PlayerPedId())\n\nexports[\"sky_jobs_base\"]:createDispatch(\n    \"Vehicle theft\",\n    \"A vehicle theft was reported by a witness.\",\n    coords,\n    { \"police\" },\n    {\n        keywordCode = \"VEHICLE_THEFT\"\n    }\n)\n","client.lua",[95,1733,1734,1757,1763,1782,1794,1805,1810,1826,1831,1845,1850],{"__ignoreMap":134},[138,1735,1736,1739,1742,1744,1748,1751,1754],{"class":140,"line":141},[138,1737,1738],{"class":228},"local",[138,1740,1741],{"class":220}," coords ",[138,1743,240],{"class":228},[138,1745,1747],{"class":1746},"s2Zo4"," GetEntityCoords",[138,1749,1750],{"class":220},"(",[138,1752,1753],{"class":1746},"PlayerPedId",[138,1755,1756],{"class":220},"())\n",[138,1758,1759],{"class":140,"line":147},[138,1760,1762],{"emptyLinePlaceholder":1761},true,"\n",[138,1764,1765,1768,1770,1772,1774,1777,1779],{"class":140,"line":153},[138,1766,1767],{"class":220},"exports[",[138,1769,327],{"class":228},[138,1771,97],{"class":323},[138,1773,327],{"class":228},[138,1775,1776],{"class":220},"]:",[138,1778,276],{"class":1746},[138,1780,1781],{"class":220},"(\n",[138,1783,1784,1787,1790,1792],{"class":140,"line":159},[138,1785,1786],{"class":228},"    \"",[138,1788,1789],{"class":323},"Vehicle theft",[138,1791,327],{"class":228},[138,1793,246],{"class":220},[138,1795,1796,1798,1801,1803],{"class":140,"line":165},[138,1797,1786],{"class":228},[138,1799,1800],{"class":323},"A vehicle theft was reported by a witness.",[138,1802,327],{"class":228},[138,1804,246],{"class":220},[138,1806,1807],{"class":140,"line":171},[138,1808,1809],{"class":220},"    coords,\n",[138,1811,1812,1815,1817,1820,1823],{"class":140,"line":177},[138,1813,1814],{"class":220},"    { ",[138,1816,327],{"class":228},[138,1818,1819],{"class":323},"police",[138,1821,1822],{"class":228},"\" ",[138,1824,1825],{"class":220},"},\n",[138,1827,1828],{"class":140,"line":183},[138,1829,1830],{"class":220},"    {\n",[138,1832,1833,1836,1838,1840,1843],{"class":140,"line":189},[138,1834,1835],{"class":220},"        keywordCode ",[138,1837,240],{"class":228},[138,1839,320],{"class":228},[138,1841,1842],{"class":323},"VEHICLE_THEFT",[138,1844,1343],{"class":228},[138,1846,1847],{"class":140,"line":1330},[138,1848,1849],{"class":220},"    }\n",[138,1851,1852],{"class":140,"line":1346},[138,1853,1854],{"class":220},")\n",[15,1856,1857,1858,1861],{},"The job or job-group key must be registered, and ",[95,1859,1860],{},"keywordCode"," must match a configured response\nplan if you want the plan to be selected automatically.",[259,1863,1864,1871,1877,1883],{},[262,1865,1866],{},[1867,1868,1870],"a",{"href":1869},"/docs/base/jobs-base/client-exports/emergency-dispatch","Client Exports",[262,1872,1873],{},[1867,1874,1876],{"href":1875},"/docs/base/jobs-base/server-exports/emergency-dispatch","Server Exports",[262,1878,1879],{},[1867,1880,1882],{"href":1881},"/docs/base/jobs-base/client-events/emergency-dispatch","Client Events",[262,1884,1885],{},[1867,1886,1888],{"href":1887},"/docs/base/jobs-base/commands#emergency-dispatch-commands","Commands",[10,1890,1892],{"id":1891},"faq","FAQ",[1894,1895,1896,1912,1944,1956,1975,1991,2001,2022],"accordion",{},[1897,1898,1900],"accordion-item",{"label":1899},"How do I open the radio?",[15,1901,1902,1903,1905,1906,1908,1909,1911],{},"Staff a virtual unit, open ",[483,1904,1136],{},", and join a channel. Then press ",[483,1907,1151],{}," or\nrun ",[95,1910,1155],{}," to interact with the compact radio HUD. Players can change the key in the\nFiveM key bindings.",[1897,1913,1915],{"label":1914},"Where do I provide the voice system?",[15,1916,1917,1918,1920,1921,1923,1924,117,1927,117,1929,1931,1932,1934,1935,1937,1938,1940,1941,1943],{},"Set ",[95,1919,395],{}," in ",[95,1922,293],{},". Use ",[95,1925,1926],{},"\"auto\"",[95,1928,408],{},[95,1930,418],{},", or\n",[95,1933,428],{},". The voice resource must start before ",[95,1936,116],{},"; restart ",[95,1939,116],{}," and\n",[95,1942,97],{}," after changing it.",[1897,1945,1947],{"label":1946},"Why is the radio not visible after I staff a unit?",[15,1948,1949,1950,1952,1953,1955],{},"Staffing a unit and joining radio are separate actions. Open ",[483,1951,1136],{}," and select\n",[483,1954,1140],{},". Also confirm that the job has at least one channel and that the voice adapter\nwas detected.",[1897,1957,1959],{"label":1958},"Why is the Dispatch app missing from the tablet?",[15,1960,1961,1962,1965,1966,1968,1969,1971,1972,1974],{},"Check ",[95,1963,1964],{},"Config.Dispatch.enabled",", the job's ",[483,1967,492],{}," setting, the player's duty state,\nand the grade-level ",[483,1970,1066],{}," permission. Restart ",[95,1973,97],{}," after changing the\nglobal master switch.",[1897,1976,1978],{"label":1977},"Why is a job missing from the Emergency phone app?",[15,1979,1980,1981,1983,1984,1986,1987,1990],{},"Enable both ",[483,1982,492],{}," and ",[483,1985,497],{}," for the job. Also check\n",[95,1988,1989],{},"Config.Dispatch.phone.enabled"," and the global Dispatch master switch. Crime-group jobs are\nintentionally excluded from the public app.",[1897,1992,1994],{"label":1993},"Why is no unit suggested for an incident?",[15,1995,1996,1997,2000],{},"Confirm that a virtual unit has a callsign and matching response type, is currently staffed, has\nlive crew, is not assigned to another incident, and uses an FMS status marked ",[483,1998,1999],{},"Available for\ndispatch",". Response-plan type codes must match exactly.",[1897,2002,2004],{"label":2003},"Why is no callback number attached?",[15,2005,1961,2006,1920,2009,2011,2012,2014,2015,2018,2019,2021],{},[95,2007,2008],{},"Config.phone",[95,2010,116],{},", start the phone before ",[95,2013,116],{},", and keep\n",[95,2016,2017],{},"autoDetectCallerNumber = true",". Enable ",[95,2020,1367],{}," if the selected phone adapter\ncannot return a number.",[1897,2023,2025],{"label":2024},"Do virtual units require a spawned vehicle?",[15,2026,2027],{},"No. The Dispatch fleet is independent of world vehicles. A callsign can be staffed from anywhere.",[10,2029,2031],{"id":2030},"typical-console-messages","Typical console messages",[15,2033,2034,2035,2037],{},"Provider detection messages come from ",[95,2036,116],{},". Check the server console during resource startup;\nfor client-side radio problems, also check the player's F8 console.",[19,2039,2040,2050],{},[22,2041,2042],{},[25,2043,2044,2047],{},[28,2045,2046],{},"Console message",[28,2048,2049],{},"Meaning and fix",[35,2051,2052,2070,2083,2100,2113,2123],{},[25,2053,2054,2059],{},[40,2055,2056],{},[95,2057,2058],{},"pma was automatically recognized for voice and will be used",[40,2060,2061,2062,2064,2065,1983,2067,486],{},"Normal success message. PMA Voice was started before ",[95,2063,116],{},". The same format is used for ",[95,2066,373],{},[95,2068,2069],{},"yaca",[25,2071,2072,2077],{},[40,2073,2074],{},[95,2075,2076],{},"Could not detect the voice resource automatically. Radio integration is disabled. Please specify in sky_base/config/config.lua",[40,2078,2079,2080,2082],{},"No supported voice resource was started during detection. Correct the start order or set ",[95,2081,395],{}," explicitly.",[25,2084,2085,2090],{},[40,2086,2087],{},[95,2088,2089],{},"[sky_base][voice] No supported voice adapter is active.",[40,2091,2092,2093,2095,2096,1983,2098,486],{},"Dispatch attempted a radio operation without an active adapter. Check ",[95,2094,395],{},", the exact resource name, and the start order, then restart ",[95,2097,116],{},[95,2099,97],{},[25,2101,2102,2107],{},[40,2103,2104],{},[95,2105,2106],{},"Could not detect the phone automatically. Please specify in sky_base/config/config.lua",[40,2108,2109,2110,2112],{},"No supported phone was detected. Set ",[95,2111,2008],{}," explicitly or correct the phone start order.",[25,2114,2115,2120],{},[40,2116,2117],{},[95,2118,2119],{},"No supported phone resource is active. Phone app integration is disabled.",[40,2121,2122],{},"The Emergency app cannot register through the configured phone adapter. The tablet Dispatch App can still work; only phone integration is disabled.",[25,2124,2125,2130],{},[40,2126,2127],{},[95,2128,2129],{},"sky_jobs_base detected, using included job tablet",[40,2131,2132],{},"Normal message. No external tablet provider was selected, so the included Jobs Base tablet is used.",[87,2134,2136],{"color":441,"icon":2135},"i-lucide-terminal",[15,2137,2138,2139,2141,2142,2144,2145,2147],{},"After correcting a provider, do not restart only the job resource. Restart the provider first, then\n",[95,2140,116],{},", and finally ",[95,2143,97],{},", because provider selection happens while ",[95,2146,116],{}," starts.",[2149,2150,2151],"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);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":134,"searchDepth":141,"depth":147,"links":2153},[2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2170,2171,2172,2173],{"id":12,"depth":147,"text":13},{"id":109,"depth":147,"text":110},{"id":201,"depth":147,"text":202},{"id":286,"depth":147,"text":287},{"id":465,"depth":147,"text":466},{"id":545,"depth":147,"text":546},{"id":626,"depth":147,"text":627},{"id":752,"depth":147,"text":753},{"id":907,"depth":147,"text":908},{"id":1018,"depth":147,"text":1019},{"id":1051,"depth":147,"text":1052},{"id":1086,"depth":147,"text":1087},{"id":1194,"depth":147,"text":1195,"children":2167},[2168,2169],{"id":1387,"depth":153,"text":1388},{"id":1518,"depth":153,"text":1519},{"id":1636,"depth":147,"text":1637},{"id":1723,"depth":147,"text":1724},{"id":1891,"depth":147,"text":1892},{"id":2030,"depth":147,"text":2031},"Set up emergency calls, dispatch units, radio communication, and incident management.","md",null,{},{"icon":2179},"i-lucide-siren","/docs/base/jobs-base/features/emergency-dispatch",{"title":5,"description":2174},{"loc":2180},"1.docs/base/2.jobs-base/2.features/1.emergency-dispatch","ZR3K4eByMcoTGS2oNtE9QatDXXhx8L8B-fSAgsuQlJc",[2186,2191],{"title":2187,"path":2188,"stem":2189,"description":2190,"icon":90,"children":-1},"Introduction","/docs/base/jobs-base/introduction","1.docs/base/2.jobs-base/1.introduction","sky_jobs_base is the shared foundation for all Sky-Systems job scripts — providing the tablet system, dispatch, radial menu, garage, storage, and more.",{"title":2192,"path":2193,"stem":2194,"description":2195,"icon":2196,"children":-1},"Training & Qualifications","/docs/base/jobs-base/features/training","1.docs/base/2.jobs-base/2.features/2.training","Plan courses, manage sessions, record results, and maintain employee qualifications in the Jobs Base tablet.","i-lucide-graduation-cap",[],1787649378097]