feat(api): Phase 1 - Extensions API LCB-FT (Spec 001)
Extensions API pour conformité BCEAO/OHADA - Lutte contre le Blanchiment des Capitaux et le Financement du Terrorisme (LCB-FT). Changements : 1. DTOs Transaction Épargne (déjà présents, validation effectuée) - TransactionEpargneRequest : origineFonds, pieceJustificativeId - TransactionEpargneResponse : origineFonds, pieceJustificativeId 2. Enums et DTOs KYC Membre (déjà présents, validation effectuée) - NiveauVigilanceKyc : SIMPLIFIE, RENFORCE - StatutKyc : NON_VERIFIE, EN_COURS, VERIFIE, REFUSE - MembreResponse : niveauVigilanceKyc, statutKyc, dateVerificationIdentite 3. Extensions DTOs Paiement - TypeObjetIntentionPaiement : +RETRAIT_EPARGNE, +CREDIT_REMBOURSEMENT - InitierDepotEpargneRequest : +origineFonds, +justificationLcbFt - DeclarerPaiementManuelRequest : +origineFonds, +justificationLcbFt - InitierPaiementEnLigneRequest : +origineFonds, +justificationLcbFt 4. Nouveaux DTOs Paramètres LCB-FT - ParametresLcbFtRequest : seuils justification et validation manuelle - ParametresLcbFtResponse : configuration org/plateforme Tâches : T001-T005 complétées Prochaine étape : Phase 2 - Migrations Flyway Spec : specs/001-mutuelles-anti-blanchiment/spec.md Signed-off-by: lions dev Team
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
package dev.lions.unionflow.server.api.dto.config.request;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.DecimalMin;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.eclipse.microprofile.openapi.annotations.media.Schema;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requête de création/mise à jour des paramètres LCB-FT (Lutte contre le Blanchiment et le Financement du Terrorisme).
|
||||||
|
* Définit les seuils au-dessus desquels les justifications d'origine des fonds sont obligatoires.
|
||||||
|
*
|
||||||
|
* @author lions dev Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 2026-03-13
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@Schema(description = "Paramètres LCB-FT (seuils de vigilance)")
|
||||||
|
public class ParametresLcbFtRequest {
|
||||||
|
|
||||||
|
@Schema(description = "ID de l'organisation (null pour paramètres plateforme)")
|
||||||
|
private String organisationId;
|
||||||
|
|
||||||
|
@NotNull(message = "Le montant seuil de justification est obligatoire")
|
||||||
|
@DecimalMin(value = "0", message = "Le montant doit être positif ou nul")
|
||||||
|
@Schema(description = "Montant au-dessus duquel l'origine des fonds est obligatoire (ex. 500000 XOF)", example = "500000")
|
||||||
|
private BigDecimal montantSeuilJustification;
|
||||||
|
|
||||||
|
@NotNull(message = "Le montant seuil de validation manuelle est obligatoire")
|
||||||
|
@DecimalMin(value = "0", message = "Le montant doit être positif ou nul")
|
||||||
|
@Schema(description = "Montant au-dessus duquel une validation manuelle est requise (ex. 1000000 XOF)", example = "1000000")
|
||||||
|
private BigDecimal montantSeuilValidationManuelle;
|
||||||
|
|
||||||
|
@NotBlank(message = "Le code devise est obligatoire")
|
||||||
|
@Size(max = 3, message = "Le code devise doit faire 3 caractères (ISO 4217)")
|
||||||
|
@Schema(description = "Code devise ISO 4217 (ex. XOF, EUR, USD)", example = "XOF")
|
||||||
|
private String codeDevise;
|
||||||
|
|
||||||
|
@Schema(description = "Notes ou commentaires sur la configuration")
|
||||||
|
private String notes;
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package dev.lions.unionflow.server.api.dto.config.response;
|
||||||
|
|
||||||
|
import dev.lions.unionflow.server.api.dto.base.BaseResponse;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.eclipse.microprofile.openapi.annotations.media.Schema;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Réponse contenant les paramètres LCB-FT (Lutte contre le Blanchiment et le Financement du Terrorisme).
|
||||||
|
* Retourne les seuils configurés pour une organisation ou la plateforme.
|
||||||
|
*
|
||||||
|
* @author lions dev Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 2026-03-13
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@Schema(description = "Paramètres LCB-FT avec seuils de vigilance")
|
||||||
|
public class ParametresLcbFtResponse extends BaseResponse {
|
||||||
|
|
||||||
|
@Schema(description = "ID de l'organisation (null si paramètres plateforme)")
|
||||||
|
private String organisationId;
|
||||||
|
|
||||||
|
@Schema(description = "Nom de l'organisation (null si paramètres plateforme)")
|
||||||
|
private String organisationNom;
|
||||||
|
|
||||||
|
@Schema(description = "Montant au-dessus duquel l'origine des fonds est obligatoire", example = "500000")
|
||||||
|
private BigDecimal montantSeuilJustification;
|
||||||
|
|
||||||
|
@Schema(description = "Montant au-dessus duquel une validation manuelle est requise", example = "1000000")
|
||||||
|
private BigDecimal montantSeuilValidationManuelle;
|
||||||
|
|
||||||
|
@Schema(description = "Code devise ISO 4217", example = "XOF")
|
||||||
|
private String codeDevise;
|
||||||
|
|
||||||
|
@Schema(description = "Notes ou commentaires sur la configuration")
|
||||||
|
private String notes;
|
||||||
|
|
||||||
|
@Schema(description = "Indique si ces paramètres s'appliquent à toute la plateforme")
|
||||||
|
private Boolean estParametrePlateforme;
|
||||||
|
}
|
||||||
@@ -16,6 +16,8 @@ import lombok.Builder;
|
|||||||
* @param methodePaiement Méthode de paiement (ESPECES, VIREMENT, CHEQUE, AUTRE)
|
* @param methodePaiement Méthode de paiement (ESPECES, VIREMENT, CHEQUE, AUTRE)
|
||||||
* @param reference Référence du paiement (numéro de transaction, numéro de chèque, etc.)
|
* @param reference Référence du paiement (numéro de transaction, numéro de chèque, etc.)
|
||||||
* @param commentaire Commentaire optionnel
|
* @param commentaire Commentaire optionnel
|
||||||
|
* @param origineFonds Origine des fonds (LCB-FT) — obligatoire au-dessus du seuil configuré
|
||||||
|
* @param justificationLcbFt Justification complémentaire LCB-FT si nécessaire
|
||||||
*
|
*
|
||||||
* @author UnionFlow Team
|
* @author UnionFlow Team
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
@@ -35,6 +37,10 @@ public record DeclarerPaiementManuelRequest(
|
|||||||
String reference,
|
String reference,
|
||||||
|
|
||||||
@Size(max = 500, message = "Le commentaire ne doit pas dépasser 500 caractères")
|
@Size(max = 500, message = "Le commentaire ne doit pas dépasser 500 caractères")
|
||||||
String commentaire
|
String commentaire,
|
||||||
|
|
||||||
|
String origineFonds,
|
||||||
|
|
||||||
|
String justificationLcbFt
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ import lombok.Builder;
|
|||||||
* @param compteId ID du compte épargne à créditer
|
* @param compteId ID du compte épargne à créditer
|
||||||
* @param montant Montant du dépôt (XOF)
|
* @param montant Montant du dépôt (XOF)
|
||||||
* @param numeroTelephone Numéro Wave du membre (9 chiffres)
|
* @param numeroTelephone Numéro Wave du membre (9 chiffres)
|
||||||
|
* @param origineFonds Origine des fonds (LCB-FT) — obligatoire au-dessus du seuil configuré
|
||||||
|
* @param justificationLcbFt Justification complémentaire LCB-FT si nécessaire
|
||||||
*/
|
*/
|
||||||
@Builder
|
@Builder
|
||||||
public record InitierDepotEpargneRequest(
|
public record InitierDepotEpargneRequest(
|
||||||
@@ -27,6 +29,10 @@ public record InitierDepotEpargneRequest(
|
|||||||
|
|
||||||
@NotBlank(message = "Le numéro de téléphone Wave est obligatoire")
|
@NotBlank(message = "Le numéro de téléphone Wave est obligatoire")
|
||||||
@Pattern(regexp = "^\\d{9,15}$", message = "Numéro de téléphone invalide (9-15 chiffres)")
|
@Pattern(regexp = "^\\d{9,15}$", message = "Numéro de téléphone invalide (9-15 chiffres)")
|
||||||
String numeroTelephone
|
String numeroTelephone,
|
||||||
|
|
||||||
|
String origineFonds,
|
||||||
|
|
||||||
|
String justificationLcbFt
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import lombok.Builder;
|
|||||||
* @param cotisationId ID de la cotisation à payer
|
* @param cotisationId ID de la cotisation à payer
|
||||||
* @param methodePaiement Méthode de paiement (WAVE, ORANGE_MONEY, FREE_MONEY, CARTE_BANCAIRE)
|
* @param methodePaiement Méthode de paiement (WAVE, ORANGE_MONEY, FREE_MONEY, CARTE_BANCAIRE)
|
||||||
* @param numeroTelephone Numéro de téléphone pour Wave/Orange/Free (format: 221771234567)
|
* @param numeroTelephone Numéro de téléphone pour Wave/Orange/Free (format: 221771234567)
|
||||||
|
* @param origineFonds Origine des fonds (LCB-FT) — obligatoire au-dessus du seuil configuré
|
||||||
|
* @param justificationLcbFt Justification complémentaire LCB-FT si nécessaire
|
||||||
*
|
*
|
||||||
* @author UnionFlow Team
|
* @author UnionFlow Team
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
@@ -29,6 +31,10 @@ public record InitierPaiementEnLigneRequest(
|
|||||||
|
|
||||||
@NotBlank(message = "Le numéro de téléphone est obligatoire")
|
@NotBlank(message = "Le numéro de téléphone est obligatoire")
|
||||||
@Pattern(regexp = "^\\d{9,15}$", message = "Numéro de téléphone invalide (9-15 chiffres)")
|
@Pattern(regexp = "^\\d{9,15}$", message = "Numéro de téléphone invalide (9-15 chiffres)")
|
||||||
String numeroTelephone
|
String numeroTelephone,
|
||||||
|
|
||||||
|
String origineFonds,
|
||||||
|
|
||||||
|
String justificationLcbFt
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ public enum TypeObjetIntentionPaiement {
|
|||||||
ADHESION("Frais d'adhésion"),
|
ADHESION("Frais d'adhésion"),
|
||||||
EVENEMENT("Participation événement"),
|
EVENEMENT("Participation événement"),
|
||||||
ABONNEMENT_UNIONFLOW("Abonnement forfait UnionFlow"),
|
ABONNEMENT_UNIONFLOW("Abonnement forfait UnionFlow"),
|
||||||
DEPOT_EPARGNE("Dépôt compte épargne");
|
DEPOT_EPARGNE("Dépôt compte épargne"),
|
||||||
|
RETRAIT_EPARGNE("Retrait compte épargne"),
|
||||||
|
CREDIT_REMBOURSEMENT("Remboursement crédit");
|
||||||
|
|
||||||
private final String libelle;
|
private final String libelle;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user