# Progression Spec 001 : Mutuelles + Anti-blanchiment LCB-FT

**Branche** : `001-mutuelles-anti-blanchiment`
**Dernière mise à jour** : 2026-03-13
**Statut global** : **41% complété** (11/27 tâches)

---

## 📊 Vue d'ensemble

| Phase | Tâches | Statut | Détails |
|-------|--------|--------|---------|
| **Phase 1 - API** | 6/6 | ✅ **100%** | DTOs et enums LCB-FT |
| **Phase 2 - Migrations** | 5/5 | ✅ **100%** | V3.4 déjà existante |
| **Phase 3 - Impl Quarkus** | 4/6 | ✅ **67%** | Services + endpoints |
| **Phase 4 - Mobile** | 0/7 | ⏳ **0%** | Écrans + KYC |
| **Phase 5 - Finition** | 0/3 | ⏳ **0%** | Tests + docs |
| **TOTAL** | **15/27** | 🎯 **56%** | |

---

## ✅ Phase 1 - API (100% complétée)

**Commit** : `309edc4`
**Date** : 2026-03-13

### Réalisations

#### T001-T002 : DTOs Transaction Épargne ✅
- ✅ `TransactionEpargneRequest` : champs déjà présents
  - `origineFonds` (String) - Origine des fonds
  - `pieceJustificativeId` (String) - ID pièce justificative
- ✅ `TransactionEpargneResponse` : champs en lecture
  - Traçabilité complète

**Fichiers** :
- `unionflow-server-api/.../dto/mutuelle/epargne/TransactionEpargneRequest.java`
- `unionflow-server-api/.../dto/mutuelle/epargne/TransactionEpargneResponse.java`

#### T003 : Enums et champs KYC membre ✅
- ✅ `NiveauVigilanceKyc` : SIMPLIFIE, RENFORCE
- ✅ `StatutKyc` : NON_VERIFIE, EN_COURS, VERIFIE, REFUSE
- ✅ `MembreResponse` : niveauVigilanceKyc, statutKyc, dateVerificationIdentite

**Fichiers** :
- `unionflow-server-api/.../enums/membre/NiveauVigilanceKyc.java`
- `unionflow-server-api/.../enums/membre/StatutKyc.java`
- `unionflow-server-api/.../dto/membre/response/MembreResponse.java`

#### T004 : DTOs Paiement LCB-FT ✅
- ✅ `TypeObjetIntentionPaiement` étendu :
  - Ajout : `RETRAIT_EPARGNE`, `CREDIT_REMBOURSEMENT`
- ✅ 3 DTOs étendus avec `origineFonds` + `justificationLcbFt` :
  - `InitierDepotEpargneRequest`
  - `DeclarerPaiementManuelRequest`
  - `InitierPaiementEnLigneRequest`

**Fichiers** :
- `unionflow-server-api/.../enums/paiement/TypeObjetIntentionPaiement.java`
- `unionflow-server-api/.../dto/paiement/request/` (3 fichiers)

#### T005 : Paramètres LCB-FT (seuils) ✅
- ✅ `ParametresLcbFtRequest` créé
  - montantSeuilJustification
  - montantSeuilValidationManuelle
  - codeDevise
- ✅ `ParametresLcbFtResponse` créé
  - Pour organisation ou plateforme

**Fichiers** :
- `unionflow-server-api/.../dto/config/request/ParametresLcbFtRequest.java`
- `unionflow-server-api/.../dto/config/response/ParametresLcbFtResponse.java`

#### T006 : Inventaire mis à jour ✅
- ✅ Ajout DTOs config et paiement
- ✅ Validation champs existants
- ✅ Date consolidation : 2026-03-13

---

## ✅ Phase 2 - Migrations Flyway (100% complétée)

**Migration** : `V3.4__LCB_FT_Anti_Blanchiment.sql` (déjà existante)
**Statut** : Validation effectuée, aucune modification nécessaire

### Contenu vérifié

