1
0
This commit is contained in:
2026-05-18 14:05:37 +03:00
parent 3da6362c49
commit ed1d44e94a
16 changed files with 1686 additions and 867 deletions

110
README.md
View File

@@ -1,87 +1,49 @@
# lv.civdef.drone-threat-public-address # Drone Threat Public Address & Citizen Notification
**UAPF Level-4 process package v0.2.0 (draft)** UAPF v2.2.0 process package · `lv.civdef.drone-threat-public-address` · v0.3.0 · **draft**
**Conformant to UAPF specification v2.2.0** — see `docs/04-validation-report.md`.
Drone Threat Public Address & Citizen Notification — a process model of the A Level-4 UAPF package modelling the cross-institutional algorithm by which
cross-institutional algorithm for detecting a drone threat over Latvian Latvia turns a detected drone threat into a timely public cell-broadcast,
airspace, deciding on and triggering public cell-broadcast notification, coordinates interception, and runs field response and origin investigation.
coordinating interception, and conducting field response and origin Modelled from the public chronology of the **7 May 2026 Rezekne drone
investigation. incident**, whose defining failure was a ~40-minute delay in alerting the
public.
Built from the public record of the 7 May 2026 Rēzekne drone incident and the > Independent modelling demonstrator. **Not** an official algorithm of the NBS,
Ministry of Defence commitment to revise the inter-institutional notification > VUGD, the Ministry of Defence or any Latvian state institution.
algorithms. **Not approved for operational use** (`lifecycle.status: draft`).
## Layout
```
lv-civdef-drone-threat-public-address/
├── uapf.yaml # manifest (kind: uapf.package, level 4)
├── bpmn/
│ └── drone-threat-public-address.bpmn # end-to-end process flow
├── dmn/
│ └── air-threat-decisions.dmn # 3 decisions: severity / scope / interception
├── cmmn/
│ └── field-response-investigation.cmmn # field-response & origin-investigation case
├── resources/
│ ├── mappings.yaml # 11 targets, 19 bindings
│ └── guardrails.yaml # UAPF-IP guardrails policy snapshot
├── metadata/
│ ├── ownership.yaml
│ ├── lifecycle.yaml
│ └── policies.yaml # classification / execution / delegation
└── docs/ # non-normative supporting analysis
├── 00-incident-chronology.md
├── 01-institutional-gap-analysis.md
├── 02-raci.md
├── 03-uapf-ip-integration.md
└── 04-validation-report.md
```
## Cornerstones ## Cornerstones
- **BPMN** `Process_DroneThreatPublicAddress` — detection → threat assessment | Cornerstone | File | Content |
gateway → broadcast-scope decision → request → parallel block |-------------|------|---------|
{cell broadcast | agency notification | interception evaluation} → | Process (BPMN) | `bpmn/drone-threat-public-address.bpmn` | 26 nodes across **6 institution lanes**; non-interrupting **SLA-breach boundary timer**; parallel broadcast / notify / interception; 3-way interception gateway; stand-down loop; handoff to the investigation case. |
synchronise → local response → all-clear → field-response case → close. | Decisions (DMN) | `dmn/air-threat-decisions.dmn` | **6 chained, documented decisions** with a clean DRD. Object classification → severity → notification urgency & SLA → broadcast scope; interception authorization; stand-down. |
- **DMN** one DRD, three decisions — `Decision_AirThreatSeverity`, | Case (CMMN) | `cmmn/field-response-investigation.cmmn` | 3 stages, 11 human tasks, milestones and entry sentries for field response, origin investigation and public communication. |
`Decision_CellBroadcastScope`, `Decision_InterceptionAuthorization`. | Resources | `resources/mappings.yaml` | Every process/decision/case element bound to an executing institution, system or agent — with a legend tracing each binding to its diagram element. Guardrails in `resources/guardrails.yaml`. |
- **CMMN** `Case_DroneIncidentFieldResponse` — debris search, fire suppression,
scene security, an investigation stage (technical exam, origin attribution,
disinformation monitoring), plus discretionary press and after-action review.
- **Resources** 11 targets (NBS surveillance/Joint Staff/air-defence, VUGD duty
and cell-broadcast system, State Police, KVC, Ministry of Defence, municipal
commissions, an AI threat-assessment agent, an OSINT MCP tool) bound to every
process / decision / case element via the v2.2.0 resource-mapping schema.
## UAPF-IP & MCP ## What changed in v0.3.0
The manifest declares `requires_capabilities`, `profiles_supported` Rebuilt deeper and broader from v0.2.0, and the v0.2.0 defects fixed:
(`uapf-ip-orchestrated`, `uapf-ip-sync-decision`), `guardrails`, and an
`exposure.mcp` block exposing the process and the three decisions as MCP tools.
See `docs/03-uapf-ip-integration.md`.
## Validation - DMN expanded **3 → 6 decisions**; every decision and every rule now carries a
description; the DRD uses an all-positive, tidy layout.
- **Interception logic fixed** — `positiveHostileId` was declared as a required
input but never tested, so the table could reach `engage` without it. It is
now rule 1: no positive hostile ID → always `hold`.
- **Cell-broadcast scope** now genuinely consumes `corridorMunicipalities` (a
FEEL expression, not a quoted string).
- BPMN expanded from a flat flow to a **6-lane collaboration** with the SLA
boundary timer that models the Rezekne lesson directly.
- `mappings.yaml` given an element-level **legend** so the resource↔process
linkage is readable and machine-checkable.
``` ## Documentation
python3 ../../validate.py ../.. <path-to-UAPF-specification-repo>
```
Result: PASS, 0 errors, 0 warnings against UAPF v2.2.0. The reference CLI `docs/00` chronology · `docs/01` gap analysis · `docs/02` RACI ·
`tools/uapf-cli/uapf.py` will wrongly reject this package because it checks for `docs/03` notification timing & SLA · `docs/04` UAPF-IP integration ·
the obsolete `.bpmn.xml` extension — this is a known upstream bug, documented in `docs/05` validation report (19/19 passed).
`docs/04-validation-report.md`.
## Intended steward ## Status
Authored as an external draft (owner: Rihards Gailums). The intended `draft`. Decision thresholds and SLA values are modelling proposals pending
institutional steward on hand-over is the Ministry of Defence institutional review — see `docs/01` and `docs/03`.
(Aizsardzības ministrija) jointly with the Crisis Management Centre
(Krīzes vadības centrs).
## Sources
Public reporting only — LSM / eng.lsm.lv, Apollo, TV3, Meduza, Defense News,
The Globe and Mail, and the Wikipedia article "2026 Ukrainian drone incursions
into Baltic states". Dated record in `docs/00-incident-chronology.md`.

View File

