Some checks failed
CI/CD Pipeline / pipeline (push) Failing after 3m46s
Le commita72ab54(chore docker Dockerfile racine) a involontairement balayé des fichiers du commit31330d9(PI-SPI, KYC, RLS, mutuelle parts, comptabilité PDF) lors d'un git add -A trop large. Restauration de l'intégralité des fichiers depuis a72ab54^ : - 11 migrations Flyway V32-V42 (parts sociales, SYSCOHADA, Keycloak Org Id, KYC, RLS, Provider défaut, FCM, App DB Roles) - Package payment/pispi/ complet (PispiAuth, PispiClient, PispiIso20022Mapper, PispiSignatureVerifier, PispiWebhookResource, dto/Pacs008Request, dto/Pacs002Response, PispiPaymentProvider) - Package payment/{wave,orangemoney,mtnmomo}/* (PaymentProvider impls) - Package payment/orchestration/ (PaymentOrchestrator, PaymentProviderRegistry) - Entités KycDossier, mutuelle/parts/* (ComptePartsSociales, TransactionPartsSociales) - Mappers, repositories, resources associés - Services KycAmlService, ComptabilitePdfService, ReleveComptePdfService, InteretsEpargneService - AdminKeycloakOrganisationResource, KycResource, PaiementUnifieResource - Tests unitaires PI-SPI, KYC, mutuelle parts
112 lines
4.1 KiB
Java
112 lines
4.1 KiB
Java
package dev.lions.unionflow.server.resource;
|
|
|
|
import dev.lions.unionflow.server.api.dto.kyc.KycDossierRequest;
|
|
import dev.lions.unionflow.server.api.dto.kyc.KycDossierResponse;
|
|
import dev.lions.unionflow.server.service.KycAmlService;
|
|
import io.quarkus.security.identity.SecurityIdentity;
|
|
import jakarta.annotation.security.RolesAllowed;
|
|
import jakarta.inject.Inject;
|
|
import jakarta.validation.Valid;
|
|
import jakarta.ws.rs.*;
|
|
import jakarta.ws.rs.core.MediaType;
|
|
import jakarta.ws.rs.core.Response;
|
|
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
|
|
/**
|
|
* Endpoints KYC/AML — gestion des dossiers d'identification et évaluation risque LCB-FT.
|
|
*/
|
|
@Path("/api/kyc")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
@Consumes(MediaType.APPLICATION_JSON)
|
|
public class KycResource {
|
|
|
|
@Inject
|
|
KycAmlService kycAmlService;
|
|
|
|
@Inject
|
|
SecurityIdentity identity;
|
|
|
|
/** Soumet ou met à jour un dossier KYC pour un membre. */
|
|
@POST
|
|
@Path("/dossiers")
|
|
@RolesAllowed({"ADMIN_ORGANISATION", "TRESORIER", "SUPER_ADMIN"})
|
|
public Response soumettre(@Valid KycDossierRequest request) {
|
|
KycDossierResponse response = kycAmlService.soumettreOuMettreAJour(request, identity.getPrincipal().getName());
|
|
return Response.status(Response.Status.CREATED).entity(response).build();
|
|
}
|
|
|
|
/** Récupère le dossier KYC actif d'un membre. */
|
|
@GET
|
|
@Path("/membres/{membreId}")
|
|
@RolesAllowed({"ADMIN_ORGANISATION", "TRESORIER", "SUPER_ADMIN"})
|
|
public Response getDossierActif(@PathParam("membreId") UUID membreId) {
|
|
return kycAmlService.getDossierActif(membreId)
|
|
.map(d -> Response.ok(d).build())
|
|
.orElse(Response.status(Response.Status.NOT_FOUND)
|
|
.entity(Map.of("error", "Aucun dossier KYC actif pour ce membre."))
|
|
.build());
|
|
}
|
|
|
|
/** Évalue le score de risque LCB-FT du membre. */
|
|
@POST
|
|
@Path("/membres/{membreId}/evaluer-risque")
|
|
@RolesAllowed({"ADMIN_ORGANISATION", "TRESORIER", "SUPER_ADMIN"})
|
|
public Response evaluerRisque(@PathParam("membreId") UUID membreId) {
|
|
KycDossierResponse response = kycAmlService.evaluerRisque(membreId);
|
|
return Response.ok(response).build();
|
|
}
|
|
|
|
/** Valide manuellement un dossier KYC (agent habilité). */
|
|
@POST
|
|
@Path("/dossiers/{dossierId}/valider")
|
|
@RolesAllowed({"SUPER_ADMIN", "ADMIN_ORGANISATION"})
|
|
public Response valider(
|
|
@PathParam("dossierId") UUID dossierId,
|
|
@QueryParam("validateurId") UUID validateurId,
|
|
@QueryParam("notes") String notes) {
|
|
KycDossierResponse response = kycAmlService.valider(
|
|
dossierId, validateurId, notes, identity.getPrincipal().getName());
|
|
return Response.ok(response).build();
|
|
}
|
|
|
|
/** Refuse un dossier KYC avec motif. */
|
|
@POST
|
|
@Path("/dossiers/{dossierId}/refuser")
|
|
@RolesAllowed({"SUPER_ADMIN", "ADMIN_ORGANISATION"})
|
|
public Response refuser(
|
|
@PathParam("dossierId") UUID dossierId,
|
|
@QueryParam("validateurId") UUID validateurId,
|
|
@QueryParam("motif") String motif) {
|
|
KycDossierResponse response = kycAmlService.refuser(
|
|
dossierId, validateurId, motif, identity.getPrincipal().getName());
|
|
return Response.ok(response).build();
|
|
}
|
|
|
|
/** Liste les dossiers KYC en attente de validation. */
|
|
@GET
|
|
@Path("/dossiers/en-attente")
|
|
@RolesAllowed({"SUPER_ADMIN", "ADMIN_ORGANISATION"})
|
|
public List<KycDossierResponse> getDossiersEnAttente() {
|
|
return kycAmlService.getDossiersEnAttente();
|
|
}
|
|
|
|
/** Liste les membres PEP (Personnes Exposées Politiquement). */
|
|
@GET
|
|
@Path("/pep")
|
|
@RolesAllowed({"SUPER_ADMIN"})
|
|
public List<KycDossierResponse> getPep() {
|
|
return kycAmlService.getDossiersPep();
|
|
}
|
|
|
|
/** Pièces d'identité expirant dans les 30 jours. */
|
|
@GET
|
|
@Path("/pieces-expirant-bientot")
|
|
@RolesAllowed({"SUPER_ADMIN", "ADMIN_ORGANISATION", "TRESORIER"})
|
|
public List<KycDossierResponse> getPiecesExpirant() {
|
|
return kycAmlService.getPiecesExpirantDansLes30Jours();
|
|
}
|
|
}
|