Files
lcbp3/specs/200-fullstacks/204-rfa-approval-refactor/plan.md
T
admin 1a162bf320
CI / CD Pipeline / build (push) Successful in 4m54s
CI / CD Pipeline / deploy (push) Failing after 12m9s
feat(rfa-ai): Complete RFA Approval Refactor and AI Model Revision
2026-05-16 10:59:53 +07:00

8.2 KiB

Implementation Plan: RFA Approval System Refactor

Feature Branch: 204-rfa-approval-refactor Parent Feature: RFA Approval Refactor Version: 1.0.0 Status: Planning


🏗ïļ Architectural Overview

āđ€āļĢāļēāļˆāļ°āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļĢāļ°āļšāļš RFA Approval āđ‚āļ”āļĒāđƒāļŠāđ‰ Domain-Driven Design (DDD) āđāļĨāļ° Unified Workflow Engine (ADR-001) āđ‚āļ”āļĒāđ€āļ™āđ‰āļ™āđ„āļ›āļ—āļĩāđˆāļ„āļ§āļēāļĄāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™āļ‚āļ­āļ‡ Review Teams, āļĄāļēāļ•āļĢāļāļēāļ™ Response Codes, āđāļĨāļ°āļĢāļ°āļšāļš Delegation/Escalation āļ—āļĩāđˆāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī

Core Components

  1. Review Team Module: āļˆāļąāļ”āļāļēāļĢāļŠāļĄāļēāļŠāļīāļāļ•āļēāļĄ Discipline āđāļĨāļ° Default Rules
  2. Approval Matrix Service: āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļāļŽ Response Codes āđāļĨāļ° Implications (Cost/Schedule)
  3. Task Orchestrator: āļ„āļ§āļšāļ„āļļāļĄ Parallel Review āđāļĨāļ° Lead Consolidation logic
  4. Delegation Manager: āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŠāļīāļ—āļ˜āļīāđŒāđāļĨāļ°āļŠāļĨāļąāļšāļœāļđāđ‰āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ‡āļēāļ™āļ•āļēāļĄāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļē
  5. Reminder & Escalation Engine: āđƒāļŠāđ‰ BullMQ āđƒāļ™āļāļēāļĢāļŠāđˆāļ‡āļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āđāļšāļš Progressive (3-strike)
  6. Distribution Engine: āļ—āļģāļ‡āļēāļ™āđāļšāļš Async āđ€āļžāļ·āđˆāļ­āļāļĢāļ°āļˆāļēāļĒāđ€āļ­āļāļŠāļēāļĢāļ•āļēāļĄ Matrix āļŦāļĨāļąāļ‡āļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļī

ðŸ›Ąïļ Security & Integrity (Tier 1)

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-023/023A AI Boundary ✅ PASS No AI involvement in approval workflow (Ollama on Admin Desktop only)
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

🗚ïļ Implementation Roadmap

Phase 0: Research & Foundation (Validated)

  • āļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļĢāļ°āļšāļšāļ›āļąāļˆāļˆāļļāļšāļąāļ™āļāļąāļš TeamBinder/InEight
  • āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄāļ‚āļ­āļ‡ Workflow Engine āļŠāļģāļŦāļĢāļąāļš Parallel Tasks
  • āļāļģāļŦāļ™āļ” Schema āļžāļ·āđ‰āļ™āļāļēāļ™āļŠāļģāļŦāļĢāļąāļš Entities āđƒāļŦāļĄāđˆ

Phase 1: Data Model & Contracts (Next Step)

  • āļŠāļĢāđ‰āļēāļ‡ SQL schema āļŠāļģāļŦāļĢāļąāļš ReviewTeam, ReviewTask, Delegation, ApprovalMatrix
  • āļ­āļąāļ›āđ€āļ”āļ• Data Dictionary āđƒāļ™ specs/03-Data-and-Storage/
  • āļ™āļīāļĒāļēāļĄ API DTOs āđāļĨāļ° Response Interfaces āđƒāļ™ NestJS

Phase 2: Core Logic & Services

  • āļžāļąāļ’āļ™āļē ReviewTeamService āđāļĨāļ° DelegationService
  • āļžāļąāļ’āļ™āļē ApprovalMatrixService (Logic: Lead Consolidation, Category Filtering)
  • āļžāļąāļ’āļ™āļē RemindersProcessor (Logic: 3-Strike Escalation via BullMQ)

