# Plan d'implémentation : Gestion des mutuelles orientée anti-blanchiment (LCB-FT)

**Branche** : `001-mutuelles-anti-blanchiment` | **Date** : 2026-03-08 | **Spec** : [spec.md](./spec.md)  
**Entrée** : Spécification dans `specs/001-mutuelles-anti-blanchiment/spec.md`

## Résumé

Mise en conformité LCB-FT/BCEAO/OHADA des flux mutuelles (épargne, crédit, paiements) : traçabilité (origine des fonds, justification), seuils configurables, niveau KYC membre, audit et alertes. Livrables dans l’ordre : API → Migrations → Impl Quarkus → Mobile (écrans mutuelles + affichage KYC fiche membre).

## Contexte technique

**Langage/Version** : Java 17 (backend), Dart 3 / Flutter ^3.5.3 (mobile)  
**Dépendances principales** : Quarkus 3.15.1, Panache, MapStruct (backend) ; go_router, flutter_bloc, get_it, dio (mobile)  
**Stockage** : PostgreSQL 15+ (prod), H2 (dev/test) ; Flyway pour les migrations  
**Tests** : JUnit/QuarkusTest (backend, 100 % JaCoCo), bloc_test/mockito (mobile)  
**Plateforme cible** : Serveur Linux (backend), Android / iOS (mobile)  
**Type de projet** : Backend API + Impl Quarkus + App mobile Flutter  
**Contraintes** : Pas de données fictives ; seuils LCB-FT configurables (organisation/plateforme)  
**Échelle / périmètre** : Extension du module mutuelles existant (API, BDD, services, écrans mobile épargne/crédit et fiche membre)

## Contrôle constitution

- **DDD** : Resources → Services → Repositories ; pas d’accès direct aux repositories depuis les resources.
- **API/Impl** : Nouveaux champs et DTOs dans `unionflow-server-api` ; impl dans `unionflow-server-impl-quarkus`.
- **Sécurité** : Keycloak OIDC ; rôles existants ; pas de contournement des contrôles LCB-FT.
- **RGPD / Audit** : Audit trail (creePar, modifiePar, dates) ; conservation 10 ans pour audit_logs ; extension aux opérations mutuelles.
- **Mobile** : Données uniquement via API ; pas de listes en dur ; seuil LCB-FT fourni par API/config.

## Structure du projet

### Documentation (cette feature)

```text
specs/001-mutuelles-anti-blanchiment/
├── spec.md           # Spécification fonctionnelle (existant)
├── plan.md           # Ce fichier
├── tasks.md          # À générer via /speckit.tasks
└── contracts/        # (optionnel) Endpoints impactés
```

### Code source (monorepo unionflow)

```text
unionflow/
├── unionflow-server-api/                    # DTOs, enums LCB-FT (origineFonds, KYC, seuils)
├── unionflow-server-impl-quarkus/           # Migrations, services, resources, validation seuils
│   └── src/main/resources/db/migration/    # V3.4+ LCB-FT si non présent
├── unionflow-mobile-apps/                   # Flutter
│   └── lib/
│       ├── core/constants/                 # lcb_ft_constants (seuil par défaut, à compléter par API)
│       └── features/
│           ├── epargne/                    # Dépôt/retrait/transfert + origine + pièce justificative si seuil
│           └── members/                    # Fiche membre : statut KYC, date vérification identité (lecture)
```

**Décision de structure** : On s’appuie sur la structure existante (inventaire `.specify/memory/inventaire-code.md`). La feature `epargne` mobile existe déjà ; on complète les champs LCB-FT et l’affichage KYC dans la fiche membre.

## Ordre des livrables (aligné spec §5)

| Ordre | Livrable | Contenu principal |
|-------|----------|-------------------|
| 1 | Spec + inventaire | Fait (spec.md) |
| 2 | **API** (unionflow-server-api) | Champs `origineFonds`, `pieceJustificativeId` (transaction épargne) ; enums `NiveauVigilanceKyc`, `StatutKyc` ; champs membre `dateVerificationIdentite` ; DTOs paramètres LCB-FT / seuils ; extension intentions paiement (EPARGNE_DEPOT, etc. + origineFonds, justificationLcbFt) |
| 3 | **Migrations Flyway** | Colonnes membres/KYC ; transaction_epargne (origine_fonds, piece_justificative_id) ; intentions_paiement (origine_fonds, justification_lcb_ft) ; table paramètres LCB-FT (seuils) |
| 4 | **Impl Quarkus** | Règles de validation (seuil → exiger origineFonds) ; audit des opérations mutuelles ; ressource/config pour seuils ; éventuelle ressource « alertes LCB-FT » |
| 5 | **Mobile** | Écrans mutuelles : origine des fonds + pièce justificative (upload) si montant ≥ seuil (seuil depuis API/config) ; fiche membre : affichage statut KYC et date vérification identité (lecture seule) |

## Phases d’implémentation proposées

### Phase 1 – API et contrat

- Ajout/extension des DTOs et enums dans `unionflow-server-api` (spec §3.1).
- Mise à jour de l’inventaire après chaque ajout.

### Phase 2 – Persistance

- Création ou complément des migrations Flyway (spec §3.2) ; pas de modification de migrations existantes.

### Phase 3 – Règles métier backend

- Services : validation seuil, obligation origineFonds / pièce si montant ≥ seuil ; audit ; optionnel : alertes LCB-FT (spec §3.3).

### Phase 4 – Mobile

- **Épargne** : S’assurer que dépôt/retrait/transfert utilisent bien l’API (origine des fonds, pièce justificative si seuil) ; seuil de préférence fourni par l’API/config plutôt qu’en dur.
- **Fiche membre** : Affichage en lecture seule du statut KYC et de la date de vérification d’identité (données provenant de l’API membre).

## Références

- **Constitution** : `.specify/memory/constitution.md` (sections 1–4, 8, 13).
- **Inventaire** : `.specify/memory/inventaire-code.md` (packages API, migrations, features mobile).
- **Baseline** : `specs/000-unionflow-baseline/spec.md`.

## Suivi des écarts à la constitution

Aucun écart identifié ; le plan reste aligné avec la constitution et le baseline.