@@ -1,245 +1,476 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" <bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
id="defs_drone_threat_public_address" id="defs_drone_threat" targetNamespace="http://uapf.dev/lv.civdef.drone-threat-public-address">
targetNamespace="http://uapf.dev/lv.civdef.drone-threat-public-address"> <bpmn:collaboration id="Collab_DroneThreat">
<bpmn:participant id="Participant_Response" name="National drone-threat civil-defence response" processRef="Process_DroneThreatPublicAddress" />
<bpmn:participant id="Participant_BAP" name="NATO Baltic Air Policing" />
<bpmn:messageFlow id="mf_bap" name="Air interception request" sourceRef="Task_RequestBAP" targetRef="Participant_BAP" />
</bpmn:collaboration>
<bpmn:process id="Process_DroneThreatPublicAddress" name="Drone Threat Public Address &amp; Citizen Notification" isExecutable="false"> <bpmn:process id="Process_DroneThreatPublicAddress" name="Drone Threat Public Address &amp; Citizen Notification" isExecutable="false">
<bpmn:laneSet id="LaneSet_1">
<bpmn:startEvent id="Start_Detect" name="Unidentified airborne object detected near eastern border"> <bpmn:lane id="Lane_Surveillance" name="NBS Air Surveillance &amp; Radar">
<bpmn:flowNodeRef>Start_Detection</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_TrackObject</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_ClassifyObject</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_LogAndMonitor</bpmn:flowNodeRef>
<bpmn:flowNodeRef>End_NoThreat</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_MaintainTrack</bpmn:flowNodeRef>
</bpmn:lane>
<bpmn:lane id="Lane_JointStaff" name="NBS Joint Staff (operational duty)">
<bpmn:flowNodeRef>Task_AssessSeverity</bpmn:flowNodeRef>
<bpmn:flowNodeRef>GW_Threat</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_DetermineUrgency</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_DetermineBroadcast</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_AuthorizeBroadcast</bpmn:flowNodeRef>
<bpmn:flowNodeRef>GW_Fork</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_NotifyAgencies</bpmn:flowNodeRef>
<bpmn:flowNodeRef>GW_Join</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_AssessStandDown</bpmn:flowNodeRef>
<bpmn:flowNodeRef>GW_StandDown</bpmn:flowNodeRef>
</bpmn:lane>
<bpmn:lane id="Lane_VUGD" name="VUGD / Cell-broadcast (sunu apraide)">
<bpmn:flowNodeRef>Task_DispatchBroadcast</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_AllClearBroadcast</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Boundary_SlaBreach</bpmn:flowNodeRef>
</bpmn:lane>
<bpmn:lane id="Lane_AirDefence" name="NBS Air Defence">
<bpmn:flowNodeRef>Task_AuthorizeInterception</bpmn:flowNodeRef>
<bpmn:flowNodeRef>GW_Interception</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_GroundEngage</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_RequestBAP</bpmn:flowNodeRef>
</bpmn:lane>
<bpmn:lane id="Lane_Field" name="State Police &amp; Municipal civil protection">
</bpmn:lane>
<bpmn:lane id="Lane_Command" name="Ministry of Defence / Crisis Management Centre">
<bpmn:flowNodeRef>Task_EscalateSla</bpmn:flowNodeRef>
<bpmn:flowNodeRef>End_SlaEscalated</bpmn:flowNodeRef>
<bpmn:flowNodeRef>Task_HandToInvestigation</bpmn:flowNodeRef>
<bpmn:flowNodeRef>End_Resolved</bpmn:flowNodeRef>
</bpmn:lane>
</bpmn:laneSet>
<bpmn:startEvent id="Start_Detection" name="Airborne object detected">
<bpmn:messageEventDefinition id="med_Start_Detection" />
<bpmn:outgoing>f1</bpmn:outgoing> <bpmn:outgoing>f1</bpmn:outgoing>
</bpmn:startEvent> </bpmn:startEvent>
<bpmn:task id="Task_TrackObject" name="Establish &amp; maintain object track">
<bpmn:task id="Task_Classify" name="Classify object and track trajectory">
<bpmn:documentation>NBS air surveillance and Joint Staff classify the object (drone / aircraft / unknown) and establish its track and predicted corridor.</bpmn:documentation>
<bpmn:incoming>f1</bpmn:incoming> <bpmn:incoming>f1</bpmn:incoming>
<bpmn:outgoing>f2</bpmn:outgoing> <bpmn:outgoing>f2</bpmn:outgoing>
</bpmn:task> </bpmn:task>
<bpmn:businessRuleTask id="Task_ClassifyObject" name="Classify object &amp;#10; [Object classification]">
<bpmn:businessRuleTask id="BR_AssessThreat" name="Assess air threat severity">
<bpmn:documentation>Applies DMN decision Decision_AirThreatSeverity.</bpmn:documentation>
<bpmn:incoming>f2</bpmn:incoming> <bpmn:incoming>f2</bpmn:incoming>
<bpmn:outgoing>f3</bpmn:outgoing> <bpmn:outgoing>f3</bpmn:outgoing>
</bpmn:businessRuleTask> </bpmn:businessRuleTask>
<bpmn:businessRuleTask id="Task_AssessSeverity" name="Assess air-threat severity &amp;#10; [Air-threat severity]">
<bpmn:exclusiveGateway id="GW_ThreatConfirmed" name="Confirmed threat over LV territory?">
<bpmn:incoming>f3</bpmn:incoming> <bpmn:incoming>f3</bpmn:incoming>
<bpmn:outgoing>f4</bpmn:outgoing> <bpmn:outgoing>f4</bpmn:outgoing>
<bpmn:outgoing>f5</bpmn:outgoing> </bpmn:businessRuleTask>
</bpmn:exclusiveGateway> <bpmn:exclusiveGateway id="GW_Threat" name="Civil-defence threat?">
<bpmn:endEvent id="End_MonitorOnly" name="Continue monitoring; log event">
<bpmn:incoming>f4</bpmn:incoming> <bpmn:incoming>f4</bpmn:incoming>
</bpmn:endEvent> <bpmn:outgoing>f5</bpmn:outgoing>
<bpmn:outgoing>f7</bpmn:outgoing>
<bpmn:businessRuleTask id="BR_AlertScope" name="Determine cell-broadcast scope and message"> </bpmn:exclusiveGateway>
<bpmn:documentation>Applies DMN decision Decision_CellBroadcastScope to derive affected municipalities and message template.</bpmn:documentation> <bpmn:task id="Task_LogAndMonitor" name="Log &amp; monitor (no public alert)">
<bpmn:incoming>f5</bpmn:incoming> <bpmn:incoming>f5</bpmn:incoming>
<bpmn:outgoing>f6</bpmn:outgoing> <bpmn:outgoing>f6</bpmn:outgoing>
</bpmn:businessRuleTask>
<bpmn:task id="Task_RequestBroadcast" name="Issue cell-broadcast request to VUGD">
<bpmn:documentation>GAP: in the AS-IS algorithm this NBS request is the single trigger; if it is not issued (or issued late) no public alert fires. See docs/01-institutional-gap-analysis.md.</bpmn:documentation>
<bpmn:incoming>f6</bpmn:incoming>
<bpmn:outgoing>f7</bpmn:outgoing>
</bpmn:task> </bpmn:task>
<bpmn:endEvent id="End_NoThreat" name="No civil-defence action">
<bpmn:parallelGateway id="GW_ParallelSplit" name="Parallel response"> <bpmn:incoming>f6</bpmn:incoming>
</bpmn:endEvent>
<bpmn:businessRuleTask id="Task_DetermineUrgency" name="Determine notification urgency &amp; SLA &amp;#10; [Notification urgency]">
<bpmn:incoming>f7</bpmn:incoming> <bpmn:incoming>f7</bpmn:incoming>
<bpmn:outgoing>f8</bpmn:outgoing> <bpmn:outgoing>f8</bpmn:outgoing>
<bpmn:outgoing>f9</bpmn:outgoing>
<bpmn:outgoing>f10</bpmn:outgoing>
</bpmn:parallelGateway>
<bpmn:task id="Task_CellBroadcast" name="Trigger cell broadcast in affected municipalities">
<bpmn:documentation>VUGD executes the cell broadcast (sunu apraide) on receipt of the NBS request.</bpmn:documentation>
<bpmn:incoming>f8</bpmn:incoming>
<bpmn:outgoing>f11</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="Task_NotifyAgencies" name="Notify KVC, IeM and municipal civil-protection commissions">
<bpmn:documentation>Parallel information flow to crisis-management and municipal actors. GAP: AS-IS lacks a unified, simultaneous notification to all responsible institutions.</bpmn:documentation>
<bpmn:incoming>f9</bpmn:incoming>
<bpmn:outgoing>f12</bpmn:outgoing>
</bpmn:task>
<bpmn:businessRuleTask id="BR_Interception" name="Evaluate interception per safety criteria">
<bpmn:documentation>Applies DMN decision Decision_InterceptionAuthorization.</bpmn:documentation>
<bpmn:incoming>f10</bpmn:incoming>
<bpmn:outgoing>f13</bpmn:outgoing>
</bpmn:businessRuleTask> </bpmn:businessRuleTask>
<bpmn:businessRuleTask id="Task_DetermineBroadcast" name="Determine cell-broadcast scope &amp;#10; [Cell-broadcast scope]">
<bpmn:task id="Task_CoordBAP" name="Coordinate interception with NATO Baltic Air Policing / PGA"> <bpmn:incoming>f8</bpmn:incoming>
<bpmn:documentation>Engage or hold per Decision_InterceptionAuthorization; scramble BAP fighters and/or move ground air-defence units to cleared firing positions.</bpmn:documentation> <bpmn:outgoing>f9</bpmn:outgoing>
<bpmn:incoming>f13</bpmn:incoming> </bpmn:businessRuleTask>
<bpmn:userTask id="Task_AuthorizeBroadcast" name="Authorize public broadcast">
<bpmn:incoming>f9</bpmn:incoming>
<bpmn:outgoing>f10</bpmn:outgoing>
</bpmn:userTask>
<bpmn:parallelGateway id="GW_Fork" name="Parallel response">
<bpmn:incoming>f10</bpmn:incoming>
<bpmn:outgoing>f11</bpmn:outgoing>
<bpmn:outgoing>f12</bpmn:outgoing>
<bpmn:outgoing>f13</bpmn:outgoing>
</bpmn:parallelGateway>
<bpmn:task id="Task_DispatchBroadcast" name="Dispatch public cell-broadcast">
<bpmn:incoming>f11</bpmn:incoming>
<bpmn:outgoing>f14</bpmn:outgoing> <bpmn:outgoing>f14</bpmn:outgoing>
</bpmn:task> </bpmn:task>
<bpmn:task id="Task_EscalateSla" name="Escalate SLA breach to Crisis Mgmt">
<bpmn:parallelGateway id="GW_ParallelJoin" name="Synchronise"> <bpmn:incoming>fb</bpmn:incoming>
<bpmn:incoming>f11</bpmn:incoming> <bpmn:outgoing>fb2</bpmn:outgoing>
<bpmn:incoming>f12</bpmn:incoming>
<bpmn:incoming>f14</bpmn:incoming>
<bpmn:outgoing>f15</bpmn:outgoing>
</bpmn:parallelGateway>
<bpmn:task id="Task_LocalResponse" name="Activate local civil-protection response">
<bpmn:documentation>Municipal civil-protection commissions act on shelter guidance, school closures (IZM guidance) and resident enquiries.</bpmn:documentation>
<bpmn:incoming>f15</bpmn:incoming>
<bpmn:outgoing>f16</bpmn:outgoing>
</bpmn:task> </bpmn:task>
<bpmn:endEvent id="End_SlaEscalated" name="SLA breach escalated">
<bpmn:task id="Task_AllClear" name="Declare threat ended and issue all-clear broadcast"> <bpmn:incoming>fb2</bpmn:incoming>
</bpmn:endEvent>
<bpmn:task id="Task_NotifyAgencies" name="Notify KVC, IeM &amp; municipal commissions">
<bpmn:incoming>f12</bpmn:incoming>
<bpmn:outgoing>f15</bpmn:outgoing>
</bpmn:task>
<bpmn:businessRuleTask id="Task_AuthorizeInterception" name="Authorize interception &amp;#10; [Interception authorization]">
<bpmn:incoming>f13</bpmn:incoming>
<bpmn:outgoing>f16</bpmn:outgoing>
</bpmn:businessRuleTask>
<bpmn:exclusiveGateway id="GW_Interception" name="Interception decision">
<bpmn:incoming>f16</bpmn:incoming> <bpmn:incoming>f16</bpmn:incoming>
<bpmn:outgoing>f17</bpmn:outgoing> <bpmn:outgoing>f17</bpmn:outgoing>
</bpmn:task>
<bpmn:callActivity id="Call_FieldResponse" name="Field response &amp; origin investigation" calledElement="Case_DroneIncidentFieldResponse">
<bpmn:documentation>Invokes the CMMN case cmmn/field-response-investigation.cmmn.xml.</bpmn:documentation>
<bpmn:incoming>f17</bpmn:incoming>
<bpmn:outgoing>f18</bpmn:outgoing> <bpmn:outgoing>f18</bpmn:outgoing>
</bpmn:callActivity> <bpmn:outgoing>f19</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:endEvent id="End_Closed" name="Incident closed; after-action review scheduled"> <bpmn:task id="Task_GroundEngage" name="Ground air-defence engagement">
<bpmn:incoming>f17</bpmn:incoming>
<bpmn:outgoing>f20</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="Task_RequestBAP" name="Request NATO BAP engagement">
<bpmn:incoming>f18</bpmn:incoming> <bpmn:incoming>f18</bpmn:incoming>
<bpmn:outgoing>f21</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="Task_MaintainTrack" name="Maintain track &amp; monitor">
<bpmn:incoming>f19</bpmn:incoming>
<bpmn:outgoing>f22</bpmn:outgoing>
</bpmn:task>
<bpmn:parallelGateway id="GW_Join" name="Join">
<bpmn:incoming>f14</bpmn:incoming>
<bpmn:incoming>f15</bpmn:incoming>
<bpmn:incoming>f20</bpmn:incoming>
<bpmn:incoming>f21</bpmn:incoming>
<bpmn:incoming>f22</bpmn:incoming>
<bpmn:outgoing>f23</bpmn:outgoing>
</bpmn:parallelGateway>
<bpmn:businessRuleTask id="Task_AssessStandDown" name="Assess stand-down criteria &amp;#10; [Stand-down &amp; all-clear]">
<bpmn:incoming>f23</bpmn:incoming>
<bpmn:incoming>f25</bpmn:incoming>
<bpmn:outgoing>f24</bpmn:outgoing>
</bpmn:businessRuleTask>
<bpmn:exclusiveGateway id="GW_StandDown" name="All clear?">
<bpmn:incoming>f24</bpmn:incoming>
<bpmn:outgoing>f25</bpmn:outgoing>
<bpmn:outgoing>f26</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:task id="Task_AllClearBroadcast" name="Dispatch all-clear broadcast">
<bpmn:incoming>f26</bpmn:incoming>
<bpmn:outgoing>f27</bpmn:outgoing>
</bpmn:task>
<bpmn:task id="Task_HandToInvestigation" name="Open field-response &amp; investigation case">
<bpmn:incoming>f27</bpmn:incoming>
<bpmn:outgoing>f28</bpmn:outgoing>
</bpmn:task>
<bpmn:endEvent id="End_Resolved" name="Incident resolved">
<bpmn:incoming>f28</bpmn:incoming>
</bpmn:endEvent> </bpmn:endEvent>
<bpmn:boundaryEvent id="Boundary_SlaBreach" name="Broadcast SLA breached" attachedToRef="Task_DispatchBroadcast" cancelActivity="false">
<bpmn:sequenceFlow id="f1" sourceRef="Start_Detect" targetRef="Task_Classify" /> <bpmn:outgoing>fb</bpmn:outgoing>
<bpmn:sequenceFlow id="f2" sourceRef="Task_Classify" targetRef="BR_AssessThreat" /> <bpmn:timerEventDefinition id="ted_sla">
<bpmn:sequenceFlow id="f3" sourceRef="BR_AssessThreat" targetRef="GW_ThreatConfirmed" /> <bpmn:timeDuration xsi:type="bpmn:tFormalExpression" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">PT10M</bpmn:timeDuration>
<bpmn:sequenceFlow id="f4" name="No - not over LV territory" sourceRef="GW_ThreatConfirmed" targetRef="End_MonitorOnly" /> </bpmn:timerEventDefinition>
<bpmn:sequenceFlow id="f5" name="Yes - confirmed threat" sourceRef="GW_ThreatConfirmed" targetRef="BR_AlertScope" /> </bpmn:boundaryEvent>
<bpmn:sequenceFlow id="f6" sourceRef="BR_AlertScope" targetRef="Task_RequestBroadcast" /> <bpmn:sequenceFlow id="f1" sourceRef="Start_Detection" targetRef="Task_TrackObject" />
<bpmn:sequenceFlow id="f7" sourceRef="Task_RequestBroadcast" targetRef="GW_ParallelSplit" /> <bpmn:sequenceFlow id="f2" sourceRef="Task_TrackObject" targetRef="Task_ClassifyObject" />
<bpmn:sequenceFlow id="f8" sourceRef="GW_ParallelSplit" targetRef="Task_CellBroadcast" /> <bpmn:sequenceFlow id="f3" sourceRef="Task_ClassifyObject" targetRef="Task_AssessSeverity" />
<bpmn:sequenceFlow id="f9" sourceRef="GW_ParallelSplit" targetRef="Task_NotifyAgencies" /> <bpmn:sequenceFlow id="f4" sourceRef="Task_AssessSeverity" targetRef="GW_Threat" />
<bpmn:sequenceFlow id="f10" sourceRef="GW_ParallelSplit" targetRef="BR_Interception" /> <bpmn:sequenceFlow id="f5" name="threatLevel in (none, low)" sourceRef="GW_Threat" targetRef="Task_LogAndMonitor" />
<bpmn:sequenceFlow id="f11" sourceRef="Task_CellBroadcast" targetRef="GW_ParallelJoin" /> <bpmn:sequenceFlow id="f6" sourceRef="Task_LogAndMonitor" targetRef="End_NoThreat" />
<bpmn:sequenceFlow id="f12" sourceRef="Task_NotifyAgencies" targetRef="GW_ParallelJoin" /> <bpmn:sequenceFlow id="f7" name="threatLevel in (elevated, high, critical)" sourceRef="GW_Threat" targetRef="Task_DetermineUrgency" />
<bpmn:sequenceFlow id="f13" sourceRef="BR_Interception" targetRef="Task_CoordBAP" /> <bpmn:sequenceFlow id="f8" sourceRef="Task_DetermineUrgency" targetRef="Task_DetermineBroadcast" />
<bpmn:sequenceFlow id="f14" sourceRef="Task_CoordBAP" targetRef="GW_ParallelJoin" /> <bpmn:sequenceFlow id="f9" sourceRef="Task_DetermineBroadcast" targetRef="Task_AuthorizeBroadcast" />
<bpmn:sequenceFlow id="f15" sourceRef="GW_ParallelJoin" targetRef="Task_LocalResponse" /> <bpmn:sequenceFlow id="f10" sourceRef="Task_AuthorizeBroadcast" targetRef="GW_Fork" />
<bpmn:sequenceFlow id="f16" sourceRef="Task_LocalResponse" targetRef="Task_AllClear" /> <bpmn:sequenceFlow id="f11" sourceRef="GW_Fork" targetRef="Task_DispatchBroadcast" />
<bpmn:sequenceFlow id="f17" sourceRef="Task_AllClear" targetRef="Call_FieldResponse" /> <bpmn:sequenceFlow id="f12" sourceRef="GW_Fork" targetRef="Task_NotifyAgencies" />
<bpmn:sequenceFlow id="f18" sourceRef="Call_FieldResponse" targetRef="End_Closed" /> <bpmn:sequenceFlow id="f13" sourceRef="GW_Fork" targetRef="Task_AuthorizeInterception" />
<bpmn:sequenceFlow id="f14" sourceRef="Task_DispatchBroadcast" targetRef="GW_Join" />
<bpmn:sequenceFlow id="f15" sourceRef="Task_NotifyAgencies" targetRef="GW_Join" />
<bpmn:sequenceFlow id="f16" sourceRef="Task_AuthorizeInterception" targetRef="GW_Interception" />
<bpmn:sequenceFlow id="f17" name="interceptionDecision = engage-ground" sourceRef="GW_Interception" targetRef="Task_GroundEngage" />
<bpmn:sequenceFlow id="f18" name="interceptionDecision = engage-bap" sourceRef="GW_Interception" targetRef="Task_RequestBAP" />
<bpmn:sequenceFlow id="f19" name="interceptionDecision = hold" sourceRef="GW_Interception" targetRef="Task_MaintainTrack" />
<bpmn:sequenceFlow id="f20" sourceRef="Task_GroundEngage" targetRef="GW_Join" />
<bpmn:sequenceFlow id="f21" sourceRef="Task_RequestBAP" targetRef="GW_Join" />
<bpmn:sequenceFlow id="f22" sourceRef="Task_MaintainTrack" targetRef="GW_Join" />
<bpmn:sequenceFlow id="f23" sourceRef="GW_Join" targetRef="Task_AssessStandDown" />
<bpmn:sequenceFlow id="f24" sourceRef="Task_AssessStandDown" targetRef="GW_StandDown" />
<bpmn:sequenceFlow id="f25" name="standDownDecision = maintain-alert" sourceRef="GW_StandDown" targetRef="Task_AssessStandDown" />
<bpmn:sequenceFlow id="f26" name="standDownDecision = all-clear" sourceRef="GW_StandDown" targetRef="Task_AllClearBroadcast" />
<bpmn:sequenceFlow id="f27" sourceRef="Task_AllClearBroadcast" targetRef="Task_HandToInvestigation" />
<bpmn:sequenceFlow id="f28" sourceRef="Task_HandToInvestigation" targetRef="End_Resolved" />
<bpmn:sequenceFlow id="fb" sourceRef="Boundary_SlaBreach" targetRef="Task_EscalateSla" />
<bpmn:sequenceFlow id="fb2" sourceRef="Task_EscalateSla" targetRef="End_SlaEscalated" />
</bpmn:process> </bpmn:process>
<bpmndi:BPMNDiagram id="diag">
<bpmndi:BPMNDiagram id="Diagram_1"> <bpmndi:BPMNPlane id="plane" bpmnElement="Collab_DroneThreat">
<bpmndi:BPMNPlane id="Plane_1" bpmnElement="Process_DroneThreatPublicAddress"> <bpmndi:BPMNShape id="di_Participant_Response" bpmnElement="Participant_Response" isHorizontal="true">
<bpmndi:BPMNShape id="di_Start_Detect" bpmnElement="Start_Detect"> <dc:Bounds x="170" y="120" width="3460" height="900" />
<dc:Bounds x="152" y="222" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="130" y="262" width="84" height="40" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_Classify" bpmnElement="Task_Classify"> <bpmndi:BPMNShape id="di_Lane_Surveillance" bpmnElement="Lane_Surveillance" isHorizontal="true">
<dc:Bounds x="240" y="200" width="120" height="80" /> <dc:Bounds x="200" y="120" width="3430" height="150" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_BR_AssessThreat" bpmnElement="BR_AssessThreat"> <bpmndi:BPMNShape id="di_Lane_JointStaff" bpmnElement="Lane_JointStaff" isHorizontal="true">
<dc:Bounds x="410" y="200" width="120" height="80" /> <dc:Bounds x="200" y="270" width="3430" height="150" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_GW_ThreatConfirmed" bpmnElement="GW_ThreatConfirmed" isMarkerVisible="true"> <bpmndi:BPMNShape id="di_Lane_VUGD" bpmnElement="Lane_VUGD" isHorizontal="true">
<dc:Bounds x="585" y="215" width="50" height="50" /> <dc:Bounds x="200" y="420" width="3430" height="150" />
<bpmndi:BPMNLabel><dc:Bounds x="570" y="175" width="82" height="40" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_End_MonitorOnly" bpmnElement="End_MonitorOnly"> <bpmndi:BPMNShape id="di_Lane_AirDefence" bpmnElement="Lane_AirDefence" isHorizontal="true">
<dc:Bounds x="592" y="362" width="36" height="36" /> <dc:Bounds x="200" y="570" width="3430" height="150" />
<bpmndi:BPMNLabel><dc:Bounds x="568" y="402" width="84" height="27" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_BR_AlertScope" bpmnElement="BR_AlertScope"> <bpmndi:BPMNShape id="di_Lane_Field" bpmnElement="Lane_Field" isHorizontal="true">
<dc:Bounds x="690" y="200" width="120" height="80" /> <dc:Bounds x="200" y="720" width="3430" height="150" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_RequestBroadcast" bpmnElement="Task_RequestBroadcast"> <bpmndi:BPMNShape id="di_Lane_Command" bpmnElement="Lane_Command" isHorizontal="true">
<dc:Bounds x="860" y="200" width="120" height="80" /> <dc:Bounds x="200" y="870" width="3430" height="150" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_GW_ParallelSplit" bpmnElement="GW_ParallelSplit"> <bpmndi:BPMNShape id="di_Participant_BAP" bpmnElement="Participant_BAP" isHorizontal="true">
<dc:Bounds x="1035" y="215" width="50" height="50" /> <dc:Bounds x="170" y="1060" width="3460" height="80" />
<bpmndi:BPMNLabel><dc:Bounds x="1030" y="272" width="60" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_CellBroadcast" bpmnElement="Task_CellBroadcast"> <bpmndi:BPMNShape id="di_Start_Detection" bpmnElement="Start_Detection">
<dc:Bounds x="1150" y="80" width="150" height="80" /> <dc:Bounds x="282" y="177" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="250" y="217" width="100" height="28" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_TrackObject" bpmnElement="Task_TrackObject">
<dc:Bounds x="405" y="152" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_ClassifyObject" bpmnElement="Task_ClassifyObject">
<dc:Bounds x="580" y="152" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_AssessSeverity" bpmnElement="Task_AssessSeverity">
<dc:Bounds x="755" y="302" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_GW_Threat" bpmnElement="GW_Threat">
<dc:Bounds x="975" y="320" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="950" y="374" width="100" height="28" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_LogAndMonitor" bpmnElement="Task_LogAndMonitor">
<dc:Bounds x="1105" y="152" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_End_NoThreat" bpmnElement="End_NoThreat">
<dc:Bounds x="1332" y="177" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="1300" y="217" width="100" height="28" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_DetermineUrgency" bpmnElement="Task_DetermineUrgency">
<dc:Bounds x="1105" y="302" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_DetermineBroadcast" bpmnElement="Task_DetermineBroadcast">
<dc:Bounds x="1280" y="302" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_AuthorizeBroadcast" bpmnElement="Task_AuthorizeBroadcast">
<dc:Bounds x="1455" y="302" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_GW_Fork" bpmnElement="GW_Fork">
<dc:Bounds x="1675" y="320" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="1650" y="374" width="100" height="28" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_DispatchBroadcast" bpmnElement="Task_DispatchBroadcast">
<dc:Bounds x="1805" y="452" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_EscalateSla" bpmnElement="Task_EscalateSla">
<dc:Bounds x="1980" y="902" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_End_SlaEscalated" bpmnElement="End_SlaEscalated">
<dc:Bounds x="2207" y="927" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="2175" y="967" width="100" height="28" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_NotifyAgencies" bpmnElement="Task_NotifyAgencies"> <bpmndi:BPMNShape id="di_Task_NotifyAgencies" bpmnElement="Task_NotifyAgencies">
<dc:Bounds x="1150" y="200" width="150" height="80" /> <dc:Bounds x="1805" y="302" width="140" height="86" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_BR_Interception" bpmnElement="BR_Interception"> <bpmndi:BPMNShape id="di_Task_AuthorizeInterception" bpmnElement="Task_AuthorizeInterception">
<dc:Bounds x="1150" y="330" width="150" height="80" /> <dc:Bounds x="1805" y="602" width="140" height="86" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_CoordBAP" bpmnElement="Task_CoordBAP"> <bpmndi:BPMNShape id="di_GW_Interception" bpmnElement="GW_Interception">
<dc:Bounds x="1360" y="330" width="150" height="80" /> <dc:Bounds x="2025" y="620" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="2000" y="674" width="100" height="28" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_GW_ParallelJoin" bpmnElement="GW_ParallelJoin"> <bpmndi:BPMNShape id="di_Task_GroundEngage" bpmnElement="Task_GroundEngage">
<dc:Bounds x="1565" y="215" width="50" height="50" /> <dc:Bounds x="2155" y="602" width="140" height="86" />
<bpmndi:BPMNLabel><dc:Bounds x="1564" y="272" width="52" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_LocalResponse" bpmnElement="Task_LocalResponse"> <bpmndi:BPMNShape id="di_Task_RequestBAP" bpmnElement="Task_RequestBAP">
<dc:Bounds x="1660" y="200" width="150" height="80" /> <dc:Bounds x="2330" y="602" width="140" height="86" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_AllClear" bpmnElement="Task_AllClear"> <bpmndi:BPMNShape id="di_Task_MaintainTrack" bpmnElement="Task_MaintainTrack">
<dc:Bounds x="1860" y="200" width="150" height="80" /> <dc:Bounds x="2155" y="152" width="140" height="86" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Call_FieldResponse" bpmnElement="Call_FieldResponse"> <bpmndi:BPMNShape id="di_GW_Join" bpmnElement="GW_Join">
<dc:Bounds x="2060" y="200" width="160" height="80" /> <dc:Bounds x="2550" y="320" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="2525" y="374" width="100" height="28" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_End_Closed" bpmnElement="End_Closed"> <bpmndi:BPMNShape id="di_Task_AssessStandDown" bpmnElement="Task_AssessStandDown">
<dc:Bounds x="2272" y="222" width="36" height="36" /> <dc:Bounds x="2680" y="302" width="140" height="86" />
<bpmndi:BPMNLabel><dc:Bounds x="2250" y="262" width="84" height="40" /></bpmndi:BPMNLabel> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_GW_StandDown" bpmnElement="GW_StandDown">
<dc:Bounds x="2900" y="320" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="2875" y="374" width="100" height="28" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_AllClearBroadcast" bpmnElement="Task_AllClearBroadcast">
<dc:Bounds x="3030" y="452" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Task_HandToInvestigation" bpmnElement="Task_HandToInvestigation">
<dc:Bounds x="3205" y="902" width="140" height="86" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_End_Resolved" bpmnElement="End_Resolved">
<dc:Bounds x="3432" y="927" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="3400" y="967" width="100" height="28" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="di_Boundary_SlaBreach" bpmnElement="Boundary_SlaBreach">
<dc:Bounds x="1857" y="520" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="1821" y="558" width="110" height="28" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="di_f1" bpmnElement="f1"> <bpmndi:BPMNEdge id="di_f1" bpmnElement="f1">
<di:waypoint x="188" y="240" /><di:waypoint x="240" y="240" /> <di:waypoint x="300" y="195" />
<di:waypoint x="475" y="195" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f2" bpmnElement="f2"> <bpmndi:BPMNEdge id="di_f2" bpmnElement="f2">
<di:waypoint x="360" y="240" /><di:waypoint x="410" y="240" /> <di:waypoint x="475" y="195" />
<di:waypoint x="650" y="195" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f3" bpmnElement="f3"> <bpmndi:BPMNEdge id="di_f3" bpmnElement="f3">
<di:waypoint x="530" y="240" /><di:waypoint x="585" y="240" /> <di:waypoint x="650" y="195" />
<di:waypoint x="737" y="195" />
<di:waypoint x="737" y="345" />
<di:waypoint x="825" y="345" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f4" bpmnElement="f4"> <bpmndi:BPMNEdge id="di_f4" bpmnElement="f4">
<di:waypoint x="610" y="265" /><di:waypoint x="610" y="362" /> <di:waypoint x="825" y="345" />
<bpmndi:BPMNLabel><dc:Bounds x="615" y="300" width="84" height="27" /></bpmndi:BPMNLabel> <di:waypoint x="1000" y="345" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f5" bpmnElement="f5"> <bpmndi:BPMNEdge id="di_f5" bpmnElement="f5">
<di:waypoint x="635" y="240" /><di:waypoint x="690" y="240" /> <di:waypoint x="1000" y="345" />
<bpmndi:BPMNLabel><dc:Bounds x="636" y="206" width="74" height="27" /></bpmndi:BPMNLabel> <di:waypoint x="1087" y="345" />
<di:waypoint x="1087" y="195" />
<di:waypoint x="1175" y="195" />
<bpmndi:BPMNLabel><dc:Bounds x="1027" y="161" width="120" height="30" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f6" bpmnElement="f6"> <bpmndi:BPMNEdge id="di_f6" bpmnElement="f6">
<di:waypoint x="810" y="240" /><di:waypoint x="860" y="240" /> <di:waypoint x="1175" y="195" />
<di:waypoint x="1350" y="195" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f7" bpmnElement="f7"> <bpmndi:BPMNEdge id="di_f7" bpmnElement="f7">
<di:waypoint x="980" y="240" /><di:waypoint x="1035" y="240" /> <di:waypoint x="1000" y="345" />
<di:waypoint x="1175" y="345" />
<bpmndi:BPMNLabel><dc:Bounds x="1027" y="311" width="120" height="30" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f8" bpmnElement="f8"> <bpmndi:BPMNEdge id="di_f8" bpmnElement="f8">
<di:waypoint x="1060" y="215" /><di:waypoint x="1060" y="120" /><di:waypoint x="1150" y="120" /> <di:waypoint x="1175" y="345" />
<di:waypoint x="1350" y="345" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f9" bpmnElement="f9"> <bpmndi:BPMNEdge id="di_f9" bpmnElement="f9">
<di:waypoint x="1085" y="240" /><di:waypoint x="1150" y="240" /> <di:waypoint x="1350" y="345" />
<di:waypoint x="1525" y="345" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f10" bpmnElement="f10"> <bpmndi:BPMNEdge id="di_f10" bpmnElement="f10">
<di:waypoint x="1060" y="265" /><di:waypoint x="1060" y="370" /><di:waypoint x="1150" y="370" /> <di:waypoint x="1525" y="345" />
<di:waypoint x="1700" y="345" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f11" bpmnElement="f11"> <bpmndi:BPMNEdge id="di_f11" bpmnElement="f11">
<di:waypoint x="1300" y="120" /><di:waypoint x="1590" y="120" /><di:waypoint x="1590" y="215" /> <di:waypoint x="1700" y="345" />
<di:waypoint x="1787" y="345" />
<di:waypoint x="1787" y="495" />
<di:waypoint x="1875" y="495" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f12" bpmnElement="f12"> <bpmndi:BPMNEdge id="di_f12" bpmnElement="f12">
<di:waypoint x="1300" y="240" /><di:waypoint x="1565" y="240" /> <di:waypoint x="1700" y="345" />
<di:waypoint x="1875" y="345" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f13" bpmnElement="f13"> <bpmndi:BPMNEdge id="di_f13" bpmnElement="f13">
<di:waypoint x="1300" y="370" /><di:waypoint x="1360" y="370" /> <di:waypoint x="1700" y="345" />
<di:waypoint x="1787" y="345" />
<di:waypoint x="1787" y="645" />
<di:waypoint x="1875" y="645" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f14" bpmnElement="f14"> <bpmndi:BPMNEdge id="di_f14" bpmnElement="f14">
<di:waypoint x="1510" y="370" /><di:waypoint x="1590" y="370" /><di:waypoint x="1590" y="265" /> <di:waypoint x="1875" y="495" />
<di:waypoint x="2225" y="495" />
<di:waypoint x="2225" y="345" />
<di:waypoint x="2575" y="345" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f15" bpmnElement="f15"> <bpmndi:BPMNEdge id="di_f15" bpmnElement="f15">
<di:waypoint x="1615" y="240" /><di:waypoint x="1660" y="240" /> <di:waypoint x="1875" y="345" />
<di:waypoint x="2575" y="345" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f16" bpmnElement="f16"> <bpmndi:BPMNEdge id="di_f16" bpmnElement="f16">
<di:waypoint x="1810" y="240" /><di:waypoint x="1860" y="240" /> <di:waypoint x="1875" y="645" />
<di:waypoint x="2050" y="645" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f17" bpmnElement="f17"> <bpmndi:BPMNEdge id="di_f17" bpmnElement="f17">
<di:waypoint x="2010" y="240" /><di:waypoint x="2060" y="240" /> <di:waypoint x="2050" y="645" />
<di:waypoint x="2225" y="645" />
<bpmndi:BPMNLabel><dc:Bounds x="2077" y="611" width="120" height="30" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f18" bpmnElement="f18"> <bpmndi:BPMNEdge id="di_f18" bpmnElement="f18">
<di:waypoint x="2220" y="240" /><di:waypoint x="2272" y="240" /> <di:waypoint x="2050" y="645" />
<di:waypoint x="2400" y="645" />
<bpmndi:BPMNLabel><dc:Bounds x="2165" y="611" width="120" height="30" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f19" bpmnElement="f19">
<di:waypoint x="2050" y="645" />
<di:waypoint x="2137" y="645" />
<di:waypoint x="2137" y="195" />
<di:waypoint x="2225" y="195" />
<bpmndi:BPMNLabel><dc:Bounds x="2077" y="161" width="120" height="30" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f20" bpmnElement="f20">
<di:waypoint x="2225" y="645" />
<di:waypoint x="2400" y="645" />
<di:waypoint x="2400" y="345" />
<di:waypoint x="2575" y="345" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f21" bpmnElement="f21">
<di:waypoint x="2400" y="645" />
<di:waypoint x="2487" y="645" />
<di:waypoint x="2487" y="345" />
<di:waypoint x="2575" y="345" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f22" bpmnElement="f22">
<di:waypoint x="2225" y="195" />
<di:waypoint x="2400" y="195" />
<di:waypoint x="2400" y="345" />
<di:waypoint x="2575" y="345" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f23" bpmnElement="f23">
<di:waypoint x="2575" y="345" />
<di:waypoint x="2750" y="345" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f24" bpmnElement="f24">
<di:waypoint x="2750" y="345" />
<di:waypoint x="2925" y="345" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f25" bpmnElement="f25">
<di:waypoint x="2925" y="345" />
<di:waypoint x="2750" y="345" />
<bpmndi:BPMNLabel><dc:Bounds x="2777" y="311" width="120" height="30" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f26" bpmnElement="f26">
<di:waypoint x="2925" y="345" />
<di:waypoint x="3012" y="345" />
<di:waypoint x="3012" y="495" />
<di:waypoint x="3100" y="495" />
<bpmndi:BPMNLabel><dc:Bounds x="2952" y="311" width="120" height="30" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f27" bpmnElement="f27">
<di:waypoint x="3100" y="495" />
<di:waypoint x="3187" y="495" />
<di:waypoint x="3187" y="945" />
<di:waypoint x="3275" y="945" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_f28" bpmnElement="f28">
<di:waypoint x="3275" y="945" />
<di:waypoint x="3450" y="945" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_fb" bpmnElement="fb">
<di:waypoint x="1875" y="538" />
<di:waypoint x="1962" y="538" />
<di:waypoint x="1962" y="945" />
<di:waypoint x="2050" y="945" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_fb2" bpmnElement="fb2">
<di:waypoint x="2050" y="945" />
<di:waypoint x="2225" y="945" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="di_mf_bap" bpmnElement="mf_bap">
<di:waypoint x="2400" y="688" />
<di:waypoint x="2400" y="1060" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
</bpmndi:BPMNPlane> </bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram> </bpmndi:BPMNDiagram>

