2026-05-23 09:23:12 -05:00

10 KiB

CAD Usage Guide

The CAD module stores transient operational state for dispatch activity, assignments, dispatch orders, support requests, group profiles, grouped views, and hydrated UI payloads. CAD state is in-memory and follows the active server or mission lifecycle.

Data Model

Most CAD records are flexible JSON objects. The service normalizes important IDs and returns structured mutation results for higher-level workflows.

Common generated IDs:

  • Orders: cad-order:<sequence>
  • Requests: cad-request:<sequence>
  • Assignments usually share a task ID or order ID.

Commands

Activity

<th>
  Arguments
</th>

<th>
  Returns
</th>
<td>
  <code>
    activity_json
  </code>
</td>

<td>
  <code>
    OK
  </code>
  
  .
</td>
<td>
  <code>
    limit
  </code>
</td>

<td>
  Recent activity array JSON.
</td>
Command
cad:activity:append
cad:activity:recent

Assignments

<th>
  Arguments
</th>

<th>
  Returns
</th>
<td>
  none
</td>

<td>
  Assignment array JSON.
</td>
<td>
  <code>
    entry_id
  </code>
  
  , <code>
    assignment_json
  </code>
</td>

<td>
  Assignment mutation result JSON.
</td>
<td>
  <code>
    entry_id
  </code>
  
  , <code>
    patch_json
  </code>
</td>

<td>
  Assignment mutation result JSON.
</td>
<td>
  <code>
    entry_id
  </code>
  
  , <code>
    patch_json
  </code>
</td>

<td>
  Assignment mutation result JSON and removes assignment.
</td>
<td>
  <code>
    entry_id
  </code>
  
  , <code>
    assignment_json
  </code>
</td>

<td>
  <code>
    OK
  </code>
  
  .
</td>
<td>
  <code>
    entry_id
  </code>
</td>

<td>
  <code>
    OK
  </code>
  
  .
</td>
Command
cad:assignments:list
cad:assignments:assign
cad:assignments:acknowledge
cad:assignments:decline
cad:assignments:upsert
cad:assignments:delete

Orders

<th>
  Arguments
</th>

<th>
  Returns
</th>
<td>
  none
</td>

<td>
  Order array JSON.
</td>
<td>
  <code>
    order_seed_json
  </code>
</td>

<td>
  Dispatch order mutation result JSON.
</td>
<td>
  <code>
    context_json
  </code>
</td>

<td>
  Dispatch order mutation result JSON.
</td>
<td>
  <code>
    entry_id
  </code>
</td>

<td>
  Dispatch order mutation result JSON and removes order/assignment.
</td>
<td>
  <code>
    entry_id
  </code>
  
  , <code>
    order_json
  </code>
</td>

<td>
  <code>
    OK
  </code>
  
  .
</td>
<td>
  <code>
    entry_id
  </code>
</td>

<td>
  <code>
    OK
  </code>
  
  .
</td>
Command
cad:orders:list
cad:orders:create
cad:orders:create_from_context
cad:orders:close
cad:orders:upsert
cad:orders:delete

Requests

<th>
  Arguments
</th>

<th>
  Returns
</th>
<td>
  none
</td>

<td>
  Request array JSON.
</td>
<td>
  <code>
    request_json
  </code>
</td>

<td>
  Request mutation result JSON.
</td>
<td>
  <code>
    context_json
  </code>
</td>

<td>
  Request mutation result JSON.
</td>
<td>
  <code>
    entry_id
  </code>
</td>

<td>
  Request mutation result JSON and removes request.
</td>
<td>
  <code>
    entry_id
  </code>
  
  , <code>
    request_json
  </code>
</td>

<td>
  <code>
    OK
  </code>
  
  .
</td>
<td>
  <code>
    entry_id
  </code>
</td>

<td>
  <code>
    OK
  </code>
  
  .
</td>
Command
cad:requests:list
cad:requests:submit
cad:requests:submit_from_context
cad:requests:close
cad:requests:upsert
cad:requests:delete

