# 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:` - Requests: `cad-request:` - Assignments usually share a task ID or order ID. ## Commands ### Activity
Command Arguments Returns
cad:activity:append activity_json OK .
cad:activity:recent limit Recent activity array JSON.
### Assignments
Command Arguments Returns
cad:assignments:list none Assignment array JSON.
cad:assignments:assign entry_id , assignment_json Assignment mutation result JSON.
cad:assignments:acknowledge entry_id , patch_json Assignment mutation result JSON.
cad:assignments:decline entry_id , patch_json Assignment mutation result JSON and removes assignment.
cad:assignments:upsert entry_id , assignment_json OK .
cad:assignments:delete entry_id OK .
### Orders
Command Arguments Returns
cad:orders:list none Order array JSON.
cad:orders:create order_seed_json Dispatch order mutation result JSON.
cad:orders:create_from_context context_json Dispatch order mutation result JSON.
cad:orders:close entry_id Dispatch order mutation result JSON and removes order/assignment.
cad:orders:upsert entry_id , order_json OK .
cad:orders:delete entry_id OK .
### Requests
Command Arguments Returns
cad:requests:list none Request array JSON.
cad:requests:submit request_json Request mutation result JSON.
cad:requests:submit_from_context context_json Request mutation result JSON.
cad:requests:close entry_id Request mutation result JSON and removes request.
cad:requests:upsert entry_id , request_json OK .
cad:requests:delete entry_id OK .
### Profiles and Views
Command Arguments Returns
cad:profiles:list none Profile array JSON.
cad:profiles:update_from_context context_json Profile mutation result JSON.
cad:profiles:upsert entry_id , profile_json OK .
cad:profiles:delete entry_id OK .
cad:groups:build groups_seed_json Group array JSON.
cad:view:hydrate hydrate_seed_json Hydrated CAD payload JSON.
## Submit a Support Request ```sqf 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 ```sqf 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 ```sqf 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 ```sqf 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 ```sqf private _payload = _result select 0; if (_payload find "Error:" == 0) exitWith { systemChat format ["CAD error: %1", _payload]; }; ```