Specs - rafaelfqueiroz/allmywallet GitHub Wiki
Twenty-two specs decomposing the PRD into implementable units. Each follows the same template: Description โ Business rules โ Acceptance Criteria โ Out of Scope โ Decision Logs.
Business rules are numbered BR-<spec>-<n> and trace back to PRD requirement IDs. Decisions are numbered DL-<spec>-<n>.
Adding a spec? Start from TEMPLATE.md โ it carries the template, the numbering conventions, and the two verification scripts (PRD coverage and template compliance) to run afterwards.
| # | Spec | Milestone | Depends on |
|---|---|---|---|
| 001 | Authentication & Account | M0 | 003, 002 |
| 002 | Configuration Layer | M0 | โ |
| 003 | Tenant Isolation & Security | M0 | 001 |
| 004 | LGPD & Data Subject Rights | M6 (part in M1) | 001, 003, 005 |
| 005 | B3 Extract Import & Reconciliation | M1 | 003, 006, 004 |
| 006 | Transaction Ledger | M2 | 003 |
| 007 | Position & Cost Basis Engine | M2 | 006 |
| 008 | Market Data Service | M4 | 002, 003 |
| 009 | Valuation Engine | M4 | 007, 008 |
| 010 | Wallets & Allocation | M3 | 006, 007 |
| 011 | Reporting Framework | M5 | 009, 010 |
| 012 | Performance Report | M5 | 009, 011 |
| 013 | Portfolio Value Report | M5 | 009, 011 |
| 014 | Earnings Report | M5 | 006, 011 |
| 015 | Composition Report | M5 | 009, 011 |
| 016 | Platform: Performance, Availability & Accessibility | M0 โ continuous | 002 |
| 017 | Wallet Balancing | M7 | 002, 009, 010, 011 |
| 018 | Buy/Sell Opportunity | M7 | 002, 004, 007, 008 |
| 019 | Wallet Goals | M7 | 009, 010, 013, 014 |
| 020 | User Onboarding | M8 | 001, 005, 009, 010 |
| 021 | Personal Deployment | M9 | 002, 003, 008, 009, 016, 018 |
| 022 | Interface Design & Navigation | M10 | 001, 002, 004, 005, 010, 011, 016, 018, 020 |
M0 001 Auth โโ 002 Config โโ 003 Isolation
โ
M1 005 B3 Import โโโค (+ CPF stripping from 004, pulled forward)
โ
M2 006 Ledger โโ 007 Cost Basis
โ
M3 010 Wallets โโโโโค
โ
M4 008 Market Data โโ 009 Valuation
โ
M5 011 Framework โโ 012 Performance
โโโ 013 Portfolio Value
โโโ 014 Earnings
โโโ 015 Composition
M6 004 LGPD (remainder)
M7 017 Balancing โโ needs 009 valuation + 010 wallets
018 Opportunity โโ needs 008 quotes + 004 consent
019 Goals โโ needs 013 portfolio value + 014 earnings
M8 020 Onboarding โโ extracted from 005; needs 001, 005, 009, 010
taken ahead of further features (PRD R1)
M9 021 Personal deployment โโ loopback personal production; needs 002, 003, 008, 009, 016, 018
M10 022 Interface redesign โโ prototype first; regroups every existing screen, adds no calculation
016 Platform qualities โโ budgets set in M0, enforced continuously
These are asserted in more than one spec because they are the checks most likely to catch a real defect:
- Rebuild equals incremental. Positions and valuation snapshots recomputed from the ledger must exactly match the incrementally-maintained state โ SPEC-006, SPEC-007, SPEC-009.
- Totals are invariant across groupings. Switching a report's grouping must never change a total โ SPEC-011, and every report spec.
- Reports agree with each other. Composition's total = Portfolio Value's endpoint; Earnings' total = Portfolio Value's earnings driver โ SPEC-013, SPEC-014, SPEC-015. From M7 this extends to goals: a current-value growth goal must equal Portfolio Value for the same wallet and date, and a year's goal income must equal the Earnings report's total for that wallet and year โ SPEC-019.
- SPEC-002 blocks SPEC-008. The market data service must change its own polling cadence at runtime under budget pressure, which is unimplementable if the interval is a constant.
- CPF stripping (SPEC-004, BR-004-02) belongs in M1, not M6. Every other LGPD control can be retrofitted; this one cannot. Once a CPF reaches a database and a backup, "we never stored it" is retroactively false.
Carried from PRD ยง11 and unresolved at spec level: Q1 aggregator path, Q2 investment funds, Q3 IR/tax reporting, Q4 IR/IOF net values, Q5 sector data source, Q6 target allocations, Q7 when to upgrade the quote tier, Q8 forward-looking dividend calendar.