132 lines
8.2 KiB
Markdown
132 lines
8.2 KiB
Markdown
# 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
|