# 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) - [x] āļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļĢāļ°āļšāļšāļ›āļąāļˆāļˆāļļāļšāļąāļ™āļāļąāļš TeamBinder/InEight - [x] āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄāļ‚āļ­āļ‡ Workflow Engine āļŠāļģāļŦāļĢāļąāļš Parallel Tasks - [x] āļāļģāļŦāļ™āļ” 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