45 lines
2.1 KiB
SQL
45 lines
2.1 KiB
SQL
-- ============================================================
|
|
-- 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';
|