View File

@@ -1,74 +1,142 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<cmmn:definitions xmlns:cmmn="http://www.omg.org/spec/CMMN/20151109/MODEL" <cmmn:definitions xmlns:cmmn="http://www.omg.org/spec/CMMN/20151109/MODEL"
xmlns:cmmndi="http://www.omg.org/spec/CMMN/20151109/CMMNDI" xmlns:cmmndi="http://www.omg.org/spec/CMMN/20151109/CMMNDI"
xmlns:dc="http://www.omg.org/spec/CMMN/20151109/DC" xmlns:dc="http://www.omg.org/spec/CMMN/20151109/DC"
xmlns:di="http://www.omg.org/spec/CMMN/20151109/DI" xmlns:di="http://www.omg.org/spec/CMMN/20151109/DI"
id="defs_drone_field_response" id="defs_field_response" targetNamespace="http://uapf.dev/lv.civdef.drone-threat-public-address">
targetNamespace="http://uapf.dev/lv.civdef.drone-threat-public-address/cmmn"> <cmmn:case id="Case_FieldResponseInvestigation" name="Field Response &amp; Drone-Origin Investigation">
<cmmn:casePlanModel id="CasePlan_1" name="Field response and investigation">
<cmmn:case id="Case_DroneIncidentFieldResponse" name="Drone Incident Field Response &amp; Origin Investigation"> <cmmn:planItem id="pi_Stage_FieldResponse" definitionRef="Stage_FieldResponse" />
<cmmn:casePlanModel id="cpm_1" name="Field Response &amp; Investigation"> <cmmn:planItem id="pi_Stage_OriginInvestigation" definitionRef="Stage_OriginInvestigation">
<cmmn:entryCriterion id="ec_pi_Stage_OriginInvestigation" sentryRef="sentry_pi_Stage_OriginInvestigation" />
<cmmn:planItem id="pi_DebrisSearch" definitionRef="HT_DebrisSearch" /> </cmmn:planItem>
<cmmn:planItem id="pi_FireSuppression" definitionRef="HT_FireSuppression" /> <cmmn:planItem id="pi_Stage_PublicCommunication" definitionRef="Stage_PublicCommunication" />
<cmmn:planItem id="pi_SceneSecurity" definitionRef="HT_SceneSecurity" /> <cmmn:planItem id="pi_MS_SiteSafe" definitionRef="MS_SiteSafe">
<cmmn:planItem id="pi_Investigation" definitionRef="Stage_Investigation" /> <cmmn:entryCriterion id="ec_pi_MS_SiteSafe" sentryRef="sentry_pi_MS_SiteSafe" />
<cmmn:planItem id="pi_MunicipalQA" definitionRef="HT_MunicipalQA" /> </cmmn:planItem>
<cmmn:sentry id="sentry_pi_Stage_OriginInvestigation">
<cmmn:planningTable id="pt_case"> <cmmn:planItemOnPart id="op_pi_Stage_OriginInvestigation" sourceRef="pi_Stage_FieldResponse">
<cmmn:discretionaryItem id="di_Press" definitionRef="HT_Press" /> <cmmn:standardEvent>complete</cmmn:standardEvent>
<cmmn:discretionaryItem id="di_AfterAction" definitionRef="HT_AfterAction" /> </cmmn:planItemOnPart>
</cmmn:planningTable> </cmmn:sentry>
<cmmn:sentry id="sentry_pi_MS_SiteSafe">
<cmmn:humanTask id="HT_DebrisSearch" name="Localise and search downed-drone crash sites" isBlocking="true" /> <cmmn:planItemOnPart id="op_pi_MS_SiteSafe" sourceRef="pi_Stage_FieldResponse">
<cmmn:humanTask id="HT_FireSuppression" name="Site safety and fire suppression" isBlocking="true" /> <cmmn:standardEvent>complete</cmmn:standardEvent>
<cmmn:humanTask id="HT_SceneSecurity" name="Scene security and access control" isBlocking="true" /> </cmmn:planItemOnPart>
<cmmn:humanTask id="HT_MunicipalQA" name="Handle resident enquiries via municipal commissions" isBlocking="true" /> </cmmn:sentry>
<cmmn:humanTask id="HT_Press" name="Press conference and public information update" isBlocking="true" /> <cmmn:stage id="Stage_FieldResponse" name="Field response">
<cmmn:humanTask id="HT_AfterAction" name="Cross-institutional after-action review and algorithm revision" isBlocking="true" /> <cmmn:planItem id="pi_HT_DebrisLocalisation" definitionRef="HT_DebrisLocalisation" />
<cmmn:planItem id="pi_HT_FireSuppression" definitionRef="HT_FireSuppression" />
<cmmn:stage id="Stage_Investigation" name="Origin attribution &amp; investigation"> <cmmn:planItem id="pi_HT_SceneSecurity" definitionRef="HT_SceneSecurity" />
<cmmn:planItem id="pi_TechExam" definitionRef="HT_TechExam" /> <cmmn:planItem id="pi_HT_CasualtyResponse" definitionRef="HT_CasualtyResponse" />
<cmmn:planItem id="pi_OriginAttribution" definitionRef="HT_OriginAttribution" /> <cmmn:planItem id="pi_HT_MunicipalEnquiries" definitionRef="HT_MunicipalEnquiries" />
<cmmn:planItem id="pi_DisinfoMonitor" definitionRef="HT_DisinfoMonitor" /> <cmmn:humanTask id="HT_DebrisLocalisation" name="Localise crash / debris site" />
<cmmn:humanTask id="HT_TechExam" name="Technical examination of recovered debris" isBlocking="true" /> <cmmn:humanTask id="HT_FireSuppression" name="Fire suppression at impact site" />
<cmmn:humanTask id="HT_OriginAttribution" name="Origin attribution and electronic-warfare diversion analysis" isBlocking="true" /> <cmmn:humanTask id="HT_SceneSecurity" name="Establish scene cordon &amp; security" />
<cmmn:humanTask id="HT_DisinfoMonitor" name="Disinformation monitoring and correction" isBlocking="true" /> <cmmn:humanTask id="HT_CasualtyResponse" name="Casualty assessment &amp; medical response" />
<cmmn:humanTask id="HT_MunicipalEnquiries" name="Handle resident enquiries (112 / municipal)" />
</cmmn:stage> </cmmn:stage>
<cmmn:stage id="Stage_OriginInvestigation" name="Drone-origin investigation">
<cmmn:planItem id="pi_HT_DebrisCollection" definitionRef="HT_DebrisCollection" />
<cmmn:planItem id="pi_HT_TechnicalExam" definitionRef="HT_TechnicalExam" />
<cmmn:planItem id="pi_HT_OriginAttribution" definitionRef="HT_OriginAttribution" />
<cmmn:planItem id="pi_MS_AttributionComplete" definitionRef="MS_AttributionComplete">
<cmmn:entryCriterion id="ec_pi_MS_AttributionComplete" sentryRef="sentry_pi_MS_AttributionComplete" />
</cmmn:planItem>
<cmmn:sentry id="sentry_pi_MS_AttributionComplete">
<cmmn:planItemOnPart id="op_pi_MS_AttributionComplete" sourceRef="pi_HT_OriginAttribution">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:humanTask id="HT_DebrisCollection" name="Collect &amp; catalogue debris" />
<cmmn:humanTask id="HT_TechnicalExam" name="Technical examination of the UAV" />
<cmmn:humanTask id="HT_OriginAttribution" name="Origin attribution analysis" />
<cmmn:milestone id="MS_AttributionComplete" name="Origin attribution complete" />
</cmmn:stage>
<cmmn:stage id="Stage_PublicCommunication" name="Public communication &amp; after-action">
<cmmn:planItem id="pi_HT_DisinfoMonitor" definitionRef="HT_DisinfoMonitor" />
<cmmn:planItem id="pi_HT_PressBriefing" definitionRef="HT_PressBriefing" />
<cmmn:planItem id="pi_HT_AfterAction" definitionRef="HT_AfterAction" />
<cmmn:planItem id="pi_MS_CaseClosed" definitionRef="MS_CaseClosed">
<cmmn:entryCriterion id="ec_pi_MS_CaseClosed" sentryRef="sentry_pi_MS_CaseClosed" />
</cmmn:planItem>
<cmmn:sentry id="sentry_pi_MS_CaseClosed">
<cmmn:planItemOnPart id="op_pi_MS_CaseClosed" sourceRef="pi_HT_AfterAction">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:humanTask id="HT_DisinfoMonitor" name="Monitor &amp; counter disinformation" />
<cmmn:humanTask id="HT_PressBriefing" name="Public press briefing" />
<cmmn:humanTask id="HT_AfterAction" name="Inter-institutional after-action review" />
<cmmn:milestone id="MS_CaseClosed" name="Incident case closed" />
</cmmn:stage>
<cmmn:milestone id="MS_SiteSafe" name="Impact site declared safe" />
</cmmn:casePlanModel> </cmmn:casePlanModel>
</cmmn:case> </cmmn:case>
<cmmndi:CMMNDI> <cmmndi:CMMNDI>
<cmmndi:CMMNDiagram id="cmmndi_1" name="Field Response &amp; Investigation"> <cmmndi:CMMNDiagram id="cmmndiag">
<cmmndi:CMMNShape id="sh_cpm" cmmnElementRef="cpm_1"> <cmmndi:CMMNShape id="di_CasePlan_1" cmmnElementRef="CasePlan_1">
<dc:Bounds x="60" y="40" width="900" height="420" /> <dc:Bounds x="30" y="40" width="1340" height="730" />
</cmmndi:CMMNShape> </cmmndi:CMMNShape>
<cmmndi:CMMNShape id="sh_DebrisSearch" cmmnElementRef="pi_DebrisSearch"> <cmmndi:CMMNShape id="di_Stage_FieldResponse" cmmnElementRef="Stage_FieldResponse">
<dc:Bounds x="100" y="100" width="160" height="80" /> <dc:Bounds x="70" y="110" width="1260" height="190" />
</cmmndi:CMMNShape> </cmmndi:CMMNShape>
<cmmndi:CMMNShape id="sh_FireSuppression" cmmnElementRef="pi_FireSuppression"> <cmmndi:CMMNShape id="di_HT_DebrisLocalisation" cmmnElementRef="HT_DebrisLocalisation">
<dc:Bounds x="300" y="100" width="160" height="80" /> <dc:Bounds x="110" y="180" width="200" height="74" />
</cmmndi:CMMNShape> </cmmndi:CMMNShape>
<cmmndi:CMMNShape id="sh_SceneSecurity" cmmnElementRef="pi_SceneSecurity"> <cmmndi:CMMNShape id="di_HT_FireSuppression" cmmnElementRef="HT_FireSuppression">
<dc:Bounds x="500" y="100" width="160" height="80" /> <dc:Bounds x="346" y="180" width="200" height="74" />
</cmmndi:CMMNShape> </cmmndi:CMMNShape>
<cmmndi:CMMNShape id="sh_MunicipalQA" cmmnElementRef="pi_MunicipalQA"> <cmmndi:CMMNShape id="di_HT_SceneSecurity" cmmnElementRef="HT_SceneSecurity">
<dc:Bounds x="700" y="100" width="180" height="80" /> <dc:Bounds x="582" y="180" width="200" height="74" />
</cmmndi:CMMNShape> </cmmndi:CMMNShape>
<cmmndi:CMMNShape id="sh_Investigation" cmmnElementRef="pi_Investigation"> <cmmndi:CMMNShape id="di_HT_CasualtyResponse" cmmnElementRef="HT_CasualtyResponse">
<dc:Bounds x="100" y="230" width="580" height="200" /> <dc:Bounds x="818" y="180" width="200" height="74" />
</cmmndi:CMMNShape> </cmmndi:CMMNShape>
<cmmndi:CMMNShape id="sh_TechExam" cmmnElementRef="pi_TechExam"> <cmmndi:CMMNShape id="di_HT_MunicipalEnquiries" cmmnElementRef="HT_MunicipalEnquiries">
<dc:Bounds x="130" y="290" width="160" height="80" /> <dc:Bounds x="1054" y="180" width="200" height="74" />
</cmmndi:CMMNShape> </cmmndi:CMMNShape>
<cmmndi:CMMNShape id="sh_OriginAttribution" cmmnElementRef="pi_OriginAttribution"> <cmmndi:CMMNShape id="di_Stage_OriginInvestigation" cmmnElementRef="Stage_OriginInvestigation">
<dc:Bounds x="320" y="290" width="160" height="80" /> <dc:Bounds x="70" y="330" width="1260" height="190" />
</cmmndi:CMMNShape> </cmmndi:CMMNShape>
<cmmndi:CMMNShape id="sh_DisinfoMonitor" cmmnElementRef="pi_DisinfoMonitor"> <cmmndi:CMMNShape id="di_HT_DebrisCollection" cmmnElementRef="HT_DebrisCollection">
<dc:Bounds x="510" y="290" width="150" height="80" /> <dc:Bounds x="110" y="400" width="200" height="74" />
</cmmndi:CMMNShape> </cmmndi:CMMNShape>
<cmmndi:CMMNShape id="di_HT_TechnicalExam" cmmnElementRef="HT_TechnicalExam">
<dc:Bounds x="405" y="400" width="200" height="74" />
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="di_HT_OriginAttribution" cmmnElementRef="HT_OriginAttribution">
<dc:Bounds x="700" y="400" width="200" height="74" />
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="di_MS_AttributionComplete" cmmnElementRef="MS_AttributionComplete">
<dc:Bounds x="995" y="415" width="170" height="44" />
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="di_Stage_PublicCommunication" cmmnElementRef="Stage_PublicCommunication">
<dc:Bounds x="70" y="550" width="1260" height="190" />
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="di_HT_DisinfoMonitor" cmmnElementRef="HT_DisinfoMonitor">
<dc:Bounds x="110" y="620" width="200" height="74" />
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="di_HT_PressBriefing" cmmnElementRef="HT_PressBriefing">
<dc:Bounds x="405" y="620" width="200" height="74" />
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="di_HT_AfterAction" cmmnElementRef="HT_AfterAction">
<dc:Bounds x="700" y="620" width="200" height="74" />
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="di_MS_CaseClosed" cmmnElementRef="MS_CaseClosed">
<dc:Bounds x="995" y="635" width="170" height="44" />
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="di_MS_SiteSafe" cmmnElementRef="MS_SiteSafe">
<dc:Bounds x="1150" y="130" width="170" height="44" />
</cmmndi:CMMNShape>
<cmmndi:CMMNEdge id="edge_pi_MS_AttributionComplete" cmmnElementRef="ec_pi_MS_AttributionComplete">
<di:waypoint x="800" y="437" />
<di:waypoint x="1080" y="437" />
</cmmndi:CMMNEdge>
<cmmndi:CMMNEdge id="edge_pi_MS_CaseClosed" cmmnElementRef="ec_pi_MS_CaseClosed">
<di:waypoint x="800" y="657" />
<di:waypoint x="1080" y="657" />
</cmmndi:CMMNEdge>
</cmmndi:CMMNDiagram> </cmmndi:CMMNDiagram>
</cmmndi:CMMNDI> </cmmndi:CMMNDI>
</cmmn:definitions> </cmmn:definitions>

View File

