KB-1CEF
M-002 Workflow Module — Kiến trúc Kỹ thuật
7 min read Revision 1
planningmoduleworkflowM-002architecturebpmn
M-002: Workflow Module — Kiến trúc Kỹ thuật
Version: v1-draft | Date: 2026-03-03 Lead: claude_ai | Critic: gemini Status: ✅ APPROVED — bpmn-js (Camunda). Bắt đầu Sprint 2. Giải pháp: bpmn-js v18+ | BPMN 2.0 XML | ~80 dòng Vue wrapper
1. Tổng quan Kiến trúc
┌─────────────────────────────────────────────────┐
│ Nuxt Frontend │
│ │
│ ┌──────────────────┐ ┌──────────────────────┐ │
│ │ WorkflowViewer │ │ WorkflowModeler │ │
│ │ (bpmn-js viewer) │ │ (bpmn-js modeler) │ │
│ │ Read-only display│ │ Drag-drop + Annotate │ │
│ │ ~ 50 dòng │ │ ~ 80 dòng │ │
│ └────────┬─────────┘ └────────┬─────────────┘ │
│ │ │ │
│ ┌────────┴─────────────────────┴─────────────┐ │
│ │ useWorkflows.ts │ │
│ │ Composable: CRUD workflows, load XML │ │
│ └────────────────────┬───────────────────────┘ │
│ │ │
│ ┌────────────────────┴───────────────────────┐ │
│ │ CommentModule (M-001) │ │
│ │ Annotations → Intent → Comment │ │
│ └────────────────────────────────────────────┘ │
└───────────────────────┬───────────────────────────┘
│ REST API
┌───────────────────────┴───────────────────────────┐
│ Directus CMS │
│ Collection: workflows │
│ - id, title, bpmn_xml, status, task_id │
└───────────────────────┬───────────────────────────┘
│ Webhook / Prefect
┌───────────────────────┴───────────────────────────┐
│ Prefect Orchestrator (Phase 3) │
│ BPMN XML → Parse → Generate Prefect Flows │
└────────────────────────────────────────────────────┘
2. Component Architecture
2.1 Cấu trúc file
components/modules/workflow-module/
├── WorkflowViewer.vue # Viewer (read-only BPMN diagram)
├── WorkflowModeler.vue # Modeler (edit + annotations) [Sprint 4]
├── composables/
│ └── useWorkflows.ts # Logic: load/save BPMN XML
├── types.ts # TypeScript interfaces
└── README.md # Docs cho Claude Code CLI
2.2 Protocol Definition
| Mục | Chi tiết |
|---|---|
| Props | workflow-id (required, number) — ID workflow trong Directus |
task-id (optional, number) — Liên kết với task |
|
mode (optional, 'viewer' | 'modeler') — Chế độ hiển thị, default: 'viewer' |
|
height (optional, string) — Chiều cao container, default: '500px' |
|
| Events | @workflow-loaded — Khi BPMN XML load xong |
@annotation-added — Khi user thêm annotation trên diagram |
|
@workflow-saved — Khi XML được lưu về Directus |
|
| Data Source | Collection: workflows (Directus — cần tạo) |
Composable: useWorkflows(workflowId) |
|
| Permissions | Public: read (viewer) |
2.3 useWorkflows Composable
interface UseWorkflowsOptions {
workflowId: number
}
interface UseWorkflowsReturn {
workflow: Ref<Workflow | null>
bpmnXml: Ref<string>
loading: Ref<boolean>
error: Ref<string | null>
loadWorkflow: () => Promise<void>
saveWorkflow: (xml: string) => Promise<void>
parseAnnotations: (xml: string) => Annotation[]
}
3. Data Model
Collection: workflows (Directus — cần tạo Sprint 1)
| Field | Type | Description |
|---|---|---|
| id | integer (PK) | Auto |
| title | string | Tên workflow |
| description | text (nullable) | Mô tả |
| bpmn_xml | text | BPMN 2.0 XML content |
| status | enum | draft / active / archived |
| task_id | integer (FK, nullable) | Liên kết task |
| version | integer | Version counter |
| date_created | datetime | Auto |
| date_updated | datetime | Auto |
4. Phân tầng triển khai
Phase 1 — Viewer (Sprint 2)
<!-- WorkflowViewer.vue — ~50 dòng -->
<template>
<div ref="container" :style="{ height }" />
</template>
<script setup>
import BpmnViewer from 'bpmn-js'
const props = defineProps({
workflowId: { type: Number, required: true },
height: { type: String, default: '500px' }
})
// Load XML từ Directus → render bpmn-js viewer
</script>
Deliverables:
npm install bpmn-jstrong projectWorkflowViewer.vue— render BPMN diagramuseWorkflows.ts— load XML từ Directus- BPMN XML mẫu — 1 workflow đơn giản để test
- Lắp vào trang Tasks hoặc trang riêng
Phase 2 — Modeler + Annotations (Sprint 4)
<!-- WorkflowModeler.vue — ~80 dòng -->
<template>
<div ref="container" :style="{ height }" />
</template>
<script setup>
import BpmnModeler from 'bpmn-js/lib/Modeler'
// Modeler = Viewer + editing capabilities + Annotations
</script>
Deliverables:
WorkflowModeler.vue— drag-drop BPMN editor- Annotation support: click node → ghi chú intent
- Save modified XML về Directus
Phase 3 — Prefect Integration (sau Sprint 4)
- AI đọc BPMN XML → parse annotations → hiểu intent
- Auto-generate Prefect flow code từ BPMN structure
- Selftest → deploy → evidence report
5. Liên thông M-001 ↔ M-002
User thêm Annotation trên BPMN diagram
→ WorkflowModeler emit @annotation-added
→ Auto-create comment trong CommentModule (tab: planning)
→ AI Critic đọc comment → review → approve/reject
→ Nếu approved → save XML mới → re-render viewer
Fields liên thông (thêm vào task_comments):
workflow_id(nullable) — comment liên quan workflow nàobpmn_element_id(nullable) — node/edge nào trên diagram
6. bpmn-js Key Facts
| Thông tin | Giá trị |
|---|---|
| GitHub | bpmn-io/bpmn-js |
| Stars | 9,000+ |
| Version | v18.10+ |
| License | MIT (viewer) / Camunda (modeler features) |
| Format | BPMN 2.0 XML |
| Bundles | Viewer (~200KB) / Modeler (~400KB) |
| Dependencies | diagram-js, bpmn-moddle |
7. Liên kết
- Tech evaluation:
tech-evaluation.md - Discussions:
discussions.md - Execution plan:
modules-execution-plan.md - Comment Module (M-001):
../comment-module/design.md - Module Protocol:
search_knowledge("module protocol standard")
Claude Code CLI: Sprint 2 bắt đầu từ npm install bpmn-js. Đọc Phase 1 deliverables trước khi code.