Index des histoires : ingestion (ING) - v0.0.0¶
Module : ingestion Total stories : 6 Décomposé à partir de : docs/architecture/ingestion-arch.md (approuvé - session ARCHITECT 2026-05-21) Référence RPD : docs/prd/ingestion-prd.md + docs/prd/prd-v0.md §4 + §8 Référence du design : N/A - la v0.0.0 n'a pas d'interface utilisateur (architecture §1.1). Un document de conception sera nécessaire à partir de la v0.0.3 (téléchargement de l'interface utilisateur + atelier). Date : 21/05/2026
Graphique de dépendance¶
ING-001 (scaffold: TestContainers, fixtures, empty migrations)
│
├──> ING-002 (scheduler + MinIO client + tenant iteration + ING_UPLOAD_RECEIVED)
│ │
│ └──> ING-004 (commit TX + reject + dedup + ImportCommitted)
│
└──> ING-003 (parsers + validator + phone normalizer) ──> ING-004
│
├──> ING-005 (startup recovery + ARTCI prod gate)
│ │
│ └──> ING-006 (cross-cutting IT pack)
│
└──> ING-006
Prérequis externes (doivent être mis en place avant que ING-002 ne commence le développement) :
- TENANT-001 (TenantConfigCache, default-agency provisioning, customer/contract base tables)
- AUDIT-001 (AuditEventBuilder, outbox, PiiHasher)
- Extension du catalogue AUDIT OQ-X10 admettant les types d'événements ING_*
- OQ-X11 (TENANT provisions papillon-ingestion-inbox bucket + per-tenant credentials)
- OQ-X12 (TENANT confirms additive ALTER strategy on customer/contract)
- OQ-X13 (Le PO confirme la consommation de ImportCommitted - no-op listener acceptable)
Liste des histoires¶
| # | Story ID | Title | Side | Depends On | Complexity | Status |
|---|---|---|---|---|---|---|
| 1 | ING-001 | Dev environment + test infrastructure + empty migrations | BACKEND | TENANT-S0, AUDIT-S0 | S | Backlog |
| 2 | ING-002 | Scheduler + MinIO inbox client + tenant iteration skeleton | BACKEND | ING-001, TENANT-001, AUDIT-001, OQ-X10–11 | S | Backlog |
| 3 | ING-003 | CSV/XLSX parsing + row validation + phone normalization | BACKEND | ING-001 | M | Backlog |
| 4 | ING-004 | Commit transaction + reject path + SHA-256 dedup + ImportCommitted | BACKEND | ING-002, ING-003, TENANT-001, OQ-X10/12 | M | Backlog |
| 5 | ING-005 | Startup recovery + ARTCI feature-flag prod gate + structured logging | BACKEND | ING-004 | S | Backlog |
| 6 | ING-006 | Cross-cutting integration test pack (isolation, large file, magic byte, crash, flag) | BACKEND | ING-005 | M | Backlog |
Niveaux de concurence¶
| Tier | Stories | Can Start After |
|---|---|---|
| 0 | ING-001 | TENANT-S0 + AUDIT-S0 merged |
| 1 | ING-002, ING-003 | ING-001 merged + AUDIT catalog OQ-X10 + TENANT-001 (for 002) |
| 2 | ING-004 | ING-002 AND ING-003 merged |
| 3 | ING-005 | ING-004 merged |
| 4 | ING-006 | ING-005 merged (test scaffolding may start earlier) |
Critères d'acceptation du PRD Couverture¶
L'architecture §11 liste 5 ACs contraignants pour ING-001 + 3 ACs pour l'échafaudage ING-S0. Chaque étage inférieur ajoute ses propres AC techniques, conformément à la règle des 2-4 par étage.
| Architecture / PRD source | ACs | Assigned To |
|---|---|---|
| arch §11 ING-S0 scaffolding | smoke boot, migrations apply, fixtures parse | ING-001 (3 ACs) ✅ |
| arch §11 ING-001 AC-1 (happy-path commit) | clean 5-row CSV → COMMITTED + audit + processed move + event | ING-004 (AC-001) ✅ |
| arch §11 ING-001 AC-2 (all-or-nothing reject + sidecar) | tainted XLSX → PARSE_FAILED + sidecar + audit | ING-004 (AC-002) ✅ |
| arch §11 ING-001 AC-3 (SHA-256 duplicate path) | re-dropped file → DUPLICATE row + audit + move, no business write | ING-004 (AC-003) ✅ |
| arch §11 ING-001 AC-4 (prod feature-flag closed) | prod + flag=false → tick is no-op + WARN log | ING-005 (AC-001) ✅ |
| arch §11 ING-001 AC-5 (startup crash recovery) | PICKED_UP >5min → PARSE_FAILED + move + audit | ING-005 (AC-003) ✅ |
| arch §12 A4/A10 (cross-tenant SHA-256 isolation) | same hash, two tenants → both COMMIT, no cross-write | ING-006 (AC-001) ✅ |
| arch §8 perf budget + §12 A5 (heap) | 5 000 rows ≤10 s parse + ≤5 s commit, <256 MB heap | ING-006 (AC-002) ✅ |
| arch §5.1 crash matrix (stages 3, 5a, 5b) | three crash points → idempotent recovery by next tick | ING-006 (AC-003) ✅ |
| arch §7.6 A1 magic-byte spoof + AC-4 release gate combo | OOXML-bytes-with-.csv-ext → PARSE_FAILED; prod flag closed smoke | ING-006 (AC-004) ✅ |
| arch §11 ING-002 technical (scheduler+MinIO+upload audit) | cron iterates, ING_UPLOAD_RECEIVED, local tick endpoint, large-file reject | ING-002 (AC-001/2/3) ✅ |
| arch §11 ING-003 technical (parse + validate kernel) | clean parse, tainted anomalies, 5001-row cutoff, magic-byte mismatch | ING-003 (AC-001..004) ✅ |
| arch §11 ING-001 prerequisite (ING-S0) | 3 smoke ACs | ING-001 (AC-001..003) ✅ |
| TOTAL | 21 ACs | 21 assigned ✅ |
Couverture vérifiée : chaque CA contraignant de l'architecture §11 est détenu par exactement une histoire ; chaque préoccupation transversale de l'architecture §12/§13 est couverte par ING-006 ; ING-002 / ING-003 portent des CA techniques dérivés proportionnels au code qu'ils introduisent.
Ordre de mise en œuvre¶
- ING-001 - l'échafaudage débloque chaque histoire en aval.
- ING-002 - câblage du squelette de l'ordonnanceur + client MinIO. Indépendant de ING-003 (développable en parallèle au niveau 1).
- ING-003 - noyau pur d'analyseur/valideur. Indépendant de ING-002.
- ING-004 - ferme le chemin heureux de la v0.0.0 ; fusionne le câblage de ING-002 + ING-003 dans un FSM de validation transactionnelle avec audit + ImportCommitted. Blocage de la production jusqu'à ce que ING-005 obtienne le drapeau ARTCI.
- ING-005 - bascule l'interrupteur de la version 0.0.0 (ARTCI prod gate) + ajoute la résilience de la récupération en cas de crash. Après cette histoire, la v0.0.0 ING est fonctionnellement complète sur dev/staging.
- ING-006 - release gate : cross-cutting integration test pack. La v0.0.0 ING n'est livrée que lorsqu'elle est verte.
Notes¶
- Les six histoires sont uniquement en backend -
Wireframe : N/A - backend onlypartout. Les blocs Frontend / UI-States dans chaque histoire sont intentionnellement marqués N/A. - Posture de conformité : ARTCI loi 2013-450 Art. 14 →
PRÉLIMINAIRE(voir ING-005). CIMA Reg. 01-24 → pas directement engagé dans la v0.0.0 (pas de paiement / sortie réglementaire d'ING). - Le WARN de démarrage
[LEGAL-REVIEW]est reconnu pour la v0.0.0 dev/staging (la porte est ouverte dans non-prod par conception). - Forward-compat checkpoints (pas le travail de la v0.0.0, reformulé pour la visibilité) : V0.0.2 ING-007 (DOB + réintroduction de
branche+ résolution decode_agence) ; V0.0.3 ING-008+ (UI upload, atelier, history). Ceux-ci seront décomposés dans une future invocation de/decompose, PAS ici.