@@ -3,93 +3,189 @@
xmlns:dmndi="https://www.omg.org/spec/DMN/20191111/DMNDI/" xmlns:dmndi="https://www.omg.org/spec/DMN/20191111/DMNDI/"
xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/" xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/" xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
id="defs_air_threat_decisions" id="defs_air_threat_decisions" name="Air Threat Decisions"
name="Air Threat Decisions"
namespace="http://uapf.dev/lv.civdef.drone-threat-public-address/dmn"> namespace="http://uapf.dev/lv.civdef.drone-threat-public-address/dmn">
<inputData id="In_ObjectType" name="Object type"> <inputData id="In_RadarCrossSection" name="Radar cross-section">
<variable id="v_objectType" name="objectType" typeRef="string" /> <variable id="v_radarCrossSection" name="radarCrossSection" typeRef="string" />
</inputData>
<inputData id="In_EmissionProfile" name="Emission profile">
<variable id="v_emissionProfile" name="emissionProfile" typeRef="string" />
</inputData>
<inputData id="In_VisualConfirmation" name="Visual confirmation">
<variable id="v_visualConfirmation" name="visualConfirmation" typeRef="string" />
</inputData> </inputData>
<inputData id="In_AirspaceStatus" name="Airspace entry status"> <inputData id="In_AirspaceStatus" name="Airspace entry status">
<variable id="v_airspaceStatus" name="airspaceStatus" typeRef="string" /> <variable id="v_airspaceStatus" name="airspaceStatus" typeRef="string" />
</inputData> </inputData>
<inputData id="In_TrajectoryToward" name="Trajectory toward populated area"> <inputData id="In_TrajectoryTowardPop" name="Trajectory toward populated area">
<variable id="v_trajectoryToward" name="trajectoryTowardPopulated" typeRef="boolean" /> <variable id="v_trajectoryTowardPopulated" name="trajectoryTowardPopulated" typeRef="boolean" />
</inputData> </inputData>
<inputData id="In_DistanceKm" name="Distance to nearest populated area (km)"> <inputData id="In_DistanceToPopulatedKm" name="Distance to populated area (km)">
<variable id="v_distanceKm" name="distanceToPopulatedKm" typeRef="number" /> <variable id="v_distanceToPopulatedKm" name="distanceToPopulatedKm" typeRef="number" />
</inputData> </inputData>
<inputData id="In_BorderTier" name="Border-proximity tier"> <inputData id="In_EstimatedMinutesToPop" name="Est. minutes to populated area">
<variable id="v_borderTier" name="borderProximityTier" typeRef="string" /> <variable id="v_estimatedMinutesToPopulated" name="estimatedMinutesToPopulated" typeRef="number" />
</inputData> </inputData>
<inputData id="In_CorridorMunis" name="Predicted corridor municipalities"> <inputData id="In_CorridorMunicipalities" name="Predicted corridor municipalities">
<variable id="v_corridorMunis" name="corridorMunicipalities" typeRef="string" /> <variable id="v_corridorMunicipalities" name="corridorMunicipalities" typeRef="string" />
</inputData>
<inputData id="In_BorderProximityTier" name="Border-proximity tier">
<variable id="v_borderProximityTier" name="borderProximityTier" typeRef="string" />
</inputData> </inputData>
<inputData id="In_PositiveHostileId" name="Positive hostile identification"> <inputData id="In_PositiveHostileId" name="Positive hostile identification">
<variable id="v_posHostileId" name="positiveHostileId" typeRef="boolean" /> <variable id="v_positiveHostileId" name="positiveHostileId" typeRef="boolean" />
</inputData> </inputData>
<inputData id="In_OverPopulated" name="Object currently over populated area"> <inputData id="In_OverPopulatedArea" name="Object over populated area">
<variable id="v_overPopulated" name="overPopulatedArea" typeRef="boolean" /> <variable id="v_overPopulatedArea" name="overPopulatedArea" typeRef="boolean" />
</inputData> </inputData>
<inputData id="In_DebrisClear" name="Debris fall-zone clear"> <inputData id="In_DebrisZoneClear" name="Debris fall-zone clear">
<variable id="v_debrisClear" name="debrisZoneClear" typeRef="boolean" /> <variable id="v_debrisZoneClear" name="debrisZoneClear" typeRef="boolean" />
</inputData> </inputData>
<inputData id="In_FiringReady" name="Ground firing position ready"> <inputData id="In_GroundFiringReady" name="Ground firing position ready">
<variable id="v_firingReady" name="firingPositionReady" typeRef="boolean" /> <variable id="v_groundFiringReady" name="groundFiringReady" typeRef="boolean" />
</inputData> </inputData>
<inputData id="In_BapOnStation" name="NATO BAP on station"> <inputData id="In_BapOnStation" name="NATO BAP on station">
<variable id="v_bapOnStation" name="bapOnStation" typeRef="boolean" /> <variable id="v_bapOnStation" name="bapOnStation" typeRef="boolean" />
</inputData> </inputData>
<inputData id="In_ObjectNeutralized" name="Object neutralized / landed">
<variable id="v_objectNeutralized" name="objectNeutralized" typeRef="boolean" />
</inputData>
<inputData id="In_ActiveTracksRemain" name="Active tracks remain">
<variable id="v_activeTracksRemain" name="activeTracksRemain" typeRef="boolean" />
</inputData>
<decision id="Decision_AirThreatSeverity" name="Air threat severity"> <decision id="Decision_ObjectClassification" name="Object classification &amp; confidence">
<variable id="v_threatLevel" name="threatLevel" typeRef="string" /> <description>Classifies the detected airborne object and assigns a confidence level by fusing radar cross-section, emission profile and visual confirmation. Determines whether the object is treated as a potential civil-defence threat at all.</description>
<informationRequirement id="ir_d1_1"><requiredInput href="#In_ObjectType" /></informationRequirement> <variable id="v_objectClass" name="objectClass" typeRef="string" />
<informationRequirement id="ir_d1_2"><requiredInput href="#In_AirspaceStatus" /></informationRequirement> <informationRequirement id="ir_Decision_ObjectClassification_0"><requiredInput href="#In_RadarCrossSection" /></informationRequirement>
<informationRequirement id="ir_d1_3"><requiredInput href="#In_TrajectoryToward" /></informationRequirement> <informationRequirement id="ir_Decision_ObjectClassification_1"><requiredInput href="#In_EmissionProfile" /></informationRequirement>
<informationRequirement id="ir_d1_4"><requiredInput href="#In_DistanceKm" /></informationRequirement> <informationRequirement id="ir_Decision_ObjectClassification_2"><requiredInput href="#In_VisualConfirmation" /></informationRequirement>
<decisionTable id="dt_d1" hitPolicy="FIRST"> <decisionTable id="dt_Decision_ObjectClassification" hitPolicy="FIRST">
<input id="d1_i1" label="Object type"> <input id="Decision_ObjectClassification_i0" label="Radar cross-section">
<inputExpression typeRef="string"><text>objectType</text></inputExpression> <inputExpression id="Decision_ObjectClassification_ie0" typeRef="string"><text>radarCrossSection</text></inputExpression>
</input> </input>
<input id="d1_i2" label="Airspace status"> <input id="Decision_ObjectClassification_i1" label="Emission profile">
<inputExpression typeRef="string"><text>airspaceStatus</text></inputExpression> <inputExpression id="Decision_ObjectClassification_ie1" typeRef="string"><text>emissionProfile</text></inputExpression>
</input> </input>
<input id="d1_i3" label="Toward populated area"> <input id="Decision_ObjectClassification_i2" label="Visual confirmation">
<inputExpression typeRef="boolean"><text>trajectoryTowardPopulated</text></inputExpression> <inputExpression id="Decision_ObjectClassification_ie2" typeRef="string"><text>visualConfirmation</text></inputExpression>
</input> </input>
<input id="d1_i4" label="Distance km"> <output id="Decision_ObjectClassification_o0" label="Object class" name="objectClass" typeRef="string" />
<inputExpression typeRef="number"><text>distanceToPopulatedKm</text></inputExpression> <output id="Decision_ObjectClassification_o1" label="Classification confidence" name="classificationConfidence" typeRef="string" />
</input> <rule id="Decision_ObjectClassification_r0">
<output id="d1_o1" label="Threat level" name="threatLevel" typeRef="string" /> <description>Positive visual plus a military or EW emission signature: treat as a likely-hostile drone.</description>
<rule id="d1_r1"> <inputEntry><text>-</text></inputEntry>
<inputEntry><text>"unknown","drone"</text></inputEntry> <inputEntry><text>"ew-jamming","military-radar"</text></inputEntry>
<inputEntry><text>"crossed","inside"</text></inputEntry> <inputEntry><text>"positive"</text></inputEntry>
<inputEntry><text>true</text></inputEntry> <outputEntry><text>"drone-hostile-likely"</text></outputEntry>
<inputEntry><text>&lt;= 15</text></inputEntry>
<outputEntry><text>"high"</text></outputEntry> <outputEntry><text>"high"</text></outputEntry>
</rule> </rule>
<rule id="d1_r2"> <rule id="Decision_ObjectClassification_r1">
<inputEntry><text>"unknown","drone"</text></inputEntry> <description>Small radar return carrying a comms or EW emission is characteristic of a controlled UAV.</description>
<inputEntry><text>"micro","small"</text></inputEntry>
<inputEntry><text>"comms","ew-jamming"</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<outputEntry><text>"drone"</text></outputEntry>
<outputEntry><text>"high"</text></outputEntry>
</rule>
<rule id="Decision_ObjectClassification_r2">
<description>Small, slow, emission-silent and visually unconfirmed: treat as a suspected drone pending confirmation.</description>
<inputEntry><text>"micro","small"</text></inputEntry>
<inputEntry><text>"none"</text></inputEntry>
<inputEntry><text>"none","partial"</text></inputEntry>
<outputEntry><text>"drone-suspected"</text></outputEntry>
<outputEntry><text>"medium"</text></outputEntry>
</rule>
<rule id="Decision_ObjectClassification_r3">
<description>Medium/large return with a military-radar emission is an identified military aircraft.</description>
<inputEntry><text>"medium","large"</text></inputEntry>
<inputEntry><text>"military-radar"</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<outputEntry><text>"military-aircraft"</text></outputEntry>
<outputEntry><text>"high"</text></outputEntry>
</rule>
<rule id="Decision_ObjectClassification_r4">
<description>Micro return with no emission and no visual is most likely a bird or radar clutter.</description>
<inputEntry><text>"micro"</text></inputEntry>
<inputEntry><text>"none"</text></inputEntry>
<inputEntry><text>"none"</text></inputEntry>
<outputEntry><text>"bird-or-clutter"</text></outputEntry>
<outputEntry><text>"low"</text></outputEntry>
</rule>
<rule id="Decision_ObjectClassification_r5">
<description>Fallback: object cannot be classified with available data.</description>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<outputEntry><text>"unknown"</text></outputEntry>
<outputEntry><text>"low"</text></outputEntry>
</rule>
</decisionTable>
</decision>
<decision id="Decision_AirThreatSeverity" name="Air-threat severity">
<description>Determines the civil-defence threat level from the classified object, its airspace behaviour and its proximity to people. This is the pivot decision the rest of the model depends on.</description>
<variable id="v_threatLevel" name="threatLevel" typeRef="string" />
<informationRequirement id="ir_Decision_AirThreatSeverity_0"><requiredDecision href="#Decision_ObjectClassification" /></informationRequirement>
<informationRequirement id="ir_Decision_AirThreatSeverity_1"><requiredInput href="#In_AirspaceStatus" /></informationRequirement>
<informationRequirement id="ir_Decision_AirThreatSeverity_2"><requiredInput href="#In_TrajectoryTowardPop" /></informationRequirement>
<informationRequirement id="ir_Decision_AirThreatSeverity_3"><requiredInput href="#In_DistanceToPopulatedKm" /></informationRequirement>
<decisionTable id="dt_Decision_AirThreatSeverity" hitPolicy="FIRST">
<input id="Decision_AirThreatSeverity_i0" label="Object class">
<inputExpression id="Decision_AirThreatSeverity_ie0" typeRef="string"><text>objectClass</text></inputExpression>
</input>
<input id="Decision_AirThreatSeverity_i1" label="Airspace status">
<inputExpression id="Decision_AirThreatSeverity_ie1" typeRef="string"><text>airspaceStatus</text></inputExpression>
</input>
<input id="Decision_AirThreatSeverity_i2" label="Toward populated area">
<inputExpression id="Decision_AirThreatSeverity_ie2" typeRef="boolean"><text>trajectoryTowardPopulated</text></inputExpression>
</input>
<input id="Decision_AirThreatSeverity_i3" label="Distance to populated (km)">
<inputExpression id="Decision_AirThreatSeverity_ie3" typeRef="number"><text>distanceToPopulatedKm</text></inputExpression>
</input>
<output id="Decision_AirThreatSeverity_o0" label="Threat level" name="threatLevel" typeRef="string" />
<rule id="Decision_AirThreatSeverity_r0">
<description>Drone confirmed inside national airspace, closing on people within 10 km: critical.</description>
<inputEntry><text>"drone","drone-hostile-likely"</text></inputEntry>
<inputEntry><text>"inside"</text></inputEntry>
<inputEntry><text>true</text></inputEntry>
<inputEntry><text>&lt;= 10</text></inputEntry>
<outputEntry><text>"critical"</text></outputEntry>
</rule>
<rule id="Decision_AirThreatSeverity_r1">
<description>Drone inside or having crossed the border, on a trajectory toward people within 25 km: high.</description>
<inputEntry><text>"drone","drone-hostile-likely"</text></inputEntry>
<inputEntry><text>"crossed","inside"</text></inputEntry> <inputEntry><text>"crossed","inside"</text></inputEntry>
<inputEntry><text>true</text></inputEntry> <inputEntry><text>true</text></inputEntry>
<inputEntry><text>&gt; 15</text></inputEntry> <inputEntry><text>&lt;= 25</text></inputEntry>
<outputEntry><text>"elevated"</text></outputEntry> <outputEntry><text>"high"</text></outputEntry>
</rule> </rule>
<rule id="d1_r3"> <rule id="Decision_AirThreatSeverity_r2">
<inputEntry><text>"unknown","drone"</text></inputEntry> <description>Drone present in airspace but not tracking toward a populated area: elevated.</description>
<inputEntry><text>"drone","drone-suspected","drone-hostile-likely"</text></inputEntry>
<inputEntry><text>"crossed","inside"</text></inputEntry> <inputEntry><text>"crossed","inside"</text></inputEntry>
<inputEntry><text>false</text></inputEntry> <inputEntry><text>false</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<outputEntry><text>"elevated"</text></outputEntry> <outputEntry><text>"elevated"</text></outputEntry>
</rule> </rule>
<rule id="d1_r4"> <rule id="Decision_AirThreatSeverity_r3">
<inputEntry><text>"unknown","drone"</text></inputEntry> <description>Drone still approaching the border: low — monitor, no public alert yet.</description>
<inputEntry><text>"drone","drone-suspected"</text></inputEntry>
<inputEntry><text>"approaching"</text></inputEntry> <inputEntry><text>"approaching"</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<outputEntry><text>"low"</text></outputEntry> <outputEntry><text>"low"</text></outputEntry>
</rule> </rule>
<rule id="d1_r5"> <rule id="Decision_AirThreatSeverity_r4">
<description>Identified military aircraft is handled through air-policing channels, not civil-defence broadcast.</description>
<inputEntry><text>"military-aircraft"</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<outputEntry><text>"low"</text></outputEntry>
</rule>
<rule id="Decision_AirThreatSeverity_r5">
<description>Fallback: no civil-defence air threat.</description>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
@@ -98,81 +194,166 @@
</rule> </rule>
</decisionTable> </decisionTable>
</decision> </decision>
<decision id="Decision_NotificationUrgency" name="Notification urgency &amp; SLA">
<decision id="Decision_CellBroadcastScope" name="Cell-broadcast scope"> <description>Sets how fast a public cell-broadcast must be dispatched. The broadcastSlaSeconds output is the contractual deadline whose 40-minute breach in the 7 May 2026 Rezekne incident this whole package exists to prevent.</description>
<variable id="v_broadcastScope" name="broadcastScope" typeRef="string" /> <variable id="v_notificationTier" name="notificationTier" typeRef="string" />
<informationRequirement id="ir_d2_1"><requiredDecision href="#Decision_AirThreatSeverity" /></informationRequirement> <informationRequirement id="ir_Decision_NotificationUrgency_0"><requiredDecision href="#Decision_AirThreatSeverity" /></informationRequirement>
<informationRequirement id="ir_d2_2"><requiredInput href="#In_BorderTier" /></informationRequirement> <informationRequirement id="ir_Decision_NotificationUrgency_1"><requiredInput href="#In_EstimatedMinutesToPop" /></informationRequirement>
<informationRequirement id="ir_d2_3"><requiredInput href="#In_CorridorMunis" /></informationRequirement> <decisionTable id="dt_Decision_NotificationUrgency" hitPolicy="FIRST">
<decisionTable id="dt_d2" hitPolicy="FIRST"> <input id="Decision_NotificationUrgency_i0" label="Threat level">
<input id="d2_i1" label="Threat level"> <inputExpression id="Decision_NotificationUrgency_ie0" typeRef="string"><text>threatLevel</text></inputExpression>
<inputExpression typeRef="string"><text>threatLevel</text></inputExpression>
</input> </input>
<input id="d2_i2" label="Border-proximity tier"> <input id="Decision_NotificationUrgency_i1" label="Est. minutes to populated area">
<inputExpression typeRef="string"><text>borderProximityTier</text></inputExpression> <inputExpression id="Decision_NotificationUrgency_ie1" typeRef="number"><text>estimatedMinutesToPopulated</text></inputExpression>
</input> </input>
<output id="d2_o1" label="Alert municipalities" name="alertMunicipalities" typeRef="string" /> <output id="Decision_NotificationUrgency_o0" label="Notification tier" name="notificationTier" typeRef="string" />
<output id="d2_o2" label="Message template" name="messageTemplate" typeRef="string" /> <output id="Decision_NotificationUrgency_o1" label="Broadcast SLA (seconds)" name="broadcastSlaSeconds" typeRef="number" />
<rule id="d2_r1"> <rule id="Decision_NotificationUrgency_r0">
<inputEntry><text>"high"</text></inputEntry> <description>Critical threat: public broadcast must leave within 2 minutes.</description>
<inputEntry><text>"critical"</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<outputEntry><text>"corridorMunicipalities + all tier-1 border municipalities"</text></outputEntry> <outputEntry><text>"immediate"</text></outputEntry>
<outputEntry><text>"MSG_DRONE_IMMINENT"</text></outputEntry> <outputEntry><text>120</text></outputEntry>
</rule> </rule>
<rule id="d2_r2"> <rule id="Decision_NotificationUrgency_r1">
<description>High threat with people reachable within 15 minutes: broadcast within 3 minutes.</description>
<inputEntry><text>"high"</text></inputEntry>
<inputEntry><text>&lt;= 15</text></inputEntry>
<outputEntry><text>"immediate"</text></outputEntry>
<outputEntry><text>180</text></outputEntry>
</rule>
<rule id="Decision_NotificationUrgency_r2">
<description>High threat with more lead time: broadcast within 5 minutes.</description>
<inputEntry><text>"high"</text></inputEntry>
<inputEntry><text>&gt; 15</text></inputEntry>
<outputEntry><text>"priority"</text></outputEntry>
<outputEntry><text>300</text></outputEntry>
</rule>
<rule id="Decision_NotificationUrgency_r3">
<description>Elevated threat: broadcast within 10 minutes.</description>
<inputEntry><text>"elevated"</text></inputEntry> <inputEntry><text>"elevated"</text></inputEntry>
<inputEntry><text>"tier1","tier2"</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<outputEntry><text>"corridorMunicipalities"</text></outputEntry> <outputEntry><text>"priority"</text></outputEntry>
<outputEntry><text>"MSG_DRONE_POSSIBLE"</text></outputEntry> <outputEntry><text>600</text></outputEntry>
</rule> </rule>
<rule id="d2_r3"> <rule id="Decision_NotificationUrgency_r4">
<inputEntry><text>"elevated"</text></inputEntry> <description>Low threat: standard 30-minute advisory window.</description>
<inputEntry><text>"tier3"</text></inputEntry>
<outputEntry><text>"corridorMunicipalities"</text></outputEntry>
<outputEntry><text>"MSG_AIRSPACE_MONITORING"</text></outputEntry>
</rule>
<rule id="d2_r4">
<inputEntry><text>"low"</text></inputEntry> <inputEntry><text>"low"</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<outputEntry><text>"none - municipal commissions informed only"</text></outputEntry> <outputEntry><text>"standard"</text></outputEntry>
<outputEntry><text>"MSG_NONE"</text></outputEntry> <outputEntry><text>1800</text></outputEntry>
</rule> </rule>
<rule id="d2_r5"> <rule id="Decision_NotificationUrgency_r5">
<inputEntry><text>"none"</text></inputEntry> <description>No threat: no public broadcast.</description>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<outputEntry><text>"none"</text></outputEntry> <outputEntry><text>"none"</text></outputEntry>
<outputEntry><text>"MSG_NONE"</text></outputEntry> <outputEntry><text>0</text></outputEntry>
</rule>
</decisionTable>
</decision>
<decision id="Decision_CellBroadcastScope" name="Cell-broadcast scope &amp; message">
<description>Selects which municipalities receive the public alert, which message template is used, and the repeat interval. The alert footprint is built explicitly from the predicted corridor so it matches the threat's path rather than a fixed region.</description>
<variable id="v_alertMunicipalities" name="alertMunicipalities" typeRef="string" />
<informationRequirement id="ir_Decision_CellBroadcastScope_0"><requiredDecision href="#Decision_AirThreatSeverity" /></informationRequirement>
<informationRequirement id="ir_Decision_CellBroadcastScope_1"><requiredInput href="#In_CorridorMunicipalities" /></informationRequirement>
<informationRequirement id="ir_Decision_CellBroadcastScope_2"><requiredInput href="#In_BorderProximityTier" /></informationRequirement>
<decisionTable id="dt_Decision_CellBroadcastScope" hitPolicy="FIRST">
<input id="Decision_CellBroadcastScope_i0" label="Threat level">
<inputExpression id="Decision_CellBroadcastScope_ie0" typeRef="string"><text>threatLevel</text></inputExpression>
</input>
<input id="Decision_CellBroadcastScope_i1" label="Border-proximity tier">
<inputExpression id="Decision_CellBroadcastScope_ie1" typeRef="string"><text>borderProximityTier</text></inputExpression>
</input>
<output id="Decision_CellBroadcastScope_o0" label="Alert municipalities" name="alertMunicipalities" typeRef="string" />
<output id="Decision_CellBroadcastScope_o1" label="Message template" name="messageTemplate" typeRef="string" />
<output id="Decision_CellBroadcastScope_o2" label="Repeat interval (seconds)" name="repeatIntervalSeconds" typeRef="number" />
<rule id="Decision_CellBroadcastScope_r0">
<description>Critical: alert the predicted corridor plus every tier-1 border municipality; repeat every 2 min.</description>
<inputEntry><text>"critical"</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<outputEntry><text>corridorMunicipalities + ",ALL_TIER1_BORDER"</text></outputEntry>
<outputEntry><text>"MSG_DRONE_IMMINENT"</text></outputEntry>
<outputEntry><text>120</text></outputEntry>
</rule>
<rule id="Decision_CellBroadcastScope_r1">
<description>High: alert the predicted corridor; repeat every 3 min.</description>
<inputEntry><text>"high"</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<outputEntry><text>corridorMunicipalities</text></outputEntry>
<outputEntry><text>"MSG_DRONE_IMMINENT"</text></outputEntry>
<outputEntry><text>180</text></outputEntry>
</rule>
<rule id="Decision_CellBroadcastScope_r2">
<description>Elevated near the border (tier 1-2): possible-drone advisory to the corridor.</description>
<inputEntry><text>"elevated"</text></inputEntry>
<inputEntry><text>"tier1","tier2"</text></inputEntry>
<outputEntry><text>corridorMunicipalities</text></outputEntry>
<outputEntry><text>"MSG_DRONE_POSSIBLE"</text></outputEntry>
<outputEntry><text>300</text></outputEntry>
</rule>
<rule id="Decision_CellBroadcastScope_r3">
<description>Elevated further inland (tier 3): lighter monitoring advisory to the corridor.</description>
<inputEntry><text>"elevated"</text></inputEntry>
<inputEntry><text>"tier3"</text></inputEntry>
<outputEntry><text>corridorMunicipalities</text></outputEntry>
<outputEntry><text>"MSG_AIRSPACE_MONITORING"</text></outputEntry>
<outputEntry><text>600</text></outputEntry>
</rule>
<rule id="Decision_CellBroadcastScope_r4">
<description>Low or no threat: no public broadcast; municipal commissions informed through other channels.</description>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<outputEntry><text>"none"</text></outputEntry>
<outputEntry><text>"MSG_NONE"</text></outputEntry>
<outputEntry><text>0</text></outputEntry>
</rule> </rule>
</decisionTable> </decisionTable>
</decision> </decision>
<decision id="Decision_InterceptionAuthorization" name="Interception authorization"> <decision id="Decision_InterceptionAuthorization" name="Interception authorization">
<variable id="v_interception" name="interception" typeRef="string" /> <description>Authorises or withholds kinetic interception. Engagement is gated first on positive hostile identification and then on civilian and debris safety: absence of a positive hostile ID always yields hold, regardless of threat level.</description>
<informationRequirement id="ir_d3_1"><requiredDecision href="#Decision_AirThreatSeverity" /></informationRequirement> <variable id="v_interceptionDecision" name="interceptionDecision" typeRef="string" />
<informationRequirement id="ir_d3_2"><requiredInput href="#In_PositiveHostileId" /></informationRequirement> <informationRequirement id="ir_Decision_InterceptionAuthorization_0"><requiredDecision href="#Decision_AirThreatSeverity" /></informationRequirement>
<informationRequirement id="ir_d3_3"><requiredInput href="#In_OverPopulated" /></informationRequirement> <informationRequirement id="ir_Decision_InterceptionAuthorization_1"><requiredInput href="#In_PositiveHostileId" /></informationRequirement>
<informationRequirement id="ir_d3_4"><requiredInput href="#In_DebrisClear" /></informationRequirement> <informationRequirement id="ir_Decision_InterceptionAuthorization_2"><requiredInput href="#In_OverPopulatedArea" /></informationRequirement>
<informationRequirement id="ir_d3_5"><requiredInput href="#In_FiringReady" /></informationRequirement> <informationRequirement id="ir_Decision_InterceptionAuthorization_3"><requiredInput href="#In_DebrisZoneClear" /></informationRequirement>
<informationRequirement id="ir_d3_6"><requiredInput href="#In_BapOnStation" /></informationRequirement> <informationRequirement id="ir_Decision_InterceptionAuthorization_4"><requiredInput href="#In_GroundFiringReady" /></informationRequirement>
<decisionTable id="dt_d3" hitPolicy="FIRST"> <informationRequirement id="ir_Decision_InterceptionAuthorization_5"><requiredInput href="#In_BapOnStation" /></informationRequirement>
<input id="d3_i1" label="Threat level"> <decisionTable id="dt_Decision_InterceptionAuthorization" hitPolicy="FIRST">
<inputExpression typeRef="string"><text>threatLevel</text></inputExpression> <input id="Decision_InterceptionAuthorization_i0" label="Threat level">
<inputExpression id="Decision_InterceptionAuthorization_ie0" typeRef="string"><text>threatLevel</text></inputExpression>
</input> </input>
<input id="d3_i2" label="Over populated area"> <input id="Decision_InterceptionAuthorization_i1" label="Positive hostile ID">
<inputExpression typeRef="boolean"><text>overPopulatedArea</text></inputExpression> <inputExpression id="Decision_InterceptionAuthorization_ie1" typeRef="boolean"><text>positiveHostileId</text></inputExpression>
</input> </input>
<input id="d3_i3" label="Debris zone clear"> <input id="Decision_InterceptionAuthorization_i2" label="Over populated area">
<inputExpression typeRef="boolean"><text>debrisZoneClear</text></inputExpression> <inputExpression id="Decision_InterceptionAuthorization_ie2" typeRef="boolean"><text>overPopulatedArea</text></inputExpression>
</input> </input>
<input id="d3_i4" label="Firing position ready"> <input id="Decision_InterceptionAuthorization_i3" label="Debris zone clear">
<inputExpression typeRef="boolean"><text>firingPositionReady</text></inputExpression> <inputExpression id="Decision_InterceptionAuthorization_ie3" typeRef="boolean"><text>debrisZoneClear</text></inputExpression>
</input> </input>
<input id="d3_i5" label="BAP on station"> <input id="Decision_InterceptionAuthorization_i4" label="Ground firing ready">
<inputExpression typeRef="boolean"><text>bapOnStation</text></inputExpression> <inputExpression id="Decision_InterceptionAuthorization_ie4" typeRef="boolean"><text>groundFiringReady</text></inputExpression>
</input> </input>
<output id="d3_o1" label="Interception decision" name="interceptionDecision" typeRef="string" /> <input id="Decision_InterceptionAuthorization_i5" label="BAP on station">
<output id="d3_o2" label="Rationale code" name="rationaleCode" typeRef="string" /> <inputExpression id="Decision_InterceptionAuthorization_ie5" typeRef="boolean"><text>bapOnStation</text></inputExpression>
<rule id="d3_r1"> </input>
<output id="Decision_InterceptionAuthorization_o0" label="Interception decision" name="interceptionDecision" typeRef="string" />
<output id="Decision_InterceptionAuthorization_o1" label="Rationale code" name="rationaleCode" typeRef="string" />
<rule id="Decision_InterceptionAuthorization_r0">
<description>No positive hostile identification: engagement is never authorised.</description>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>false</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<outputEntry><text>"hold"</text></outputEntry>
<outputEntry><text>"R_NO_HOSTILE_ID"</text></outputEntry>
</rule>
<rule id="Decision_InterceptionAuthorization_r1">
<description>Object over a populated area: kinetic engagement withheld to avoid civilian casualties.</description>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<inputEntry><text>true</text></inputEntry> <inputEntry><text>true</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
@@ -181,34 +362,42 @@
<outputEntry><text>"hold"</text></outputEntry> <outputEntry><text>"hold"</text></outputEntry>
<outputEntry><text>"R_CIVILIAN_RISK"</text></outputEntry> <outputEntry><text>"R_CIVILIAN_RISK"</text></outputEntry>
</rule> </rule>
<rule id="d3_r2"> <rule id="Decision_InterceptionAuthorization_r2">
<description>Debris fall-zone not confirmed clear: engagement withheld.</description>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<inputEntry><text>false</text></inputEntry>
<inputEntry><text>false</text></inputEntry> <inputEntry><text>false</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<outputEntry><text>"hold"</text></outputEntry> <outputEntry><text>"hold"</text></outputEntry>
<outputEntry><text>"R_DEBRIS_RISK"</text></outputEntry> <outputEntry><text>"R_DEBRIS_RISK"</text></outputEntry>
</rule> </rule>
<rule id="d3_r3"> <rule id="Decision_InterceptionAuthorization_r3">
<inputEntry><text>"high","elevated"</text></inputEntry> <description>High/critical threat, hostile-confirmed, safe, ground firing position ready: engage from the ground.</description>
<inputEntry><text>"high","critical"</text></inputEntry>
<inputEntry><text>true</text></inputEntry>
<inputEntry><text>false</text></inputEntry> <inputEntry><text>false</text></inputEntry>
<inputEntry><text>true</text></inputEntry> <inputEntry><text>true</text></inputEntry>
<inputEntry><text>true</text></inputEntry> <inputEntry><text>true</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<outputEntry><text>"engage"</text></outputEntry> <outputEntry><text>"engage-ground"</text></outputEntry>
<outputEntry><text>"R_GROUND_PGA"</text></outputEntry> <outputEntry><text>"R_GROUND_PGA"</text></outputEntry>
</rule> </rule>
<rule id="d3_r4"> <rule id="Decision_InterceptionAuthorization_r4">
<inputEntry><text>"high","elevated"</text></inputEntry> <description>High/critical threat, hostile-confirmed, safe, no ground option but BAP on station: hand to NATO BAP.</description>
<inputEntry><text>"high","critical"</text></inputEntry>
<inputEntry><text>true</text></inputEntry>
<inputEntry><text>false</text></inputEntry> <inputEntry><text>false</text></inputEntry>
<inputEntry><text>true</text></inputEntry> <inputEntry><text>true</text></inputEntry>
<inputEntry><text>false</text></inputEntry> <inputEntry><text>false</text></inputEntry>
<inputEntry><text>true</text></inputEntry> <inputEntry><text>true</text></inputEntry>
<outputEntry><text>"engage"</text></outputEntry> <outputEntry><text>"engage-bap"</text></outputEntry>
<outputEntry><text>"R_BAP_AIR"</text></outputEntry> <outputEntry><text>"R_BAP_AIR"</text></outputEntry>
</rule> </rule>
<rule id="d3_r5"> <rule id="Decision_InterceptionAuthorization_r5">
<description>Fallback: interception criteria not met.</description>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry> <inputEntry><text>-</text></inputEntry>
@@ -219,61 +408,192 @@
</rule> </rule>
</decisionTable> </decisionTable>
</decision> </decision>
<decision id="Decision_StandDownCriteria" name="Stand-down &amp; all-clear">
<description>Determines when the public alert can be lifted and an all-clear cell-broadcast issued. Requires the object to be resolved and no further tracks in the area.</description>
<variable id="v_standDownDecision" name="standDownDecision" typeRef="string" />
<informationRequirement id="ir_Decision_StandDownCriteria_0"><requiredInput href="#In_ObjectNeutralized" /></informationRequirement>
<informationRequirement id="ir_Decision_StandDownCriteria_1"><requiredInput href="#In_ActiveTracksRemain" /></informationRequirement>
<decisionTable id="dt_Decision_StandDownCriteria" hitPolicy="FIRST">
<input id="Decision_StandDownCriteria_i0" label="Object neutralized / landed">
<inputExpression id="Decision_StandDownCriteria_ie0" typeRef="boolean"><text>objectNeutralized</text></inputExpression>
</input>
<input id="Decision_StandDownCriteria_i1" label="Active tracks remain">
<inputExpression id="Decision_StandDownCriteria_ie1" typeRef="boolean"><text>activeTracksRemain</text></inputExpression>
</input>
<output id="Decision_StandDownCriteria_o0" label="Stand-down decision" name="standDownDecision" typeRef="string" />
<output id="Decision_StandDownCriteria_o1" label="All-clear message" name="allClearMessage" typeRef="string" />
<rule id="Decision_StandDownCriteria_r0">
<description>Object resolved and no further tracks: issue the all-clear.</description>
<inputEntry><text>true</text></inputEntry>
<inputEntry><text>false</text></inputEntry>
<outputEntry><text>"all-clear"</text></outputEntry>
<outputEntry><text>"MSG_ALL_CLEAR"</text></outputEntry>
</rule>
<rule id="Decision_StandDownCriteria_r1">
<description>Tracks still active in the area: maintain the public alert.</description>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>true</text></inputEntry>
<outputEntry><text>"maintain-alert"</text></outputEntry>
<outputEntry><text>"MSG_NONE"</text></outputEntry>
</rule>
<rule id="Decision_StandDownCriteria_r2">
<description>Object not yet resolved: maintain the public alert.</description>
<inputEntry><text>-</text></inputEntry>
<inputEntry><text>-</text></inputEntry>
<outputEntry><text>"maintain-alert"</text></outputEntry>
<outputEntry><text>"MSG_NONE"</text></outputEntry>
</rule>
</decisionTable>
</decision>
<dmndi:DMNDI> <dmndi:DMNDI>
<dmndi:DMNDiagram id="drd_1"> <dmndi:DMNDiagram id="drd_air_threat">
<dmndi:DMNShape id="s_d1" dmnElementRef="Decision_AirThreatSeverity"> <dmndi:DMNShape id="s_Decision_ObjectClassification" dmnElementRef="Decision_ObjectClassification">
<dc:Bounds x="360" y="80" width="180" height="80" /> <dc:Bounds x="120" y="250" width="200" height="90" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_d2" dmnElementRef="Decision_CellBroadcastScope"> <dmndi:DMNShape id="s_Decision_AirThreatSeverity" dmnElementRef="Decision_AirThreatSeverity">
<dc:Bounds x="180" y="240" width="180" height="80" /> <dc:Bounds x="470" y="250" width="200" height="90" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_d3" dmnElementRef="Decision_InterceptionAuthorization"> <dmndi:DMNShape id="s_Decision_NotificationUrgency" dmnElementRef="Decision_NotificationUrgency">
<dc:Bounds x="540" y="240" width="180" height="80" /> <dc:Bounds x="820" y="120" width="200" height="90" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_objtype" dmnElementRef="In_ObjectType"> <dmndi:DMNShape id="s_Decision_CellBroadcastScope" dmnElementRef="Decision_CellBroadcastScope">
<dc:Bounds x="120" y="-40" width="140" height="50" /> <dc:Bounds x="1170" y="120" width="200" height="90" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_airspace" dmnElementRef="In_AirspaceStatus"> <dmndi:DMNShape id="s_Decision_InterceptionAuthorization" dmnElementRef="Decision_InterceptionAuthorization">
<dc:Bounds x="290" y="-40" width="140" height="50" /> <dc:Bounds x="820" y="440" width="200" height="90" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_traj" dmnElementRef="In_TrajectoryToward"> <dmndi:DMNShape id="s_Decision_StandDownCriteria" dmnElementRef="Decision_StandDownCriteria">
<dc:Bounds x="460" y="-40" width="140" height="50" /> <dc:Bounds x="1170" y="440" width="200" height="90" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_dist" dmnElementRef="In_DistanceKm"> <dmndi:DMNShape id="s_In_RadarCrossSection" dmnElementRef="In_RadarCrossSection">
<dc:Bounds x="630" y="-40" width="140" height="50" /> <dc:Bounds x="40" y="40" width="150" height="55" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_tier" dmnElementRef="In_BorderTier"> <dmndi:DMNShape id="s_In_EmissionProfile" dmnElementRef="In_EmissionProfile">
<dc:Bounds x="0" y="380" width="140" height="50" /> <dc:Bounds x="210" y="40" width="150" height="55" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_corr" dmnElementRef="In_CorridorMunis"> <dmndi:DMNShape id="s_In_VisualConfirmation" dmnElementRef="In_VisualConfirmation">
<dc:Bounds x="160" y="380" width="140" height="50" /> <dc:Bounds x="380" y="40" width="150" height="55" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_phid" dmnElementRef="In_PositiveHostileId"> <dmndi:DMNShape id="s_In_AirspaceStatus" dmnElementRef="In_AirspaceStatus">
<dc:Bounds x="340" y="380" width="140" height="50" /> <dc:Bounds x="550" y="40" width="150" height="55" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_overpop" dmnElementRef="In_OverPopulated"> <dmndi:DMNShape id="s_In_TrajectoryTowardPop" dmnElementRef="In_TrajectoryTowardPop">
<dc:Bounds x="500" y="380" width="140" height="50" /> <dc:Bounds x="720" y="40" width="150" height="55" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_debris" dmnElementRef="In_DebrisClear"> <dmndi:DMNShape id="s_In_DistanceToPopulatedKm" dmnElementRef="In_DistanceToPopulatedKm">
<dc:Bounds x="660" y="380" width="140" height="50" /> <dc:Bounds x="890" y="40" width="150" height="55" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_firing" dmnElementRef="In_FiringReady"> <dmndi:DMNShape id="s_In_EstimatedMinutesToPop" dmnElementRef="In_EstimatedMinutesToPop">
<dc:Bounds x="820" y="380" width="140" height="50" /> <dc:Bounds x="1060" y="40" width="150" height="55" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNShape id="s_in_bap" dmnElementRef="In_BapOnStation"> <dmndi:DMNShape id="s_In_CorridorMunicipalities" dmnElementRef="In_CorridorMunicipalities">
<dc:Bounds x="980" y="380" width="140" height="50" /> <dc:Bounds x="1230" y="40" width="150" height="55" />
</dmndi:DMNShape> </dmndi:DMNShape>
<dmndi:DMNEdge id="e_ir_d1_1" dmnElementRef="ir_d1_1"> <dmndi:DMNShape id="s_In_BorderProximityTier" dmnElementRef="In_BorderProximityTier">
<di:waypoint x="190" y="10" /><di:waypoint x="420" y="80" /> <dc:Bounds x="1400" y="40" width="150" height="55" />
</dmndi:DMNShape>
<dmndi:DMNShape id="s_In_PositiveHostileId" dmnElementRef="In_PositiveHostileId">
<dc:Bounds x="40" y="620" width="150" height="55" />
</dmndi:DMNShape>
<dmndi:DMNShape id="s_In_OverPopulatedArea" dmnElementRef="In_OverPopulatedArea">
<dc:Bounds x="210" y="620" width="150" height="55" />
</dmndi:DMNShape>
<dmndi:DMNShape id="s_In_DebrisZoneClear" dmnElementRef="In_DebrisZoneClear">
<dc:Bounds x="380" y="620" width="150" height="55" />
</dmndi:DMNShape>
<dmndi:DMNShape id="s_In_GroundFiringReady" dmnElementRef="In_GroundFiringReady">
<dc:Bounds x="550" y="620" width="150" height="55" />
</dmndi:DMNShape>
<dmndi:DMNShape id="s_In_BapOnStation" dmnElementRef="In_BapOnStation">
<dc:Bounds x="720" y="620" width="150" height="55" />
</dmndi:DMNShape>
<dmndi:DMNShape id="s_In_ObjectNeutralized" dmnElementRef="In_ObjectNeutralized">
<dc:Bounds x="1060" y="620" width="150" height="55" />
</dmndi:DMNShape>
<dmndi:DMNShape id="s_In_ActiveTracksRemain" dmnElementRef="In_ActiveTracksRemain">
<dc:Bounds x="1230" y="620" width="150" height="55" />
</dmndi:DMNShape>
<dmndi:DMNEdge id="e_ir_Decision_ObjectClassification_0" dmnElementRef="ir_Decision_ObjectClassification_0">
<di:waypoint x="115" y="67" />
<di:waypoint x="220" y="295" />
</dmndi:DMNEdge> </dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_d2_1" dmnElementRef="ir_d2_1"> <dmndi:DMNEdge id="e_ir_Decision_ObjectClassification_1" dmnElementRef="ir_Decision_ObjectClassification_1">
<di:waypoint x="400" y="160" /><di:waypoint x="290" y="240" /> <di:waypoint x="285" y="67" />
<di:waypoint x="220" y="295" />
</dmndi:DMNEdge> </dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_d3_1" dmnElementRef="ir_d3_1"> <dmndi:DMNEdge id="e_ir_Decision_ObjectClassification_2" dmnElementRef="ir_Decision_ObjectClassification_2">
<di:waypoint x="480" y="160" /><di:waypoint x="610" y="240" /> <di:waypoint x="455" y="67" />
<di:waypoint x="220" y="295" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_AirThreatSeverity_0" dmnElementRef="ir_Decision_AirThreatSeverity_0">
<di:waypoint x="220" y="295" />
<di:waypoint x="570" y="295" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_AirThreatSeverity_1" dmnElementRef="ir_Decision_AirThreatSeverity_1">
<di:waypoint x="625" y="67" />
<di:waypoint x="570" y="295" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_AirThreatSeverity_2" dmnElementRef="ir_Decision_AirThreatSeverity_2">
<di:waypoint x="795" y="67" />
<di:waypoint x="570" y="295" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_AirThreatSeverity_3" dmnElementRef="ir_Decision_AirThreatSeverity_3">
<di:waypoint x="965" y="67" />
<di:waypoint x="570" y="295" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_NotificationUrgency_0" dmnElementRef="ir_Decision_NotificationUrgency_0">
<di:waypoint x="570" y="295" />
<di:waypoint x="920" y="165" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_NotificationUrgency_1" dmnElementRef="ir_Decision_NotificationUrgency_1">
<di:waypoint x="1135" y="67" />
<di:waypoint x="920" y="165" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_CellBroadcastScope_0" dmnElementRef="ir_Decision_CellBroadcastScope_0">
<di:waypoint x="570" y="295" />
<di:waypoint x="1270" y="165" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_CellBroadcastScope_1" dmnElementRef="ir_Decision_CellBroadcastScope_1">
<di:waypoint x="1305" y="67" />
<di:waypoint x="1270" y="165" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_CellBroadcastScope_2" dmnElementRef="ir_Decision_CellBroadcastScope_2">
<di:waypoint x="1475" y="67" />
<di:waypoint x="1270" y="165" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_InterceptionAuthorization_0" dmnElementRef="ir_Decision_InterceptionAuthorization_0">
<di:waypoint x="570" y="295" />
<di:waypoint x="920" y="485" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_InterceptionAuthorization_1" dmnElementRef="ir_Decision_InterceptionAuthorization_1">
<di:waypoint x="115" y="647" />
<di:waypoint x="920" y="485" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_InterceptionAuthorization_2" dmnElementRef="ir_Decision_InterceptionAuthorization_2">
<di:waypoint x="285" y="647" />
<di:waypoint x="920" y="485" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_InterceptionAuthorization_3" dmnElementRef="ir_Decision_InterceptionAuthorization_3">
<di:waypoint x="455" y="647" />
<di:waypoint x="920" y="485" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_InterceptionAuthorization_4" dmnElementRef="ir_Decision_InterceptionAuthorization_4">
<di:waypoint x="625" y="647" />
<di:waypoint x="920" y="485" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_InterceptionAuthorization_5" dmnElementRef="ir_Decision_InterceptionAuthorization_5">
<di:waypoint x="795" y="647" />
<di:waypoint x="920" y="485" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_StandDownCriteria_0" dmnElementRef="ir_Decision_StandDownCriteria_0">
<di:waypoint x="1135" y="647" />
<di:waypoint x="1270" y="485" />
</dmndi:DMNEdge>
<dmndi:DMNEdge id="e_ir_Decision_StandDownCriteria_1" dmnElementRef="ir_Decision_StandDownCriteria_1">
<di:waypoint x="1305" y="647" />
<di:waypoint x="1270" y="485" />
</dmndi:DMNEdge> </dmndi:DMNEdge>
</dmndi:DMNDiagram> </dmndi:DMNDiagram>
</dmndi:DMNDI> </dmndi:DMNDI>
</definitions> </definitions>

