-- ====================================================================
-- V43 — Sprint 1 P0 (consolidation 2026-04-25)
-- ====================================================================
-- Implémente plusieurs P0 de l'investigation métier :
--   - P0-NEW-9 : enum referentiel_comptable sur organisations (SYSCOHADA / SYCEBNL / PCSFD_UMOA)
--   - P0-NEW-14 : compliance_officer_id sur organisations (Instruction BCEAO 001-03-2025)
--   - P0-NEW-24 : numero_cmu sur utilisateurs (Loi 2014-131 CI, passage CMU obligatoire 1er jan 2026)
--
-- Voir : unionflow/docs/ETAT_PROJET_METIER_2026-04-25.md
-- ====================================================================

-- 1. Référentiel comptable sur organisations (P0-NEW-9)
ALTER TABLE organisations
    ADD COLUMN IF NOT EXISTS referentiel_comptable VARCHAR(20) NOT NULL DEFAULT 'SYSCOHADA';

ALTER TABLE organisations DROP CONSTRAINT IF EXISTS organisations_referentiel_comptable_check;
ALTER TABLE organisations
    ADD CONSTRAINT organisations_referentiel_comptable_check
    CHECK (referentiel_comptable IN ('SYSCOHADA', 'SYCEBNL', 'PCSFD_UMOA'));

CREATE INDEX IF NOT EXISTS idx_organisation_referentiel_comptable
    ON organisations (referentiel_comptable);

-- Mapping initial des organisations existantes selon type_organisation
-- (les types non listés conservent SYSCOHADA par défaut)
UPDATE organisations
SET referentiel_comptable = 'SYCEBNL'
WHERE UPPER(type_organisation) IN (
    'MUTUELLE_SANTE', 'ASSOCIATION', 'LIONS_CLUB', 'ONG', 'FONDATION',
    'SYNDICAT', 'ORDRE_PROFESSIONNEL', 'PROJET_DEVELOPPEMENT'
);

UPDATE organisations
SET referentiel_comptable = 'PCSFD_UMOA'
WHERE UPPER(type_organisation) IN ('SFD_TIER_1', 'SFD_CATEGORIE_III');

COMMENT ON COLUMN organisations.referentiel_comptable IS
    'Référentiel comptable applicable : SYSCOHADA (commercial/coopératif lucratif), '
    'SYCEBNL (entités but non lucratif - Acte uniforme OHADA 1er jan 2024), '
    'PCSFD_UMOA (SFD article 44 ≥ 2 Md FCFA encours).';

-- 2. Compliance officer sur organisations (P0-NEW-14)
-- Instruction BCEAO 001-03-2025 : Compliance officer rattaché DG, obligatoire LBC/FT
ALTER TABLE organisations
    ADD COLUMN IF NOT EXISTS compliance_officer_id UUID;

CREATE INDEX IF NOT EXISTS idx_organisation_compliance_officer
    ON organisations (compliance_officer_id) WHERE compliance_officer_id IS NOT NULL;

COMMENT ON COLUMN organisations.compliance_officer_id IS
    'UUID du membre désigné comme Compliance Officer (obligatoire selon Instruction BCEAO 001-03-2025). '
    'Doit être rattaché à la direction générale, distinct du trésorier (séparation des pouvoirs).';

-- 3. numero_cmu sur utilisateurs (P0-NEW-24)
-- Loi 2014-131 instituant CMU CI ; passage à cotisation obligatoire le 1er janvier 2026.
-- Auto-déclaration côté membre car aucune API publique CNAM disponible au 2026-04-25.
ALTER TABLE utilisateurs
    ADD COLUMN IF NOT EXISTS numero_cmu VARCHAR(11);

ALTER TABLE utilisateurs DROP CONSTRAINT IF EXISTS utilisateurs_numero_cmu_format_check;
ALTER TABLE utilisateurs
    ADD CONSTRAINT utilisateurs_numero_cmu_format_check
    CHECK (numero_cmu IS NULL OR numero_cmu ~ '^[A-Z0-9]{11}$');

CREATE INDEX IF NOT EXISTS idx_utilisateur_numero_cmu
    ON utilisateurs (numero_cmu) WHERE numero_cmu IS NOT NULL;

COMMENT ON COLUMN utilisateurs.numero_cmu IS
    'Numéro CMU (Couverture Maladie Universelle) CI auto-déclaré par le membre. '
    'Format CNAM : 11 caractères alphanumériques majuscules. '
    'Obligatoire pour les membres d''organisations de type MUTUELLE_SANTE (Loi 2014-131).';
