1
0

Initial template import

This commit is contained in:
ProcessGit Templates
2026-02-05 21:19:40 +00:00
commit 4a0294c0af
20 changed files with 1010 additions and 0 deletions

4
.gitea/template Normal file
View File

@@ -0,0 +1,4 @@
# Expand placeholders across documentation and manifests
README.md
enterprise/**
packages/**

5
README.md Normal file
View File

@@ -0,0 +1,5 @@
# {{.RepoName}}
UAPF multi-process package template.
This repository demonstrates **two Level-4 processes** sharing common resources and mappings.

View File

@@ -0,0 +1,13 @@
kind: uapf.enterprise.index
level: 0
enterprise:
id: "{{.RepoName}}"
name: "{{.RepoName}}"
description: Multi-process enterprise template
packages:
- ref: ../processes/demo-process1
level: 4
domain: operations
- ref: ../processes/demo-process2
level: 4
domain: operations

View File

@@ -0,0 +1,82 @@
<?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:camunda="http://camunda.org/schema/1.0/bpmn"
id="Definitions_OrderFulfillment"
targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn:process id="OrderFulfillmentProcess" name="Order Fulfillment Process" isExecutable="true">
<bpmn:startEvent id="StartEvent_OrderReceived" name="Order Received">
<bpmn:outgoing>Flow_ToValidateOrder</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_ToValidateOrder" sourceRef="StartEvent_OrderReceived" targetRef="Task_ValidateOrder"/>
<bpmn:userTask id="Task_ValidateOrder" name="Validate Order" camunda:assignee="order.validator">
<bpmn:incoming>Flow_ToValidateOrder</bpmn:incoming>
<bpmn:outgoing>Flow_ToCheckInventory</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_ToCheckInventory" sourceRef="Task_ValidateOrder" targetRef="Task_CheckInventory"/>
<bpmn:serviceTask id="Task_CheckInventory" name="Check Inventory" camunda:type="external" camunda:topic="inventory-check">
<bpmn:incoming>Flow_ToCheckInventory</bpmn:incoming>
<bpmn:outgoing>Flow_ToInventoryGateway</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="Flow_ToInventoryGateway" sourceRef="Task_CheckInventory" targetRef="Gateway_InventoryAvailable"/>
<bpmn:exclusiveGateway id="Gateway_InventoryAvailable" name="Inventory Available?">
<bpmn:incoming>Flow_ToInventoryGateway</bpmn:incoming>
<bpmn:outgoing>Flow_ToPickPack</bpmn:outgoing>
<bpmn:outgoing>Flow_ToBackorder</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:sequenceFlow id="Flow_ToPickPack" name="Yes" sourceRef="Gateway_InventoryAvailable" targetRef="Task_PickAndPack">
<bpmn:conditionExpression>#{inventoryAvailable == true}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_ToBackorder" name="No" sourceRef="Gateway_InventoryAvailable" targetRef="Task_CreateBackorder">
<bpmn:conditionExpression>#{inventoryAvailable == false}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:userTask id="Task_PickAndPack" name="Pick and Pack Items" camunda:assignee="warehouse.worker">
<bpmn:incoming>Flow_ToPickPack</bpmn:incoming>
<bpmn:outgoing>Flow_ToShipOrder</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_ToShipOrder" sourceRef="Task_PickAndPack" targetRef="Task_ShipOrder"/>
<bpmn:serviceTask id="Task_ShipOrder" name="Ship Order" camunda:type="external" camunda:topic="shipping">
<bpmn:incoming>Flow_ToShipOrder</bpmn:incoming>
<bpmn:outgoing>Flow_ToOrderComplete</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="Flow_ToOrderComplete" sourceRef="Task_ShipOrder" targetRef="EndEvent_OrderComplete"/>
<bpmn:endEvent id="EndEvent_OrderComplete" name="Order Complete">
<bpmn:incoming>Flow_ToOrderComplete</bpmn:incoming>
</bpmn:endEvent>
<bpmn:serviceTask id="Task_CreateBackorder" name="Create Backorder" camunda:type="external" camunda:topic="backorder">
<bpmn:incoming>Flow_ToBackorder</bpmn:incoming>
<bpmn:outgoing>Flow_ToNotifyCustomer</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="Flow_ToNotifyCustomer" sourceRef="Task_CreateBackorder" targetRef="Task_NotifyCustomer"/>
<bpmn:sendTask id="Task_NotifyCustomer" name="Notify Customer" camunda:type="mail">
<bpmn:incoming>Flow_ToNotifyCustomer</bpmn:incoming>
<bpmn:outgoing>Flow_ToBackorderComplete</bpmn:outgoing>
</bpmn:sendTask>
<bpmn:sequenceFlow id="Flow_ToBackorderComplete" sourceRef="Task_NotifyCustomer" targetRef="EndEvent_BackorderCreated"/>
<bpmn:endEvent id="EndEvent_BackorderCreated" name="Backorder Created">
<bpmn:incoming>Flow_ToBackorderComplete</bpmn:incoming>
</bpmn:endEvent>
</bpmn:process>
</bpmn:definitions>

View File

@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmmn:definitions xmlns:cmmn="http://www.omg.org/spec/CMMN/20151109/MODEL"
xmlns:cmmndi="http://www.omg.org/spec/CMMN/20151109/CMMNDI"
xmlns:dc="http://www.omg.org/spec/CMMN/20151109/DC"
xmlns:di="http://www.omg.org/spec/CMMN/20151109/DI"
xmlns:camunda="http://camunda.org/schema/1.0/cmmn"
id="Definitions_OrderException"
targetNamespace="http://bpmn.io/schema/cmmn">
<cmmn:case id="Case_OrderExceptionHandling" name="Order Exception Handling">
<cmmn:casePlanModel id="CasePlanModel_OrderException" name="Order Exception Case">
<!-- Stage: Investigation -->
<cmmn:stage id="Stage_Investigation" name="Investigation">
<cmmn:planItem id="PlanItem_ReviewOrder" definitionRef="Task_ReviewOrder"/>
<cmmn:planItem id="PlanItem_ContactCustomer" definitionRef="Task_ContactCustomer"/>
<cmmn:planItem id="PlanItem_CheckInventory" definitionRef="Task_CheckInventory"/>
</cmmn:stage>
<!-- Stage: Resolution -->
<cmmn:stage id="Stage_Resolution" name="Resolution">
<cmmn:planItem id="PlanItem_DecideResolution" definitionRef="Task_DecideResolution"/>
<cmmn:planItem id="PlanItem_ProcessRefund" definitionRef="Task_ProcessRefund"/>
<cmmn:planItem id="PlanItem_ArrangeReplacement" definitionRef="Task_ArrangeReplacement"/>
<cmmn:planItem id="PlanItem_EscalateToManager" definitionRef="Task_EscalateToManager"/>
<cmmn:entryCriterion id="EntryCriterion_ResolutionStart" sentryRef="Sentry_InvestigationComplete"/>
</cmmn:stage>
<!-- Stage: Closure -->
<cmmn:stage id="Stage_Closure" name="Closure">
<cmmn:planItem id="PlanItem_NotifyCustomer" definitionRef="Task_NotifyCustomer"/>
<cmmn:planItem id="PlanItem_UpdateRecords" definitionRef="Task_UpdateRecords"/>
<cmmn:planItem id="PlanItem_CloseCase" definitionRef="Task_CloseCase"/>
<cmmn:entryCriterion id="EntryCriterion_ClosureStart" sentryRef="Sentry_ResolutionComplete"/>
</cmmn:stage>
<!-- Tasks -->
<cmmn:humanTask id="Task_ReviewOrder" name="Review Order Details" camunda:assignee="order.specialist"/>
<cmmn:humanTask id="Task_ContactCustomer" name="Contact Customer" camunda:assignee="customer.service"/>
<cmmn:humanTask id="Task_CheckInventory" name="Check Inventory Status" camunda:assignee="warehouse.manager"/>
<cmmn:humanTask id="Task_DecideResolution" name="Decide Resolution" camunda:assignee="order.specialist" isBlocking="true"/>
<cmmn:humanTask id="Task_ProcessRefund" name="Process Refund" camunda:assignee="finance.clerk"/>
<cmmn:humanTask id="Task_ArrangeReplacement" name="Arrange Replacement" camunda:assignee="order.specialist"/>
<cmmn:humanTask id="Task_EscalateToManager" name="Escalate to Manager" camunda:assignee="order.manager"/>
<cmmn:humanTask id="Task_NotifyCustomer" name="Notify Customer of Resolution" camunda:assignee="customer.service"/>
<cmmn:processTask id="Task_UpdateRecords" name="Update Records" camunda:processRef="UpdateRecordsProcess"/>
<cmmn:humanTask id="Task_CloseCase" name="Close Case" camunda:assignee="order.specialist"/>
<!-- Sentries -->
<cmmn:sentry id="Sentry_InvestigationComplete">
<cmmn:planItemOnPart id="OnPart_InvestigationComplete" sourceRef="PlanItem_ReviewOrder">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_ResolutionComplete">
<cmmn:planItemOnPart id="OnPart_ResolutionComplete" sourceRef="PlanItem_DecideResolution">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<!-- Milestone -->
<cmmn:planItem id="PlanItem_ExceptionResolved" definitionRef="Milestone_ExceptionResolved">
<cmmn:entryCriterion id="EntryCriterion_MilestoneReached" sentryRef="Sentry_CaseComplete"/>
</cmmn:planItem>
<cmmn:milestone id="Milestone_ExceptionResolved" name="Exception Resolved"/>
<cmmn:sentry id="Sentry_CaseComplete">
<cmmn:planItemOnPart id="OnPart_CaseComplete" sourceRef="PlanItem_CloseCase">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
</cmmn:casePlanModel>
</cmmn:case>
<cmmndi:CMMNDI>
<cmmndi:CMMNDiagram id="CMMNDiagram_1">
<!-- Case Plan Model Container -->
<cmmndi:CMMNShape id="CasePlanModel_OrderException_di" cmmnElementRef="CasePlanModel_OrderException">
<dc:Bounds x="100" y="50" width="900" height="400"/>
</cmmndi:CMMNShape>
<!-- Stage: Investigation -->
<cmmndi:CMMNShape id="Stage_Investigation_di" cmmnElementRef="Stage_Investigation" isExpanded="true">
<dc:Bounds x="150" y="100" width="250" height="150"/>
</cmmndi:CMMNShape>
<!-- Stage: Resolution -->
<cmmndi:CMMNShape id="Stage_Resolution_di" cmmnElementRef="Stage_Resolution" isExpanded="true">
<dc:Bounds x="450" y="100" width="250" height="150"/>
</cmmndi:CMMNShape>
<!-- Stage: Closure -->
<cmmndi:CMMNShape id="Stage_Closure_di" cmmnElementRef="Stage_Closure" isExpanded="true">
<dc:Bounds x="750" y="100" width="200" height="150"/>
</cmmndi:CMMNShape>
<!-- Milestone -->
<cmmndi:CMMNShape id="PlanItem_ExceptionResolved_di" cmmnElementRef="PlanItem_ExceptionResolved">
<dc:Bounds x="850" y="320" width="100" height="80"/>
</cmmndi:CMMNShape>
<!-- Entry Criteria -->
<cmmndi:CMMNShape id="EntryCriterion_ResolutionStart_di" cmmnElementRef="EntryCriterion_ResolutionStart">
<dc:Bounds x="440" y="161" width="20" height="28"/>
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="EntryCriterion_ClosureStart_di" cmmnElementRef="EntryCriterion_ClosureStart">
<dc:Bounds x="740" y="161" width="20" height="28"/>
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="EntryCriterion_MilestoneReached_di" cmmnElementRef="EntryCriterion_MilestoneReached">
<dc:Bounds x="840" y="346" width="20" height="28"/>
</cmmndi:CMMNShape>
</cmmndi:CMMNDiagram>
</cmmndi:CMMNDI>
</cmmn:definitions>

View File

@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/"
xmlns:dmndi="https://www.omg.org/spec/DMN/20191111/DMNDI/"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:camunda="http://camunda.org/schema/1.0/dmn"
id="Definitions_ShippingMethod"
name="Shipping Method Decisions"
namespace="http://camunda.org/schema/1.0/dmn">
<decision id="Decision_ShippingMethod" name="Determine Shipping Method">
<decisionTable id="DecisionTable_ShippingMethod" hitPolicy="FIRST">
<input id="Input_OrderValue" label="Order Value" camunda:inputVariable="orderValue">
<inputExpression id="InputExpression_OrderValue" typeRef="double">
<text>orderValue</text>
</inputExpression>
</input>
<input id="Input_CustomerTier" label="Customer Tier" camunda:inputVariable="customerTier">
<inputExpression id="InputExpression_CustomerTier" typeRef="string">
<text>customerTier</text>
</inputExpression>
</input>
<input id="Input_Destination" label="Destination" camunda:inputVariable="destination">
<inputExpression id="InputExpression_Destination" typeRef="string">
<text>destination</text>
</inputExpression>
</input>
<output id="Output_ShippingMethod" label="Shipping Method" name="shippingMethod" typeRef="string"/>
<output id="Output_ShippingCost" label="Shipping Cost" name="shippingCost" typeRef="double"/>
<!-- Rule 1: Premium customers, any value, any destination -> Express Free -->
<rule id="Rule_PremiumExpress">
<inputEntry id="InputEntry_R1_OrderValue">
<text></text>
</inputEntry>
<inputEntry id="InputEntry_R1_CustomerTier">
<text>"premium"</text>
</inputEntry>
<inputEntry id="InputEntry_R1_Destination">
<text></text>
</inputEntry>
<outputEntry id="OutputEntry_R1_Method">
<text>"express"</text>
</outputEntry>
<outputEntry id="OutputEntry_R1_Cost">
<text>0</text>
</outputEntry>
</rule>
<!-- Rule 2: High value orders (>500), standard customers, domestic -> Express -->
<rule id="Rule_HighValueExpress">
<inputEntry id="InputEntry_R2_OrderValue">
<text>&gt; 500</text>
</inputEntry>
<inputEntry id="InputEntry_R2_CustomerTier">
<text>"standard"</text>
</inputEntry>
<inputEntry id="InputEntry_R2_Destination">
<text>"domestic"</text>
</inputEntry>
<outputEntry id="OutputEntry_R2_Method">
<text>"express"</text>
</outputEntry>
<outputEntry id="OutputEntry_R2_Cost">
<text>15.00</text>
</outputEntry>
</rule>
<!-- Rule 3: Medium value orders (100-500), standard customers, domestic -> Standard -->
<rule id="Rule_MediumValueStandard">
<inputEntry id="InputEntry_R3_OrderValue">
<text>[100..500]</text>
</inputEntry>
<inputEntry id="InputEntry_R3_CustomerTier">
<text>"standard"</text>
</inputEntry>
<inputEntry id="InputEntry_R3_Destination">
<text>"domestic"</text>
</inputEntry>
<outputEntry id="OutputEntry_R3_Method">
<text>"standard"</text>
</outputEntry>
<outputEntry id="OutputEntry_R3_Cost">
<text>8.00</text>
</outputEntry>
</rule>
<!-- Rule 4: Low value orders (<100), any tier, domestic -> Economy -->
<rule id="Rule_LowValueEconomy">
<inputEntry id="InputEntry_R4_OrderValue">
<text>&lt; 100</text>
</inputEntry>
<inputEntry id="InputEntry_R4_CustomerTier">
<text></text>
</inputEntry>
<inputEntry id="InputEntry_R4_Destination">
<text>"domestic"</text>
</inputEntry>
<outputEntry id="OutputEntry_R4_Method">
<text>"economy"</text>
</outputEntry>
<outputEntry id="OutputEntry_R4_Cost">
<text>5.00</text>
</outputEntry>
</rule>
<!-- Rule 5: International orders -> International -->
<rule id="Rule_International">
<inputEntry id="InputEntry_R5_OrderValue">
<text></text>
</inputEntry>
<inputEntry id="InputEntry_R5_CustomerTier">
<text></text>
</inputEntry>
<inputEntry id="InputEntry_R5_Destination">
<text>"international"</text>
</inputEntry>
<outputEntry id="OutputEntry_R5_Method">
<text>"international"</text>
</outputEntry>
<outputEntry id="OutputEntry_R5_Cost">
<text>25.00</text>
</outputEntry>
</rule>
</decisionTable>
</decision>
</definitions>

View File

@@ -0,0 +1 @@
Notes placeholder for process 1.

View File

@@ -0,0 +1,11 @@
kind: uapf.metadata.lifecycle
status: draft
created: "2026-01-10T00:00:00Z"
last_modified: "2026-01-10T00:00:00Z"
version_history:
- version: 0.1.0
date: "2026-01-10T00:00:00Z"
changes: Initial template creation
author: "{{.RepoOwner}}"
next_review: "2026-04-10T00:00:00Z"
retirement_date: null

View File

@@ -0,0 +1,16 @@
kind: uapf.metadata.ownership
owner:
type: team
id: "{{.RepoOwner}}"
name: "{{.RepoOwner}} Team"
contact: "{{.RepoOwner}}@processgit.local"
stakeholders:
- type: team
id: operations
role: executor
- type: team
id: business-analysis
role: reviewer
governance:
approval_required: true
review_cycle: quarterly

View File

@@ -0,0 +1,13 @@
kind: uapf.resources.mapping
targets:
- id: placeholder.agent
type: ai_agent
name: Placeholder Agent
capabilities: []
- id: placeholder.human
type: human_role
name: Placeholder Human
- id: placeholder.system
type: system_api
name: Placeholder System
bindings: []

View File

@@ -0,0 +1,23 @@
kind: uapf.package
id: uapf.demo-process1
name: Order Fulfillment
description: Order fulfillment process
level: 4
version: 0.1.0
includes: []
cornerstones:
bpmn: true
dmn: true
cmmn: true
resources: true
paths:
bpmn: bpmn
dmn: dmn
cmmn: cmmn
resources: resources
metadata: metadata
owners:
- type: team
id: "{{.RepoOwner}}"
contact: "{{.RepoOwner}}@processgit.local"
lifecycle: draft

View File

@@ -0,0 +1,115 @@
<?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:camunda="http://camunda.org/schema/1.0/bpmn"
id="Definitions_ReturnProcessing"
targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn:process id="ReturnProcessingProcess" name="Return Processing Process" isExecutable="true">
<bpmn:startEvent id="StartEvent_ReturnRequested" name="Return Requested">
<bpmn:outgoing>Flow_ToCheckEligibility</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_ToCheckEligibility" sourceRef="StartEvent_ReturnRequested" targetRef="Task_CheckEligibility"/>
<bpmn:businessRuleTask id="Task_CheckEligibility" name="Check Return Eligibility" camunda:resultVariable="eligibilityResult" camunda:decisionRef="Decision_ReturnEligibility">
<bpmn:incoming>Flow_ToCheckEligibility</bpmn:incoming>
<bpmn:outgoing>Flow_ToEligibilityGateway</bpmn:outgoing>
</bpmn:businessRuleTask>
<bpmn:sequenceFlow id="Flow_ToEligibilityGateway" sourceRef="Task_CheckEligibility" targetRef="Gateway_EligibilityCheck"/>
<bpmn:exclusiveGateway id="Gateway_EligibilityCheck" name="Return Eligible?">
<bpmn:incoming>Flow_ToEligibilityGateway</bpmn:incoming>
<bpmn:outgoing>Flow_ToApproveReturn</bpmn:outgoing>
<bpmn:outgoing>Flow_ToRejectReturn</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:sequenceFlow id="Flow_ToApproveReturn" name="Yes" sourceRef="Gateway_EligibilityCheck" targetRef="Task_GenerateRMA">
<bpmn:conditionExpression>#{eligible == true}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_ToRejectReturn" name="No" sourceRef="Gateway_EligibilityCheck" targetRef="Task_NotifyRejection">
<bpmn:conditionExpression>#{eligible == false}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:serviceTask id="Task_GenerateRMA" name="Generate RMA Number" camunda:type="external" camunda:topic="rma-generation">
<bpmn:incoming>Flow_ToApproveReturn</bpmn:incoming>
<bpmn:outgoing>Flow_ToSendLabel</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="Flow_ToSendLabel" sourceRef="Task_GenerateRMA" targetRef="Task_SendShippingLabel"/>
<bpmn:sendTask id="Task_SendShippingLabel" name="Send Shipping Label" camunda:type="mail">
<bpmn:incoming>Flow_ToSendLabel</bpmn:incoming>
<bpmn:outgoing>Flow_ToWaitForReturn</bpmn:outgoing>
</bpmn:sendTask>
<bpmn:sequenceFlow id="Flow_ToWaitForReturn" sourceRef="Task_SendShippingLabel" targetRef="Event_ItemReceived"/>
<bpmn:intermediateCatchEvent id="Event_ItemReceived" name="Item Received">
<bpmn:incoming>Flow_ToWaitForReturn</bpmn:incoming>
<bpmn:outgoing>Flow_ToInspect</bpmn:outgoing>
<bpmn:messageEventDefinition messageRef="Message_ItemReceived"/>
</bpmn:intermediateCatchEvent>
<bpmn:sequenceFlow id="Flow_ToInspect" sourceRef="Event_ItemReceived" targetRef="Task_InspectItem"/>
<bpmn:userTask id="Task_InspectItem" name="Inspect Returned Item" camunda:assignee="quality.inspector">
<bpmn:incoming>Flow_ToInspect</bpmn:incoming>
<bpmn:outgoing>Flow_ToConditionGateway</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_ToConditionGateway" sourceRef="Task_InspectItem" targetRef="Gateway_ItemCondition"/>
<bpmn:exclusiveGateway id="Gateway_ItemCondition" name="Item Acceptable?">
<bpmn:incoming>Flow_ToConditionGateway</bpmn:incoming>
<bpmn:outgoing>Flow_ToProcessRefund</bpmn:outgoing>
<bpmn:outgoing>Flow_ToRejectRefund</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:sequenceFlow id="Flow_ToProcessRefund" name="Yes" sourceRef="Gateway_ItemCondition" targetRef="Task_ProcessRefund">
<bpmn:conditionExpression>#{itemAcceptable == true}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_ToRejectRefund" name="No" sourceRef="Gateway_ItemCondition" targetRef="Task_NotifyRejection">
<bpmn:conditionExpression>#{itemAcceptable == false}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:serviceTask id="Task_ProcessRefund" name="Process Refund" camunda:type="external" camunda:topic="refund-processing">
<bpmn:incoming>Flow_ToProcessRefund</bpmn:incoming>
<bpmn:outgoing>Flow_ToRestockItem</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="Flow_ToRestockItem" sourceRef="Task_ProcessRefund" targetRef="Task_RestockItem"/>
<bpmn:userTask id="Task_RestockItem" name="Restock Item" camunda:assignee="warehouse.worker">
<bpmn:incoming>Flow_ToRestockItem</bpmn:incoming>
<bpmn:outgoing>Flow_ToReturnComplete</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_ToReturnComplete" sourceRef="Task_RestockItem" targetRef="EndEvent_ReturnComplete"/>
<bpmn:endEvent id="EndEvent_ReturnComplete" name="Return Complete">
<bpmn:incoming>Flow_ToReturnComplete</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sendTask id="Task_NotifyRejection" name="Notify Customer of Rejection" camunda:type="mail">
<bpmn:incoming>Flow_ToRejectReturn</bpmn:incoming>
<bpmn:incoming>Flow_ToRejectRefund</bpmn:incoming>
<bpmn:outgoing>Flow_ToReturnRejected</bpmn:outgoing>
</bpmn:sendTask>
<bpmn:sequenceFlow id="Flow_ToReturnRejected" sourceRef="Task_NotifyRejection" targetRef="EndEvent_ReturnRejected"/>
<bpmn:endEvent id="EndEvent_ReturnRejected" name="Return Rejected">
<bpmn:incoming>Flow_ToReturnRejected</bpmn:incoming>
</bpmn:endEvent>
</bpmn:process>
<bpmn:message id="Message_ItemReceived" name="ItemReceivedMessage"/>
</bpmn:definitions>

View File

@@ -0,0 +1,194 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmmn:definitions xmlns:cmmn="http://www.omg.org/spec/CMMN/20151109/MODEL"
xmlns:cmmndi="http://www.omg.org/spec/CMMN/20151109/CMMNDI"
xmlns:dc="http://www.omg.org/spec/CMMN/20151109/DC"
xmlns:di="http://www.omg.org/spec/CMMN/20151109/DI"
xmlns:camunda="http://camunda.org/schema/1.0/cmmn"
id="Definitions_ReturnDispute"
targetNamespace="http://bpmn.io/schema/cmmn">
<cmmn:case id="Case_ReturnDisputeHandling" name="Return Dispute Handling">
<cmmn:casePlanModel id="CasePlanModel_ReturnDispute" name="Return Dispute Case">
<!-- Stage: Initial Assessment -->
<cmmn:stage id="Stage_InitialAssessment" name="Initial Assessment">
<cmmn:planItem id="PlanItem_ReviewDispute" definitionRef="Task_ReviewDispute"/>
<cmmn:planItem id="PlanItem_GatherEvidence" definitionRef="Task_GatherEvidence"/>
<cmmn:planItem id="PlanItem_ReviewPhotos" definitionRef="Task_ReviewPhotos"/>
</cmmn:stage>
<!-- Stage: Investigation -->
<cmmn:stage id="Stage_Investigation" name="Investigation">
<cmmn:planItem id="PlanItem_ContactCustomer" definitionRef="Task_ContactCustomer"/>
<cmmn:planItem id="PlanItem_ReviewPurchaseHistory" definitionRef="Task_ReviewPurchaseHistory"/>
<cmmn:planItem id="PlanItem_InspectReturnedItem" definitionRef="Task_InspectReturnedItem"/>
<cmmn:planItem id="PlanItem_ConsultExpert" definitionRef="Task_ConsultExpert"/>
<cmmn:entryCriterion id="EntryCriterion_InvestigationStart" sentryRef="Sentry_AssessmentComplete"/>
</cmmn:stage>
<!-- Stage: Resolution -->
<cmmn:stage id="Stage_Resolution" name="Resolution">
<cmmn:planItem id="PlanItem_MakeDecision" definitionRef="Task_MakeDecision"/>
<cmmn:planItem id="PlanItem_ApproveRefund" definitionRef="Task_ApproveRefund"/>
<cmmn:planItem id="PlanItem_OfferPartialRefund" definitionRef="Task_OfferPartialRefund"/>
<cmmn:planItem id="PlanItem_DenyRefund" definitionRef="Task_DenyRefund"/>
<cmmn:planItem id="PlanItem_OfferStoreCredit" definitionRef="Task_OfferStoreCredit"/>
<cmmn:entryCriterion id="EntryCriterion_ResolutionStart" sentryRef="Sentry_InvestigationComplete"/>
</cmmn:stage>
<!-- Stage: Communication -->
<cmmn:stage id="Stage_Communication" name="Communication">
<cmmn:planItem id="PlanItem_NotifyCustomer" definitionRef="Task_NotifyCustomer"/>
<cmmn:planItem id="PlanItem_UpdateRecords" definitionRef="Task_UpdateRecords"/>
<cmmn:planItem id="PlanItem_DocumentDecision" definitionRef="Task_DocumentDecision"/>
<cmmn:entryCriterion id="EntryCriterion_CommunicationStart" sentryRef="Sentry_DecisionMade"/>
</cmmn:stage>
<!-- Stage: Follow-up (optional) -->
<cmmn:stage id="Stage_Followup" name="Follow-up" autoComplete="true">
<cmmn:planItem id="PlanItem_CustomerSatisfactionSurvey" definitionRef="Task_CustomerSatisfactionSurvey"/>
<cmmn:planItem id="PlanItem_ManagerReview" definitionRef="Task_ManagerReview"/>
<cmmn:entryCriterion id="EntryCriterion_FollowupStart" sentryRef="Sentry_CustomerNotified"/>
</cmmn:stage>
<!-- Tasks - Initial Assessment -->
<cmmn:humanTask id="Task_ReviewDispute" name="Review Dispute Details" camunda:assignee="returns.specialist" isBlocking="true"/>
<cmmn:humanTask id="Task_GatherEvidence" name="Gather Evidence" camunda:assignee="returns.specialist"/>
<cmmn:humanTask id="Task_ReviewPhotos" name="Review Photos/Documentation" camunda:assignee="returns.specialist"/>
<!-- Tasks - Investigation -->
<cmmn:humanTask id="Task_ContactCustomer" name="Contact Customer for Details" camunda:assignee="customer.service"/>
<cmmn:humanTask id="Task_ReviewPurchaseHistory" name="Review Purchase History" camunda:assignee="returns.specialist"/>
<cmmn:humanTask id="Task_InspectReturnedItem" name="Inspect Returned Item" camunda:assignee="quality.inspector"/>
<cmmn:humanTask id="Task_ConsultExpert" name="Consult Product Expert" camunda:assignee="product.specialist"/>
<!-- Tasks - Resolution -->
<cmmn:humanTask id="Task_MakeDecision" name="Make Decision" camunda:assignee="returns.manager" isBlocking="true"/>
<cmmn:humanTask id="Task_ApproveRefund" name="Approve Full Refund" camunda:assignee="returns.specialist"/>
<cmmn:humanTask id="Task_OfferPartialRefund" name="Offer Partial Refund" camunda:assignee="returns.specialist"/>
<cmmn:humanTask id="Task_DenyRefund" name="Deny Refund" camunda:assignee="returns.specialist"/>
<cmmn:humanTask id="Task_OfferStoreCredit" name="Offer Store Credit" camunda:assignee="returns.specialist"/>
<!-- Tasks - Communication -->
<cmmn:humanTask id="Task_NotifyCustomer" name="Notify Customer of Decision" camunda:assignee="customer.service"/>
<cmmn:processTask id="Task_UpdateRecords" name="Update Records" camunda:processRef="UpdateRecordsProcess"/>
<cmmn:humanTask id="Task_DocumentDecision" name="Document Decision and Rationale" camunda:assignee="returns.specialist"/>
<!-- Tasks - Follow-up -->
<cmmn:humanTask id="Task_CustomerSatisfactionSurvey" name="Send Customer Satisfaction Survey" camunda:assignee="customer.service"/>
<cmmn:humanTask id="Task_ManagerReview" name="Manager Review of Case" camunda:assignee="returns.manager"/>
<!-- Sentries -->
<cmmn:sentry id="Sentry_AssessmentComplete">
<cmmn:planItemOnPart id="OnPart_AssessmentComplete" sourceRef="PlanItem_ReviewDispute">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_InvestigationComplete">
<cmmn:planItemOnPart id="OnPart_InvestigationComplete" sourceRef="PlanItem_InspectReturnedItem">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_DecisionMade">
<cmmn:planItemOnPart id="OnPart_DecisionMade" sourceRef="PlanItem_MakeDecision">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_CustomerNotified">
<cmmn:planItemOnPart id="OnPart_CustomerNotified" sourceRef="PlanItem_NotifyCustomer">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_DisputeResolved">
<cmmn:planItemOnPart id="OnPart_DisputeResolved" sourceRef="PlanItem_DocumentDecision">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<!-- Milestone -->
<cmmn:planItem id="PlanItem_DisputeResolved" definitionRef="Milestone_DisputeResolved">
<cmmn:entryCriterion id="EntryCriterion_MilestoneReached" sentryRef="Sentry_DisputeResolved"/>
</cmmn:planItem>
<cmmn:milestone id="Milestone_DisputeResolved" name="Dispute Resolved"/>
</cmmn:casePlanModel>
</cmmn:case>
<cmmndi:CMMNDI>
<cmmndi:CMMNDiagram id="CMMNDiagram_1">
<!-- Case Plan Model Container -->
<cmmndi:CMMNShape id="CasePlanModel_ReturnDispute_di" cmmnElementRef="CasePlanModel_ReturnDispute">
<dc:Bounds x="80" y="40" width="1100" height="550"/>
</cmmndi:CMMNShape>
<!-- Stage: Initial Assessment -->
<cmmndi:CMMNShape id="Stage_InitialAssessment_di" cmmnElementRef="Stage_InitialAssessment" isExpanded="true">
<dc:Bounds x="120" y="80" width="200" height="150"/>
</cmmndi:CMMNShape>
<!-- Stage: Investigation -->
<cmmndi:CMMNShape id="Stage_Investigation_di" cmmnElementRef="Stage_Investigation" isExpanded="true">
<dc:Bounds x="360" y="80" width="200" height="150"/>
</cmmndi:CMMNShape>
<!-- Stage: Resolution -->
<cmmndi:CMMNShape id="Stage_Resolution_di" cmmnElementRef="Stage_Resolution" isExpanded="true">
<dc:Bounds x="600" y="80" width="200" height="150"/>
</cmmndi:CMMNShape>
<!-- Stage: Communication -->
<cmmndi:CMMNShape id="Stage_Communication_di" cmmnElementRef="Stage_Communication" isExpanded="true">
<dc:Bounds x="840" y="80" width="200" height="150"/>
</cmmndi:CMMNShape>
<!-- Stage: Follow-up -->
<cmmndi:CMMNShape id="Stage_Followup_di" cmmnElementRef="Stage_Followup" isExpanded="true">
<dc:Bounds x="120" y="280" width="200" height="150"/>
</cmmndi:CMMNShape>
<!-- Milestone -->
<cmmndi:CMMNShape id="PlanItem_DisputeResolved_di" cmmnElementRef="PlanItem_DisputeResolved">
<dc:Bounds x="940" y="450" width="100" height="80"/>
</cmmndi:CMMNShape>
<!-- Entry Criteria -->
<cmmndi:CMMNShape id="EntryCriterion_InvestigationStart_di" cmmnElementRef="EntryCriterion_InvestigationStart">
<dc:Bounds x="350" y="141" width="20" height="28"/>
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="EntryCriterion_ResolutionStart_di" cmmnElementRef="EntryCriterion_ResolutionStart">
<dc:Bounds x="590" y="141" width="20" height="28"/>
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="EntryCriterion_CommunicationStart_di" cmmnElementRef="EntryCriterion_CommunicationStart">
<dc:Bounds x="830" y="141" width="20" height="28"/>
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="EntryCriterion_FollowupStart_di" cmmnElementRef="EntryCriterion_FollowupStart">
<dc:Bounds x="110" y="341" width="20" height="28"/>
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="EntryCriterion_MilestoneReached_di" cmmnElementRef="EntryCriterion_MilestoneReached">
<dc:Bounds x="930" y="476" width="20" height="28"/>
</cmmndi:CMMNShape>
</cmmndi:CMMNDiagram>
</cmmndi:CMMNDI>
</cmmn:definitions>

View File

@@ -0,0 +1,197 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/"
xmlns:dmndi="https://www.omg.org/spec/DMN/20191111/DMNDI/"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:camunda="http://camunda.org/schema/1.0/dmn"
id="Definitions_ReturnEligibility"
name="Return Eligibility Decisions"
namespace="http://camunda.org/schema/1.0/dmn">
<decision id="Decision_ReturnEligibility" name="Determine Return Eligibility">
<decisionTable id="DecisionTable_ReturnEligibility" hitPolicy="FIRST">
<input id="Input_DaysSincePurchase" label="Days Since Purchase" camunda:inputVariable="daysSincePurchase">
<inputExpression id="InputExpression_DaysSincePurchase" typeRef="integer">
<text>daysSincePurchase</text>
</inputExpression>
</input>
<input id="Input_ProductCategory" label="Product Category" camunda:inputVariable="productCategory">
<inputExpression id="InputExpression_ProductCategory" typeRef="string">
<text>productCategory</text>
</inputExpression>
</input>
<input id="Input_ItemCondition" label="Item Condition" camunda:inputVariable="itemCondition">
<inputExpression id="InputExpression_ItemCondition" typeRef="string">
<text>itemCondition</text>
</inputExpression>
</input>
<input id="Input_HasReceipt" label="Has Receipt" camunda:inputVariable="hasReceipt">
<inputExpression id="InputExpression_HasReceipt" typeRef="boolean">
<text>hasReceipt</text>
</inputExpression>
</input>
<output id="Output_Eligible" label="Eligible" name="eligible" typeRef="boolean"/>
<output id="Output_RefundType" label="Refund Type" name="refundType" typeRef="string"/>
<output id="Output_RestockingFee" label="Restocking Fee" name="restockingFee" typeRef="double"/>
<!-- Rule 1: Within 30 days, new condition, has receipt -> Full refund -->
<rule id="Rule_FullRefund">
<inputEntry id="InputEntry_R1_Days">
<text>&lt;= 30</text>
</inputEntry>
<inputEntry id="InputEntry_R1_Category">
<text></text>
</inputEntry>
<inputEntry id="InputEntry_R1_Condition">
<text>"new", "unopened"</text>
</inputEntry>
<inputEntry id="InputEntry_R1_Receipt">
<text>true</text>
</inputEntry>
<outputEntry id="OutputEntry_R1_Eligible">
<text>true</text>
</outputEntry>
<outputEntry id="OutputEntry_R1_RefundType">
<text>"full"</text>
</outputEntry>
<outputEntry id="OutputEntry_R1_Fee">
<text>0</text>
</outputEntry>
</rule>
<!-- Rule 2: 31-60 days, electronics, opened but good condition -> Partial refund with 15% fee -->
<rule id="Rule_ElectronicsPartial">
<inputEntry id="InputEntry_R2_Days">
<text>[31..60]</text>
</inputEntry>
<inputEntry id="InputEntry_R2_Category">
<text>"electronics"</text>
</inputEntry>
<inputEntry id="InputEntry_R2_Condition">
<text>"opened", "good"</text>
</inputEntry>
<inputEntry id="InputEntry_R2_Receipt">
<text>true</text>
</inputEntry>
<outputEntry id="OutputEntry_R2_Eligible">
<text>true</text>
</outputEntry>
<outputEntry id="OutputEntry_R2_RefundType">
<text>"partial"</text>
</outputEntry>
<outputEntry id="OutputEntry_R2_Fee">
<text>15.00</text>
</outputEntry>
</rule>
<!-- Rule 3: Within 90 days, clothing, good condition, has receipt -> Full refund -->
<rule id="Rule_ClothingFullRefund">
<inputEntry id="InputEntry_R3_Days">
<text>&lt;= 90</text>
</inputEntry>
<inputEntry id="InputEntry_R3_Category">
<text>"clothing", "accessories"</text>
</inputEntry>
<inputEntry id="InputEntry_R3_Condition">
<text>"new", "unworn"</text>
</inputEntry>
<inputEntry id="InputEntry_R3_Receipt">
<text>true</text>
</inputEntry>
<outputEntry id="OutputEntry_R3_Eligible">
<text>true</text>
</outputEntry>
<outputEntry id="OutputEntry_R3_RefundType">
<text>"full"</text>
</outputEntry>
<outputEntry id="OutputEntry_R3_Fee">
<text>0</text>
</outputEntry>
</rule>
<!-- Rule 4: Within 60 days, no receipt -> Store credit only -->
<rule id="Rule_NoReceiptCredit">
<inputEntry id="InputEntry_R4_Days">
<text>&lt;= 60</text>
</inputEntry>
<inputEntry id="InputEntry_R4_Category">
<text></text>
</inputEntry>
<inputEntry id="InputEntry_R4_Condition">
<text>"new", "unopened", "good"</text>
</inputEntry>
<inputEntry id="InputEntry_R4_Receipt">
<text>false</text>
</inputEntry>
<outputEntry id="OutputEntry_R4_Eligible">
<text>true</text>
</outputEntry>
<outputEntry id="OutputEntry_R4_RefundType">
<text>"store_credit"</text>
</outputEntry>
<outputEntry id="OutputEntry_R4_Fee">
<text>0</text>
</outputEntry>
</rule>
<!-- Rule 5: Over 60 days -> Not eligible -->
<rule id="Rule_TooOld">
<inputEntry id="InputEntry_R5_Days">
<text>&gt; 60</text>
</inputEntry>
<inputEntry id="InputEntry_R5_Category">
<text></text>
</inputEntry>
<inputEntry id="InputEntry_R5_Condition">
<text></text>
</inputEntry>
<inputEntry id="InputEntry_R5_Receipt">
<text></text>
</inputEntry>
<outputEntry id="OutputEntry_R5_Eligible">
<text>false</text>
</outputEntry>
<outputEntry id="OutputEntry_R5_RefundType">
<text>"none"</text>
</outputEntry>
<outputEntry id="OutputEntry_R5_Fee">
<text>0</text>
</outputEntry>
</rule>
<!-- Rule 6: Damaged or used condition -> Not eligible -->
<rule id="Rule_DamagedItem">
<inputEntry id="InputEntry_R6_Days">
<text></text>
</inputEntry>
<inputEntry id="InputEntry_R6_Category">
<text></text>
</inputEntry>
<inputEntry id="InputEntry_R6_Condition">
<text>"damaged", "worn", "used"</text>
</inputEntry>
<inputEntry id="InputEntry_R6_Receipt">
<text></text>
</inputEntry>
<outputEntry id="OutputEntry_R6_Eligible">
<text>false</text>
</outputEntry>
<outputEntry id="OutputEntry_R6_RefundType">
<text>"none"</text>
</outputEntry>
<outputEntry id="OutputEntry_R6_Fee">
<text>0</text>
</outputEntry>
</rule>
</decisionTable>
</decision>
</definitions>

View File

@@ -0,0 +1 @@
Notes placeholder for process 2.

View File

@@ -0,0 +1,11 @@
kind: uapf.metadata.lifecycle
status: draft
created: "2026-01-10T00:00:00Z"
last_modified: "2026-01-10T00:00:00Z"
version_history:
- version: 0.1.0
date: "2026-01-10T00:00:00Z"
changes: Initial template creation
author: "{{.RepoOwner}}"
next_review: "2026-04-10T00:00:00Z"
retirement_date: null

View File

@@ -0,0 +1,16 @@
kind: uapf.metadata.ownership
owner:
type: team
id: "{{.RepoOwner}}"
name: "{{.RepoOwner}} Team"
contact: "{{.RepoOwner}}@processgit.local"
stakeholders:
- type: team
id: operations
role: executor
- type: team
id: business-analysis
role: reviewer
governance:
approval_required: true
review_cycle: quarterly

View File

@@ -0,0 +1,13 @@
kind: uapf.resources.mapping
targets:
- id: placeholder.agent
type: ai_agent
name: Placeholder Agent
capabilities: []
- id: placeholder.human
type: human_role
name: Placeholder Human
- id: placeholder.system
type: system_api
name: Placeholder System
bindings: []

View File

@@ -0,0 +1,23 @@
kind: uapf.package
id: uapf.demo-process2
name: Return Processing
description: Return processing workflow
level: 4
version: 0.1.0
includes: []
cornerstones:
bpmn: true
dmn: true
cmmn: true
resources: true
paths:
bpmn: bpmn
dmn: dmn
cmmn: cmmn
resources: resources
metadata: metadata
owners:
- type: team
id: "{{.RepoOwner}}"
contact: "{{.RepoOwner}}@processgit.local"
lifecycle: draft

View File

@@ -0,0 +1,9 @@
kind: uapf.resources.mapping
targets:
- id: shared.inventory.system
type: system_api
name: Inventory Management System
- id: shared.shipping.system
type: system_api
name: Shipping Provider API
bindings: []