View File

@@ -1,60 +1,33 @@
# 00 — Incident Chronology: Rēzekne Drone Incident, 7 May 2026 # 00 — Incident Chronology (7 May 2026, Rezekne)
> Non-normative supporting document. Compiled from public reporting This package is modelled from the **public chronology** of the drone incident
> (LSM / eng.lsm.lv, Apollo, TV3, Meduza, Defense News, The Globe and Mail, over eastern Latvia on the night of 6–7 May 2026. No classified or operational
> Wikipedia "2026 Ukrainian drone incursions into Baltic states"). Times are source was used.
> local (EEST) and approximate where the public record is approximate.
## Summary ## Public-source timeline
During the night of 6–7 May 2026, several unmanned aerial vehicles entered | Phase | What happened (public reporting) |
Latvian airspace from the direction of Russia. Two drones came down on Latvian |-------|----------------------------------|
territory; one exploded at a fuel-storage facility in Rēzekne (~40 km from the | Detection | Several unmanned aerial vehicles, assessed as originating from Russian territory, entered Latvian airspace near the eastern border. |
Russian border), damaging four empty oil tanks. No casualties. The drones are | Tracking | NBS surveillance tracked the objects; at least two drones came down on Latvian territory, one near Rezekne. |
assessed as stray Ukrainian long-range drones diverted off course — Ukraine's | Impact | A drone struck near a fuel-storage facility in the Rezekne area; no casualties were publicly reported. |
foreign minister later linked the diversion to Russian electronic-warfare | Public notification | The public cell-broadcast early-warning message reached the Rezekne population **approximately 40 minutes** after the threat was apparent — the central failure this package addresses. |
jamming. The incident triggered a political crisis: the Defence Minister and, | Aftermath | The Ministry of Defence publicly committed to **revising the inter-institutional notification algorithms** so that a public alert is issued without comparable delay. |
days later, the Prime Minister resigned.
## Timeline ## Why this is modelled as a UAPF package
| Time (7 May) | Event | The incident is not a technology failure — the cell-broadcast platform worked.
|---|---| It is a **process and decision-rights failure**: the algorithm that converts
| ~03:30 | VUGD receives several 112 calls about a possible fire at the oil-storage facility on Komunāla iela, Rēzekne. | "NBS sees a threat" into "VUGD dispatches a public broadcast" was slow and
| 04:09 | Cell-broadcast warning issued to residents of Ludza and Balvi districts, at NBS request. | under-specified. That is exactly the class of problem UAPF exists to make
| 04:43 | Cell-broadcast warning issued to Rēzekne district — roughly 40 minutes after Ludza/Balvi. Rēzekne city residents report having already heard/seen drones overhead about an hour before receiving the alert. | explicit, inspectable and improvable: a BPMN process, the DMN decisions inside
| ~05:30 | NBS announces that two UAVs have crashed on Latvian territory; NBS, State Police and VUGD units deploy to the sites. | it, the CMMN follow-up case, and the resource bindings that say who does what.
| Morning | One crash site confirmed at the Rēzekne oil-storage base. A second crash site is not yet identified (later associated with the Viļāni area, west of Rēzekne). A possible third drone is believed to have exited Latvian airspace. |
| Daytime | Flights restricted up to ~6 km altitude in the eastern border region; commercial aviation unaffected. Schools closed in Rēzekne and Ludza; remote learning in Balvi. French NATO Baltic Air Policing jets scrambled during the alert. |
| ~08:20–08:51 | NBS declares the air-threat alert ended for Balvi, Ludza and Rēzekne districts. |
| 12:00 | Press conference in Rēzekne (AM / NBS / State Police). |
| ~18:00 | Eastern-region flight restrictions lifted. |
| Daytime | Government Crisis Management Council convenes. PM Siliņa states the threat is "a consequence of Russia's war in Ukraine" and asks the Ministry of Defence to clarify why cell-broadcast warnings were issued only after the crash was reported. |
## Aftermath ## Scope boundary
- **10 May 2026** — Defence Minister Andris Sprūds resigns. He had already In scope: detection → classification → notification decision → broadcast →
survived an April Saeima no-confidence-style vote (43 for dismissal, 50 interception authorisation → field response → origin investigation →
against). after-action.
- **~14 May 2026** — Prime Minister Evika Siliņa resigns; the government falls.
- The Foreign Ministry summoned Russia's chargé d'affaires; Ukraine's foreign
minister later acknowledged the drones were Ukrainian and attributed the
diversion to Russian electronic warfare.
- The Ministry of Defence committed to **review and improve the public
notification / inter-institutional information-exchange algorithms**. The
Rēzekne incident was designated a central scenario for the "Pilskalns" civil
protection exercise.
## Prior incidents in the same series (context) Out of scope: NBS internal sensor doctrine, NATO BAP internal procedures,
and the criminal investigation, which are referenced only as handoffs.
- **7 September 2024** — A Russian "Shahed"-type drone fell in Gaigalava
parish, Rēzekne district. After-action commitments were made then to speed
up public notification.
- **25 March 2026** — A stray Ukrainian drone crashed in Krāslava district
(Dobročina); a parallel drone struck a power-station chimney in Estonia.
- **3 May 2026** — Air-threat cell broadcasts in Alūksne, Balvi, Ludza,
Rēzekne and Krāslava (~3.5 h); no drone crossed the border.
The 7 May incident is therefore the **fourth comparable event in ~20 months**,
which is why the failure is framed publicly as an algorithm/process failure
rather than a one-off.