Profiles and Views

<th>
  Arguments
</th>

<th>
  Returns
</th>
<td>
  none
</td>

<td>
  Profile array JSON.
</td>
<td>
  <code>
    context_json
  </code>
</td>

<td>
  Profile mutation result JSON.
</td>
<td>
  <code>
    entry_id
  </code>
  
  , <code>
    profile_json
  </code>
</td>

<td>
  <code>
    OK
  </code>
  
  .
</td>
<td>
  <code>
    entry_id
  </code>
</td>

<td>
  <code>
    OK
  </code>
  
  .
</td>
<td>
  <code>
    groups_seed_json
  </code>
</td>

<td>
  Group array JSON.
</td>
<td>
  <code>
    hydrate_seed_json
  </code>
</td>

<td>
  Hydrated CAD payload JSON.
</td>
Command
cad:profiles:list
cad:profiles:update_from_context
cad:profiles:upsert
cad:profiles:delete
cad:groups:build
cad:view:hydrate

Submit a Support Request

private _fields = createHashMapFromArray [
    ["pickup_location", "Grid 123456"],
    ["precedence", "urgent"],
    ["security", "secure"]
];

private _context = createHashMapFromArray [
    ["type", "medevac_9line"],
    ["fields", _fields],
    ["groupId", "alpha"],
    ["groupCallsign", "Alpha 1-1"],
    ["submittedByUid", getPlayerUID player],
    ["submittedByName", name player],
    ["priority", "emergency"],
    ["position", getPosATL player],
    ["createdAt", diag_tickTime]
];

private _result = "forge_server" callExtension ["cad:requests:submit_from_context", [
    toJSON _context
]];

Supported priority values are routine, priority, and emergency. Unknown values normalize to priority.

Create a Dispatch Order

private _context = createHashMapFromArray [
    ["assigneeGroupId", "bravo"],
    ["assigneeGroupCallsign", "Bravo 1-1"],
    ["targetGroupId", "alpha"],
    ["targetGroupCallsign", "Alpha 1-1"],
    ["targetPosition", getPosATL player],
    ["createdByUid", getPlayerUID player],
    ["createdByName", name player],
    ["requestId", "cad-request:1"],
    ["requestType", "logreq"],
    ["requestTitle", "LOGREQ | Alpha 1-1"],
    ["requestSummary", "Ammo resupply requested"],
    ["requestFields", createHashMap],
    ["note", "Support Alpha 1-1 at current position."],
    ["priority", "priority"],
    ["createdAt", diag_tickTime]
];

private _result = "forge_server" callExtension ["cad:orders:create_from_context", [
    toJSON _context
]];

Assignment Workflow

private _assignment = createHashMapFromArray [
    ["groupId", "bravo"],
    ["assigneeGroupCallsign", "Bravo 1-1"],
    ["assignedByUid", getPlayerUID player],
    ["assignedByName", name player],
    ["assignedAt", diag_tickTime],
    ["state", "assigned"]
];

"forge_server" callExtension ["cad:assignments:assign", [
    "task-123",
    toJSON _assignment
]];

private _ack = createHashMapFromArray [
    ["state", "acknowledged"],
    ["acknowledgedByUid", getPlayerUID player],
    ["acknowledgedAt", diag_tickTime]
];

"forge_server" callExtension ["cad:assignments:acknowledge", [
    "task-123",
    toJSON _ack
]];

Hydrate the CAD UI

private _session = createHashMapFromArray [
    ["uid", getPlayerUID player],
    ["orgId", "default"],
    ["isDispatcher", true],
    ["groupId", "alpha"],
    ["isLeader", true]
];

private _seed = createHashMapFromArray [
    ["groups", _liveGroups],
    ["activeTasks", _activeTasks],
    ["session", _session]
];

private _result = "forge_server" callExtension ["cad:view:hydrate", [toJSON _seed]];

Error Handling

private _payload = _result select 0;
if (_payload find "Error:" == 0) exitWith {
    systemChat format ["CAD error: %1", _payload];
};