1
0

Initial template import

This commit is contained in:
ProcessGit Templates
2026-02-05 21:19:43 +00:00
commit b4d44661e0
15 changed files with 1176 additions and 0 deletions

7
.gitea/template Normal file
View File

@@ -0,0 +1,7 @@
# Expand placeholders across docs, manifests, and workflow templates
README.md
enterprise/**
packages/**
.github/**
.gitea/**
tools/**

View File

@@ -0,0 +1,13 @@
name: Validate Process Assets
on:
push:
pull_request:
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run validation
run: tools/validate.sh

14
.github/workflows/validate.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
name: Validate Process Assets
on:
push:
pull_request:
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run validation
run: tools/validate.sh

52
README.md Normal file
View File

@@ -0,0 +1,52 @@
# UAPF Validation Ready Template
This template provides a complete Level-4 process package with validation schema support.
## Structure
```
uapf-validation-ready/
├── enterprise/
│ └── enterprise.yaml # Enterprise-level index
├── demo-process/ # Example process package
│ ├── uapf.yaml # Package configuration
│ ├── bpmn/ # BPMN process models
│ │ └── process.bpmn.xml # Document review workflow
│ ├── dmn/ # DMN decision models
│ │ └── decisions.dmn.xml # Approval requirements
│ ├── cmmn/ # CMMN case models
│ │ └── case.cmmn.xml # Exception handling
│ ├── resources/ # Resource mappings
│ │ └── mappings.yaml
│ ├── metadata/ # Process metadata
│ │ ├── ownership.yaml
│ │ └── lifecycle.yaml
│ └── docs/ # Documentation
│ └── notes.md
└── validation/ # Validation schemas
└── schemas/
└── README.md
```
## Process: Document Review & Approval
This template demonstrates a document review and approval process with:
- **BPMN Process**: Submit → Validate Format → Review → Approve/Reject → Publish
- **DMN Decision**: Dynamic approval routing based on document type and value
- **CMMN Case**: Exception handling for review issues
- **Validation**: Schema-based validation for all artifacts
## Features
- ✅ Complete Level-4 process package
- ✅ Validation schema support
- ✅ Multiple approval levels
- ✅ Exception handling
- ✅ Template variable support
- ✅ Enterprise indexing
## Usage
This template is used when creating new ProcessGit repositories that require validation-ready processes.

View File

@@ -0,0 +1,309 @@
<?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:xsi="http://www.w3.org/2001/XMLSchema-instance"
id="Definitions_DocumentReview"
targetNamespace="http://processgit.io/bpmn/document-review">
<bpmn:process id="DocumentReviewApproval" name="Document Review and Approval Process" isExecutable="true">
<!-- Start Event -->
<bpmn:startEvent id="StartEvent_1" name="Document Submitted">
<bpmn:outgoing>Flow_1</bpmn:outgoing>
</bpmn:startEvent>
<!-- Submit Document Task -->
<bpmn:userTask id="Task_SubmitDocument" name="Submit Document">
<bpmn:incoming>Flow_1</bpmn:incoming>
<bpmn:outgoing>Flow_2</bpmn:outgoing>
</bpmn:userTask>
<!-- Validate Format Task (Automated) -->
<bpmn:serviceTask id="Task_ValidateFormat" name="Validate Format">
<bpmn:incoming>Flow_2</bpmn:incoming>
<bpmn:outgoing>Flow_3</bpmn:outgoing>
</bpmn:serviceTask>
<!-- Exclusive Gateway - Validation Result -->
<bpmn:exclusiveGateway id="Gateway_ValidationCheck" name="Format Valid?">
<bpmn:incoming>Flow_3</bpmn:incoming>
<bpmn:outgoing>Flow_Valid</bpmn:outgoing>
<bpmn:outgoing>Flow_Invalid</bpmn:outgoing>
</bpmn:exclusiveGateway>
<!-- Reject Document Task (Invalid Format) -->
<bpmn:userTask id="Task_RejectInvalidFormat" name="Reject Document - Invalid Format">
<bpmn:incoming>Flow_Invalid</bpmn:incoming>
<bpmn:outgoing>Flow_Rejected</bpmn:outgoing>
</bpmn:userTask>
<!-- Review Document Task -->
<bpmn:userTask id="Task_ReviewDocument" name="Review Document">
<bpmn:incoming>Flow_Valid</bpmn:incoming>
<bpmn:outgoing>Flow_4</bpmn:outgoing>
</bpmn:userTask>
<!-- Business Rule Task - Determine Approval Level -->
<bpmn:businessRuleTask id="Task_DetermineApprovalLevel" name="Determine Approval Requirements">
<bpmn:incoming>Flow_4</bpmn:incoming>
<bpmn:outgoing>Flow_5</bpmn:outgoing>
</bpmn:businessRuleTask>
<!-- Exclusive Gateway - Approval Decision -->
<bpmn:exclusiveGateway id="Gateway_ApprovalDecision" name="Approved?">
<bpmn:incoming>Flow_5</bpmn:incoming>
<bpmn:outgoing>Flow_Approved</bpmn:outgoing>
<bpmn:outgoing>Flow_RejectedReview</bpmn:outgoing>
<bpmn:outgoing>Flow_NeedsRevision</bpmn:outgoing>
</bpmn:exclusiveGateway>
<!-- Approve Document Task -->
<bpmn:userTask id="Task_ApproveDocument" name="Approve Document">
<bpmn:incoming>Flow_Approved</bpmn:incoming>
<bpmn:outgoing>Flow_6</bpmn:outgoing>
</bpmn:userTask>
<!-- Reject Document Task -->
<bpmn:userTask id="Task_RejectDocument" name="Reject Document">
<bpmn:incoming>Flow_RejectedReview</bpmn:incoming>
<bpmn:outgoing>Flow_Rejected</bpmn:outgoing>
</bpmn:userTask>
<!-- Request Revision Task -->
<bpmn:userTask id="Task_RequestRevision" name="Request Revision">
<bpmn:incoming>Flow_NeedsRevision</bpmn:incoming>
<bpmn:outgoing>Flow_RevisionRequested</bpmn:outgoing>
</bpmn:userTask>
<!-- Publish Document Task -->
<bpmn:serviceTask id="Task_PublishDocument" name="Publish Approved Document">
<bpmn:incoming>Flow_6</bpmn:incoming>
<bpmn:outgoing>Flow_7</bpmn:outgoing>
</bpmn:serviceTask>
<!-- Notify Submitter Task -->
<bpmn:serviceTask id="Task_NotifySubmitter" name="Notify Submitter">
<bpmn:incoming>Flow_7</bpmn:incoming>
<bpmn:incoming>Flow_Rejected</bpmn:incoming>
<bpmn:incoming>Flow_RevisionRequested</bpmn:incoming>
<bpmn:outgoing>Flow_8</bpmn:outgoing>
</bpmn:serviceTask>
<!-- End Event -->
<bpmn:endEvent id="EndEvent_1" name="Process Complete">
<bpmn:incoming>Flow_8</bpmn:incoming>
</bpmn:endEvent>
<!-- Sequence Flows -->
<bpmn:sequenceFlow id="Flow_1" sourceRef="StartEvent_1" targetRef="Task_SubmitDocument"/>
<bpmn:sequenceFlow id="Flow_2" sourceRef="Task_SubmitDocument" targetRef="Task_ValidateFormat"/>
<bpmn:sequenceFlow id="Flow_3" sourceRef="Task_ValidateFormat" targetRef="Gateway_ValidationCheck"/>
<bpmn:sequenceFlow id="Flow_Valid" name="Yes" sourceRef="Gateway_ValidationCheck" targetRef="Task_ReviewDocument">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">formatValid == true</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_Invalid" name="No" sourceRef="Gateway_ValidationCheck" targetRef="Task_RejectInvalidFormat">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">formatValid == false</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_4" sourceRef="Task_ReviewDocument" targetRef="Task_DetermineApprovalLevel"/>
<bpmn:sequenceFlow id="Flow_5" sourceRef="Task_DetermineApprovalLevel" targetRef="Gateway_ApprovalDecision"/>
<bpmn:sequenceFlow id="Flow_Approved" name="Approved" sourceRef="Gateway_ApprovalDecision" targetRef="Task_ApproveDocument">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">decision == "approved"</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_RejectedReview" name="Rejected" sourceRef="Gateway_ApprovalDecision" targetRef="Task_RejectDocument">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">decision == "rejected"</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_NeedsRevision" name="Needs Revision" sourceRef="Gateway_ApprovalDecision" targetRef="Task_RequestRevision">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">decision == "revision"</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_6" sourceRef="Task_ApproveDocument" targetRef="Task_PublishDocument"/>
<bpmn:sequenceFlow id="Flow_7" sourceRef="Task_PublishDocument" targetRef="Task_NotifySubmitter"/>
<bpmn:sequenceFlow id="Flow_Rejected" sourceRef="Task_RejectDocument" targetRef="Task_NotifySubmitter"/>
<bpmn:sequenceFlow id="Flow_Rejected" sourceRef="Task_RejectInvalidFormat" targetRef="Task_NotifySubmitter"/>
<bpmn:sequenceFlow id="Flow_RevisionRequested" sourceRef="Task_RequestRevision" targetRef="Task_NotifySubmitter"/>
<bpmn:sequenceFlow id="Flow_8" sourceRef="Task_NotifySubmitter" targetRef="EndEvent_1"/>
</bpmn:process>
<!-- Diagram -->
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DocumentReviewApproval">
<bpmndi:BPMNShape id="StartEvent_1_di" bpmnElement="StartEvent_1">
<dc:Bounds x="152" y="212" width="36" height="36"/>
<bpmndi:BPMNLabel>
<dc:Bounds x="137" y="255" width="66" height="27"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_SubmitDocument_di" bpmnElement="Task_SubmitDocument">
<dc:Bounds x="240" y="190" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_ValidateFormat_di" bpmnElement="Task_ValidateFormat">
<dc:Bounds x="390" y="190" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_ValidationCheck_di" bpmnElement="Gateway_ValidationCheck" isMarkerVisible="true">
<dc:Bounds x="540" y="205" width="50" height="50"/>
<bpmndi:BPMNLabel>
<dc:Bounds x="526" y="175" width="78" height="14"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_RejectInvalidFormat_di" bpmnElement="Task_RejectInvalidFormat">
<dc:Bounds x="640" y="320" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_ReviewDocument_di" bpmnElement="Task_ReviewDocument">
<dc:Bounds x="640" y="190" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_DetermineApprovalLevel_di" bpmnElement="Task_DetermineApprovalLevel">
<dc:Bounds x="790" y="190" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_ApprovalDecision_di" bpmnElement="Gateway_ApprovalDecision" isMarkerVisible="true">
<dc:Bounds x="940" y="205" width="50" height="50"/>
<bpmndi:BPMNLabel>
<dc:Bounds x="936" y="175" width="58" height="14"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_ApproveDocument_di" bpmnElement="Task_ApproveDocument">
<dc:Bounds x="1040" y="80" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_RejectDocument_di" bpmnElement="Task_RejectDocument">
<dc:Bounds x="1040" y="320" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_RequestRevision_di" bpmnElement="Task_RequestRevision">
<dc:Bounds x="1040" y="190" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_PublishDocument_di" bpmnElement="Task_PublishDocument">
<dc:Bounds x="1190" y="80" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Task_NotifySubmitter_di" bpmnElement="Task_NotifySubmitter">
<dc:Bounds x="1340" y="190" width="100" height="80"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="EndEvent_1_di" bpmnElement="EndEvent_1">
<dc:Bounds x="1492" y="212" width="36" height="36"/>
<bpmndi:BPMNLabel>
<dc:Bounds x="1473" y="255" width="74" height="27"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<!-- Edges -->
<bpmndi:BPMNEdge id="Flow_1_di" bpmnElement="Flow_1">
<di:waypoint x="188" y="230"/>
<di:waypoint x="240" y="230"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_2_di" bpmnElement="Flow_2">
<di:waypoint x="340" y="230"/>
<di:waypoint x="390" y="230"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_3_di" bpmnElement="Flow_3">
<di:waypoint x="490" y="230"/>
<di:waypoint x="540" y="230"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Valid_di" bpmnElement="Flow_Valid">
<di:waypoint x="590" y="230"/>
<di:waypoint x="640" y="230"/>
<bpmndi:BPMNLabel>
<dc:Bounds x="602" y="212" width="25" height="14"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Invalid_di" bpmnElement="Flow_Invalid">
<di:waypoint x="565" y="255"/>
<di:waypoint x="565" y="360"/>
<di:waypoint x="640" y="360"/>
<bpmndi:BPMNLabel>
<dc:Bounds x="573" y="305" width="15" height="14"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_4_di" bpmnElement="Flow_4">
<di:waypoint x="740" y="230"/>
<di:waypoint x="790" y="230"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_5_di" bpmnElement="Flow_5">
<di:waypoint x="890" y="230"/>
<di:waypoint x="940" y="230"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Approved_di" bpmnElement="Flow_Approved">
<di:waypoint x="965" y="205"/>
<di:waypoint x="965" y="120"/>
<di:waypoint x="1040" y="120"/>
<bpmndi:BPMNLabel>
<dc:Bounds x="973" y="160" width="49" height="14"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_RejectedReview_di" bpmnElement="Flow_RejectedReview">
<di:waypoint x="965" y="255"/>
<di:waypoint x="965" y="360"/>
<di:waypoint x="1040" y="360"/>
<bpmndi:BPMNLabel>
<dc:Bounds x="973" y="305" width="45" height="14"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_NeedsRevision_di" bpmnElement="Flow_NeedsRevision">
<di:waypoint x="990" y="230"/>
<di:waypoint x="1040" y="230"/>
<bpmndi:BPMNLabel>
<dc:Bounds x="982" y="212" width="76" height="14"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_6_di" bpmnElement="Flow_6">
<di:waypoint x="1140" y="120"/>
<di:waypoint x="1190" y="120"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_7_di" bpmnElement="Flow_7">
<di:waypoint x="1290" y="120"/>
<di:waypoint x="1315" y="120"/>
<di:waypoint x="1315" y="230"/>
<di:waypoint x="1340" y="230"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_Rejected_di" bpmnElement="Flow_Rejected">
<di:waypoint x="1140" y="360"/>
<di:waypoint x="1240" y="360"/>
<di:waypoint x="1240" y="230"/>
<di:waypoint x="1340" y="230"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_RevisionRequested_di" bpmnElement="Flow_RevisionRequested">
<di:waypoint x="1140" y="230"/>
<di:waypoint x="1340" y="230"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_8_di" bpmnElement="Flow_8">
<di:waypoint x="1440" y="230"/>
<di:waypoint x="1492" y="230"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@@ -0,0 +1,273 @@
<?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:xsi="http://www.w3.org/2001/XMLSchema-instance"
id="DocumentReviewException"
targetNamespace="http://processgit.io/cmmn/document-review-exception">
<cmmn:case id="Case_DocumentReviewException" name="Document Review Exception Case">
<cmmn:casePlanModel id="CasePlanModel_1" name="Document Review Exception Management">
<!-- Case File -->
<cmmn:caseFileModel id="CaseFileModel_1">
<cmmn:caseFileItem id="CaseFile_DocumentDetails" name="Document Details" definitionRef="DocumentDetails"/>
<cmmn:caseFileItem id="CaseFile_ExceptionInfo" name="Exception Information" definitionRef="ExceptionInfo"/>
<cmmn:caseFileItem id="CaseFile_Resolution" name="Resolution" definitionRef="Resolution"/>
</cmmn:caseFileModel>
<!-- Plan Items -->
<!-- Stage: Exception Assessment -->
<cmmn:planItem id="PI_ExceptionAssessment" definitionRef="Stage_ExceptionAssessment">
<cmmn:entryCriterion id="EntryCriterion_1" sentryRef="Sentry_CaseStart"/>
</cmmn:planItem>
<!-- Stage: Resolution Actions -->
<cmmn:planItem id="PI_ResolutionActions" definitionRef="Stage_ResolutionActions">
<cmmn:entryCriterion id="EntryCriterion_2" sentryRef="Sentry_AssessmentComplete"/>
</cmmn:planItem>
<!-- Stage: Escalation (Optional) -->
<cmmn:planItem id="PI_Escalation" definitionRef="Stage_Escalation">
<cmmn:entryCriterion id="EntryCriterion_3" sentryRef="Sentry_EscalationNeeded"/>
</cmmn:planItem>
<!-- Milestone: Exception Resolved -->
<cmmn:planItem id="PI_ExceptionResolved" definitionRef="Milestone_ExceptionResolved">
<cmmn:entryCriterion id="EntryCriterion_4" sentryRef="Sentry_ResolutionComplete"/>
</cmmn:planItem>
<!-- Sentries -->
<cmmn:sentry id="Sentry_CaseStart">
<cmmn:planItemOnPart id="PlanItemOnPart_1" sourceRef="PI_ExceptionAssessment">
<cmmn:standardEvent>create</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_AssessmentComplete">
<cmmn:planItemOnPart id="PlanItemOnPart_2" sourceRef="PI_ExceptionAssessment">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_EscalationNeeded">
<cmmn:ifPart id="IfPart_1">
<cmmn:condition xsi:type="cmmn:tExpression">
<cmmn:body>exceptionType == "critical" || exceptionAge &gt; 72</cmmn:body>
</cmmn:condition>
</cmmn:ifPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_ResolutionComplete">
<cmmn:planItemOnPart id="PlanItemOnPart_3" sourceRef="PI_ResolutionActions">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<!-- Stage Definitions -->
<!-- Exception Assessment Stage -->
<cmmn:stage id="Stage_ExceptionAssessment" name="Exception Assessment">
<cmmn:planItem id="PI_CaptureException" definitionRef="Task_CaptureException"/>
<cmmn:planItem id="PI_ClassifyException" definitionRef="Task_ClassifyException">
<cmmn:entryCriterion id="EntryCriterion_5" sentryRef="Sentry_ExceptionCaptured"/>
</cmmn:planItem>
<cmmn:planItem id="PI_DetermineImpact" definitionRef="Task_DetermineImpact">
<cmmn:entryCriterion id="EntryCriterion_6" sentryRef="Sentry_ExceptionClassified"/>
</cmmn:planItem>
<cmmn:planItem id="PI_AssignOwner" definitionRef="Task_AssignOwner">
<cmmn:entryCriterion id="EntryCriterion_7" sentryRef="Sentry_ImpactDetermined"/>
</cmmn:planItem>
<cmmn:sentry id="Sentry_ExceptionCaptured">
<cmmn:planItemOnPart id="PlanItemOnPart_4" sourceRef="PI_CaptureException">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_ExceptionClassified">
<cmmn:planItemOnPart id="PlanItemOnPart_5" sourceRef="PI_ClassifyException">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_ImpactDetermined">
<cmmn:planItemOnPart id="PlanItemOnPart_6" sourceRef="PI_DetermineImpact">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
</cmmn:stage>
<!-- Resolution Actions Stage -->
<cmmn:stage id="Stage_ResolutionActions" name="Resolution Actions">
<cmmn:planItem id="PI_InvestigateIssue" definitionRef="Task_InvestigateIssue"/>
<cmmn:planItem id="PI_CorrectDocumentFormat" definitionRef="Task_CorrectDocumentFormat">
<cmmn:itemControl id="ItemControl_1">
<cmmn:manualActivationRule id="ManualActivationRule_1"/>
</cmmn:itemControl>
</cmmn:planItem>
<cmmn:planItem id="PI_ObtainMissingInfo" definitionRef="Task_ObtainMissingInfo">
<cmmn:itemControl id="ItemControl_2">
<cmmn:manualActivationRule id="ManualActivationRule_2"/>
</cmmn:itemControl>
</cmmn:planItem>
<cmmn:planItem id="PI_RequestClarification" definitionRef="Task_RequestClarification">
<cmmn:itemControl id="ItemControl_3">
<cmmn:manualActivationRule id="ManualActivationRule_3"/>
</cmmn:itemControl>
</cmmn:planItem>
<cmmn:planItem id="PI_ReassignReviewer" definitionRef="Task_ReassignReviewer">
<cmmn:itemControl id="ItemControl_4">
<cmmn:manualActivationRule id="ManualActivationRule_4"/>
</cmmn:itemControl>
</cmmn:planItem>
<cmmn:planItem id="PI_ImplementSolution" definitionRef="Task_ImplementSolution">
<cmmn:entryCriterion id="EntryCriterion_8" sentryRef="Sentry_InvestigationComplete"/>
</cmmn:planItem>
<cmmn:planItem id="PI_VerifyResolution" definitionRef="Task_VerifyResolution">
<cmmn:entryCriterion id="EntryCriterion_9" sentryRef="Sentry_SolutionImplemented"/>
</cmmn:planItem>
<cmmn:sentry id="Sentry_InvestigationComplete">
<cmmn:planItemOnPart id="PlanItemOnPart_7" sourceRef="PI_InvestigateIssue">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_SolutionImplemented">
<cmmn:planItemOnPart id="PlanItemOnPart_8" sourceRef="PI_ImplementSolution">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
</cmmn:stage>
<!-- Escalation Stage -->
<cmmn:stage id="Stage_Escalation" name="Escalation">
<cmmn:planItem id="PI_NotifyStakeholders" definitionRef="Task_NotifyStakeholders"/>
<cmmn:planItem id="PI_ConveneReviewBoard" definitionRef="Task_ConveneReviewBoard">
<cmmn:entryCriterion id="EntryCriterion_10" sentryRef="Sentry_StakeholdersNotified"/>
</cmmn:planItem>
<cmmn:planItem id="PI_DevelopActionPlan" definitionRef="Task_DevelopActionPlan">
<cmmn:entryCriterion id="EntryCriterion_11" sentryRef="Sentry_BoardConvened"/>
</cmmn:planItem>
<cmmn:planItem id="PI_ApproveException" definitionRef="Task_ApproveException">
<cmmn:entryCriterion id="EntryCriterion_12" sentryRef="Sentry_ActionPlanDeveloped"/>
</cmmn:planItem>
<cmmn:sentry id="Sentry_StakeholdersNotified">
<cmmn:planItemOnPart id="PlanItemOnPart_9" sourceRef="PI_NotifyStakeholders">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_BoardConvened">
<cmmn:planItemOnPart id="PlanItemOnPart_10" sourceRef="PI_ConveneReviewBoard">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
<cmmn:sentry id="Sentry_ActionPlanDeveloped">
<cmmn:planItemOnPart id="PlanItemOnPart_11" sourceRef="PI_DevelopActionPlan">
<cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
</cmmn:sentry>
</cmmn:stage>
<!-- Task Definitions -->
<!-- Exception Assessment Tasks -->
<cmmn:humanTask id="Task_CaptureException" name="Capture Exception Details"/>
<cmmn:humanTask id="Task_ClassifyException" name="Classify Exception Type"/>
<cmmn:humanTask id="Task_DetermineImpact" name="Determine Business Impact"/>
<cmmn:humanTask id="Task_AssignOwner" name="Assign Owner"/>
<!-- Resolution Actions Tasks -->
<cmmn:humanTask id="Task_InvestigateIssue" name="Investigate Root Cause"/>
<cmmn:humanTask id="Task_CorrectDocumentFormat" name="Correct Document Format"/>
<cmmn:humanTask id="Task_ObtainMissingInfo" name="Obtain Missing Information"/>
<cmmn:humanTask id="Task_RequestClarification" name="Request Clarification"/>
<cmmn:humanTask id="Task_ReassignReviewer" name="Reassign to Different Reviewer"/>
<cmmn:humanTask id="Task_ImplementSolution" name="Implement Solution"/>
<cmmn:humanTask id="Task_VerifyResolution" name="Verify Resolution"/>
<!-- Escalation Tasks -->
<cmmn:humanTask id="Task_NotifyStakeholders" name="Notify Stakeholders"/>
<cmmn:humanTask id="Task_ConveneReviewBoard" name="Convene Review Board"/>
<cmmn:humanTask id="Task_DevelopActionPlan" name="Develop Action Plan"/>
<cmmn:humanTask id="Task_ApproveException" name="Approve Exception"/>
<!-- Milestone Definition -->
<cmmn:milestone id="Milestone_ExceptionResolved" name="Exception Resolved"/>
</cmmn:casePlanModel>
</cmmn:case>
<!-- Case File Item Definitions -->
<cmmn:caseFileItemDefinition id="DocumentDetails" name="Document Details"/>
<cmmn:caseFileItemDefinition id="ExceptionInfo" name="Exception Information"/>
<cmmn:caseFileItemDefinition id="Resolution" name="Resolution"/>
<!-- Diagram -->
<cmmndi:CMMNDI>
<cmmndi:CMMNDiagram id="CMMNDiagram_1">
<cmmndi:Size width="1200" height="800"/>
<cmmndi:CMMNShape id="CMMNShape_CasePlan" cmmnElementRef="CasePlanModel_1">
<dc:Bounds x="50" y="50" width="1100" height="700"/>
</cmmndi:CMMNShape>
<!-- Exception Assessment Stage -->
<cmmndi:CMMNShape id="CMMNShape_ExceptionAssessment" cmmnElementRef="PI_ExceptionAssessment">
<dc:Bounds x="100" y="100" width="300" height="250"/>
</cmmndi:CMMNShape>
<!-- Resolution Actions Stage -->
<cmmndi:CMMNShape id="CMMNShape_ResolutionActions" cmmnElementRef="PI_ResolutionActions">
<dc:Bounds x="450" y="100" width="350" height="350"/>
</cmmndi:CMMNShape>
<!-- Escalation Stage -->
<cmmndi:CMMNShape id="CMMNShape_Escalation" cmmnElementRef="PI_Escalation">
<dc:Bounds x="850" y="100" width="250" height="250"/>
</cmmndi:CMMNShape>
<!-- Exception Resolved Milestone -->
<cmmndi:CMMNShape id="CMMNShape_ExceptionResolved" cmmnElementRef="PI_ExceptionResolved">
<dc:Bounds x="950" y="500" width="100" height="80"/>
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="EntryCriterion_1_di" cmmnElementRef="EntryCriterion_1">
<dc:Bounds x="270" y="126" width="20" height="28" />
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="EntryCriterion_2_di" cmmnElementRef="EntryCriterion_2">
<dc:Bounds x="420" y="126" width="20" height="28" />
</cmmndi:CMMNShape>
<cmmndi:CMMNShape id="EntryCriterion_3_di" cmmnElementRef="EntryCriterion_3">
<dc:Bounds x="440" y="306" width="20" height="28" />
</cmmndi:CMMNShape>
</cmmndi:CMMNDiagram>
</cmmndi:CMMNDI>
</cmmn:definitions>

View File

@@ -0,0 +1,346 @@
<?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"
id="DocumentApprovalDecision"
name="Document Approval Decision"
namespace="http://processgit.io/dmn/document-approval">
<decision id="Decision_ApprovalRequirements" name="Approval Requirements">
<informationRequirement id="InformationRequirement_1">
<requiredInput href="#InputData_DocumentType"/>
</informationRequirement>
<informationRequirement id="InformationRequirement_2">
<requiredInput href="#InputData_DocumentValue"/>
</informationRequirement>
<informationRequirement id="InformationRequirement_3">
<requiredInput href="#InputData_Department"/>
</informationRequirement>
<decisionTable id="DecisionTable_1" hitPolicy="FIRST">
<!-- Input Columns -->
<input id="Input_DocumentType" label="Document Type">
<inputExpression id="InputExpression_DocumentType" typeRef="string">
<text>documentType</text>
</inputExpression>
</input>
<input id="Input_Value" label="Document Value ($)">
<inputExpression id="InputExpression_Value" typeRef="number">
<text>documentValue</text>
</inputExpression>
</input>
<input id="Input_Department" label="Department">
<inputExpression id="InputExpression_Department" typeRef="string">
<text>department</text>
</inputExpression>
</input>
<!-- Output Columns -->
<output id="Output_ApprovalLevel" label="Approval Level" name="approvalLevel" typeRef="string"/>
<output id="Output_RequiredApprovers" label="Required Approvers" name="requiredApprovers" typeRef="number"/>
<output id="Output_ApprovalAuthority" label="Approval Authority" name="approvalAuthority" typeRef="string"/>
<output id="Output_ReviewTime" label="Max Review Time (hours)" name="reviewTimeHours" typeRef="number"/>
<!-- Decision Rules -->
<!-- Financial - High Value -->
<rule id="Rule_1">
<inputEntry id="InputEntry_1_1">
<text>"Contract","Purchase Order","Financial Statement"</text>
</inputEntry>
<inputEntry id="InputEntry_1_2">
<text>&gt;= 100000</text>
</inputEntry>
<inputEntry id="InputEntry_1_3">
<text>-</text>
</inputEntry>
<outputEntry id="OutputEntry_1_1">
<text>"Executive"</text>
</outputEntry>
<outputEntry id="OutputEntry_1_2">
<text>3</text>
</outputEntry>
<outputEntry id="OutputEntry_1_3">
<text>"CFO, CEO, Board Member"</text>
</outputEntry>
<outputEntry id="OutputEntry_1_4">
<text>72</text>
</outputEntry>
</rule>
<!-- Financial - Medium Value -->
<rule id="Rule_2">
<inputEntry id="InputEntry_2_1">
<text>"Contract","Purchase Order"</text>
</inputEntry>
<inputEntry id="InputEntry_2_2">
<text>[10000..100000)</text>
</inputEntry>
<inputEntry id="InputEntry_2_3">
<text>-</text>
</inputEntry>
<outputEntry id="OutputEntry_2_1">
<text>"Senior Management"</text>
</outputEntry>
<outputEntry id="OutputEntry_2_2">
<text>2</text>
</outputEntry>
<outputEntry id="OutputEntry_2_3">
<text>"Director, VP Finance"</text>
</outputEntry>
<outputEntry id="OutputEntry_2_4">
<text>48</text>
</outputEntry>
</rule>
<!-- Financial - Low Value -->
<rule id="Rule_3">
<inputEntry id="InputEntry_3_1">
<text>"Purchase Order"</text>
</inputEntry>
<inputEntry id="InputEntry_3_2">
<text>&lt; 10000</text>
</inputEntry>
<inputEntry id="InputEntry_3_3">
<text>-</text>
</inputEntry>
<outputEntry id="OutputEntry_3_1">
<text>"Manager"</text>
</outputEntry>
<outputEntry id="OutputEntry_3_2">
<text>1</text>
</outputEntry>
<outputEntry id="OutputEntry_3_3">
<text>"Department Manager"</text>
</outputEntry>
<outputEntry id="OutputEntry_3_4">
<text>24</text>
</outputEntry>
</rule>
<!-- Legal Documents -->
<rule id="Rule_4">
<inputEntry id="InputEntry_4_1">
<text>"Legal Agreement","NDA","Compliance Document"</text>
</inputEntry>
<inputEntry id="InputEntry_4_2">
<text>-</text>
</inputEntry>
<inputEntry id="InputEntry_4_3">
<text>-</text>
</inputEntry>
<outputEntry id="OutputEntry_4_1">
<text>"Legal"</text>
</outputEntry>
<outputEntry id="OutputEntry_4_2">
<text>2</text>
</outputEntry>
<outputEntry id="OutputEntry_4_3">
<text>"Legal Counsel, CLO"</text>
</outputEntry>
<outputEntry id="OutputEntry_4_4">
<text>48</text>
</outputEntry>
</rule>
<!-- HR Policy Documents -->
<rule id="Rule_5">
<inputEntry id="InputEntry_5_1">
<text>"HR Policy","Employee Handbook"</text>
</inputEntry>
<inputEntry id="InputEntry_5_2">
<text>-</text>
</inputEntry>
<inputEntry id="InputEntry_5_3">
<text>"Human Resources"</text>
</inputEntry>
<outputEntry id="OutputEntry_5_1">
<text>"HR Leadership"</text>
</outputEntry>
<outputEntry id="OutputEntry_5_2">
<text>2</text>
</outputEntry>
<outputEntry id="OutputEntry_5_3">
<text>"HR Director, CHRO"</text>
</outputEntry>
<outputEntry id="OutputEntry_5_4">
<text>48</text>
</outputEntry>
</rule>
<!-- Technical Documentation -->
<rule id="Rule_6">
<inputEntry id="InputEntry_6_1">
<text>"Technical Specification","Architecture Document","API Documentation"</text>
</inputEntry>
<inputEntry id="InputEntry_6_2">
<text>-</text>
</inputEntry>
<inputEntry id="InputEntry_6_3">
<text>"Engineering"</text>
</inputEntry>
<outputEntry id="OutputEntry_6_1">
<text>"Technical"</text>
</outputEntry>
<outputEntry id="OutputEntry_6_2">
<text>2</text>
</outputEntry>
<outputEntry id="OutputEntry_6_3">
<text>"Tech Lead, Engineering Manager"</text>
</outputEntry>
<outputEntry id="OutputEntry_6_4">
<text>24</text>
</outputEntry>
</rule>
<!-- Marketing Materials -->
<rule id="Rule_7">
<inputEntry id="InputEntry_7_1">
<text>"Marketing Material","Press Release","Blog Post"</text>
</inputEntry>
<inputEntry id="InputEntry_7_2">
<text>-</text>
</inputEntry>
<inputEntry id="InputEntry_7_3">
<text>"Marketing"</text>
</inputEntry>
<outputEntry id="OutputEntry_7_1">
<text>"Marketing"</text>
</outputEntry>
<outputEntry id="OutputEntry_7_2">
<text>1</text>
</outputEntry>
<outputEntry id="OutputEntry_7_3">
<text>"Marketing Manager"</text>
</outputEntry>
<outputEntry id="OutputEntry_7_4">
<text>12</text>
</outputEntry>
</rule>
<!-- Standard Operating Procedures -->
<rule id="Rule_8">
<inputEntry id="InputEntry_8_1">
<text>"SOP","Process Document","Work Instruction"</text>
</inputEntry>
<inputEntry id="InputEntry_8_2">
<text>-</text>
</inputEntry>
<inputEntry id="InputEntry_8_3">
<text>-</text>
</inputEntry>
<outputEntry id="OutputEntry_8_1">
<text>"Process Owner"</text>
</outputEntry>
<outputEntry id="OutputEntry_8_2">
<text>2</text>
</outputEntry>
<outputEntry id="OutputEntry_8_3">
<text>"Process Owner, Quality Manager"</text>
</outputEntry>
<outputEntry id="OutputEntry_8_4">
<text>36</text>
</outputEntry>
</rule>
<!-- Training Materials -->
<rule id="Rule_9">
<inputEntry id="InputEntry_9_1">
<text>"Training Material","User Guide","Tutorial"</text>
</inputEntry>
<inputEntry id="InputEntry_9_2">
<text>-</text>
</inputEntry>
<inputEntry id="InputEntry_9_3">
<text>-</text>
</inputEntry>
<outputEntry id="OutputEntry_9_1">
<text>"Standard"</text>
</outputEntry>
<outputEntry id="OutputEntry_9_2">
<text>1</text>
</outputEntry>
<outputEntry id="OutputEntry_9_3">
<text>"Department Manager"</text>
</outputEntry>
<outputEntry id="OutputEntry_9_4">
<text>24</text>
</outputEntry>
</rule>
<!-- Default Rule -->
<rule id="Rule_Default">
<inputEntry id="InputEntry_Default_1">
<text>-</text>
</inputEntry>
<inputEntry id="InputEntry_Default_2">
<text>-</text>
</inputEntry>
<inputEntry id="InputEntry_Default_3">
<text>-</text>
</inputEntry>
<outputEntry id="OutputEntry_Default_1">
<text>"Standard"</text>
</outputEntry>
<outputEntry id="OutputEntry_Default_2">
<text>1</text>
</outputEntry>
<outputEntry id="OutputEntry_Default_3">
<text>"Manager"</text>
</outputEntry>
<outputEntry id="OutputEntry_Default_4">
<text>24</text>
</outputEntry>
</rule>
</decisionTable>
</decision>
<!-- Input Data -->
<inputData id="InputData_DocumentType" name="Document Type"/>
<inputData id="InputData_DocumentValue" name="Document Value"/>
<inputData id="InputData_Department" name="Department"/>
<!-- Diagram -->
<dmndi:DMNDI>
<dmndi:DMNDiagram id="DMNDiagram_1">
<dmndi:DMNShape id="DMNShape_Decision" dmnElementRef="Decision_ApprovalRequirements">
<dc:Bounds x="300" y="80" width="180" height="80"/>
</dmndi:DMNShape>
<dmndi:DMNShape id="DMNShape_InputDocType" dmnElementRef="InputData_DocumentType">
<dc:Bounds x="150" y="230" width="125" height="45"/>
</dmndi:DMNShape>
<dmndi:DMNShape id="DMNShape_InputValue" dmnElementRef="InputData_DocumentValue">
<dc:Bounds x="325" y="230" width="125" height="45"/>
</dmndi:DMNShape>
<dmndi:DMNShape id="DMNShape_InputDepartment" dmnElementRef="InputData_Department">
<dc:Bounds x="500" y="230" width="125" height="45"/>
</dmndi:DMNShape>
<dmndi:DMNEdge id="DMNEdge_1" dmnElementRef="InformationRequirement_1">
<di:waypoint x="212" y="230"/>
<di:waypoint x="360" y="160"/>
</dmndi:DMNEdge>
<dmndi:DMNEdge id="DMNEdge_2" dmnElementRef="InformationRequirement_2">
<di:waypoint x="387" y="230"/>
<di:waypoint x="390" y="160"/>
</dmndi:DMNEdge>
<dmndi:DMNEdge id="DMNEdge_3" dmnElementRef="InformationRequirement_3">
<di:waypoint x="562" y="230"/>
<di:waypoint x="420" y="160"/>
</dmndi:DMNEdge>
</dmndi:DMNDiagram>
</dmndi:DMNDI>
</definitions>

View File

@@ -0,0 +1,44 @@
# Document Review & Approval Process
## Overview
This process handles the review and approval workflow for various document types within the organization.
## Process Flow
1. **Document Submission**: User submits a document for review
2. **Format Validation**: Automated validation of document format and structure
3. **Review**: Designated reviewers assess the document content
4. **Approval Determination**: Business rules determine required approval levels based on document type and value
5. **Decision**: Document is approved, rejected, or sent back for revision
6. **Publication**: Approved documents are published to the appropriate repository
## Key Features
- Automated format validation
- Dynamic approval routing based on document type and value
- Exception handling through CMMN case management
- Multiple outcome paths (approve/reject/revise)
## Approval Levels
- **Standard**: Single manager approval for routine documents
- **Manager**: Department manager approval for low-value transactions
- **Senior Management**: Director/VP approval for medium-value transactions
- **Executive**: C-level approval for high-value or critical documents
- **Legal**: Legal counsel approval for contracts and compliance documents
- **Technical**: Engineering leadership approval for technical specifications
## Document Types Supported
- Contracts and Purchase Orders
- Financial Statements
- Legal Agreements and NDAs
- HR Policies
- Technical Specifications
- Marketing Materials
- Standard Operating Procedures
- Training Materials
## Exception Handling
When issues arise during the review process, a CMMN case is created to manage:
- Format correction
- Missing information requests
- Reviewer reassignment
- Stakeholder escalation
- Resolution verification

View File

@@ -0,0 +1,7 @@
kind: uapf.metadata.lifecycle
status: draft
effectiveFrom: null
effectiveUntil: null
reviewCycle: quarterly
lastReview: null
nextReview: null

View File

@@ -0,0 +1,7 @@
kind: uapf.metadata.ownership
owners:
- type: team
id: "{{.RepoOwner}}"
name: "{{.RepoOwner}}"
created: "2025-01-01"
updated: "2025-01-01"

View File

@@ -0,0 +1,3 @@
kind: uapf.resources.mapping
targets: []
bindings: []

25
demo-process/uapf.yaml Normal file
View File

@@ -0,0 +1,25 @@
kind: uapf.package
id: uapf.validation-ready
name: Validation Ready Process
description: Process with validation schemas
level: 4
version: 0.1.0
includes: []
cornerstones:
bpmn: true
dmn: true
cmmn: true
resources: true
validation: true
paths:
bpmn: bpmn
dmn: dmn
cmmn: cmmn
resources: resources
metadata: metadata
validation: ../validation
owners:
- type: team
id: "{{.RepoOwner}}"
contact: "{{.RepoOwner}}@processgit.local"
lifecycle: draft

View File

@@ -0,0 +1,10 @@
kind: uapf.enterprise.index
level: 0
enterprise:
id: "{{.RepoName}}"
name: "{{.RepoName}}"
description: Enterprise process collection for {{.RepoOwner}}
packages:
- ref: ../demo-process
level: 4
domain: operations

25
tools/validate.sh Executable file
View File

@@ -0,0 +1,25 @@
#!/usr/bin/env sh
set -eu
log() {
printf '%s\n' "$1"
}
log "Checking required files"
REQUIRED_PATHS="enterprise/enterprise.index.json packages"
for path in $REQUIRED_PATHS; do
if [ ! -e "$path" ]; then
log "Missing required path: $path"
exit 1
fi
done
log "Validating XML assets when xmllint is available"
if command -v xmllint >/dev/null 2>&1; then
find . -type f \( -name '*.bpmn' -o -name '*.dmn' -o -name '*.cmmn' \) -print0 |
xargs -0 -r -n1 xmllint --noout
else
log "xmllint not installed; skipping XML validation"
fi
log "Validation complete"

View File

@@ -0,0 +1,41 @@
# Validation Schemas
This directory contains validation schemas for process artifacts.
## Purpose
Validation schemas ensure that process definitions, configurations, and resources conform to organizational standards and best practices.
## Schema Types
### BPMN Schemas
- Process model validation rules
- Task naming conventions
- Gateway configuration requirements
### DMN Schemas
- Decision table structure validation
- Input/output data type validation
- Hit policy compliance
### CMMN Schemas
- Case model validation rules
- Sentry and milestone configuration
- Stage dependency validation
### Resource Schemas
- Resource mapping validation
- Binding configuration rules
- Target definition standards
## Usage
Schemas in this directory are automatically applied during:
- Process package validation
- CI/CD pipeline checks
- Pre-commit hooks
- Repository template instantiation
## Adding New Schemas
1. Create schema file in appropriate subdirectory
2. Follow JSON Schema or XML Schema standards
3. Document validation rules and examples
4. Update validation configuration to reference new schema