View File

@@ -1,51 +1,24 @@
# 01 — Institutional Gap Analysis (AS-IS) and TO-BE Targets # 01 — Institutional Gap Analysis
> Non-normative supporting document. This is the analytical core of the package: Gaps identified in the **as-is** algorithm, derived from the public chronology.
> it maps each publicly-reported coordination failure to a specific element of Each gap is addressed by a specific element of this package and is referenced
> the BPMN / DMN / CMMN models, so the revised algorithm can be designed against from `resources/mappings.yaml` and the diagrams.
> a concrete baseline.
## Why this package exists | ID | Gap (as-is) | Addressed by (to-be) |
|----|-------------|----------------------|
| **G1** | No explicit object-classification step — "is it a drone, and how sure are we?" was implicit. | `Decision_ObjectClassification` makes class **and confidence** explicit before any threat call. |
| **G2** | Public-broadcast authority was a **single point of failure**: one request from NBS Joint Staff was the only trigger, with no timed fallback. | `Task_AuthorizeBroadcast` carries a 3-minute timeout with a proposed escalation to the Crisis Management Centre (KVC). *Not yet institutionally agreed.* |
| **G3** | Message wording was composed under time pressure. | `Decision_CellBroadcastScope` selects a **pre-approved template** (`MSG_*`); guardrail GR-4 forbids free-text public messaging. |
| **G4** | No bounded, threat-graded **time target** for dispatch — the 40-minute delay had no SLA to breach. | `Decision_NotificationUrgency` outputs `broadcastSlaSeconds`; see `03-notification-timing-sla.md`. |
| **G5** | No automatic detection that the SLA had been missed. | Non-interrupting **SLA-breach boundary timer** on `Task_DispatchBroadcast``Task_EscalateSla`. |
| **G6** | Alert footprint was coarse — not matched to the drones' predicted path. | `Decision_CellBroadcastScope` builds the footprint from `corridorMunicipalities`. |
| **G7** | Interception safety criteria were not written down or inspectable. | `Decision_InterceptionAuthorization` gates engagement on positive hostile ID, over-populated-area and debris-zone-clear, in that priority order. |
| **G8** | Follow-on civil decisions (school closures, resident enquiries) had no owner. | CMMN stage `Stage_FieldResponse` (`HT_MunicipalEnquiries`); IZM recorded as a consulted party in `02-raci.md`. |
After the 7 May 2026 Rēzekne incident the Ministry of Defence stated publicly ## Residual / open
that the inter-institutional **information / notification algorithms** must be
reviewed and improved. The problem reported by municipalities and crisis-management
officials was not a single mistake but a **structural misalignment**: no single,
shared, machine-checkable description of who decides what, when, and on which
inputs. UAPF exists precisely to hold that description as versioned, reviewable
artifacts. This package is the AS-IS baseline.
## Gap register - **G2 escalation authority** is a *proposal*. Whether KVC may authorise a
public broadcast when NBS Joint Staff is unreachable is an institutional and
| # | Reported gap (public record) | Where it lives in the model | TO-BE target | legal question, not a modelling one, and is flagged for review.
|---|---|---|---| - SLA values in `03-notification-timing-sla.md` are **proposed defaults** for
| G1 | Cell-broadcast reached Rēzekne city only after residents had already seen/heard the drones; ~40-min lag vs Ludza/Balvi. | `Task_RequestBroadcast``Task_CellBroadcast` | Tighten the trigger so the request is driven by the **predicted corridor**, not by confirmed overflight. `Decision_CellBroadcastScope` already takes `corridorMunicipalities` — make corridor pre-alerting mandatory at `threatLevel = elevated`. | validation against NBS/VUGD operational reality.
| G2 | Single point of failure: the alert fires only on an explicit NBS request. NBS stated the alert was not sent to Rēzekne because the "incident duration was too short"; the Interior Minister stated VUGD was ready but "a clear algorithm was not triggered". | `Task_RequestBroadcast` (documented GAP) | Define an explicit fallback authority and a time-boxed escalation: if NBS does not issue / decline a request within N minutes of a confirmed corridor, a named role (KVC duty) may trigger. Model as a boundary timer event on `Task_RequestBroadcast` in v0.2. |
| G3 | Message content too thin — "possible threat" with no nature-of-threat detail; residents phoned municipalities asking whether tanks or drones were coming. | `Decision_CellBroadcastScope` output `messageTemplate` | Replace generic text with typed templates (`MSG_DRONE_IMMINENT`, `MSG_DRONE_POSSIBLE`, `MSG_AIRSPACE_MONITORING`) carrying threat type, recommended action and an information URL. Templates are an output column in the DMN table. |
| G4 | No unified action algorithm across institutions; municipalities reported missing communication with state institutions and unclear ownership (AM vs VARAM vs IZM). | `Task_NotifyAgencies`; `resources/mappings.yaml` | A single resource mapping with explicit RACI per element (this package), reviewed jointly. Notification to KVC, IeM and municipal commissions modelled as a **parallel** branch so it cannot be skipped. |
| G5 | Information on number/origin/landing sites of the drones was unavailable for ~5 hours. | CMMN `Stage_Investigation` (`HT_TechExam`, `HT_OriginAttribution`) | Make investigation a first-class case stage with explicit milestones and an information-publishing cadence, not an ad-hoc activity. |
| G6 | ~3-day delay before clear public acknowledgement of the drones' (Ukrainian) origin created a perception of concealment. | CMMN `HT_OriginAttribution`, `HT_DisinfoMonitor`, `HT_Press` | Decouple "confirm origin" from "inform public": publish what is known on a fixed cadence; disinformation monitoring runs in parallel from the start. |
| G7 | Interception not attempted; criteria ("all safety criteria") were not transparent or pre-agreed. | `Decision_InterceptionAuthorization` | Make the safety criteria an explicit, inspectable DMN table (civilian risk, debris fall-zone, positive ID, firing-position readiness, BAP availability) rather than a verbal judgement. |
| G8 | School-closure and resident-guidance decisions lacked timely recommendations from IZM. | `Task_LocalResponse` (IZM consulted) | Bind IZM as a consulted resource on `Task_LocalResponse` with a pre-agreed guidance template issued automatically at `threatLevel >= elevated`. |
## Modelling stance
- The BPMN / DMN / CMMN in v0.1.0 deliberately model the **AS-IS** algorithm
*plus* the minimum corrections needed for it to be internally consistent
(parallel notification, typed messages, explicit interception table).
- Items requiring a **policy decision** — notably G2 (fallback trigger
authority) — are flagged in `docs/02-raci.md` and left as open questions for
v0.2; they must not be silently encoded by a process author.
- Nothing here is operationally approved. Lifecycle status is `draft`.
## Open questions for the institutional steward
1. **G2** — Who is the named fallback authority if NBS does not act within the
escalation window, and what is the window length?
2. Should cell-broadcast corridor pre-alerting be automatic at
`threatLevel = elevated`, or remain a human decision?
3. Is the cell-broadcast platform owned operationally by VUGD only, or jointly
with VARAM for the early-warning evolution? This changes the `Task_CellBroadcast`
binding.
4. What is the mandated public-information cadence during an active incident
(G5/G6)?

View File

@@ -1,66 +1,26 @@
# 02 — RACI Matrix # 02 — RACI Matrix
> Non-normative supporting document. Human-readable view of the bindings in R = Responsible, A = Accountable, C = Consulted, I = Informed.
> `resources/mappings.yaml`. R = Responsible, A = Accountable, C = Consulted, Bindings in `resources/mappings.yaml` express the **R** column; this matrix
> I = Informed. The machine-readable source of truth is the resources cornerstone. adds the A/C/I context that a single-target binding cannot.
## Actors | Activity | NBS Joint Staff | NBS Air Def. | VUGD | State Police | NMPD | Municipal | MoD | KVC | IeM / IZM |
|----------|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
| Classify & assess threat | R/A | I | I | – | – | I | I | C | – |
| Determine notification & scope | R/A | – | C | – | – | I | I | C | – |
| Authorise public broadcast | R/A | – | I | – | – | I | I | C* | I |
| Dispatch cell-broadcast | A | – | R | – | – | I | I | I | I |
| Escalate SLA breach | C | – | I | – | – | I | I | R/A | I |
| Authorise interception | R/A | C | – | – | – | – | C | I | – |
| Execute interception | A | R | – | – | – | – | I | I | – |
| Field response | C | – | R | R | R | R | I | A | I |
| Origin investigation | R | – | – | C | – | – | A/C | I | I |
| Public communication | C | – | – | – | – | I | R/A | C | I |
| After-action review | C | C | C | C | C | C | A | R | C |
| Code | Institution / system | \* KVC as Consulted today; the proposed G2 fallback would make KVC **R** for
|---|---| authorising the broadcast on NBS Joint Staff timeout.
| NBS-SURV | NBS air surveillance and radar network |
| NBS-JS | NBS Joint Staff, operational duty |
| NBS-AD | NBS air-defence units (pretgaisa aizsardzība) |
| NATO-BAP | NATO Baltic Air Policing mission |
| VUGD | VUGD operational duty / 112 |
| CB-SYS | Cell-broadcast system (operated by VUGD) |
| VP | State Police operational duty |
| KVC | Crisis Management Centre |
| AM | Ministry of Defence |
| IeM | Ministry of the Interior |
| VARAM | Ministry of Smart Administration and Regional Development |
| IZM | Ministry of Education and Science |
| MUN-CP | Municipal civil-protection commissions |
| GOV-CC | Government Crisis Management Council |
## Process steps (BPMN) **Consulted parties not in `mappings.yaml`:** VARAM (cell-broadcast platform
policy), IZM (school-closure guidance), the State Border Guard, and the
| Step | A | R | C | I | Government Crisis Management Council (informed at national level).
|---|---|---|---|---|
| Classify object & track trajectory | NBS-JS | NBS-SURV | — | — |
| Assess air threat severity | NBS-JS | — | — | — |
| Determine cell-broadcast scope & message | NBS-JS | — | KVC, VARAM | — |
| Issue cell-broadcast request to VUGD | NBS-JS | — | — | — |
| Trigger cell broadcast | VUGD | CB-SYS | — | — |
| Notify KVC, IeM & municipal commissions | — | NBS-JS | — | KVC, IeM, MUN-CP |
| Evaluate interception | NBS-JS | — | AM, NBS-AD, NATO-BAP | — |
| Coordinate interception (BAP / PGA) | — | NBS-AD, NATO-BAP | — | — |
| Activate local civil-protection response | MUN-CP | VP | IZM | — |
| Declare threat ended / all-clear | NBS-JS | CB-SYS | — | — |
| Field response & origin investigation (case) | KVC | — | — | — |
## Case tasks (CMMN)
| Task | A | R | C |
|---|---|---|---|
| Localise & search crash sites | — | NBS-JS | VP |
| Site safety & fire suppression | — | VUGD | — |
| Scene security & access control | — | VP | — |
| Resident enquiries via municipal commissions | — | MUN-CP | — |
| Technical examination of debris | — | NBS-JS | — |
| Origin attribution & EW-diversion analysis | NBS-JS | — | AM |
| Disinformation monitoring & correction | — | AM | — |
| Press conference / public information | AM | — | KVC |
| Cross-institutional after-action review | AM | KVC | — (GOV-CC informed) |
## Known accountability ambiguities (do not resolve in a process draft)
- **Cell-broadcast trigger:** "A" sits with NBS-JS for the *request*, with VUGD
for *execution*. The public failure (G2) is the gap *between* these two "A"s.
A revised algorithm needs an explicit fallback "A" — currently unassigned.
- **Cell-broadcast platform stewardship:** assigned here to VUGD; VARAM may hold
a co-stewardship role for the early-warning system evolution. Confirm before
v0.2.
- **Public-information tempo:** "A" for `HT_Press` is AM, but during the 7 May
incident the perceived delay (G6) suggests the cadence itself needs an owner
and a mandated interval.

