-- ====================================================================
-- V44 — Sprint 1 P0 (consolidation 2026-04-25)
-- ====================================================================
-- P0-NEW-13 : Bénéficiaires effectifs (UBO — Ultimate Beneficial Owner)
--
-- Implémente l'obligation de l'Instruction BCEAO 003-03-2025 du 18 mars 2025 :
-- vérification systématique des bénéficiaires effectifs (UBO) lors du KYC,
-- selon une approche par les risques.
--
-- Critère UBO standard (GAFI / FATF) :
--   - Détention >= 25% capital ou droits de vote
--   - OU contrôle effectif (de fait / de droit)
--   - OU bénéficiaire ultime d'une opération suspecte
--
-- Conservation : 10 ans après clôture relation (directive 02/2015/CM/UEMOA).
-- ====================================================================

CREATE TABLE IF NOT EXISTS beneficiaires_effectifs (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),

    -- Lien KYC
    kyc_dossier_id UUID NOT NULL,
    organisation_cible_id UUID,
    membre_id UUID,

    -- Identité
    nom VARCHAR(100) NOT NULL,
    prenoms VARCHAR(200) NOT NULL,
    date_naissance DATE NOT NULL,
    lieu_naissance VARCHAR(200),
    nationalite VARCHAR(3) NOT NULL,
    pays_residence VARCHAR(3),

    -- Pièce d'identité
    type_piece_identite VARCHAR(30),
    numero_piece_identite VARCHAR(50),
    date_expiration_piece DATE,

    -- Contrôle
    pourcentage_capital NUMERIC(5,2) CHECK (pourcentage_capital IS NULL OR (pourcentage_capital >= 0 AND pourcentage_capital <= 100)),
    pourcentage_droits_vote NUMERIC(5,2) CHECK (pourcentage_droits_vote IS NULL OR (pourcentage_droits_vote >= 0 AND pourcentage_droits_vote <= 100)),
    nature_controle VARCHAR(50) NOT NULL,

    -- PEP
    est_pep BOOLEAN NOT NULL DEFAULT FALSE,
    pep_categorie VARCHAR(100),
    pep_pays VARCHAR(3),
    pep_fonction VARCHAR(200),

    -- Sanctions
    presence_listes_sanctions BOOLEAN NOT NULL DEFAULT FALSE,
    details_listes_sanctions VARCHAR(1000),

    -- Vérification
    verifie_par_id UUID,
    date_verification TIMESTAMP,
    source_verification VARCHAR(200),
    notes VARCHAR(2000),

    -- BaseEntity audit
    cree_le TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    cree_par UUID,
    modifie_le TIMESTAMP,
    modifie_par UUID,
    version BIGINT NOT NULL DEFAULT 0,
    actif BOOLEAN NOT NULL DEFAULT TRUE,

    CONSTRAINT fk_ubo_kyc_dossier FOREIGN KEY (kyc_dossier_id)
        REFERENCES kyc_dossier(id) ON DELETE RESTRICT
);

CREATE INDEX IF NOT EXISTS idx_ubo_kyc_dossier ON beneficiaires_effectifs (kyc_dossier_id);
CREATE INDEX IF NOT EXISTS idx_ubo_organisation_cible ON beneficiaires_effectifs (organisation_cible_id);
CREATE INDEX IF NOT EXISTS idx_ubo_membre ON beneficiaires_effectifs (membre_id) WHERE membre_id IS NOT NULL;
CREATE INDEX IF NOT EXISTS idx_ubo_pays ON beneficiaires_effectifs (pays_residence);
CREATE INDEX IF NOT EXISTS idx_ubo_pep ON beneficiaires_effectifs (est_pep) WHERE est_pep = TRUE;
CREATE INDEX IF NOT EXISTS idx_ubo_sanctions ON beneficiaires_effectifs (presence_listes_sanctions) WHERE presence_listes_sanctions = TRUE;

COMMENT ON TABLE beneficiaires_effectifs IS
    'Bénéficiaires effectifs (UBO) liés aux dossiers KYC. '
    'Implémente Instruction BCEAO 003-03-2025 (KYC + UBO). '
    'Conservation 10 ans après clôture relation (directive 02/2015/CM/UEMOA).';

COMMENT ON COLUMN beneficiaires_effectifs.nature_controle IS
    'DETENTION_CAPITAL, DROITS_VOTE, CONTROLE_DE_FAIT, BENEFICIAIRE_ULTIME, MANDAT_REPRESENTATION';
