-- ============================================================================
-- V38 — Module KYC/AML : table kyc_dossier
--
-- P1.5 ROADMAP_2026.md — KYC/AML — conformité GIABA/BCEAO LCB-FT
-- Rétention 10 ans (GIABA) gérée par colonne annee_reference + archivage planifié.
-- ============================================================================

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

    -- Identité du membre
    membre_id                   UUID NOT NULL REFERENCES utilisateurs(id),

    -- Pièce d'identité
    type_piece                  VARCHAR(30) NOT NULL,
    numero_piece                VARCHAR(50) NOT NULL,
    date_expiration_piece       DATE,

    -- Fichiers stockés (MinIO/S3 — identifiants opaques)
    piece_identite_recto_file_id VARCHAR(500),
    piece_identite_verso_file_id VARCHAR(500),
    justif_domicile_file_id     VARCHAR(500),

    -- Évaluation risque LCB-FT
    statut                      VARCHAR(20) NOT NULL DEFAULT 'NON_VERIFIE',
    niveau_risque               VARCHAR(20) NOT NULL DEFAULT 'FAIBLE',
    score_risque                INTEGER NOT NULL DEFAULT 0
                                    CHECK (score_risque >= 0 AND score_risque <= 100),

    -- PEP (Personne Exposée Politiquement)
    est_pep                     BOOLEAN NOT NULL DEFAULT FALSE,
    nationalite                 VARCHAR(5),

    -- Validation
    date_verification           TIMESTAMP,
    validateur_id               UUID REFERENCES utilisateurs(id),
    notes_validateur            VARCHAR(1000),

    -- Rétention 10 ans GIABA — partitionnement logique par année
    annee_reference             INTEGER NOT NULL DEFAULT EXTRACT(YEAR FROM NOW()),

    -- BaseEntity
    date_creation               TIMESTAMP NOT NULL DEFAULT NOW(),
    date_modification           TIMESTAMP,
    cree_par                    VARCHAR(255),
    modifie_par                 VARCHAR(255),
    version                     BIGINT NOT NULL DEFAULT 0,
    actif                       BOOLEAN NOT NULL DEFAULT TRUE,

    CONSTRAINT chk_kyc_annee_reference CHECK (annee_reference >= 2020 AND annee_reference <= 2100)
);

-- Un seul dossier actif par membre (le plus récent est actif, les anciens archivés)
CREATE UNIQUE INDEX IF NOT EXISTS idx_kyc_membre_actif
    ON kyc_dossier (membre_id)
    WHERE actif = TRUE;

CREATE INDEX IF NOT EXISTS idx_kyc_membre_id       ON kyc_dossier (membre_id);
CREATE INDEX IF NOT EXISTS idx_kyc_statut          ON kyc_dossier (statut);
CREATE INDEX IF NOT EXISTS idx_kyc_niveau_risque   ON kyc_dossier (niveau_risque);
CREATE INDEX IF NOT EXISTS idx_kyc_est_pep         ON kyc_dossier (est_pep) WHERE est_pep = TRUE;
CREATE INDEX IF NOT EXISTS idx_kyc_annee           ON kyc_dossier (annee_reference);
CREATE INDEX IF NOT EXISTS idx_kyc_date_expiration ON kyc_dossier (date_expiration_piece)
    WHERE date_expiration_piece IS NOT NULL;