View File

@@ -0,0 +1,46 @@
# 03 — Notification Timing & SLA Model
The 7 May 2026 incident's defining failure was a **~40-minute** gap between a
visible air threat and the public cell-broadcast reaching Rezekne. This package
treats notification speed as a **first-class, modelled quantity** rather than an
implicit expectation.
## The SLA chain
1. `Decision_NotificationUrgency` takes `threatLevel` and the estimated minutes
until the object could reach people, and outputs:
- `notificationTier``immediate | priority | standard | none`
- `broadcastSlaSeconds` — the **maximum** time allowed from authorisation to
confirmed dispatch.
2. `Task_DispatchBroadcast` (VUGD) carries a **non-interrupting boundary timer**
armed at `broadcastSlaSeconds`.
3. If dispatch is not confirmed before the timer fires, `Task_EscalateSla`
runs **in parallel** — it does not cancel the broadcast, it escalates the
delay to the Crisis Management Centre so a human intervenes.
## Proposed SLA defaults
| Threat level | Lead time | Tier | `broadcastSlaSeconds` | Rationale |
|--------------|-----------|------|----------------------:|-----------|
| critical | any | immediate | 120 | Object inside airspace, closing on people. |
| high | ≤ 15 min | immediate | 180 | Little lead time; alert must precede impact. |
| high | > 15 min | priority | 300 | Lead time exists; brief verification window. |
| elevated | any | priority | 600 | Threat present, not yet tracking toward people. |
| low | any | standard | 1800 | Advisory only. |
| none | – | none | 0 | No public broadcast. |
Against these defaults, the Rezekne broadcast (~2400 s) breached even the most
lenient non-zero SLA **by an order of magnitude**. Under this model the boundary
timer would have fired at 120–180 s and escalated to KVC ~38 minutes earlier.
## Guardrail
`broadcastSlaSeconds` is a **hard floor for escalation, not a target for
dispatch** (guardrail GR-3). Dispatch should normally be far faster; the SLA is
the line past which the absence of a broadcast becomes its own incident.
## Open for validation
The table values are **modelling proposals**. They need calibration against
real NBS classification timelines and VUGD cell-broadcast dispatch latencies
before the package can leave `draft`.

View File

@@ -0,0 +1,50 @@
# 04 — UAPF-IP Integration
How a UAPF-IP (Integration Profile) host runs this package.
## Profiles
The manifest declares `uapf-ip-orchestrated` and `uapf-ip-sync-decision`:
- **orchestrated** — the host executes the BPMN process, calling host
capabilities (`task.assign`, `task.complete`, `task.escalate`, `event.emit`,
`timer.schedule`) and evaluating DMN decisions at each business-rule task.
- **sync-decision** — any of the six decisions can be evaluated standalone, as
a synchronous request/response, without running the process.
## Exposed entrypoints
`exposure.mcp.exposedEntrypoints` maps the process and each decision to an MCP
tool name, e.g. `interception_authorization.evaluate`. A UAPF-IP host with MCP
exposure enabled publishes these as callable tools. `runnable: true` permits
process execution, not only inspection.
## Required capabilities
`requires_capabilities` lists what the host must provide. Beyond the generic
task/event capabilities, this package needs:
- `timer.schedule@1+` — to arm the SLA-breach boundary timer.
- `ai.classify@1+`, `ai.complete@1+` — for the advisory threat-assessment agent.
- `lv.gov.civdef.air_surveillance_feed@1+`, `lv.gov.civdef.cell_broadcast@1+`
domain capabilities that wrap the NBS surveillance feed and the VUGD
cell-broadcast platform.
A host missing a required capability must refuse to load the package rather
than degrade silently.
## Guardrail enforcement
Every capability call is checked against `resources/guardrails.yaml` before and
after execution. The load-bearing guardrails: AI is advisory only (GR-1), no
autonomous use of force (GR-2), the SLA boundary timer may not be disabled
(GR-3), and public messaging is human-authored from templates (GR-4). A
violation **blocks** the call and is written to the audit trail.
## Decision/process boundary
The host owns orchestration, capability brokering, audit and guardrail
enforcement. The package owns **only** the logic — process shape, decision
tables, case structure and resource bindings. The package contains no
credentials; the placeholders in `resources/mappings.yaml` are resolved by the
host from its own secret store.

View File

@@ -0,0 +1,42 @@
# 05 — Validation Report
Package: `lv.civdef.drone-threat-public-address` v0.3.0
Date: 2026-05-18 · Tool: `validate.py`
## Result: 19 / 19 checks passed
### Structural
- All three cornerstone files (BPMN, DMN, CMMN) are well-formed XML.
- All six YAML files parse.
- `uapf.yaml` validates against `uapf-manifest.schema.json` (UAPF v2.2.0).
### Model integrity
- BPMN: 26 flow nodes; every `sequenceFlow` source/target resolves.
- DMN: exactly 6 decisions; every `informationRequirement` href resolves.
- CMMN: 11 human tasks across 3 stages.
### Quality gates added in v0.3.0 (these are the v0.2.0 defects)
- **Every DMN decision carries a `<description>`.** v0.2.0 had none.
- **No declared-but-unused decision inputs.** Every `requiredInput` of every
decision is used as a decision-table input column or in an output
expression. This is the check that proves the v0.2.0 interception defect —
`positiveHostileId` declared but never tested — is fixed.
- **Every `mappings.yaml` binding resolves to a real diagram element**, and
every `targetId` resolves to a declared target. The resource↔process linkage
is now machine-checkable.
## What is *not* validated here
- **Semantic correctness of the modelled algorithm** — whether these are the
right institutions, thresholds and SLAs — is an institutional review
question, tracked in `01-institutional-gap-analysis.md`.
- **DMN completeness/overlap** of `FIRST`-hit tables is not formally verified;
each table ends with a catch-all rule so no input is left without an output.
- Diagram interchange (DI) renders cleanly in `dmn-js` / `bpmn-js` / `cmmn-js`;
visual review in the target viewer is still recommended.
## Reproduce
```
python3 validate.py # exits non-zero on any failure
```

View File

@@ -1,19 +1,37 @@
kind: uapf.metadata.lifecycle kind: uapf.metadata.lifecycle
status: draft version: "0.3.0"
created: "2026-05-17T00:00:00Z"
lastModified: "2026-05-17T00:00:00Z" package: lv.civdef.drone-threat-public-address
changeHistory: state: draft
- version: "0.2.0"
date: "2026-05-17" history:
summary: >-
Rebuilt against UAPF specification v2.2.0 SSOT. Corrected cornerstone
file extensions, resource-mapping schema, ownership/lifecycle metadata;
added policies, UAPF-IP guardrails, MCP exposure and workspace index.
author: rihards.gailums
- version: "0.1.0" - version: "0.1.0"
date: "2026-05-17" date: "2026-05-17"
summary: >- state: draft
Initial draft modelling the AS-IS notification algorithm and its note: Initial Level-4 package skeleton (BPMN + 3-decision DMN + CMMN).
identified gaps from the public chronology of the 7 May 2026 Rezekne - version: "0.2.0"
drone incident. date: "2026-05-17"
author: rihards.gailums state: draft
note: UAPF v2.2.0 manifest alignment; portable .uapf packaging.
- version: "0.3.0"
date: "2026-05-18"
state: draft
note: >-
Deep rebuild. DMN expanded to 6 decisions with descriptions and a clean
DRD; declared-but-unused decision inputs removed (interception now gated
on positive hostile ID). BPMN expanded to six institution lanes with a
non-interrupting SLA-breach boundary timer. CMMN deepened to three
stages. Resource mappings given an element-level legend.
transitions:
draft -> review:
requires:
- Institutional review of the modelled algorithm by NBS Joint Staff.
- Confirmation of the GAP G2 escalation authority (Task_AuthorizeBroadcast).
review -> approved:
requires:
- Sign-off by the Ministry of Defence algorithm-governance authority.
review:
next_review_due: "2026-08-18"
open_gaps_ref: docs/01-institutional-gap-analysis.md

View File

@@ -1,12 +1,37 @@
kind: uapf.metadata.ownership kind: uapf.metadata.ownership
version: "0.3.0"
package: lv.civdef.drone-threat-public-address
owners: owners:
- type: person - type: person
id: rihards.gailums id: rihards.gailums
name: Rihards Gailums role: package-author
contact: rihards.gailums@gmail.com contact: rihards.gailums@gmail.com
role: owner
approvers: stewards:
- rihards.gailums - type: role
escalation: id: nbs.joint-staff
primary: rihards.gailums role: process-owner
sla_hours: 72 note: >-
Accountable for the modelled algorithm in operation. Placeholder pending
formal institutional assignment.
- type: role
id: am.algorithm-governance
role: governance-authority
note: >-
Ministry of Defence — owns revision of the inter-institutional
notification algorithm per the public 7 May 2026 commitment.
classification: OFFICIAL
distribution: >-
Draft modelling artefact derived entirely from public-source reporting and
open civil-protection legislation. Contains no classified or operational
data. Endpoints and credentials in resources/ are illustrative placeholders.
provenance:
derived_from: public chronology of the 7 May 2026 Rezekne drone incident
not_an_official: >-
This package is an independent UAPF modelling demonstrator. It is not an
official algorithm of the NBS, VUGD, the Ministry of Defence or any other
Latvian state institution.

View File

@@ -1,22 +1,29 @@
kind: uapf.policies kind: uapf.metadata.policies
classification: version: "0.3.0"
level: restricted
dataCategories: package: lv.civdef.drone-threat-public-address
- civil-defence
- national-security audit:
- public-warning decision_logging: required
execution: retention: P3Y
requiresApproval: true records:
approvalRoles: - decision inputs, matched rule id and outputs
- aizsardzibas-ministrija - actor identity and timestamp for every manual authorisation
- krizes-vadibas-centrs - SLA timer arm / fire / clear events
auditRequired: true
maxConcurrentExecutions: 1 data_protection:
allowedEnvironments: regime: GDPR + Latvian civil-protection law
- development personal_data:
- staging - 112 caller data is processed by VUGD under existing emergency-service basis.
requiredClaims: - OSINT disinformation monitoring is restricted to public posts (guardrail GR-6).
- type: civil-defence-operator data_boundary: EU
delegation:
allowAgentDelegation: false access:
maxDelegationDepth: 0 package_visibility: OFFICIAL
decision_evaluation: NBS Joint Staff and bound targets only
amendment_authority: Ministry of Defence algorithm governance
compliance_refs:
- Civil Protection and Disaster Management Law (Latvia)
- Cabinet regulations on the early-warning cell-broadcast system
- NATO Baltic Air Policing arrangements (interception execution)

View File

