12 KiB
12 KiB
Approval Workflow Flow Diagram
🔄 Complete Approval Process Flow
1. System Setup Phase
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ CLIENT │───▶│ APPROVAL_WORKFLOWS │───▶│ APPROVAL_WORKFLOW │
│ CREATION │ │ (Master Template) │ │ STEPS │
└─────────────────┘ └──────────────────────┘ └─────────────────────┘
│
▼
┌──────────────────────┐
│ CLIENT_APPROVAL_ │
│ SETTINGS │
│ (Configuration) │
└──────────────────────┘
2. Article Submission Phase
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ USER LEVEL 3 │───▶│ CREATE ARTICLE │───▶│ CHECK USER LEVEL │
│ (POLRES) │ │ │ │ REQUIRES APPROVAL? │
└─────────────────┘ └──────────────────────┘ └─────────────────────┘
│
▼
┌──────────────────────┐
│ YES - CREATE │
│ APPROVAL FLOW │
└──────────────────────┘
│
▼
┌──────────────────────┐
│ ARTICLE_APPROVAL_ │
│ FLOWS │
│ (current_step: 1) │
└──────────────────────┘
3. Step-by-Step Approval Process
STEP 1: Level 2 Approval
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ USER LEVEL 2 │───▶│ REVIEW ARTICLE │───▶│ APPROVE/REJECT │
│ (POLDAS) │ │ (Step 1) │ │ │
└─────────────────┘ └──────────────────────┘ └─────────────────────┘
│
▼
┌──────────────────────┐
│ CREATE STEP LOG │
│ (ARTICLE_APPROVAL_ │
│ STEP_LOGS) │
└──────────────────────┘
│
▼
┌──────────────────────┐
│ MOVE TO STEP 2 │
│ (current_step: 2) │
└──────────────────────┘
STEP 2: Level 1 Approval
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ USER LEVEL 1 │───▶│ REVIEW ARTICLE │───▶│ APPROVE/REJECT │
│ (POLDAS) │ │ (Step 2) │ │ │
└─────────────────┘ └──────────────────────┘ └─────────────────────┘
│
▼
┌──────────────────────┐
│ CREATE STEP LOG │
│ (ARTICLE_APPROVAL_ │
│ STEP_LOGS) │
└──────────────────────┘
│
▼
┌──────────────────────┐
│ COMPLETE APPROVAL │
│ (status: approved) │
└──────────────────────┘
📊 Database State Changes
Initial State (Article Created)
ARTICLES:
├── id: 101
├── title: "Sample Article"
├── workflow_id: 1
├── current_approval_step: 1
├── status_id: 1 (pending)
└── created_by_id: 3
ARTICLE_APPROVAL_FLOWS:
├── id: 1
├── article_id: 101
├── workflow_id: 1
├── current_step: 1
├── status_id: 1 (pending)
├── submitted_by_id: 3
└── submitted_at: 2025-01-15 10:00:00
ARTICLE_APPROVALS (Legacy):
├── id: 1
├── article_id: 101
├── approval_at_level: 2
├── status_id: 1 (pending)
└── message: "Need Approval"
After Step 1 Approval (Level 2)
ARTICLES:
├── current_approval_step: 2 ← UPDATED
└── status_id: 1 (pending)
ARTICLE_APPROVAL_FLOWS:
├── current_step: 2 ← UPDATED
└── status_id: 1 (pending)
ARTICLE_APPROVAL_STEP_LOGS: ← NEW RECORD
├── id: 1
├── approval_flow_id: 1
├── step_order: 1
├── step_name: "Level 2 Review"
├── approved_by_id: 2
├── action: "approve"
├── message: "Approved by Level 2"
└── processed_at: 2025-01-15 11:00:00
After Step 2 Approval (Level 1) - Final
ARTICLES:
├── current_approval_step: null ← UPDATED
├── status_id: 2 (approved) ← UPDATED
├── is_publish: true ← UPDATED
└── published_at: 2025-01-15 12:00:00 ← UPDATED
ARTICLE_APPROVAL_FLOWS:
├── current_step: 2
├── status_id: 2 (approved) ← UPDATED
└── completed_at: 2025-01-15 12:00:00 ← UPDATED
ARTICLE_APPROVAL_STEP_LOGS: ← NEW RECORD
├── id: 2
├── approval_flow_id: 1
├── step_order: 2
├── step_name: "Level 1 Final Approval"
├── approved_by_id: 1
├── action: "approve"
├── message: "Final approval by Level 1"
└── processed_at: 2025-01-15 12:00:00
🔧 Module Interaction Matrix
| Module | Purpose | Reads From | Writes To | Triggers |
|---|---|---|---|---|
articles |
Article Management | - | articles |
Creates approval flow |
approval_workflows |
Workflow Templates | approval_workflows |
- | Defines steps |
approval_workflow_steps |
Step Definitions | approval_workflow_steps |
- | Defines requirements |
article_approval_flows |
Active Instances | approval_workflows |
article_approval_flows |
Manages progression |
article_approval_step_logs |
Audit Trail | article_approval_flows |
article_approval_step_logs |
Logs actions |
article_approvals |
Legacy Support | - | article_approvals |
Backward compatibility |
client_approval_settings |
Configuration | clients |
client_approval_settings |
Sets defaults |
🚨 Error Handling Flow
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ ERROR │───▶│ LOG ERROR │───▶│ ROLLBACK │
│ OCCURS │ │ (Zerolog) │ │ TRANSACTION │
└─────────────────┘ └──────────────────────┘ └─────────────────────┘
│
▼
┌──────────────────────┐
│ NOTIFY USER │
│ (Error Response) │
└──────────────────────┘
🔄 Auto-Skip Logic Flow
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ USER LEVEL 1 │───▶│ CHECK CAN SKIP │───▶│ SKIP ALL STEPS │
│ (HIGHEST) │ │ ALL STEPS? │ │ │
└─────────────────┘ └──────────────────────┘ └─────────────────────┘
│
▼
┌──────────────────────┐
│ AUTO APPROVE │
│ (status: approved) │
└──────────────────────┘
📈 Performance Considerations
Database Indexes Needed
-- For fast approval flow lookups
CREATE INDEX idx_article_approval_flows_status ON article_approval_flows(status_id);
CREATE INDEX idx_article_approval_flows_current_step ON article_approval_flows(current_step);
-- For step log queries
CREATE INDEX idx_article_approval_step_logs_flow_id ON article_approval_step_logs(approval_flow_id);
CREATE INDEX idx_article_approval_step_logs_processed_at ON article_approval_step_logs(processed_at);
-- For user level queries
CREATE INDEX idx_users_user_level_id ON users(user_level_id);
CREATE INDEX idx_user_levels_level_number ON user_levels(level_number);
Caching Strategy
1. Workflow Templates → Cache in Redis
2. User Level Mappings → Cache in Memory
3. Active Approval Flows → Cache with TTL
4. Step Requirements → Cache per Workflow
🎯 Key Success Metrics
- Approval Time: Average time from submission to approval
- Step Completion Rate: Percentage of steps completed successfully
- Error Rate: Percentage of failed approval processes
- User Satisfaction: Feedback on approval process
- System Performance: Response times for approval actions
🔍 Debugging Checklist
- Check if workflow exists and is active
- Verify user level permissions
- Confirm step order is correct
- Validate foreign key relationships
- Check transaction rollback scenarios
- Monitor step log creation
- Verify notification delivery
- Test edge cases (auto-skip, rejection, etc.)
📝 Summary
Sistem approval workflow MEDOLS menggunakan pendekatan modular yang memungkinkan:
- Fleksibilitas: Workflow dapat dikonfigurasi per client
- Auditability: Setiap action dicatat dalam step logs
- Scalability: Dapat menangani multiple workflow types
- Backward Compatibility: Legacy system tetap berfungsi
- User Experience: Auto-skip untuk user level tinggi
Dengan arsitektur ini, sistem dapat menangani berbagai skenario approval dengan efisien dan dapat diandalkan.