MCP Server
Active
1
0

Import UAPF package: incident-triage.uapf

This commit is contained in:
2026-06-01 18:25:37 +00:00
commit 7fe0fda7a5
26 changed files with 2509 additions and 0 deletions

274
bpmn/incident-triage.bpmn Normal file
View File

@@ -0,0 +1,274 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions
xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:uapf="https://uapf.dev/bpmn-ext/v1"
xmlns:uapf24="https://uapf.dev/bpmn/v2.4"
id="Definitions_IncidentTriage"
targetNamespace="https://uapf.dev/processes/lv.itsm.incident.triage"
exporter="openitsm-uapf-generator" exporterVersion="1.0.0">
<bpmn:process id="Process_IncidentTriage" name="Incident Triage" isExecutable="true">
<bpmn:documentation>
Linear UAPF process invoked by OpenITSM intake. Each step is a host-fulfilled
UAPF-IP capability call governed by an Algorithm Card under algorithms/.
The three dmn.evaluate@1 invocations read priority.dmn / ownership.dmn /
routing.dmn from the package's dmn/ cornerstone.
</bpmn:documentation>
<bpmn:startEvent id="Start" name="Signal received">
<bpmn:outgoing>Flow_01</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:serviceTask id="Task_NormalizeSignal"
name="Normalize signal"
uapf:capability="intake.normalize@1"
uapf24:algorithmCardRef="algo.incident_triage.normalize_signal">
<bpmn:documentation>Reads the freshly-received Signal row and folds the source-specific payload (Zabbix / IMAP / Jira / manual) into a uniform shape downstream cards expect.</bpmn:documentation>
<bpmn:incoming>Flow_01</bpmn:incoming>
<bpmn:outgoing>Flow_02</bpmn:outgoing>
<bpmn:ioSpecification>
<bpmn:dataInput id="Task_NormalizeSignal_in_signal_id" name="signal_id : string"/>
<bpmn:dataOutput id="Task_NormalizeSignal_out_normalized_payload" name="normalized_payload : object"/>
<bpmn:dataOutput id="Task_NormalizeSignal_out_dedupe_hash" name="dedupe_hash : string"/>
<bpmn:dataOutput id="Task_NormalizeSignal_out_source_kind" name="source_kind : string"/>
<bpmn:inputSet>
<bpmn:dataInputRefs>Task_NormalizeSignal_in_signal_id</bpmn:dataInputRefs>
</bpmn:inputSet>
<bpmn:outputSet>
<bpmn:dataOutputRefs>Task_NormalizeSignal_out_normalized_payload</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_NormalizeSignal_out_dedupe_hash</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_NormalizeSignal_out_source_kind</bpmn:dataOutputRefs>
</bpmn:outputSet>
</bpmn:ioSpecification>
</bpmn:serviceTask>
<bpmn:serviceTask id="Task_ClassifyIncident"
name="Classify incident"
uapf:capability="ai.classify@1"
uapf24:algorithmCardRef="algo.incident_triage.classify_incident">
<bpmn:documentation>Picks one taxonomy code from a closed list. LLM-backed at runtime with deterministic regex fallback.</bpmn:documentation>
<bpmn:incoming>Flow_02</bpmn:incoming>
<bpmn:outgoing>Flow_03</bpmn:outgoing>
<bpmn:ioSpecification>
<bpmn:dataInput id="Task_ClassifyIncident_in_payload" name="payload : object"/>
<bpmn:dataInput id="Task_ClassifyIncident_in_text" name="text : string"/>
<bpmn:dataOutput id="Task_ClassifyIncident_out_taxonomy_code" name="taxonomy_code : string"/>
<bpmn:dataOutput id="Task_ClassifyIncident_out_confidence" name="confidence : number"/>
<bpmn:dataOutput id="Task_ClassifyIncident_out_reasoning" name="reasoning : string"/>
<bpmn:dataOutput id="Task_ClassifyIncident_out_label_hint" name="label_hint : string"/>
<bpmn:inputSet>
<bpmn:dataInputRefs>Task_ClassifyIncident_in_payload</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_ClassifyIncident_in_text</bpmn:dataInputRefs>
</bpmn:inputSet>
<bpmn:outputSet>
<bpmn:dataOutputRefs>Task_ClassifyIncident_out_taxonomy_code</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_ClassifyIncident_out_confidence</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_ClassifyIncident_out_reasoning</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_ClassifyIncident_out_label_hint</bpmn:dataOutputRefs>
</bpmn:outputSet>
</bpmn:ioSpecification>
</bpmn:serviceTask>
<bpmn:serviceTask id="Task_SuggestPriority"
name="Suggest priority"
uapf:capability="ai.suggest_priority@1"
uapf24:algorithmCardRef="algo.incident_triage.suggest_priority">
<bpmn:documentation>Soft P1..P4 suggestion from severity x service_tier x classification. The downstream DMN makes the binding decision.</bpmn:documentation>
<bpmn:incoming>Flow_03</bpmn:incoming>
<bpmn:outgoing>Flow_04</bpmn:outgoing>
<bpmn:ioSpecification>
<bpmn:dataInput id="Task_SuggestPriority_in_severity" name="severity : string"/>
<bpmn:dataInput id="Task_SuggestPriority_in_service_tier" name="service_tier : string"/>
<bpmn:dataInput id="Task_SuggestPriority_in_classification" name="classification : string"/>
<bpmn:dataOutput id="Task_SuggestPriority_out_priority" name="priority : string"/>
<bpmn:dataOutput id="Task_SuggestPriority_out_reason" name="reason : string"/>
<bpmn:inputSet>
<bpmn:dataInputRefs>Task_SuggestPriority_in_severity</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_SuggestPriority_in_service_tier</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_SuggestPriority_in_classification</bpmn:dataInputRefs>
</bpmn:inputSet>
<bpmn:outputSet>
<bpmn:dataOutputRefs>Task_SuggestPriority_out_priority</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_SuggestPriority_out_reason</bpmn:dataOutputRefs>
</bpmn:outputSet>
</bpmn:ioSpecification>
</bpmn:serviceTask>
<bpmn:serviceTask id="Task_EvaluatePriorityDmn"
name="Evaluate priority DMN"
uapf:capability="dmn.evaluate@1"
uapf24:algorithmCardRef="algo.incident_triage.evaluate_dmn">
<bpmn:documentation>Binding priority decision: FIRST-hit DMN over severity, service_tier, ai_suggested_priority, classification.</bpmn:documentation>
<bpmn:incoming>Flow_04</bpmn:incoming>
<bpmn:outgoing>Flow_05</bpmn:outgoing>
<bpmn:ioSpecification>
<bpmn:dataInput id="Task_EvaluatePriorityDmn_in_package_id" name="package_id : string"/>
<bpmn:dataInput id="Task_EvaluatePriorityDmn_in_decision_id" name="decision_id : string"/>
<bpmn:dataInput id="Task_EvaluatePriorityDmn_in_inputs" name="inputs : object"/>
<bpmn:dataOutput id="Task_EvaluatePriorityDmn_out_output" name="output : object"/>
<bpmn:dataOutput id="Task_EvaluatePriorityDmn_out_hit_rule_ids" name="hit_rule_ids : array"/>
<bpmn:dataOutput id="Task_EvaluatePriorityDmn_out_hit_policy" name="hit_policy : string"/>
<bpmn:inputSet>
<bpmn:dataInputRefs>Task_EvaluatePriorityDmn_in_package_id</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_EvaluatePriorityDmn_in_decision_id</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_EvaluatePriorityDmn_in_inputs</bpmn:dataInputRefs>
</bpmn:inputSet>
<bpmn:outputSet>
<bpmn:dataOutputRefs>Task_EvaluatePriorityDmn_out_output</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_EvaluatePriorityDmn_out_hit_rule_ids</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_EvaluatePriorityDmn_out_hit_policy</bpmn:dataOutputRefs>
</bpmn:outputSet>
</bpmn:ioSpecification>
</bpmn:serviceTask>
<bpmn:serviceTask id="Task_EvaluateOwnershipDmn"
name="Evaluate ownership DMN"
uapf:capability="dmn.evaluate@1"
uapf24:algorithmCardRef="algo.incident_triage.evaluate_dmn">
<bpmn:documentation>Binding ownership decision: stay inside LVRTC or hand off externally based on classification + host_domain + source.</bpmn:documentation>
<bpmn:incoming>Flow_05</bpmn:incoming>
<bpmn:outgoing>Flow_06</bpmn:outgoing>
<bpmn:ioSpecification>
<bpmn:dataInput id="Task_EvaluateOwnershipDmn_in_package_id" name="package_id : string"/>
<bpmn:dataInput id="Task_EvaluateOwnershipDmn_in_decision_id" name="decision_id : string"/>
<bpmn:dataInput id="Task_EvaluateOwnershipDmn_in_inputs" name="inputs : object"/>
<bpmn:dataOutput id="Task_EvaluateOwnershipDmn_out_output" name="output : object"/>
<bpmn:dataOutput id="Task_EvaluateOwnershipDmn_out_hit_rule_ids" name="hit_rule_ids : array"/>
<bpmn:dataOutput id="Task_EvaluateOwnershipDmn_out_hit_policy" name="hit_policy : string"/>
<bpmn:inputSet>
<bpmn:dataInputRefs>Task_EvaluateOwnershipDmn_in_package_id</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_EvaluateOwnershipDmn_in_decision_id</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_EvaluateOwnershipDmn_in_inputs</bpmn:dataInputRefs>
</bpmn:inputSet>
<bpmn:outputSet>
<bpmn:dataOutputRefs>Task_EvaluateOwnershipDmn_out_output</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_EvaluateOwnershipDmn_out_hit_rule_ids</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_EvaluateOwnershipDmn_out_hit_policy</bpmn:dataOutputRefs>
</bpmn:outputSet>
</bpmn:ioSpecification>
</bpmn:serviceTask>
<bpmn:serviceTask id="Task_EvaluateRoutingDmn"
name="Evaluate routing DMN"
uapf:capability="dmn.evaluate@1"
uapf24:algorithmCardRef="algo.incident_triage.evaluate_dmn">
<bpmn:documentation>Picks the expert group (helpdesk-l1, noc-l1/l2, soc-l2, facility-l2, platform-l2, external-handoff) from classification + priority + ownership.</bpmn:documentation>
<bpmn:incoming>Flow_06</bpmn:incoming>
<bpmn:outgoing>Flow_07</bpmn:outgoing>
<bpmn:ioSpecification>
<bpmn:dataInput id="Task_EvaluateRoutingDmn_in_package_id" name="package_id : string"/>
<bpmn:dataInput id="Task_EvaluateRoutingDmn_in_decision_id" name="decision_id : string"/>
<bpmn:dataInput id="Task_EvaluateRoutingDmn_in_inputs" name="inputs : object"/>
<bpmn:dataOutput id="Task_EvaluateRoutingDmn_out_output" name="output : object"/>
<bpmn:dataOutput id="Task_EvaluateRoutingDmn_out_hit_rule_ids" name="hit_rule_ids : array"/>
<bpmn:dataOutput id="Task_EvaluateRoutingDmn_out_hit_policy" name="hit_policy : string"/>
<bpmn:inputSet>
<bpmn:dataInputRefs>Task_EvaluateRoutingDmn_in_package_id</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_EvaluateRoutingDmn_in_decision_id</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_EvaluateRoutingDmn_in_inputs</bpmn:dataInputRefs>
</bpmn:inputSet>
<bpmn:outputSet>
<bpmn:dataOutputRefs>Task_EvaluateRoutingDmn_out_output</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_EvaluateRoutingDmn_out_hit_rule_ids</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_EvaluateRoutingDmn_out_hit_policy</bpmn:dataOutputRefs>
</bpmn:outputSet>
</bpmn:ioSpecification>
</bpmn:serviceTask>
<bpmn:serviceTask id="Task_UpdateIncident"
name="Update incident state"
uapf:capability="incident.update@1"
uapf24:algorithmCardRef="algo.incident_triage.update_incident">
<bpmn:documentation>Applies the decided priority + ownership + assigned_group_id and transitions open -> triaged. All mutations in one DB transaction.</bpmn:documentation>
<bpmn:incoming>Flow_07</bpmn:incoming>
<bpmn:outgoing>Flow_08</bpmn:outgoing>
<bpmn:ioSpecification>
<bpmn:dataInput id="Task_UpdateIncident_in_case_id" name="case_id : string"/>
<bpmn:dataInput id="Task_UpdateIncident_in_patch" name="patch : object"/>
<bpmn:dataInput id="Task_UpdateIncident_in_status" name="status : string"/>
<bpmn:dataInput id="Task_UpdateIncident_in_reason" name="reason : string"/>
<bpmn:dataOutput id="Task_UpdateIncident_out_case_id" name="case_id : string"/>
<bpmn:dataOutput id="Task_UpdateIncident_out_new_status" name="new_status : string"/>
<bpmn:dataOutput id="Task_UpdateIncident_out_success" name="success : boolean"/>
<bpmn:dataOutput id="Task_UpdateIncident_out_event_ids" name="event_ids : array"/>
<bpmn:inputSet>
<bpmn:dataInputRefs>Task_UpdateIncident_in_case_id</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_UpdateIncident_in_patch</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_UpdateIncident_in_status</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_UpdateIncident_in_reason</bpmn:dataInputRefs>
</bpmn:inputSet>
<bpmn:outputSet>
<bpmn:dataOutputRefs>Task_UpdateIncident_out_case_id</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_UpdateIncident_out_new_status</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_UpdateIncident_out_success</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_UpdateIncident_out_event_ids</bpmn:dataOutputRefs>
</bpmn:outputSet>
</bpmn:ioSpecification>
</bpmn:serviceTask>
<bpmn:serviceTask id="Task_DraftResponse"
name="Draft customer response"
uapf:capability="ai.draft_response@1"
uapf24:algorithmCardRef="algo.incident_triage.draft_response">
<bpmn:documentation>Drafts a parallel Latvian + English customer notification. Produces an AIDecision row with requires_human_approval=true. Operator must approve before any outbound transport adapter runs.</bpmn:documentation>
<bpmn:incoming>Flow_08</bpmn:incoming>
<bpmn:outgoing>Flow_09</bpmn:outgoing>
<bpmn:ioSpecification>
<bpmn:dataInput id="Task_DraftResponse_in_case_id" name="case_id : string"/>
<bpmn:dataInput id="Task_DraftResponse_in_locale" name="locale : string"/>
<bpmn:dataInput id="Task_DraftResponse_in_what_happened" name="what_happened : string"/>
<bpmn:dataInput id="Task_DraftResponse_in_eta_minutes" name="eta_minutes : integer"/>
<bpmn:dataOutput id="Task_DraftResponse_out_subject_lv" name="subject_lv : string"/>
<bpmn:dataOutput id="Task_DraftResponse_out_subject_en" name="subject_en : string"/>
<bpmn:dataOutput id="Task_DraftResponse_out_body_lv" name="body_lv : string"/>
<bpmn:dataOutput id="Task_DraftResponse_out_body_en" name="body_en : string"/>
<bpmn:dataOutput id="Task_DraftResponse_out_locale" name="locale : string"/>
<bpmn:inputSet>
<bpmn:dataInputRefs>Task_DraftResponse_in_case_id</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_DraftResponse_in_locale</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_DraftResponse_in_what_happened</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_DraftResponse_in_eta_minutes</bpmn:dataInputRefs>
</bpmn:inputSet>
<bpmn:outputSet>
<bpmn:dataOutputRefs>Task_DraftResponse_out_subject_lv</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_DraftResponse_out_subject_en</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_DraftResponse_out_body_lv</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_DraftResponse_out_body_en</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_DraftResponse_out_locale</bpmn:dataOutputRefs>
</bpmn:outputSet>
</bpmn:ioSpecification>
</bpmn:serviceTask>
<bpmn:serviceTask id="Task_EmitEvent"
name="Emit routed event"
uapf:capability="event.emit@1"
uapf24:algorithmCardRef="algo.incident_triage.emit_event">
<bpmn:documentation>Emits the closing 'routed' CaseEvent. Payload echoes classification, priority, ownership, group_slug for the timeline.</bpmn:documentation>
<bpmn:incoming>Flow_09</bpmn:incoming>
<bpmn:outgoing>Flow_10</bpmn:outgoing>
<bpmn:ioSpecification>
<bpmn:dataInput id="Task_EmitEvent_in_case_id" name="case_id : string"/>
<bpmn:dataInput id="Task_EmitEvent_in_type" name="type : string"/>
<bpmn:dataInput id="Task_EmitEvent_in_payload" name="payload : object"/>
<bpmn:dataInput id="Task_EmitEvent_in_actor_label" name="actor_label : string"/>
<bpmn:dataOutput id="Task_EmitEvent_out_event_id" name="event_id : string"/>
<bpmn:dataOutput id="Task_EmitEvent_out_recorded_at" name="recorded_at : string"/>
<bpmn:inputSet>
<bpmn:dataInputRefs>Task_EmitEvent_in_case_id</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_EmitEvent_in_type</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_EmitEvent_in_payload</bpmn:dataInputRefs>
<bpmn:dataInputRefs>Task_EmitEvent_in_actor_label</bpmn:dataInputRefs>
</bpmn:inputSet>
<bpmn:outputSet>
<bpmn:dataOutputRefs>Task_EmitEvent_out_event_id</bpmn:dataOutputRefs>
<bpmn:dataOutputRefs>Task_EmitEvent_out_recorded_at</bpmn:dataOutputRefs>
</bpmn:outputSet>
</bpmn:ioSpecification>
</bpmn:serviceTask>
<bpmn:endEvent id="End" name="Triage complete">
<bpmn:incoming>Flow_10</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_01" sourceRef="Start" targetRef="Task_NormalizeSignal"/>
<bpmn:sequenceFlow id="Flow_02" sourceRef="Task_NormalizeSignal" targetRef="Task_ClassifyIncident"/>
<bpmn:sequenceFlow id="Flow_03" sourceRef="Task_ClassifyIncident" targetRef="Task_SuggestPriority"/>
<bpmn:sequenceFlow id="Flow_04" sourceRef="Task_SuggestPriority" targetRef="Task_EvaluatePriorityDmn"/>
<bpmn:sequenceFlow id="Flow_05" sourceRef="Task_EvaluatePriorityDmn" targetRef="Task_EvaluateOwnershipDmn"/>
<bpmn:sequenceFlow id="Flow_06" sourceRef="Task_EvaluateOwnershipDmn" targetRef="Task_EvaluateRoutingDmn"/>
<bpmn:sequenceFlow id="Flow_07" sourceRef="Task_EvaluateRoutingDmn" targetRef="Task_UpdateIncident"/>
<bpmn:sequenceFlow id="Flow_08" sourceRef="Task_UpdateIncident" targetRef="Task_DraftResponse"/>
<bpmn:sequenceFlow id="Flow_09" sourceRef="Task_DraftResponse" targetRef="Task_EmitEvent"/>
<bpmn:sequenceFlow id="Flow_10" sourceRef="Task_EmitEvent" targetRef="End"/>
</bpmn:process>
</bpmn:definitions>