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
- Review Team Module: āļāļąāļāļāļēāļĢāļŠāļĄāļēāļāļīāļāļāļēāļĄ Discipline āđāļĨāļ° Default Rules
- Approval Matrix Service: āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļ Response Codes āđāļĨāļ° Implications (Cost/Schedule)
- Task Orchestrator: āļāļ§āļāļāļļāļĄ Parallel Review āđāļĨāļ° Lead Consolidation logic
- Delegation Manager: āļāļĢāļ§āļāļŠāļāļāļŠāļīāļāļāļīāđāđāļĨāļ°āļŠāļĨāļąāļāļāļđāđāļĢāļąāļāļāļīāļāļāļāļāļāļēāļāļāļēāļĄāļĢāļ°āļĒāļ°āđāļ§āļĨāļē
- Reminder & Escalation Engine: āđāļāđ BullMQ āđāļāļāļēāļĢāļŠāđāļāļāļēāļĢāđāļāđāļāđāļāļ·āļāļāđāļāļ Progressive (3-strike)
- 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_logstable āļĢāđāļ§āļĄāļāļąāļ â āļāļĢāļ§āļāļŠāļāļ action types āđāļĄāđāļāđāļģāļāļąāļ - Notification System: āđāļāđ BullMQ + notification service āļĢāđāļ§āļĄāļāļąāļ â āļāļĢāļ§āļāļŠāļāļ queue priority
Deployment Sequence Recommendation
- Phase 1-2 āļāļāļ AI Model Revision (āđāļŠāļĢāđāļāļāđāļāļ)
- Phase 1-3 āļāļāļ RFA Approval Refactor (āđāļāđ BullMQ āļāļĩāđ setup āđāļĨāđāļ§)
- 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