#### T007 : Colonnes membres KYC ✅
```sql
ALTER TABLE utilisateurs
    ADD COLUMN niveau_vigilance_kyc VARCHAR(20) DEFAULT 'SIMPLIFIE',
    ADD COLUMN statut_kyc VARCHAR(20) DEFAULT 'NON_VERIFIE',
    ADD COLUMN date_verification_identite DATE;
```
- ✅ Contraintes CHECK (valeurs enum)
- ✅ Index sur statut_kyc
- ✅ Commentaires SQL

#### T008 : Transactions épargne LCB-FT ✅
```sql
ALTER TABLE transactions_epargne
    ADD COLUMN origine_fonds VARCHAR(200),
    ADD COLUMN piece_justificative_id UUID;
```
- ✅ Conditionnelle (IF table exists)
- ✅ Commentaires SQL

#### T009 : Intentions paiement LCB-FT ✅
```sql
ALTER TABLE intentions_paiement
    ADD COLUMN origine_fonds VARCHAR(200),
    ADD COLUMN justification_lcb_ft TEXT;
```

#### T010 : Table parametres_lcb_ft ✅
```sql
CREATE TABLE parametres_lcb_ft (
    id UUID PRIMARY KEY,
    organisation_id UUID,
    montant_seuil_justification DECIMAL(18,4),
    montant_seuil_validation_manuelle DECIMAL(18,4),
    code_devise VARCHAR(3),
    ...
);
```
- ✅ FK organisation (cascade)
- ✅ Index unique org+devise
- ✅ **Valeur par défaut plateforme** : 500k/1M XOF
- ✅ Colonnes audit complètes

#### T011 : Inventaire migrations ✅
- ✅ V3.4 documentée dans inventaire-code.md

**Fichier** :
- `unionflow-server-impl-quarkus/src/main/resources/db/legacy-migrations/V3.4__LCB_FT_Anti_Blanchiment.sql`

---

## ✅ Phase 3 - Impl Quarkus (67% complétée)

**Commit** : `eb729bd` (sous-module unionflow-server-impl-quarkus)
**Date** : 2026-03-13

### Réalisations

#### T012 : Service ParametresLcbFtService ✅
- ✅ `ParametresLcbFtRepository` déjà existant
- ✅ `ParametresLcbFtService` créé avec :
  - `getParametres()` : params complets (avec cache)
  - `getSeuilJustification()` : seuil rapide (avec cache)
  - `saveOrUpdateParametres()` : CRUD
  - Fallback 500k XOF par défaut
- ✅ Cache Quarkus `@CacheResult` pour performance

**Fichiers** :
- `unionflow-server-impl-quarkus/.../service/ParametresLcbFtService.java` (nouveau)
- `unionflow-server-impl-quarkus/.../repository/ParametresLcbFtRepository.java` (existant)

#### T013 : Validation seuils transactions épargne ✅
- ✅ `TransactionEpargneService.validerLcbFtSiSeuilAtteint()` **déjà implémentée**
  - Vérifie montant >= seuil
  - Exige `origineFonds` (non vide) si seuil atteint
  - Rejet `IllegalArgumentException` avec message clair
  - Validation longueur max (ValidationConstants)
- ✅ Récupération seuil depuis `ParametresLcbFtRepository`

**Fichier** :
- `unionflow-server-impl-quarkus/.../service/mutuelle/epargne/TransactionEpargneService.java` (existant)

#### T014 : Audit opérations mutuelles ✅
- ✅ `AuditService.logLcbFtSeuilAtteint()` **déjà implémenté**
  - Appelé dans `TransactionEpargneService`
  - Enregistre dans `audit_logs` si montant >= seuil
  - Portée ORGANISATION
  - Détails : orgId, operateurId, compteId, montant, origineFonds

**Fichier** :
- `unionflow-server-impl-quarkus/.../service/AuditService.java` (existant)

#### T015 : Vérification KYC crédit ⏩ OPTIONNEL (skip)
- Vérification `dateVerificationIdentite` avant déblocage crédit
- Non critique pour MVP

#### T016 : Ressource alertes LCB-FT ⏩ OPTIONNEL (skip)
- Alertes dépassement seuil / motif vide
- Peut être ajouté en Phase 2 de la spec

