Files
lcbp3/specs/1-rfa-approval-refactor/plan.md
T
2026-05-12 15:37:56 +07:00

8.1 KiB

Implementation Plan: RFA Approval System Refactor

Branch: 1-rfa-approval-refactor | Date: 2026-05-11 | Spec: spec.md

Input: Refactor RFA approval system to TeamBinder/InEight-style with Review Teams, Response Codes, Delegation, Auto-Reminders, and Distribution Matrix


Summary

ปรับปรุงระบบการอนุมัติเอกสาร RFA ให้รองรับ:

  1. Review Teams by Discipline - กำหนผู้ตรวจสอบตามสาขาวิชาแทนรายบุคคล พร้อม Parallel Review
  2. Master Approval Matrix - Response Codes มาตรฐาน 1A-1G, 2, 3, 4 ตามหมวดงาน (Engineering, Material, Contract, Testing, ESG)
  3. Delegation & Proxy - มอบหมายงานแทนเมื่อไม่อยู่ พร้อมตรวจจับ Circular Delegation
  4. Auto-Reminders & Escalation - แจ้งเตือนอัตโนมัติตาม SLA และ Escalate 2 ระดับเมื่อ Overdue
  5. Distribution Matrix - กระจายเอกสารอัตโนมัติหลังอนุมัติผ่าน BullMQ

Technical approach: สร้าง Entities ใหม่ (ReviewTeam, ReviewTask, ResponseCodeMatrix, Delegation, DistributionMatrix) และ integrate กับ Unified Workflow Engine (ADR-001) และ BullMQ (ADR-008)


Technical Context

Language/Version: TypeScript 5.x, NestJS 10.x (Backend), Next.js 14.x (Frontend)
Primary Dependencies: TypeORM (Database), BullMQ (Queue/Reminders), CASL (Authorization), Zod (Validation), Redis (Cache/Locking)
Storage: MariaDB 10.11 (Primary), Redis 7.x (Cache/Queue)
Testing: Jest (Backend), Playwright (Frontend), Min 70% backend coverage, 80% business logic
Target Platform: Web Application (NestJS API + Next.js Frontend)
Project Type: Full-stack (backend + frontend)
Performance Goals: Approval API response <500ms, Parallel Review aggregation <200ms, Distribution queue processing <5 min
Constraints: ADR-019 UUID (no parseInt), ADR-009 No TypeORM Migrations, ADR-002 Document Numbering with Redlock, ADR-018 AI Boundary
Scale/Scope: 100+ concurrent RFAs, 50+ Review Teams per project, 1000+ Distribution recipients


Constitution Check

Gate Status Notes
ADR-019 UUID PASS All new entities use publicId (string UUID), internal id (number) with @Exclude()
ADR-009 No Migrations PASS Schema changes via SQL files in specs/03-Data-and-Storage/
ADR-002 Document Numbering PASS Existing RFA numbering reused, no new numbering needed
ADR-008 BullMQ PASS Reminders, Distribution, Escalation all use BullMQ
ADR-016 CASL PASS Reviewer permissions via CASL ability checks
ADR-018 AI Boundary PASS No AI involvement in approval workflow
ADR-007 Error Handling PASS BusinessException/WorkflowException for approval errors
No any types PASS Strict TypeScript enforced
No console.log PASS NestJS Logger for backend, removed for frontend commits

Post-Design Re-check: Required after data-model.md and contracts generated


Project Structure

Documentation (this feature)

specs/1-rfa-approval-refactor/
├── plan.md              # This file
├── spec.md              # Feature specification
├── research.md          # Phase 0 research
├── data-model.md        # Phase 1 data model
├── quickstart.md        # Phase 1 setup guide
├── contracts/           # Phase 1 API contracts
│   ├── review-team-api.yaml
│   ├── response-code-api.yaml
│   ├── delegation-api.yaml
│   └── distribution-api.yaml
└── tasks.md             # Phase 2 (generated by /speckit-tasks)

Source Code (repository root)

backend/
├── src/
│   ├── modules/
│   │   ├── review-team/          # NEW: Review Teams & Tasks
│   │   │   ├── entities/
│   │   │   ├── dto/
│   │   │   ├── review-team.service.ts
│   │   │   ├── review-team.controller.ts
│   │   │   └── review-task.service.ts
│   │   ├── response-code/        # NEW: Master Approval Matrix
│   │   │   ├── entities/
│   │   │   ├── dto/
│   │   │   └── response-code.service.ts
│   │   ├── delegation/           # NEW: Delegation & Proxy
│   │   │   ├── entities/
│   │   │   ├── dto/
│   │   │   └── delegation.service.ts
│   │   ├── reminder/             # NEW: Auto-Reminders
│   │   │   ├── entities/
│   │   │   ├── processors/
│   │   │   └── reminder.service.ts
│   │   ├── distribution/         # NEW: Distribution Matrix
│   │   │   ├── entities/
│   │   │   ├── processors/
│   │   │   └── distribution.service.ts
│   │   └── workflow-engine/      # EXISTING: Modified for Parallel Review
│       └── rfa/                  # EXISTING: Modified for Response Codes
└── tests/
    ├── unit/review-team/
    ├── unit/delegation/
    ├── integration/distribution/
    └── e2e/rfa-workflow/

frontend/
├── src/
│   ├── app/
│   │   ├── (dashboard)/
│   │   │   ├── review-teams/     # NEW: Review Team management UI
│   │   │   ├── response-codes/   # NEW: Master Matrix admin UI
│   │   │   ├── delegation/     # NEW: Delegation settings UI
│   │   │   └── rfa/
│   │   │       └── [id]/
│   │   │           └── review/   # MODIFIED: Parallel Review UI with Response Codes
│   │   └── api/
│   │       └── review-team/      # NEW: API routes
│   ├── components/
│   │   ├── review-task/          # NEW: Review Task cards, Aggregate status
│   │   ├── response-code/        # NEW: Response Code selector
│   │   └── delegation/           # NEW: Delegation form
│   └── hooks/
│       ├── use-review-teams.ts   # NEW
│       ├── use-response-codes.ts # NEW
│       └── use-delegation.ts     # NEW

Structure Decision: Full-stack implementation with 5 new backend modules (review-team, response-code, delegation, reminder, distribution) + modifications to existing rfa and workflow-engine modules. Frontend adds management UIs and enhances existing RFA review page.


Complexity Tracking

Violation Why Needed Simpler Alternative Rejected Because
5 new backend modules Each domain (Review Teams, Response Codes, Delegation, Reminders, Distribution) has distinct business logic, lifecycle, and scaling needs Single combined module would create tight coupling and maintenance burden
Parallel Review in Workflow Engine Requires significant DSL extension to support concurrent tasks with consensus rules Sequential review would not meet industry standard (TeamBinder/InEight) efficiency requirements
Master Approval Matrix with inheritance Global + Project override needed for standardization while allowing project flexibility Single global matrix wouldn't accommodate project-specific requirements (e.g., ESG varies by project type)

Phase Overview

Phase Output Purpose
Phase 0 research.md Research technical patterns, validate Workflow Engine DSL extension
Phase 1 data-model.md, contracts/, quickstart.md Design entities, API contracts, setup guide
Phase 2 tasks.md Break into actionable tasks (via /speckit-tasks)

Next Steps

  1. Phase 0: Generate research.md - Validate Workflow Engine DSL can support Parallel Review
  2. Phase 1: Generate data-model.md and API contracts
  3. Run: /speckit-tasks to create tasks.md
  4. Run: /speckit-analyze to validate cross-artifact consistency