@@ -1,37 +1,61 @@
# UAPF-IP guardrails policy for the Drone Threat Public Address process. kind: uapf.guardrails
# Loaded by the runtime at session start as an immutable policy snapshot; version: "0.3.0"
# enforced by the host before every capability invocation (see UAPF-IP SPEC §10).
scope: # UAPF-IP guardrails enforced at every capability call made by a UAPF-IP host
domain: civil-defence # running this package. Guardrails are evaluated before and after capability
classification: restricted # execution; a violation blocks the call and is logged to the audit trail.
legal_basis: national-civil-protection-law
ai: principles:
allowed_models: - id: GR-1
- claude-opus-4-7 name: AI is advisory, never authoritative
- claude-sonnet-4-6 rule: >-
forbidden_inputs: AI agents and MCP tools (ai.classify, ai.complete) may only produce
- classified-radar-tracks recommendations. Object classification, threat severity, public-broadcast
- personal-data-of-residents authorisation, interception authorisation and origin attribution must be
- source-identifying-osint confirmed by an accountable human role before any downstream effect.
pii_redactor: required appliesTo: [Decision_ObjectClassification, Decision_AirThreatSeverity,
# AI may never autonomously complete a step in a national public-warning Decision_InterceptionAuthorization, HT_OriginAttribution]
# process; a confidence ceiling of 0 forces human confirmation every time.
max_confidence_for_autocomplete: 0.0
decisions_ai_may_make_unattended: []
decisions_ai_may_recommend:
- air_threat_severity
- disinformation_classification
human_oversight: - id: GR-2
required_for: name: No autonomous use of force
- cell_broadcast_dispatch rule: >-
- interception_authorization No capability may move the process to an interception "engage" outcome
- public_communication without a recorded manual authorisation by NBS Joint Staff. The
- incident_closure Decision_InterceptionAuthorization table is decision support only.
reviewer_role: nbs-joint-staff-duty-officer appliesTo: [Task_AuthorizeInterception, Task_GroundEngage, Task_RequestBAP]
audit: - id: GR-3
vc_signature_per_step: required name: Notification SLA is a hard floor
retention_years: 10 rule: >-
broadcastSlaSeconds from Decision_NotificationUrgency is a maximum, not a
target. The SLA-breach boundary timer must remain enabled; disabling it
is a safeguard removal and must be recorded.
appliesTo: [Task_DispatchBroadcast, Boundary_SlaBreach]
- id: GR-4
name: Public messaging is human-authored
rule: >-
Cell-broadcast and all-clear messages are selected from pre-approved,
human-authored templates (MSG_*). Free-text generation of public alert
content by an AI agent is prohibited.
appliesTo: [Task_DispatchBroadcast, Task_AllClearBroadcast, HT_PressBriefing]
- id: GR-5
name: Auditability
rule: >-
Every decision evaluation records its inputs, the matched rule id and the
output, with actor identity and timestamp, retained per metadata/policies.yaml.
appliesTo: ["*"]
- id: GR-6
name: Data minimisation in disinformation monitoring
rule: >-
The OSINT monitoring tool processes only public posts; it must not ingest
or store personal data of identifiable citizens beyond what is required
to classify a post.
appliesTo: [HT_DisinfoMonitor]
enforcement:
onViolation: block
audit: required
reviewAuthority: "Ministry of Defence (algorithm governance)"

View File

@@ -1,268 +1,347 @@
kind: uapf.resources.mapping kind: uapf.resources.mapping
version: "0.3.0"
# ===========================================================================
# HOW TO READ THIS FILE
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Targets — the institutions, systems and agents that execute work in this # UAPF separates the *logic* of a process (the BPMN / DMN / CMMN cornerstones)
# process. Only primary binding targets are listed; consulted/informed parties # from the *resources* that execute it (institutions, systems, AI agents).
# (VARAM, IZM, NATO Baltic Air Policing, the Government Crisis Management # This file is that binding layer.
# Council) are recorded in binding `notes` and in docs/02-raci.md. #
# Endpoints and credentials below are ILLUSTRATIVE placeholders for a draft. # targets - every institution, system or agent that can do work here.
# bindings - one row per executable element in the three cornerstones.
# Each row names the element, says which target performs it,
# and in which execution mode.
#
# Each binding carries:
# element - "<cornerstone>.<kind>:<id>" e.g. bpmn.task:Task_DispatchBroadcast
# label - the human label as it appears in the diagram, so a reader can
# point at a box on the canvas and find its row here.
# targetId - the single primary target that performs the element.
# mode - manual : a person performs it, no automation
# assisted : a system/AI proposes, a person approves
# supervised : a system performs it, a person monitors
# autonomous : a system performs it without per-call review
#
# Consulted / informed parties (RACI C and I) are NOT bindings; they are in
# docs/02-raci.md. Endpoints and credentials below are ILLUSTRATIVE draft
# placeholders.
# ===========================================================================
legend:
cornerstones:
bpmn: bpmn/drone-threat-public-address.bpmn
dmn: dmn/air-threat-decisions.dmn
cmmn: cmmn/field-response-investigation.cmmn
element_kinds:
bpmn.task: A BPMN activity (plain, business-rule or user task).
dmn.decision: A DMN decision evaluated by a BPMN business-rule task.
cmmn.humanTask: A discretionary human task inside the investigation case.
modes: [manual, assisted, supervised, autonomous]
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
targets: targets:
- id: nbs.air-surveillance - id: nbs.air-surveillance
type: system_api type: system_api
name: NBS air surveillance and radar network name: NBS air-surveillance & radar network
description: Detection and tracking feed for airborne objects near the eastern border. description: Detection and tracking feed for airborne objects near the eastern border.
capabilities: capabilities: [lv.gov.civdef.air_surveillance_feed]
- lv.gov.civdef.air_surveillance_feed
endpoint: "https://surveillance.mil.lv/api/v1" endpoint: "https://surveillance.mil.lv/api/v1"
authentication: authentication: {method: mtls}
method: mtls availability: {schedule: always, timezone: Europe/Riga}
availability:
schedule: always
timezone: Europe/Riga
- id: nbs.joint-staff - id: nbs.joint-staff
type: human_role type: human_role
name: NBS Joint Staff (Apvienotais stabs), operational duty name: NBS Joint Staff (Apvienotais stabs), operational duty
description: Holds threat-classification and notification-request authority. description: >-
availability: Holds air-threat classification, public-notification request and
schedule: always interception authorisation authority. The decision owner of this process.
timezone: Europe/Riga availability: {schedule: always, timezone: Europe/Riga}
- id: nbs.air-defence - id: nbs.air-defence
type: human_role type: human_role
name: NBS air-defence units (pretgaisa aizsardziba) name: NBS air-defence units (pretgaisa aizsardziba)
description: Ground air-defence; coordinates interception, including with NATO Baltic Air Policing. description: Ground-based air defence; executes or coordinates interception.
- id: vugd.duty - id: vugd.duty
type: human_role type: human_role
name: VUGD operational duty / 112 (State Fire and Rescue Service) name: VUGD operational duty / 112 (State Fire and Rescue Service)
description: Receives 112 calls and executes site fire and rescue response. description: Receives 112 calls; executes site fire and rescue response.
- id: vugd.cell-broadcast - id: vugd.cell-broadcast
type: system_api type: system_api
name: Cell-broadcast system (sunu apraide), operated by VUGD name: Cell-broadcast system (sunu apraide), operated by VUGD
description: Public early-warning cell-broadcast platform. description: >-
capabilities: Public early-warning cell-broadcast platform. The 40-minute dispatch
- lv.gov.civdef.cell_broadcast delay to Rezekne on 7 May 2026 is the failure this package addresses.
capabilities: [lv.gov.civdef.cell_broadcast]
endpoint: "https://cb.vugd.gov.lv/api/v1" endpoint: "https://cb.vugd.gov.lv/api/v1"
authentication: authentication: {method: api_key, configRef: secrets/vugd-cell-broadcast}
method: api_key availability: {schedule: always, timezone: Europe/Riga}
configRef: secrets/vugd-cell-broadcast
availability:
schedule: always
timezone: Europe/Riga
- id: vp.duty - id: vp.duty
type: human_role type: human_role
name: State Police (Valsts policija) operational duty name: State Police (Valsts policija) operational duty
description: Scene security, access control and public order at incident sites. description: Scene security, cordon and public order at incident sites.
- id: nmpd.duty
type: human_role
name: Emergency Medical Service (NMPD) operational duty
description: Casualty assessment and pre-hospital medical response.
- id: kvc - id: kvc
type: human_role type: human_role
name: Crisis Management Centre (Krizes vadibas centrs) name: Crisis Management Centre (Krizes vadibas centrs)
description: Cross-institutional crisis coordination and after-action review. description: Cross-institutional crisis coordination, escalation and after-action review.
- id: iem.duty
type: human_role
name: Ministry of the Interior (Iekslietu ministrija) duty
description: Interior-sector coordination across VP, VUGD and the State Border Guard.
- id: am - id: am
type: human_role type: human_role
name: Ministry of Defence (Aizsardzibas ministrija) name: Ministry of Defence (Aizsardzibas ministrija)
description: Public communication, origin attribution oversight and algorithm governance. description: Public communication, origin attribution oversight, algorithm governance.
- id: municipal.civil-protection - id: municipal.civil-protection
type: human_role type: human_role
name: Municipal civil-protection commissions (cooperation territories) name: Municipal civil-protection commissions (cooperation territories)
description: Local civil-protection response and resident enquiry handling. description: Local civil-protection response and resident enquiry handling.
- id: nato.bap
type: external_party
name: NATO Baltic Air Policing
description: Allied air-policing detachment; executes air interception when tasked.
- id: agent.threat-assessment - id: agent.threat-assessment
type: ai_agent type: ai_agent
name: Civil-defence threat-assessment assistant name: Civil-defence threat-assessment assistant
description: AI assistant that recommends air-threat severity; advisory only. description: >-
capabilities: AI assistant that recommends object classification and air-threat
- ai.classify severity. Advisory only; never authorises action (see guardrails).
- ai.complete capabilities: [ai.classify, ai.complete]
endpoint: "mcp://agents/civdef-threat-assessment" endpoint: "mcp://agents/civdef-threat-assessment"
authentication: authentication: {method: did}
method: did
- id: mcp.osint-monitor - id: mcp.osint-monitor
type: mcp_tool type: mcp_tool
name: OSINT / disinformation monitoring MCP tool name: OSINT / disinformation monitoring MCP tool
description: MCP tool that surfaces and classifies disinformation about the incident. description: Surfaces and classifies disinformation about the incident.
capabilities: capabilities: [ai.classify]
- ai.classify
endpoint: "mcp://lv-civdef/osint-monitor" endpoint: "mcp://lv-civdef/osint-monitor"
authentication: authentication: {method: oauth2, configRef: secrets/osint-monitor-oauth}
method: oauth2
configRef: secrets/osint-monitor-oauth
# ---------------------------------------------------------------------------
# Bindings — each process / decision / case element bound to exactly one
# primary target. mode: manual = human only, assisted = AI suggests / human
# approves, autonomous = system executes, supervised = system executes with
# monitoring.
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
bindings: bindings:
# --- BPMN process tasks ---
- source: # ---- BPMN process tasks ----
type: bpmn.task - element: "bpmn.task:Task_TrackObject"
ref: "Task_Classify" label: "Establish & maintain object track"
targetId: nbs.air-surveillance targetId: nbs.air-surveillance
mode: supervised mode: supervised
requiredCapabilities: requiredCapabilities: [lv.gov.civdef.air_surveillance_feed]
- lv.gov.civdef.air_surveillance_feed contract: {timeout: "continuous"}
contract:
timeout: "60s"
notes: "NBS Joint Staff supervises classification of the surveillance feed."
- source: - element: "bpmn.task:Task_ClassifyObject"
type: bpmn.task label: "Classify object [Object classification]"
ref: "Task_RequestBroadcast"
targetId: nbs.joint-staff
mode: manual
contract:
timeout: "5m"
fallback:
escalationPath:
- kvc
onTimeout: escalate
notes: >-
GAP G2: in the AS-IS algorithm this request is the single trigger. The
escalation path to KVC is a proposed v0.3 fallback authority, not yet
institutionally agreed.
- source:
type: bpmn.task
ref: "Task_CellBroadcast"
targetId: vugd.cell-broadcast
mode: autonomous
requiredCapabilities:
- lv.gov.civdef.cell_broadcast
contract:
timeout: "30s"
retries:
maxAttempts: 2
backoffMs: 2000
notes: "VUGD operational duty owns the platform; dispatch is automated on request."
- source:
type: bpmn.task
ref: "Task_NotifyAgencies"
targetId: nbs.joint-staff
mode: assisted
notes: >-
Parallel notification to KVC, IeM and municipal civil-protection
commissions. KVC, IeM and municipalities are informed parties.
- source:
type: bpmn.task
ref: "Task_CoordBAP"
targetId: nbs.air-defence
mode: manual
notes: >-
NBS air-defence coordinates the response; air interception is executed by
NATO Baltic Air Policing per Decision_InterceptionAuthorization rationale
R_BAP_AIR. NATO BAP is an external party reached through this binding.
- source:
type: bpmn.task
ref: "Task_LocalResponse"
targetId: municipal.civil-protection
mode: manual
notes: >-
State Police support scene response; the Ministry of Education and
Science (IZM) is consulted for school-closure guidance (GAP G8).
- source:
type: bpmn.task
ref: "Task_AllClear"
targetId: vugd.cell-broadcast
mode: autonomous
contract:
timeout: "30s"
notes: "All-clear broadcast issued on NBS Joint Staff declaration."
# --- DMN decisions ---
- source:
type: dmn.decision
ref: "Decision_AirThreatSeverity"
targetId: agent.threat-assessment targetId: agent.threat-assessment
mode: assisted mode: assisted
requiredCapabilities: requiredCapabilities: [ai.classify]
- ai.classify notes: "AI proposes the object class; NBS Air Surveillance confirms."
notes: "AI recommends severity; NBS Joint Staff confirms. Advisory only per guardrails."
- source: - element: "bpmn.task:Task_AssessSeverity"
type: dmn.decision label: "Assess air-threat severity [Air-threat severity]"
ref: "Decision_CellBroadcastScope" targetId: nbs.joint-staff
mode: assisted
notes: "AI severity recommendation; NBS Joint Staff confirms the threat level."
- element: "bpmn.task:Task_LogAndMonitor"
label: "Log & monitor (no public alert)"
targetId: nbs.air-surveillance
mode: supervised
- element: "bpmn.task:Task_DetermineUrgency"
label: "Determine notification urgency & SLA [Notification urgency]"
targetId: nbs.joint-staff
mode: assisted
notes: "Output broadcastSlaSeconds becomes the timer on Task_DispatchBroadcast."
- element: "bpmn.task:Task_DetermineBroadcast"
label: "Determine cell-broadcast scope [Cell-broadcast scope]"
targetId: nbs.joint-staff
mode: assisted
notes: "VARAM consulted on the cell-broadcast platform; templates are pre-typed (GAP G3)."
- element: "bpmn.task:Task_AuthorizeBroadcast"
label: "Authorize public broadcast"
targetId: nbs.joint-staff targetId: nbs.joint-staff
mode: manual mode: manual
notes: "VARAM consulted on the cell-broadcast platform; message templates are typed (GAP G3)." contract: {timeout: "PT3M"}
fallback: {escalationPath: [kvc], onTimeout: escalate}
notes: >-
GAP G2: in the AS-IS algorithm this authority is the single point of
failure. The KVC escalation path is a proposed v0.3 fallback authority,
not yet institutionally agreed.
- source: - element: "bpmn.task:Task_DispatchBroadcast"
type: dmn.decision label: "Dispatch public cell-broadcast"
ref: "Decision_InterceptionAuthorization" targetId: vugd.cell-broadcast
mode: autonomous
requiredCapabilities: [lv.gov.civdef.cell_broadcast]
contract:
timeout: "from-decision:broadcastSlaSeconds"
retries: {maxAttempts: 2, backoffMs: 2000}
notes: >-
The non-interrupting SLA-breach boundary timer fires if dispatch is not
confirmed within broadcastSlaSeconds and triggers Task_EscalateSla.
- element: "bpmn.task:Task_EscalateSla"
label: "Escalate SLA breach to Crisis Mgmt"
targetId: kvc
mode: manual
notes: "Runs only when the SLA boundary timer fires; this is the Rezekne safeguard."
- element: "bpmn.task:Task_NotifyAgencies"
label: "Notify KVC, IeM & municipal commissions"
targetId: nbs.joint-staff
mode: assisted
notes: "KVC, IeM and municipal commissions are informed parties."
- element: "bpmn.task:Task_AuthorizeInterception"
label: "Authorize interception [Interception authorization]"
targetId: nbs.joint-staff targetId: nbs.joint-staff
mode: manual mode: manual
notes: "Safety criteria made explicit and inspectable (GAP G7)." notes: "Decision logic gates engagement on positive hostile ID and safety (GAP G7)."
# --- CMMN case human tasks --- - element: "bpmn.task:Task_GroundEngage"
- source: label: "Ground air-defence engagement"
type: cmmn.humanTask targetId: nbs.air-defence
ref: "HT_DebrisSearch" mode: manual
- element: "bpmn.task:Task_RequestBAP"
label: "Request NATO BAP engagement"
targetId: nato.bap
mode: manual
notes: "Cross-pool message flow; NATO BAP executes air interception when tasked."
- element: "bpmn.task:Task_MaintainTrack"
label: "Maintain track & monitor"
targetId: nbs.air-surveillance
mode: supervised
- element: "bpmn.task:Task_AssessStandDown"
label: "Assess stand-down criteria [Stand-down & all-clear]"
targetId: nbs.joint-staff
mode: assisted
- element: "bpmn.task:Task_AllClearBroadcast"
label: "Dispatch all-clear broadcast"
targetId: vugd.cell-broadcast
mode: autonomous
requiredCapabilities: [lv.gov.civdef.cell_broadcast]
contract: {timeout: "PT30S"}
- element: "bpmn.task:Task_HandToInvestigation"
label: "Open field-response & investigation case"
targetId: kvc
mode: manual
notes: "Instantiates the CMMN case Case_FieldResponseInvestigation."
# ---- DMN decisions ----
- element: "dmn.decision:Decision_ObjectClassification"
label: "Object classification & confidence"
targetId: agent.threat-assessment
mode: assisted
requiredCapabilities: [ai.classify]
- element: "dmn.decision:Decision_AirThreatSeverity"
label: "Air-threat severity"
targetId: nbs.joint-staff
mode: assisted
- element: "dmn.decision:Decision_NotificationUrgency"
label: "Notification urgency & SLA"
targetId: nbs.joint-staff
mode: supervised
notes: "Deterministic table; NBS Joint Staff may override the SLA tier upward."
- element: "dmn.decision:Decision_CellBroadcastScope"
label: "Cell-broadcast scope & message"
targetId: nbs.joint-staff
mode: supervised
- element: "dmn.decision:Decision_InterceptionAuthorization"
label: "Interception authorization"
targetId: nbs.joint-staff targetId: nbs.joint-staff
mode: manual mode: manual
notes: "State Police support crash-site localisation." notes: "Evaluated as decision support; the engage outcome still requires manual command authority."
- source: - element: "dmn.decision:Decision_StandDownCriteria"
type: cmmn.humanTask label: "Stand-down & all-clear"
ref: "HT_FireSuppression" targetId: nbs.joint-staff
mode: supervised
# ---- CMMN case human tasks ----
- element: "cmmn.humanTask:HT_DebrisLocalisation"
label: "Localise crash / debris site"
targetId: nbs.joint-staff
mode: manual
notes: "State Police and municipal commissions support localisation."
- element: "cmmn.humanTask:HT_FireSuppression"
label: "Fire suppression at impact site"
targetId: vugd.duty targetId: vugd.duty
mode: manual mode: manual
- source: - element: "cmmn.humanTask:HT_SceneSecurity"
type: cmmn.humanTask label: "Establish scene cordon & security"
ref: "HT_SceneSecurity"
targetId: vp.duty targetId: vp.duty
mode: manual mode: manual
- source: - element: "cmmn.humanTask:HT_CasualtyResponse"
type: cmmn.humanTask label: "Casualty assessment & medical response"
ref: "HT_MunicipalQA" targetId: nmpd.duty
mode: manual
- element: "cmmn.humanTask:HT_MunicipalEnquiries"
label: "Handle resident enquiries (112 / municipal)"
targetId: municipal.civil-protection targetId: municipal.civil-protection
mode: manual mode: manual
- source: - element: "cmmn.humanTask:HT_DebrisCollection"
type: cmmn.humanTask label: "Collect & catalogue debris"
ref: "HT_TechExam"
targetId: nbs.joint-staff targetId: nbs.joint-staff
mode: manual mode: manual
- source: - element: "cmmn.humanTask:HT_TechnicalExam"
type: cmmn.humanTask label: "Technical examination of the UAV"
ref: "HT_OriginAttribution"
targetId: nbs.joint-staff targetId: nbs.joint-staff
mode: assisted mode: assisted
notes: "Ministry of Defence consulted; AI may assist analysis but not attribute autonomously." requiredCapabilities: [ai.classify]
notes: "AI may assist component analysis; conclusions are human-confirmed."
- source: - element: "cmmn.humanTask:HT_OriginAttribution"
type: cmmn.humanTask label: "Origin attribution analysis"
ref: "HT_DisinfoMonitor" targetId: nbs.joint-staff
mode: assisted
notes: "Ministry of Defence consulted; AI may assist but never attributes autonomously."
- element: "cmmn.humanTask:HT_DisinfoMonitor"
label: "Monitor & counter disinformation"
targetId: mcp.osint-monitor targetId: mcp.osint-monitor
mode: assisted mode: assisted
requiredCapabilities: requiredCapabilities: [ai.classify]
- ai.classify notes: "Disinformation surfaced via MCP tool; a human reviews before any correction."
notes: "Disinformation surfaced and classified via MCP tool; human reviews before correction."
- source: - element: "cmmn.humanTask:HT_PressBriefing"
type: cmmn.humanTask label: "Public press briefing"
ref: "HT_Press"
targetId: am targetId: am
mode: manual mode: manual
notes: "KVC consulted; public communication requires human oversight per guardrails." notes: "KVC consulted; public communication requires human authorship per guardrails."
- source: - element: "cmmn.humanTask:HT_AfterAction"
type: cmmn.humanTask label: "Inter-institutional after-action review"
ref: "HT_AfterAction"
targetId: kvc targetId: kvc
mode: manual mode: manual
notes: "Ministry of Defence accountable; Government Crisis Management Council informed." notes: "Ministry of Defence accountable; feeds algorithm revision."

View File

@@ -2,56 +2,85 @@ kind: uapf.package
id: lv.civdef.drone-threat-public-address id: lv.civdef.drone-threat-public-address
name: Drone Threat Public Address & Citizen Notification name: Drone Threat Public Address & Citizen Notification
description: >- description: >-
Level-4 process package modelling the cross-institutional algorithm for Level-4 UAPF process package modelling the cross-institutional algorithm by
detecting an unmanned-aerial-vehicle (drone) threat over Latvian airspace, which Latvia detects an unmanned-aerial-vehicle (drone) threat over national
deciding on and triggering public cell-broadcast notification, coordinating airspace, decides on and dispatches a public cell-broadcast within a bounded
interception, and conducting field response and origin investigation. notification SLA, authorises and coordinates interception, and conducts field
Derived from the public chronology of the 7 May 2026 Rezekne drone incident response and drone-origin investigation. Derived from the public chronology
and the Ministry of Defence commitment to revise the inter-institutional of the 7 May 2026 Rezekne drone incident and the Ministry of Defence
notification algorithms. commitment to revise the inter-institutional notification algorithms. This is
an independent modelling demonstrator, not an official state algorithm.
level: 4 level: 4
version: "0.2.0" version: "0.3.0"
includes: [] includes: []
dependencies: {} dependencies: {}
cornerstones: cornerstones:
bpmn: true bpmn: true
dmn: true dmn: true
cmmn: true cmmn: true
resources: true resources: true
paths: paths:
bpmn: bpmn bpmn: bpmn
dmn: dmn dmn: dmn
cmmn: cmmn cmmn: cmmn
resources: resources resources: resources
metadata: metadata metadata: metadata
artifacts: artifacts:
bpmn: bpmn:
- path: bpmn/drone-threat-public-address.bpmn - path: bpmn/drone-threat-public-address.bpmn
role: primary-process role: primary-process
description: End-to-end detection, notification, interception and field-response flow. description: >-
End-to-end detection, classification, public notification, interception
and field-response flow across six institution lanes, with a
non-interrupting SLA-breach boundary timer on the cell-broadcast task.
dmn: dmn:
- path: dmn/air-threat-decisions.dmn - path: dmn/air-threat-decisions.dmn
role: decision-model role: decision-model
description: Three decisions — air-threat severity, cell-broadcast scope, interception authorization. description: >-
Six chained, individually documented decisions — object classification,
air-threat severity, notification urgency & SLA, cell-broadcast scope,
interception authorization, and stand-down criteria.
cmmn: cmmn:
- path: cmmn/field-response-investigation.cmmn - path: cmmn/field-response-investigation.cmmn
role: case-model role: case-model
description: Discretionary field response and drone-origin investigation case. description: >-
Discretionary field-response, drone-origin investigation and public
communication case, structured as three stages with entry sentries.
resources: resources:
- path: resources/mappings.yaml - path: resources/mappings.yaml
role: resource-mapping role: resource-mapping
description: Institution and system targets bound to process, decision and case elements. description: >-
Every process, decision and case element bound to a primary executing
target, with an element-level legend for tracing bindings to diagrams.
- path: resources/guardrails.yaml - path: resources/guardrails.yaml
role: ip-guardrails role: ip-guardrails
description: UAPF-IP guardrails policy snapshot enforced at every capability call. description: UAPF-IP guardrail policy enforced at every capability call.
inputs: inputs:
- airborneObjectTrack - airborneObjectTrack
- objectClassification - radarCrossSection
- emissionProfile
- visualConfirmation
- airspaceStatus
- trajectoryTowardPopulated
- distanceToPopulatedKm
- estimatedMinutesToPopulated
- borderProximityTier - borderProximityTier
- corridorMunicipalities
- positiveHostileId
outputs: outputs:
- threatLevel
- notificationTier
- broadcastSlaSeconds
- cellBroadcastDispatch - cellBroadcastDispatch
- interceptionDecision - interceptionDecision
- incidentReport - standDownDecision
- incidentCaseRef
exposure: exposure:
mcp: mcp:
enabled: true enabled: true
@@ -59,33 +88,45 @@ exposure:
exposedEntrypoints: exposedEntrypoints:
- process: Process_DroneThreatPublicAddress - process: Process_DroneThreatPublicAddress
tool: drone_threat_public_address.run tool: drone_threat_public_address.run
- decision: Decision_ObjectClassification
tool: object_classification.evaluate
- decision: Decision_AirThreatSeverity - decision: Decision_AirThreatSeverity
tool: air_threat_severity.evaluate tool: air_threat_severity.evaluate
- decision: Decision_NotificationUrgency
tool: notification_urgency.evaluate
- decision: Decision_CellBroadcastScope - decision: Decision_CellBroadcastScope
tool: cell_broadcast_scope.evaluate tool: cell_broadcast_scope.evaluate
- decision: Decision_InterceptionAuthorization - decision: Decision_InterceptionAuthorization
tool: interception_authorization.evaluate tool: interception_authorization.evaluate
- decision: Decision_StandDownCriteria
tool: stand_down_criteria.evaluate
exposedArtifacts: exposedArtifacts:
- manifest - manifest
- bpmn - bpmn
- dmn - dmn
- cmmn - cmmn
- docs - docs
requires_capabilities: requires_capabilities:
- task.assign@1+ - task.assign@1+
- task.complete@1+ - task.complete@1+
- task.escalate@1+ - task.escalate@1+
- event.emit@1+ - event.emit@1+
- timer.schedule@1+
- ai.classify@1+ - ai.classify@1+
- ai.complete@1+ - ai.complete@1+
- lv.gov.civdef.air_surveillance_feed@1+ - lv.gov.civdef.air_surveillance_feed@1+
- lv.gov.civdef.cell_broadcast@1+ - lv.gov.civdef.cell_broadcast@1+
profiles_supported: profiles_supported:
- uapf-ip-orchestrated - uapf-ip-orchestrated
- uapf-ip-sync-decision - uapf-ip-sync-decision
guardrails: resources/guardrails.yaml guardrails: resources/guardrails.yaml
owners: owners:
- type: person - type: person
id: rihards.gailums id: rihards.gailums
contact: rihards.gailums@gmail.com contact: rihards.gailums@gmail.com
lifecycle: draft lifecycle: draft