Some checks failed
CI/CD Pipeline / pipeline (push) Failing after 4m11s
Ouvre UnionFlow à la diaspora UEMOA (France, USA, Canada, UK, Suisse...). Entités & migration - Enum Devise (10 valeurs : XOF, XAF, EUR, USD, GBP, CAD, CHF, GHS, NGN, MAD) - Zones : UEMOA, CEMAC, CEDEAO, EUROPE, AMERIQUE, MAGHREB - DEVISES_INTERNATIONALES : EUR/USD/GBP/CAD/CHF (déclenchent AML international) - Entité TauxChange (devise_source × devise_cible × date_validite, taux NUMERIC(18,8)) - Repository : trouverExact, trouverPlusRecent (≤ date) - V49 : - Table taux_change (contrainte unicité paire+date, devises distinctes) - Seed BCEAO_FIXED EUR↔XOF + taux indicatifs USD/GBP/CAD au 2026-04-25 - Membres : pays_residence (ISO-3), numero_passeport, numero_fiscal_etranger, est_diaspora, devise_preferee - KycDossiers : pays_origine_fonds, justificatif_residence_etrangere, niveau_due_diligence (SIMPLIFIE/STANDARD/RENFORCE) DeviseConversionService - Stratégie de résolution : direct → inverse → pivot via XOF → fallback récent ≤ date - Cache thread-safe (ConcurrentHashMap, TTL 1h) - TauxIntrouvableException si aucun taux résolvable - invaliderCache() pour reload après import batch KycDiasporaService - validerCoherence : passeport obligatoire si diaspora, pays_residence ≠ UEMOA, format passeport regex - determinerNiveauDueDiligence (Instr. BCEAO 001-03-2025) : - PEP → RENFORCE - Diaspora pays sécurisés (UE/G7/Asie) → STANDARD - Diaspora FATF grey-list → RENFORCE - Diaspora pays inconnu → RENFORCE par prudence - depasseSeuilAmlInternational : seuil 1000 EUR équivalent, false sur devises locales - PAYS_UEMOA hardcodé (8 pays), PAYS_GREY_LIST_FATF snapshot 2026-04-25 Tests Sprint 6 (34/34 verts) - DeviseTest : 5 tests (référence, internationales, zones, libellés) - DeviseConversionServiceTest : 10 tests (identité, direct, inverse, pivot XOF, fallback récent, cache, invalider, exception, inputs invalides) - KycDiasporaServiceTest : 19 tests (cohérence valide/sans passeport/pays UEMOA/pays étranger, due diligence PEP/FRA/grey-list/inconnu/UEMOA, seuil EUR/USD avec taux/sans taux/XOF/null)
59 lines
1.7 KiB
Java
59 lines
1.7 KiB
Java
package dev.lions.unionflow.server.entity;
|
|
|
|
import java.util.Set;
|
|
|
|
/**
|
|
* Devises supportées par UnionFlow.
|
|
*
|
|
* <p>UnionFlow vise prioritairement la zone UEMOA (XOF/XAF) mais s'ouvre à la diaspora
|
|
* (EUR/USD/GBP/CAD). Le {@link ZoneDevise} permet de discriminer pour les règles
|
|
* AML (transferts internationaux, due diligence renforcée).
|
|
*
|
|
* @since 2026-04-25 (P2-NEW-7)
|
|
*/
|
|
public enum Devise {
|
|
|
|
// Zone UEMOA / CEMAC
|
|
XOF("Franc CFA Ouest", ZoneDevise.UEMOA),
|
|
XAF("Franc CFA Centrale", ZoneDevise.CEMAC),
|
|
|
|
// Diaspora — Europe / Amérique
|
|
EUR("Euro", ZoneDevise.EUROPE),
|
|
USD("Dollar US", ZoneDevise.AMERIQUE),
|
|
GBP("Livre Sterling", ZoneDevise.EUROPE),
|
|
CAD("Dollar Canadien", ZoneDevise.AMERIQUE),
|
|
CHF("Franc Suisse", ZoneDevise.EUROPE),
|
|
|
|
// CEDEAO non-UEMOA (pour intégrations futures)
|
|
GHS("Cédi Ghanéen", ZoneDevise.CEDEAO),
|
|
NGN("Naira Nigérian", ZoneDevise.CEDEAO),
|
|
|
|
// Maghreb
|
|
MAD("Dirham Marocain", ZoneDevise.MAGHREB);
|
|
|
|
private final String libelle;
|
|
private final ZoneDevise zone;
|
|
|
|
Devise(String libelle, ZoneDevise zone) {
|
|
this.libelle = libelle;
|
|
this.zone = zone;
|
|
}
|
|
|
|
public String libelle() { return libelle; }
|
|
public ZoneDevise zone() { return zone; }
|
|
|
|
/** Devise de référence UnionFlow / BCEAO. */
|
|
public static Devise reference() { return XOF; }
|
|
|
|
/** Devises pour lesquelles un transfert depuis/vers UEMOA déclenche AML renforcé. */
|
|
public static final Set<Devise> DEVISES_INTERNATIONALES = Set.of(EUR, USD, GBP, CAD, CHF);
|
|
|
|
public boolean estInternationale() {
|
|
return DEVISES_INTERNATIONALES.contains(this);
|
|
}
|
|
|
|
public enum ZoneDevise {
|
|
UEMOA, CEMAC, CEDEAO, EUROPE, AMERIQUE, MAGHREB
|
|
}
|
|
}
|