-- ============================================================ -- V2.1 — Hiérarchie organisations + corrections -- Auteur: UnionFlow Team | BCEAO/OHADA compliant -- ============================================================ -- Ajouter la FK propre pour la hiérarchie (remplace le UUID nu) ALTER TABLE organisations DROP CONSTRAINT IF EXISTS fk_organisation_parente; ALTER TABLE organisations ADD CONSTRAINT fk_organisation_parente FOREIGN KEY (organisation_parente_id) REFERENCES organisations(id) ON DELETE SET NULL; -- Nouveaux champs hiérarchie et modules ALTER TABLE organisations ADD COLUMN IF NOT EXISTS est_organisation_racine BOOLEAN NOT NULL DEFAULT TRUE, ADD COLUMN IF NOT EXISTS chemin_hierarchique VARCHAR(2000), ADD COLUMN IF NOT EXISTS type_organisation_code VARCHAR(50); -- Élargir la contrainte de type_organisation pour couvrir tous les métiers ALTER TABLE organisations DROP CONSTRAINT IF EXISTS chk_organisation_type; ALTER TABLE organisations ADD CONSTRAINT chk_organisation_type CHECK (type_organisation IN ( 'ASSOCIATION','MUTUELLE_EPARGNE_CREDIT','MUTUELLE_SANTE', 'TONTINE','ONG','COOPERATIVE_AGRICOLE','ASSOCIATION_PROFESSIONNELLE', 'ASSOCIATION_COMMUNAUTAIRE','ORGANISATION_RELIGIEUSE', 'FEDERATION','SYNDICAT','LIONS_CLUB','ROTARY_CLUB','AUTRE' )); -- Règle : organisation sans parent = racine UPDATE organisations SET est_organisation_racine = TRUE WHERE organisation_parente_id IS NULL; UPDATE organisations SET est_organisation_racine = FALSE WHERE organisation_parente_id IS NOT NULL; -- Index pour les requêtes hiérarchiques CREATE INDEX IF NOT EXISTS idx_org_racine ON organisations(est_organisation_racine); CREATE INDEX IF NOT EXISTS idx_org_chemin ON organisations(chemin_hierarchique); COMMENT ON COLUMN organisations.est_organisation_racine IS 'TRUE si c''est l''organisation mère (souscrit au forfait pour toute la hiérarchie)'; COMMENT ON COLUMN organisations.chemin_hierarchique IS 'Chemin UUID ex: /uuid-racine/uuid-inter/uuid-feuille — requêtes récursives optimisées';