Files
unionflow-server-api/unionflow/specs/001-mutuelles-anti-blanchiment/PROGRESSION.md
dahoud 7e929ac440 docs: mise à jour PROGRESSION.md - Phase 4 Mobile 43% (18/27 total)
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, 6231847

Signed-off-by: lions dev Team
2026-03-15 02:48:14 +00:00

13 KiB
Raw Blame History

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é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

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

  • 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 (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 API
    • montantSeuil (double), codeDevise (String)
    • Factory defaultSeuil() fallback 500k XOF
  • ParametresLcbFtRepository : appel /api/parametres-lcb-ft/seuil-justification
    • @lazySingleton pour injection GetIt
    • Fallback automatique si API échoue

Modifications :

  • DepotEpargneDialog : charge seuil au initState()
  • RetraitEpargneDialog : idem
  • Remplace constante kSeuilOrigineFondsObligatoireXOF par _seuilLcbFt dynamique

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.dart
  • lib/core/data/repositories/parametres_lcb_ft_repository.dart
  • lib/features/epargne/presentation/widgets/depot_epargne_dialog.dart
  • lib/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
    • onChanged sur montant pour mise à jour UI temps réel

Impact :

  • Les 3 types d'opérations (dépôt, retrait, transfert) ont la validation LCB-FT
  • Champ origineFonds transmis dans TransactionEpargneRequest
  • 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 pieceJustificativeId déjà présent dans TransactionEpargneRequest
  • Peut être ajouté ultérieurement si besoin métier
  • Non bloquant pour MVP : description texte dans origineFonds suffit
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.dart
  • lib/features/epargne/presentation/widgets/depot_epargne_dialog.dart
  • lib/features/epargne/presentation/widgets/retrait_epargne_dialog.dart
  • lib/features/epargne/presentation/widgets/transfert_epargne_dialog.dart

4.2 Fiche membre Affichage KYC (0% - 0/3)

T022 : Étendre modèle membre mobile
  • MembreModel avec 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)

  1. T012 - Implémenter ParametresLcbFtService
  2. T013 - Ajouter validation seuils dans TransactionEpargneService
  3. T017 - Créer endpoint REST paramètres LCB-FT

Moyen terme

  1. T014 - Audit opérations mutuelles
  2. Phase 4 - Écrans mobile (7 tâches)

Long terme

  1. T015-T016 - Fonctionnalités optionnelles
  2. 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