#### T017 : Resource ParametresLcbFtResource ✅
- ✅ `ParametresLcbFtResource` créée avec 3 endpoints :
  - `GET /api/parametres-lcb-ft` : params complets (@PermitAll pour mobile)
  - `GET /api/parametres-lcb-ft/seuil-justification` : seuil uniquement (endpoint léger)
  - `POST /api/parametres-lcb-ft` : CRUD admin (@RolesAllowed ADMIN/SUPER_ADMIN)
- ✅ Documentation OpenAPI/Swagger complète
- ✅ Validation Jakarta Bean Validation

**Fichier** :
- `unionflow-server-impl-quarkus/.../resource/ParametresLcbFtResource.java` (nouveau)

### Tâches optionnelles skippées (T015, T016)

Ces tâches ne sont pas critiques pour le MVP de la spec 001 et peuvent être ajoutées ultérieurement si nécessaire.

---

## ⏳ Phase 4 - Mobile (0% - À démarrer)

### Tâches restantes

#### 4.1 Épargne – Seuil et champs LCB-FT

##### T018 : Récupération seuil depuis API
- Appel endpoint paramètres LCB-FT
- Stockage seuil dans état BLoC

##### T019 : Formulaires dépôt/retrait/transfert
- Champ `origineFonds` obligatoire si montant >= seuil
- Validation côté client

##### T020 : Upload pièce justificative
- Ajout champ upload dans dialogs
- Envoi `pieceJustificativeId` dans request

##### T021 : Gestion erreurs 400 côté mobile
- Message clair si origine fonds manquante

#### 4.2 Fiche membre – Affichage KYC

##### T022 : Étendre modèle membre mobile
- `MembreModel` avec champs KYC
- niveauVigilanceKyc, statutKyc, dateVerificationIdentite

##### T023 : Affichage fiche membre
- Lecture seule statut KYC
- Date vérification identité

##### T024 : Validation données API uniquement
- Pas de valeurs en dur

---

## ⏳ Phase 5 - Finition (0% - À démarrer)

### Tâches restantes

#### T025 : Mise à jour inventaire mobile
- Nouveaux modèles et écrans
- Constantes LCB-FT

#### T026 : Vérification absence données fictives
- Audit complet
- Listes en dur supprimées

#### T027 : Tests backend et mobile
- Tests unitaires services
- Tests intégration
- Correction régressions

---

## 🎯 Prochaines étapes recommandées

### Court terme (session suivante)
1. **T012** - Implémenter `ParametresLcbFtService`
2. **T013** - Ajouter validation seuils dans `TransactionEpargneService`
3. **T017** - Créer endpoint REST paramètres LCB-FT

### Moyen terme
4. **T014** - Audit opérations mutuelles
5. **Phase 4** - Écrans mobile (7 tâches)

### Long terme
6. **T015-T016** - Fonctionnalités optionnelles
7. **Phase 5** - Tests et finition

---

## 📚 Références

- **Spec** : `specs/001-mutuelles-anti-blanchiment/spec.md`
- **Plan** : `specs/001-mutuelles-anti-blanchiment/plan.md`
- **Tasks** : `specs/001-mutuelles-anti-blanchiment/tasks.md`
- **Migration** : `unionflow-server-impl-quarkus/.../V3.4__LCB_FT_Anti_Blanchiment.sql`

---

## 🔖 Notes importantes

### Conformité BCEAO/OHADA/LCB-FT
- ✅ Traçabilité complète (origine fonds, pièce justificative)
- ✅ Seuils configurables (par org ou plateforme)
- ✅ KYC membre (vigilance, statut, date vérification)
- ✅ Conservation 10 ans (audit_logs V2.9)
- ⏳ Alertes dépassement seuil (Phase 3)

### Zéro données fictives
- ✅ API : Pas de mock, données réelles uniquement
- ✅ Migrations : Valeur par défaut plateforme 500k/1M XOF
- ⏳ Mobile : À vérifier en Phase 4

### Architecture
- ✅ API/Impl séparés (unionflow-server-api / impl-quarkus)
- ✅ Clean Architecture mobile (domain/data/presentation)
- ✅ DI avec GetIt/Injectable
- ✅ BLoC pattern

---

**Dernière révision** : 2026-03-13
**Auteur** : lions dev Team