Phase 3: Workflow Integration

  • āļ­āļąāļ›āđ€āļ”āļ• RFA Workflow DSL āđƒāļŦāđ‰āļĢāļ­āļ‡āļĢāļąāļš Parallel Review Step
  • āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­ Event Hooks āļŠāļģāļŦāļĢāļąāļš Auto-Distribution (Transmittal generation)
  • āļžāļąāļ’āļ™āļē Proxy Logic āđƒāļ™ Task Manager āļŠāļģāļŦāļĢāļąāļš Delegation

Phase 4: Frontend UI/UX

  • āļžāļąāļ’āļ™āļē Horizontal Stepper āļŠāļģāļŦāļĢāļąāļš Parallel Review visualization
  • āļžāļąāļ’āļ™āļē Delegation Settings UI āđāļĨāļ° Matrix Management Dashboard
  • āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ RFA Detail page āđƒāļŦāđ‰āļĢāļ­āļ‡āļĢāļąāļš Side Panel layout (Discipline details)

Phase 5: Testing & Validation

  • Unit Tests āļŠāļģāļŦāļĢāļąāļš Lead Consolidation rules
  • E2E Tests āļŠāļģāļŦāļĢāļąāļš Delegation expiry āđāļĨāļ° Escalation flow
  • āđ‚āļŦāļĨāļ”āđ€āļ—āļŠāļ•āđŒāļŠāļģāļŦāļĢāļąāļš Distribution Matrix (Concurrent approvals)
  • Performance Tests āļŠāļģāļŦāļĢāļąāļš Approval Matrix Service
    • Load testing āļāļąāļš 1000+ response code rules
    • Benchmark consensus calculation āļāļąāļš 10+ disciplines
    • Query performance test āļŠāļģāļŦāļĢāļąāļš review_tasks āļāļąāļš indexes
    • Document SLA targets: Approval lookup < 100ms, Consensus calc < 500ms

📐 Technical Decisions

Decision 1: Lead Consolidation Logic (Parallel Review)

āđ€āļĢāļēāļˆāļ°āđƒāļŠāđ‰ Lead Consolidation āđāļ—āļ™ Majority Vote āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļšāļĄāļēāļ•āļĢāļāļēāļ™āļ­āļļāļ•āļŠāļēāļŦāļāļĢāļĢāļĄ āđ‚āļ”āļĒ Lead Discipline āļˆāļ°āđ„āļ”āđ‰āļĢāļąāļšāļŠāļīāļ—āļ˜āļīāđŒāđƒāļ™āļāļēāļĢ "āļŠāļĢāļļāļ›āļœāļĨ" āļŦāļĨāļąāļ‡āļˆāļēāļāļ—āļļāļ Discipline āļ—āļģāļ‡āļēāļ™āđ€āļŠāļĢāđ‡āļˆ āļŦāļĢāļ·āļ­āļŠāļēāļĄāļēāļĢāļ– override āđ„āļ”āđ‰āļ•āļēāļĄāļŠāļīāļ—āļ˜āļīāđŒ PM

Decision 2: Single-Level Delegation

āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ‚āļ­āļ‡ Circular Dependency āđāļĨāļ° Audit Trail āđ€āļĢāļēāļˆāļ°āļˆāļģāļāļąāļ”āļāļēāļĢāļĄāļ­āļšāļŦāļĄāļēāļĒāļ‡āļēāļ™āđƒāļŦāđ‰āđ€āļžāļĩāļĒāļ‡ 1 āļĢāļ°āļ”āļąāļš āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ (A -> B) āđ‚āļ”āļĒ B āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļ•āđˆāļ­āđƒāļŦāđ‰ C āđ„āļ”āđ‰āđƒāļ™āļāļēāļ™āļ°āļœāļđāđ‰āđƒāļŠāđ‰āļ›āļāļ•āļī

Decision 3: 3-Strike Progressive Escalation

