690417:1538 Refactor Work flow ADR-021

This commit is contained in:
2026-04-17 15:38:20 +07:00
parent 6d45bdaeb5
commit 3a5fc8d4af
23 changed files with 892 additions and 135 deletions
@@ -0,0 +1,87 @@
-- ==========================================================
-- Delta 06: Add CIRCULATION_FLOW_V1 Workflow Definition
-- ==========================================================
-- Purpose : สร้าง Workflow Definition สำหรับใบเวียนภายใน (Circulation)
-- Required : ก่อน delta นี้ ตาราง workflow_definitions ต้องมีอยู่แล้ว (ADR-001)
-- Renamed : CIRCULATION_INTERNAL_V1 → CIRCULATION_FLOW_V1 (ตาม naming convention)
-- States :
-- DRAFT (initial) → START → ROUTING
-- ROUTING → COMPLETE → COMPLETED (terminal)
-- ROUTING → FORCE_CLOSE → CANCELLED (terminal)
-- ==========================================================
INSERT INTO `workflow_definitions` (
`id`,
`workflow_code`,
`version`,
`description`,
`dsl`,
`compiled`,
`is_active`,
`created_at`,
`updated_at`
)
VALUES (
UUID(),
'CIRCULATION_FLOW_V1',
1,
'Circulation Workflow — DRAFT → ROUTING → COMPLETED | CANCELLED',
JSON_OBJECT(
'workflow', 'CIRCULATION_FLOW_V1',
'version', 1,
'states', JSON_ARRAY(
JSON_OBJECT(
'name', 'DRAFT',
'initial', TRUE,
'on', JSON_OBJECT(
'START', JSON_OBJECT('to', 'ROUTING')
)
),
JSON_OBJECT(
'name', 'ROUTING',
'on', JSON_OBJECT(
'COMPLETE', JSON_OBJECT('to', 'COMPLETED'),
'FORCE_CLOSE', JSON_OBJECT('to', 'CANCELLED')
)
),
JSON_OBJECT('name', 'COMPLETED', 'terminal', TRUE),
JSON_OBJECT('name', 'CANCELLED', 'terminal', TRUE)
)
),
JSON_OBJECT(
'initialState', 'DRAFT',
'states', JSON_OBJECT(
'DRAFT', JSON_OBJECT(
'initial', TRUE,
'terminal', FALSE,
'transitions', JSON_OBJECT(
'START', JSON_OBJECT('to', 'ROUTING', 'events', JSON_ARRAY())
)
),
'ROUTING', JSON_OBJECT(
'initial', FALSE,
'terminal', FALSE,
'transitions', JSON_OBJECT(
'COMPLETE', JSON_OBJECT('to', 'COMPLETED', 'events', JSON_ARRAY()),
'FORCE_CLOSE', JSON_OBJECT('to', 'CANCELLED', 'events', JSON_ARRAY())
)
),
'COMPLETED', JSON_OBJECT(
'initial', FALSE,
'terminal', TRUE,
'transitions', JSON_OBJECT()
),
'CANCELLED', JSON_OBJECT(
'initial', FALSE,
'terminal', TRUE,
'transitions', JSON_OBJECT()
)
)
),
TRUE,
NOW(),
NOW()
);
-- Verify
-- SELECT workflow_code, version, is_active FROM workflow_definitions WHERE workflow_code = 'CIRCULATION_FLOW_V1';
@@ -0,0 +1,22 @@
-- ==========================================================
-- Delta 07: Add contract_id to workflow_instances (C3 Contract Scoping)
-- ==========================================================
-- Purpose : เพิ่ม contract_id FK ใน workflow_instances เพื่อให้ Workflow Engine
-- แยก scope ตาม Contract ได้ (C3 ตาม analysis ADR-021)
-- Why : RFA / Correspondence / Transmittal → contract-scoped (contractId ถูกตั้ง)
-- Circulation → organization-scoped (contractId = NULL, ใช้ Level 2 org check)
-- Guard Level 2.5 ตรวจ contract_organizations membership เฉพาะ contractId ≠ NULL
-- ADR : ADR-009 (no migrations — direct SQL only)
-- ==========================================================
ALTER TABLE workflow_instances
ADD COLUMN contract_id INT NULL COMMENT 'Contract ที่ Workflow นี้เป็นส่วนหนึ่ง (NULL = global/legacy)'
AFTER definition_id,
ADD CONSTRAINT fk_wf_inst_contract FOREIGN KEY (contract_id) REFERENCES contracts (id) ON DELETE
SET NULL;
-- Index สำหรับ Guard lookup: "Instances ทั้งหมดในสัญญา X"
CREATE INDEX idx_wf_inst_contract ON workflow_instances (contract_id, entity_type, STATUS);
-- Verify
-- DESCRIBE workflow_instances;
-- SHOW INDEX FROM workflow_instances WHERE Key_name = 'idx_wf_inst_contract';