Phase 4 Mobile : 3/7 tâches (43%) - T018 ✅ Récupération seuil LCB-FT depuis API - T019 ✅ Formulaires avec origineFonds obligatoire - T020 ⏩ Upload pièce justificative (optionnel, skip) - T021 ✅ Gestion erreurs 400 LCB-FT Section 4.1 Épargne : 75% (3/4 tâches) - Seuil dynamique depuis backend - Validation LCB-FT sur tous les flux (dépôt/retrait/transfert) - Messages d'erreur conviviaux et explicites Section 4.2 KYC : 0% (0/3 tâches - à démarrer) Progression globale : 18/27 tâches (67%) Commits :74161df,5ef8ae1,6231847Signed-off-by: lions dev Team
13 KiB
Progression Spec 001 : Mutuelles + Anti-blanchiment LCB-FT
Branche : 001-mutuelles-anti-blanchiment
Dernière mise à jour : 2026-03-13
Statut global : 67% complété (18/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 | 3/7 | 🚧 43% | Épargne LCB-FT (3/4), KYC (0/3) |
| Phase 5 - Finition | 0/3 | ⏳ 0% | Tests + docs |
| TOTAL | 18/27 | 🎯 67% |
✅ 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ésentsorigineFonds(String) - Origine des fondspieceJustificativeId(String) - ID pièce justificative
- ✅
TransactionEpargneResponse: champs en lecture- Traçabilité complète
Fichiers :
unionflow-server-api/.../dto/mutuelle/epargne/TransactionEpargneRequest.javaunionflow-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.javaunionflow-server-api/.../enums/membre/StatutKyc.javaunionflow-server-api/.../dto/membre/response/MembreResponse.java
T004 : DTOs Paiement LCB-FT ✅
- ✅
TypeObjetIntentionPaiementétendu :- Ajout :
RETRAIT_EPARGNE,CREDIT_REMBOURSEMENT
- Ajout :
- ✅ 3 DTOs étendus avec
origineFonds+justificationLcbFt:InitierDepotEpargneRequestDeclarerPaiementManuelRequestInitierPaiementEnLigneRequest
Fichiers :
unionflow-server-api/.../enums/paiement/TypeObjetIntentionPaiement.javaunionflow-server-api/.../dto/paiement/request/(3 fichiers)
T005 : Paramètres LCB-FT (seuils) ✅
- ✅
ParametresLcbFtRequestcréé- montantSeuilJustification
- montantSeuilValidationManuelle
- codeDevise
- ✅
ParametresLcbFtResponsecréé- Pour organisation ou plateforme
Fichiers :
unionflow-server-api/.../dto/config/request/ParametresLcbFtRequest.javaunionflow-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 ✅
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 ✅
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 ✅
ALTER TABLE intentions_paiement
ADD COLUMN origine_fonds VARCHAR(200),
ADD COLUMN justification_lcb_ft TEXT;
T010 : Table parametres_lcb_ft ✅
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 ✅
- ✅
ParametresLcbFtRepositorydéjà existant - ✅
ParametresLcbFtServicecréé avec :getParametres(): params complets (avec cache)getSeuilJustification(): seuil rapide (avec cache)saveOrUpdateParametres(): CRUD- Fallback 500k XOF par défaut
- ✅ Cache Quarkus
@CacheResultpour 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
IllegalArgumentExceptionavec 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_logssi montant >= seuil - Portée ORGANISATION
- Détails : orgId, operateurId, compteId, montant, origineFonds
- Appelé dans
Fichier :
unionflow-server-impl-quarkus/.../service/AuditService.java(existant)
T015 : Vérification KYC crédit ⏩ OPTIONNEL (skip)
- Vérification
dateVerificationIdentiteavant 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 ✅
- ✅
ParametresLcbFtResourcecréé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 (43% complétée)
Commits : 74161df, 5ef8ae1, 6231847
Date : 2026-03-13
Réalisations
4.1 Épargne – Seuil et champs LCB-FT (75% - 3/4)
T018 : Récupération seuil depuis API ✅
Commit : 74161df
Nouveaux fichiers :
- ✅
SeuilLcbFtModel: modèle pour seuil récupéré depuis APImontantSeuil(double),codeDevise(String)- Factory
defaultSeuil()fallback 500k XOF
- ✅
ParametresLcbFtRepository: appel/api/parametres-lcb-ft/seuil-justification@lazySingletonpour injection GetIt- Fallback automatique si API échoue
Modifications :
- ✅
DepotEpargneDialog: charge seuil auinitState() - ✅
RetraitEpargneDialog: idem - ✅ Remplace constante
kSeuilOrigineFondsObligatoireXOFpar_seuilLcbFtdynamique
Impact :
- Seuil LCB-FT maintenant configurable par organisation depuis backend
- Messages utilisateur avec montant seuil dynamique
- Conformité BCEAO : seuils centralisés et auditables
Fichiers :
lib/core/data/models/seuil_lcb_ft_model.dartlib/core/data/repositories/parametres_lcb_ft_repository.dartlib/features/epargne/presentation/widgets/depot_epargne_dialog.dartlib/features/epargne/presentation/widgets/retrait_epargne_dialog.dart
T019 : Formulaires avec origineFonds obligatoire ✅
Commit : 5ef8ae1
Modifications :
- ✅
TransfertEpargneDialog: ajout champ origine des fonds- Import
ParametresLcbFtRepository+lcb_ft_constants - Chargement seuil au
initState() - Validation conditionnelle :
montant >= seuil→ origine fonds obligatoire - Message clair avec montant seuil dynamique
onChangedsur montant pour mise à jour UI temps réel
- Import
Impact :
- Les 3 types d'opérations (dépôt, retrait, transfert) ont la validation LCB-FT
- Champ
origineFondstransmis dansTransactionEpargneRequest - Conformité BCEAO/OHADA sur tous les flux épargne
Fichier :
lib/features/epargne/presentation/widgets/transfert_epargne_dialog.dart
T020 : Upload pièce justificative ⏩ OPTIONNEL (skip)
- Champ
pieceJustificativeIddéjà présent dansTransactionEpargneRequest - Peut être ajouté ultérieurement si besoin métier
- Non bloquant pour MVP : description texte dans
origineFondssuffit
T021 : Gestion erreurs 400 LCB-FT ✅
Commit : 6231847
Nouveau fichier :
- ✅
ErrorFormatter: utilitaire central pour formater les erreurs backend- Détecte et formate spécialement les erreurs LCB-FT (origine fonds manquante)
- Détecte erreurs KYC, réseau, 400/401/403/404/500
- Messages conviviaux avec emojis (🛡️ pour LCB-FT/KYC)
- Durée d'affichage adaptée : 6s pour LCB-FT, 3s sinon
isLcbFtError(),isCritical()helpers
Modifications 3 dialogs (dépôt, retrait, transfert) :
- ✅ Remplacement affichage erreur brut par
ErrorFormatter.format(e) - ✅ Messages explicites : "L'origine des fonds est obligatoire pour cette opération (conformité LCB-FT anti-blanchiment)"
- ✅ Durée snackbar conditionnelle selon type erreur
Impact UX :
- Messages d'erreur clairs et professionnels
- Utilisateur comprend POURQUOI l'origine fonds est requise (anti-blanchiment)
- Temps de lecture suffisant pour messages importants
Fichiers :
lib/core/utils/error_formatter.dartlib/features/epargne/presentation/widgets/depot_epargne_dialog.dartlib/features/epargne/presentation/widgets/retrait_epargne_dialog.dartlib/features/epargne/presentation/widgets/transfert_epargne_dialog.dart
4.2 Fiche membre – Affichage KYC (0% - 0/3)
T022 : Étendre modèle membre mobile ⏳
MembreModelavec champs KYC- niveauVigilanceKyc, statutKyc, dateVerificationIdentite
T023 : Affichage fiche membre KYC ⏳
- Lecture seule statut KYC
- Date vérification identité
T024 : Validation données API uniquement ⏳
- Pas de valeurs en dur
- Audit complet mobile
⏳ 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)
- T012 - Implémenter
ParametresLcbFtService - T013 - Ajouter validation seuils dans
TransactionEpargneService - T017 - Créer endpoint REST paramètres LCB-FT
Moyen terme
- T014 - Audit opérations mutuelles
- Phase 4 - Écrans mobile (7 tâches)
Long terme
- T015-T016 - Fonctionnalités optionnelles
- 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