āļāļēāļĢāļĒāļāļĢāļ°āļ”āļąāļšāļˆāļ°āđƒāļŠāđ‰āļĢāļ°āļšāļš 3 āļ„āļĢāļąāđ‰āļ‡ (Reminders) āļ•āđˆāļ­āļĢāļ°āļ”āļąāļšāļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļ āļāđˆāļ­āļ™āļˆāļ°āļĒāđ‰āļēāļĒāļ‡āļēāļ™āđ„āļ›āđƒāļŦāđ‰āļœāļđāđ‰āļšāļąāļ‡āļ„āļąāļšāļšāļąāļāļŠāļē (L1 -> L2) āđāļĨāļ°āđ€āļĄāļ·āđˆāļ­āļ–āļķāļ‡āļĢāļ°āļ”āļąāļšāļŠāļđāļ‡āļŠāļļāļ”āļˆāļ°āļŠāđˆāļ‡ Daily Reminder āļˆāļ™āļāļ§āđˆāļēāļˆāļ°āļˆāļšāļ‡āļēāļ™


⚠ïļ Potential Blockers

  • Workflow DSL Flexibility: āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ‚āļ­āļ‡ Engine āļ›āļąāļˆāļˆāļļāļšāļąāļ™āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Parallel Tasks āļ—āļĩāđˆāļĢāļ­āļāļēāļĢ Consolidation
  • Migration of Existing RFAs: āđāļœāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ RFA āļ—āļĩāđˆāļāļģāļĨāļąāļ‡āļ­āļĒāļđāđˆāđƒāļ™āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢ (In-flight) āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļœāđˆāļēāļ™āļĢāļ°āļšāļš
  • CASL Matrix Overlap: āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ‚āļ­āļ‡āļŠāļīāļ—āļ˜āļīāđŒāđ€āļĄāļ·āđˆāļ­āļĄāļĩāļ—āļąāđ‰āļ‡ Delegation āđāļĨāļ° Review Team roles āļ‹āđ‰āļ­āļ™āļ—āļąāļšāļāļąāļ™

🔗 Cross-Spec Dependencies

Dependencies āļˆāļēāļ 302-ai-model-revision

Component Impact Coordination
BullMQ Infrastructure āđƒāļŠāđ‰ queue ai-realtime āđāļĨāļ° ai-batch āļĢāđˆāļ§āļĄāļāļąāļ™ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āđˆāļē Reminder/Escalation jobs āđ„āļĄāđˆāļŠāļ™āļāļąāļš AI jobs
QdrantService āļ­āļēāļˆāđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļš RFA document search āļ•āļĢāļ§āļˆāļŠāļ­āļš projectPublicId filtering āļ–āđ‰āļēāļĄāļĩ integration
Ollama on Desk-5439 Shared GPU resource Schedule Reminder batch jobs āļ™āļ­āļāļŠāđˆāļ§āļ‡ AI peak

Shared Entities/Services

  • Audit Logging: āđƒāļŠāđ‰ audit_logs table āļĢāđˆāļ§āļĄāļāļąāļ™ â€” āļ•āļĢāļ§āļˆāļŠāļ­āļš action types āđ„āļĄāđˆāļ‹āđ‰āļģāļāļąāļ™
  • Notification System: āđƒāļŠāđ‰ BullMQ + notification service āļĢāđˆāļ§āļĄāļāļąāļ™ â€” āļ•āļĢāļ§āļˆāļŠāļ­āļš queue priority

Deployment Sequence Recommendation

  1. Phase 1-2 āļ‚āļ­āļ‡ AI Model Revision (āđ€āļŠāļĢāđ‡āļˆāļāđˆāļ­āļ™)
  2. Phase 1-3 āļ‚āļ­āļ‡ RFA Approval Refactor (āđƒāļŠāđ‰ BullMQ āļ—āļĩāđˆ setup āđāļĨāđ‰āļ§)
  3. Phase 4+ āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡ features āļ—āļģāļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđ„āļ”āđ‰

🔗 References

  • Spec File: specs/200-fullstacks/204-rfa-approval-refactor/spec.md
  • Research File: specs/200-fullstacks/204-rfa-approval-refactor/research.md
  • Cross-Spec: specs/300-others/302-ai-model-revision/plan.md (BullMQ/Qdrant shared infrastructure)
  • ADR-001: Unified Workflow Engine
  • ADR-019: Hybrid Identifier Strategy
  • ADR-008: BullMQ Notification Strategy