|
|
|
|
@@ -1,690 +0,0 @@
|
|
|
|
|
-- =============================================================================
|
|
|
|
|
-- V2 — Alignement schéma / entités JPA
|
|
|
|
|
-- =============================================================================
|
|
|
|
|
-- Ce script aligne les tables existantes (créées par V1) avec les entités
|
|
|
|
|
-- JPA du projet. Toutes les instructions sont idempotentes (IF NOT EXISTS,
|
|
|
|
|
-- ADD COLUMN IF NOT EXISTS). À exécuter après V1 sur toute base.
|
|
|
|
|
-- =============================================================================
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 1. ADRESSES
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE adresses ADD COLUMN IF NOT EXISTS type_adresse VARCHAR(50);
|
|
|
|
|
ALTER TABLE adresses ALTER COLUMN type_adresse TYPE VARCHAR(50) USING type_adresse::varchar(50);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 2. AUDIT_LOGS (complément si pas déjà fait dans V1)
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS description VARCHAR(500);
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS donnees_avant TEXT;
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS donnees_apres TEXT;
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS ip_address VARCHAR(45);
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS module VARCHAR(50);
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS role VARCHAR(50);
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS session_id VARCHAR(255);
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS severite VARCHAR(20) DEFAULT 'INFO';
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS type_action VARCHAR(50) DEFAULT 'AUTRE';
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS user_agent VARCHAR(500);
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS organisation_id UUID REFERENCES organisations(id) ON DELETE SET NULL;
|
|
|
|
|
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS portee VARCHAR(15) NOT NULL DEFAULT 'PLATEFORME';
|
|
|
|
|
DO $$ BEGIN ALTER TABLE audit_logs ALTER COLUMN entite_id TYPE VARCHAR(255) USING entite_id::varchar(255); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_audit_module ON audit_logs(module);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_audit_type_action ON audit_logs(type_action);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_audit_severite ON audit_logs(severite);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 3. AYANTS_DROIT
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE ayants_droit ADD COLUMN IF NOT EXISTS piece_identite VARCHAR(100);
|
|
|
|
|
ALTER TABLE ayants_droit ADD COLUMN IF NOT EXISTS pourcentage_couverture NUMERIC(5,2);
|
|
|
|
|
ALTER TABLE ayants_droit ADD COLUMN IF NOT EXISTS sexe VARCHAR(20);
|
|
|
|
|
ALTER TABLE ayants_droit ADD COLUMN IF NOT EXISTS statut VARCHAR(50) DEFAULT 'EN_ATTENTE';
|
|
|
|
|
DO $$ BEGIN
|
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'chk_ayant_droit_statut' AND conrelid = 'ayants_droit'::regclass) THEN
|
|
|
|
|
ALTER TABLE ayants_droit ADD CONSTRAINT chk_ayant_droit_statut CHECK (statut IN ('EN_ATTENTE','ACTIF','INACTIF','REJETE','DECEDE','MAJORITE_ATTEINTE'));
|
|
|
|
|
END IF;
|
|
|
|
|
EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 4. COMPTES_COMPTABLES
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE comptes_comptables ADD COLUMN IF NOT EXISTS classe_comptable INTEGER DEFAULT 0;
|
|
|
|
|
ALTER TABLE comptes_comptables ADD COLUMN IF NOT EXISTS compte_analytique BOOLEAN NOT NULL DEFAULT FALSE;
|
|
|
|
|
ALTER TABLE comptes_comptables ADD COLUMN IF NOT EXISTS compte_collectif BOOLEAN NOT NULL DEFAULT FALSE;
|
|
|
|
|
ALTER TABLE comptes_comptables ADD COLUMN IF NOT EXISTS solde_actuel NUMERIC(14,2);
|
|
|
|
|
ALTER TABLE comptes_comptables ADD COLUMN IF NOT EXISTS solde_initial NUMERIC(14,2);
|
|
|
|
|
DO $$ BEGIN ALTER TABLE comptes_comptables ALTER COLUMN description TYPE VARCHAR(500) USING description::varchar(500); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE comptes_comptables ALTER COLUMN libelle TYPE VARCHAR(200) USING libelle::varchar(200); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE comptes_comptables ALTER COLUMN numero_compte TYPE VARCHAR(10) USING numero_compte::varchar(10); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE comptes_comptables ALTER COLUMN type_compte TYPE VARCHAR(30) USING type_compte::varchar(30); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 5. COMPTES_WAVE
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE comptes_wave ADD COLUMN IF NOT EXISTS commentaire VARCHAR(500);
|
|
|
|
|
ALTER TABLE comptes_wave ADD COLUMN IF NOT EXISTS date_derniere_verification TIMESTAMP;
|
|
|
|
|
ALTER TABLE comptes_wave ADD COLUMN IF NOT EXISTS environnement VARCHAR(20);
|
|
|
|
|
ALTER TABLE comptes_wave ADD COLUMN IF NOT EXISTS statut_compte VARCHAR(30) NOT NULL DEFAULT 'NON_VERIFIE';
|
|
|
|
|
ALTER TABLE comptes_wave ADD COLUMN IF NOT EXISTS wave_account_id VARCHAR(255);
|
|
|
|
|
ALTER TABLE comptes_wave ADD COLUMN IF NOT EXISTS wave_api_key VARCHAR(500);
|
|
|
|
|
ALTER TABLE comptes_wave ADD COLUMN IF NOT EXISTS membre_id UUID REFERENCES utilisateurs(id) ON DELETE SET NULL;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE comptes_wave ALTER COLUMN numero_telephone TYPE VARCHAR(13) USING numero_telephone::varchar(13); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_compte_wave_statut ON comptes_wave(statut_compte);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_compte_wave_membre ON comptes_wave(membre_id);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 6. CONFIGURATIONS_WAVE
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE configurations_wave ADD COLUMN IF NOT EXISTS cle VARCHAR(100);
|
|
|
|
|
ALTER TABLE configurations_wave ADD COLUMN IF NOT EXISTS description VARCHAR(500);
|
|
|
|
|
ALTER TABLE configurations_wave ADD COLUMN IF NOT EXISTS type_valeur VARCHAR(20);
|
|
|
|
|
ALTER TABLE configurations_wave ADD COLUMN IF NOT EXISTS valeur TEXT;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE configurations_wave ALTER COLUMN environnement TYPE VARCHAR(20) USING environnement::varchar(20); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 7. COTISATIONS
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
DO $$ BEGIN ALTER TABLE cotisations ALTER COLUMN libelle TYPE VARCHAR(100) USING libelle::varchar(100); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 8. DEMANDES_AIDE
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
DO $$ BEGIN ALTER TABLE demandes_aide ALTER COLUMN documents_fournis TYPE VARCHAR(255) USING documents_fournis::varchar(255); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE demandes_aide ALTER COLUMN statut TYPE VARCHAR(255) USING statut::varchar(255); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE demandes_aide ALTER COLUMN type_aide TYPE VARCHAR(255) USING type_aide::varchar(255); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 9. DOCUMENTS
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS chemin_stockage VARCHAR(1000);
|
|
|
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS date_dernier_telechargement TIMESTAMP;
|
|
|
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS hash_md5 VARCHAR(32);
|
|
|
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS hash_sha256 VARCHAR(64);
|
|
|
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS nom_fichier VARCHAR(255);
|
|
|
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS nom_original VARCHAR(255);
|
|
|
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS nombre_telechargements INTEGER NOT NULL DEFAULT 0;
|
|
|
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS taille_octets BIGINT DEFAULT 0;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE documents ALTER COLUMN description TYPE VARCHAR(1000) USING description::varchar(1000); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
-- Rétrocompat V1 : nom -> nom_fichier, chemin_fichier -> chemin_stockage, taille_fichier -> taille_octets
|
|
|
|
|
DO $$ BEGIN
|
|
|
|
|
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'documents' AND column_name = 'nom') THEN
|
|
|
|
|
UPDATE documents SET nom_fichier = COALESCE(nom_fichier, nom) WHERE id IS NOT NULL;
|
|
|
|
|
END IF;
|
|
|
|
|
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'documents' AND column_name = 'chemin_fichier') THEN
|
|
|
|
|
UPDATE documents SET chemin_stockage = COALESCE(chemin_stockage, chemin_fichier) WHERE id IS NOT NULL;
|
|
|
|
|
END IF;
|
|
|
|
|
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'documents' AND column_name = 'taille_fichier') THEN
|
|
|
|
|
UPDATE documents SET taille_octets = COALESCE(taille_octets, taille_fichier) WHERE id IS NOT NULL;
|
|
|
|
|
END IF;
|
|
|
|
|
EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
UPDATE documents SET chemin_stockage = COALESCE(chemin_stockage, 'legacy/' || id::text) WHERE chemin_stockage IS NULL AND id IS NOT NULL;
|
|
|
|
|
UPDATE documents SET nom_fichier = COALESCE(nom_fichier, 'document') WHERE id IS NOT NULL;
|
|
|
|
|
UPDATE documents SET taille_octets = COALESCE(taille_octets, 0) WHERE id IS NOT NULL;
|
|
|
|
|
UPDATE documents SET nombre_telechargements = COALESCE(nombre_telechargements, 0) WHERE id IS NOT NULL;
|
|
|
|
|
DO $$ BEGIN IF (SELECT COUNT(*) FROM documents WHERE chemin_stockage IS NULL) = 0 THEN ALTER TABLE documents ALTER COLUMN chemin_stockage SET NOT NULL; END IF; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN IF (SELECT COUNT(*) FROM documents WHERE nom_fichier IS NULL) = 0 THEN ALTER TABLE documents ALTER COLUMN nom_fichier SET NOT NULL; END IF; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN IF (SELECT COUNT(*) FROM documents WHERE taille_octets IS NULL) = 0 THEN ALTER TABLE documents ALTER COLUMN taille_octets SET NOT NULL; END IF; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN IF (SELECT COUNT(*) FROM documents WHERE nombre_telechargements IS NULL) = 0 THEN ALTER TABLE documents ALTER COLUMN nombre_telechargements SET NOT NULL; END IF; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_document_nom_fichier ON documents(nom_fichier);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_document_hash_md5 ON documents(hash_md5);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_document_hash_sha256 ON documents(hash_sha256);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 10. ECRITURES_COMPTABLES
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE ecritures_comptables ADD COLUMN IF NOT EXISTS commentaire VARCHAR(1000);
|
|
|
|
|
ALTER TABLE ecritures_comptables ADD COLUMN IF NOT EXISTS lettrage VARCHAR(20);
|
|
|
|
|
ALTER TABLE ecritures_comptables ADD COLUMN IF NOT EXISTS montant_credit NUMERIC(14,2);
|
|
|
|
|
ALTER TABLE ecritures_comptables ADD COLUMN IF NOT EXISTS montant_debit NUMERIC(14,2);
|
|
|
|
|
ALTER TABLE ecritures_comptables ADD COLUMN IF NOT EXISTS pointe BOOLEAN NOT NULL DEFAULT FALSE;
|
|
|
|
|
ALTER TABLE ecritures_comptables ADD COLUMN IF NOT EXISTS reference VARCHAR(100);
|
|
|
|
|
ALTER TABLE ecritures_comptables ADD COLUMN IF NOT EXISTS paiement_id UUID REFERENCES paiements(id) ON DELETE SET NULL;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_ecriture_paiement ON ecritures_comptables(paiement_id);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 11. EVENEMENTS
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
DO $$ BEGIN ALTER TABLE evenements ALTER COLUMN adresse TYPE VARCHAR(1000) USING adresse::varchar(1000); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
ALTER TABLE evenements ADD COLUMN IF NOT EXISTS contact_organisateur VARCHAR(500);
|
|
|
|
|
ALTER TABLE evenements ADD COLUMN IF NOT EXISTS date_limite_inscription TIMESTAMP;
|
|
|
|
|
ALTER TABLE evenements ADD COLUMN IF NOT EXISTS inscription_requise BOOLEAN NOT NULL DEFAULT FALSE;
|
|
|
|
|
ALTER TABLE evenements ADD COLUMN IF NOT EXISTS instructions_particulieres VARCHAR(1000);
|
|
|
|
|
DO $$ BEGIN ALTER TABLE evenements ALTER COLUMN lieu TYPE VARCHAR(500) USING lieu::varchar(500); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
ALTER TABLE evenements ADD COLUMN IF NOT EXISTS materiel_requis VARCHAR(2000);
|
|
|
|
|
ALTER TABLE evenements ADD COLUMN IF NOT EXISTS prix NUMERIC(10,2);
|
|
|
|
|
DO $$ BEGIN ALTER TABLE evenements ALTER COLUMN statut TYPE VARCHAR(30) USING statut::varchar(30); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
ALTER TABLE evenements ADD COLUMN IF NOT EXISTS visible_public BOOLEAN NOT NULL DEFAULT TRUE;
|
|
|
|
|
ALTER TABLE evenements ADD COLUMN IF NOT EXISTS organisateur_id UUID REFERENCES utilisateurs(id) ON DELETE SET NULL;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_evenement_organisateur ON evenements(organisateur_id);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 12. JOURNAUX_COMPTABLES
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE journaux_comptables ADD COLUMN IF NOT EXISTS date_debut DATE;
|
|
|
|
|
ALTER TABLE journaux_comptables ADD COLUMN IF NOT EXISTS date_fin DATE;
|
|
|
|
|
ALTER TABLE journaux_comptables ADD COLUMN IF NOT EXISTS statut VARCHAR(20);
|
|
|
|
|
DO $$ BEGIN ALTER TABLE journaux_comptables ALTER COLUMN code TYPE VARCHAR(10) USING code::varchar(10); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE journaux_comptables ALTER COLUMN description TYPE VARCHAR(500) USING description::varchar(500); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE journaux_comptables ALTER COLUMN libelle TYPE VARCHAR(100) USING libelle::varchar(100); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE journaux_comptables ALTER COLUMN type_journal TYPE VARCHAR(30) USING type_journal::varchar(30); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 13. LIGNES_ECRITURE
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE lignes_ecriture ADD COLUMN IF NOT EXISTS numero_ligne INTEGER DEFAULT 1;
|
|
|
|
|
ALTER TABLE lignes_ecriture ADD COLUMN IF NOT EXISTS reference VARCHAR(100);
|
|
|
|
|
ALTER TABLE lignes_ecriture ADD COLUMN IF NOT EXISTS compte_comptable_id UUID;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE lignes_ecriture ALTER COLUMN montant_credit TYPE NUMERIC(14,2) USING montant_credit::numeric(14,2); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE lignes_ecriture ALTER COLUMN montant_debit TYPE NUMERIC(14,2) USING montant_debit::numeric(14,2); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
UPDATE lignes_ecriture SET numero_ligne = 1 WHERE numero_ligne IS NULL AND id IS NOT NULL;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE lignes_ecriture ALTER COLUMN numero_ligne SET NOT NULL; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN
|
|
|
|
|
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'comptes_comptables') THEN
|
|
|
|
|
UPDATE lignes_ecriture l SET compte_comptable_id = (SELECT id FROM comptes_comptables LIMIT 1) WHERE l.compte_comptable_id IS NULL AND l.id IS NOT NULL;
|
|
|
|
|
ALTER TABLE lignes_ecriture ADD CONSTRAINT fk_ligne_compte FOREIGN KEY (compte_comptable_id) REFERENCES comptes_comptables(id) ON DELETE RESTRICT;
|
|
|
|
|
END IF;
|
|
|
|
|
EXCEPTION WHEN duplicate_object OR OTHERS THEN NULL; END $$;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_ligne_ecriture_compte ON lignes_ecriture(compte_comptable_id);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 14. MEMBRES_ROLES
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS commentaire VARCHAR(500);
|
|
|
|
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS date_debut DATE;
|
|
|
|
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS date_fin DATE;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 15. ORGANISATIONS
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
DO $$ BEGIN ALTER TABLE organisations ALTER COLUMN activites_principales TYPE VARCHAR(2000) USING activites_principales::varchar(2000); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE organisations ALTER COLUMN description TYPE VARCHAR(2000) USING description::varchar(2000); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE organisations ALTER COLUMN objectifs TYPE VARCHAR(2000) USING objectifs::varchar(2000); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 16. PAIEMENTS
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS code_devise VARCHAR(3) DEFAULT 'XOF';
|
|
|
|
|
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS commentaire VARCHAR(1000);
|
|
|
|
|
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS date_validation TIMESTAMP;
|
|
|
|
|
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS ip_address VARCHAR(45);
|
|
|
|
|
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS numero_reference VARCHAR(50);
|
|
|
|
|
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS reference_externe VARCHAR(500);
|
|
|
|
|
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS url_preuve VARCHAR(1000);
|
|
|
|
|
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS user_agent VARCHAR(500);
|
|
|
|
|
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS validateur VARCHAR(255);
|
|
|
|
|
ALTER TABLE paiements ADD COLUMN IF NOT EXISTS transaction_wave_id UUID REFERENCES transactions_wave(id) ON DELETE SET NULL;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE paiements ALTER COLUMN montant TYPE NUMERIC(14,2) USING montant::numeric(14,2); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
UPDATE paiements SET numero_reference = 'REF-' || id WHERE numero_reference IS NULL AND id IS NOT NULL;
|
|
|
|
|
UPDATE paiements SET code_devise = 'XOF' WHERE code_devise IS NULL AND id IS NOT NULL;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE paiements ALTER COLUMN numero_reference SET NOT NULL; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE paiements ALTER COLUMN code_devise SET NOT NULL; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_paiement_transaction_wave ON paiements(transaction_wave_id);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 17. PERMISSIONS
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE permissions ADD COLUMN IF NOT EXISTS action VARCHAR(50) DEFAULT 'READ';
|
|
|
|
|
ALTER TABLE permissions ADD COLUMN IF NOT EXISTS libelle VARCHAR(200);
|
|
|
|
|
ALTER TABLE permissions ADD COLUMN IF NOT EXISTS ressource VARCHAR(50) DEFAULT '*';
|
|
|
|
|
DO $$ BEGIN ALTER TABLE permissions ALTER COLUMN module TYPE VARCHAR(50) USING module::varchar(50); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
UPDATE permissions SET action = 'READ' WHERE action IS NULL AND id IS NOT NULL;
|
|
|
|
|
UPDATE permissions SET ressource = '*' WHERE ressource IS NULL AND id IS NOT NULL;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE permissions ALTER COLUMN action SET NOT NULL; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE permissions ALTER COLUMN ressource SET NOT NULL; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 18. PIECES_JOINTES
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE pieces_jointes ADD COLUMN IF NOT EXISTS commentaire VARCHAR(500);
|
|
|
|
|
ALTER TABLE pieces_jointes ADD COLUMN IF NOT EXISTS libelle VARCHAR(200);
|
|
|
|
|
ALTER TABLE pieces_jointes ADD COLUMN IF NOT EXISTS ordre INTEGER DEFAULT 1;
|
|
|
|
|
ALTER TABLE pieces_jointes ADD COLUMN IF NOT EXISTS document_id UUID REFERENCES documents(id) ON DELETE CASCADE;
|
|
|
|
|
UPDATE pieces_jointes SET ordre = 1 WHERE ordre IS NULL AND id IS NOT NULL;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE pieces_jointes ALTER COLUMN ordre SET NOT NULL; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN
|
|
|
|
|
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'pieces_jointes' AND column_name = 'document_id') THEN
|
|
|
|
|
UPDATE pieces_jointes SET document_id = (SELECT id FROM documents LIMIT 1) WHERE document_id IS NULL AND id IS NOT NULL;
|
|
|
|
|
END IF;
|
|
|
|
|
EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_pj_document ON pieces_jointes(document_id);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 19. ROLES
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE roles ADD COLUMN IF NOT EXISTS libelle VARCHAR(100) DEFAULT 'Role';
|
|
|
|
|
ALTER TABLE roles ADD COLUMN IF NOT EXISTS niveau_hierarchique INTEGER NOT NULL DEFAULT 0;
|
|
|
|
|
ALTER TABLE roles ADD COLUMN IF NOT EXISTS type_role VARCHAR(50) DEFAULT 'FONCTION';
|
|
|
|
|
ALTER TABLE roles ADD COLUMN IF NOT EXISTS organisation_id UUID REFERENCES organisations(id) ON DELETE CASCADE;
|
|
|
|
|
UPDATE roles SET libelle = COALESCE(code, 'Role') WHERE libelle IS NULL AND id IS NOT NULL;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE roles ALTER COLUMN libelle SET NOT NULL; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE roles ALTER COLUMN type_role SET NOT NULL; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_role_organisation ON roles(organisation_id);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 20. ROLES_PERMISSIONS
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE roles_permissions ADD COLUMN IF NOT EXISTS commentaire VARCHAR(500);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 21. SUGGESTION_VOTES
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE suggestion_votes ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
|
|
|
|
|
ALTER TABLE suggestion_votes ADD COLUMN IF NOT EXISTS date_modification TIMESTAMP;
|
|
|
|
|
ALTER TABLE suggestion_votes ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);
|
|
|
|
|
ALTER TABLE suggestion_votes ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 0;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 22. TEMPLATES_NOTIFICATIONS
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
DO $$ BEGIN ALTER TABLE templates_notifications ALTER COLUMN description TYPE VARCHAR(1000) USING description::varchar(1000); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 23. TRANSACTIONS_WAVE
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS code_devise VARCHAR(3) NOT NULL DEFAULT 'XOF';
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS date_derniere_tentative TIMESTAMP;
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS frais NUMERIC(12,2);
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS message_erreur VARCHAR(1000);
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS metadonnees TEXT;
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS montant_net NUMERIC(14,2);
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS nombre_tentatives INTEGER NOT NULL DEFAULT 0;
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS reponse_wave_api TEXT;
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS statut_transaction VARCHAR(30) NOT NULL DEFAULT 'INITIALISE';
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS telephone_beneficiaire VARCHAR(13);
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS telephone_payeur VARCHAR(13);
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS wave_reference VARCHAR(100);
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS wave_request_id VARCHAR(100);
|
|
|
|
|
ALTER TABLE transactions_wave ADD COLUMN IF NOT EXISTS wave_transaction_id VARCHAR(100);
|
|
|
|
|
DO $$ BEGIN ALTER TABLE transactions_wave ALTER COLUMN montant TYPE NUMERIC(14,2) USING montant::numeric(14,2); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
UPDATE transactions_wave SET wave_transaction_id = 'legacy-' || id WHERE wave_transaction_id IS NULL AND id IS NOT NULL;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE transactions_wave ALTER COLUMN wave_transaction_id SET NOT NULL; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_transaction_wave_id ON transactions_wave(wave_transaction_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_transaction_wave_statut ON transactions_wave(statut_transaction);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_transaction_wave_request_id ON transactions_wave(wave_request_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_transaction_wave_reference ON transactions_wave(wave_reference);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 24. TYPES_REFERENCE
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE types_reference ADD COLUMN IF NOT EXISTS couleur VARCHAR(50);
|
|
|
|
|
ALTER TABLE types_reference ADD COLUMN IF NOT EXISTS icone VARCHAR(100);
|
|
|
|
|
ALTER TABLE types_reference ADD COLUMN IF NOT EXISTS severity VARCHAR(20);
|
|
|
|
|
ALTER TABLE types_reference ADD COLUMN IF NOT EXISTS organisation_id UUID REFERENCES organisations(id) ON DELETE CASCADE;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE types_reference ALTER COLUMN code TYPE VARCHAR(50) USING code::varchar(50); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE types_reference ALTER COLUMN domaine TYPE VARCHAR(50) USING domaine::varchar(50); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE types_reference ALTER COLUMN libelle TYPE VARCHAR(200) USING libelle::varchar(200); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_typeref_org ON types_reference(organisation_id);
|
|
|
|
|
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
-- 25. WEBHOOKS_WAVE
|
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
|
ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS commentaire VARCHAR(500);
|
|
|
|
|
ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS date_reception TIMESTAMP;
|
|
|
|
|
ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS date_traitement TIMESTAMP;
|
|
|
|
|
ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS message_erreur VARCHAR(1000);
|
|
|
|
|
ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS nombre_tentatives INTEGER NOT NULL DEFAULT 0;
|
|
|
|
|
ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS statut_traitement VARCHAR(30) NOT NULL DEFAULT 'PENDING';
|
|
|
|
|
ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS wave_event_id VARCHAR(100);
|
|
|
|
|
ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS paiement_id UUID REFERENCES paiements(id) ON DELETE SET NULL;
|
|
|
|
|
ALTER TABLE webhooks_wave ADD COLUMN IF NOT EXISTS transaction_wave_id UUID REFERENCES transactions_wave(id) ON DELETE SET NULL;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE webhooks_wave ALTER COLUMN type_evenement TYPE VARCHAR(50) USING type_evenement::varchar(50); EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
UPDATE webhooks_wave SET wave_event_id = 'evt-' || id WHERE wave_event_id IS NULL AND id IS NOT NULL;
|
|
|
|
|
DO $$ BEGIN ALTER TABLE webhooks_wave ALTER COLUMN wave_event_id SET NOT NULL; EXCEPTION WHEN OTHERS THEN NULL; END $$;
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_webhook_paiement ON webhooks_wave(paiement_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_webhook_transaction ON webhooks_wave(transaction_wave_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_webhook_wave_statut ON webhooks_wave(statut_traitement);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_webhook_wave_type ON webhooks_wave(type_evenement);
|
|
|
|
|
|
|
|
|
|
-- =============================================================================
|
|
|
|
|
-- 26. TABLES MANQUANTES (création si non présentes dans V1)
|
|
|
|
|
-- =============================================================================
|
|
|
|
|
|
|
|
|
|
-- Campagnes agricoles
|
|
|
|
|
CREATE TABLE IF NOT EXISTS campagnes_agricoles (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
designation VARCHAR(200) NOT NULL,
|
|
|
|
|
statut VARCHAR(50) NOT NULL DEFAULT 'PREPARATION',
|
|
|
|
|
surface_estimee_ha NUMERIC(19,4),
|
|
|
|
|
type_culture VARCHAR(100),
|
|
|
|
|
volume_prev_tonnes NUMERIC(19,4),
|
|
|
|
|
volume_reel_tonnes NUMERIC(19,4),
|
|
|
|
|
organisation_id UUID NOT NULL REFERENCES organisations(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_campagne_agricole_statut CHECK (statut IN ('PREPARATION','LABOUR_SEMIS','ENTRETIEN','RECOLTE','COMMERCIALISATION','CLOTUREE'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_agricole_organisation ON campagnes_agricoles(organisation_id);
|
|
|
|
|
|
|
|
|
|
-- Campagnes collecte
|
|
|
|
|
CREATE TABLE IF NOT EXISTS campagnes_collecte (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
courte_description VARCHAR(500),
|
|
|
|
|
date_cloture_prevue TIMESTAMP,
|
|
|
|
|
date_ouverture TIMESTAMP NOT NULL,
|
|
|
|
|
est_publique BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
html_description_complete TEXT,
|
|
|
|
|
image_banniere_url VARCHAR(500),
|
|
|
|
|
montant_collecte_actuel NUMERIC(19,4) DEFAULT 0,
|
|
|
|
|
nombre_donateurs INTEGER DEFAULT 0,
|
|
|
|
|
objectif_financier NUMERIC(19,4),
|
|
|
|
|
statut VARCHAR(50) NOT NULL DEFAULT 'BROUILLON',
|
|
|
|
|
titre VARCHAR(200) NOT NULL,
|
|
|
|
|
organisation_id UUID NOT NULL REFERENCES organisations(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_campagne_collecte_statut CHECK (statut IN ('BROUILLON','EN_COURS','ATTEINTE','EXPIREE','SUSPENDUE'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_collecte_organisation ON campagnes_collecte(organisation_id);
|
|
|
|
|
|
|
|
|
|
-- Campagnes vote
|
|
|
|
|
CREATE TABLE IF NOT EXISTS campagnes_vote (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
autoriser_vote_blanc BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_fermeture TIMESTAMP NOT NULL,
|
|
|
|
|
date_ouverture TIMESTAMP NOT NULL,
|
|
|
|
|
description TEXT,
|
|
|
|
|
mode_scrutin VARCHAR(50) NOT NULL DEFAULT 'MAJORITAIRE_UN_TOUR',
|
|
|
|
|
restreindre_membres_ajour BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
|
statut VARCHAR(50) NOT NULL DEFAULT 'BROUILLON',
|
|
|
|
|
titre VARCHAR(200) NOT NULL,
|
|
|
|
|
total_electeurs INTEGER,
|
|
|
|
|
total_votants INTEGER,
|
|
|
|
|
total_blancs_nuls INTEGER,
|
|
|
|
|
type_vote VARCHAR(50) NOT NULL,
|
|
|
|
|
organisation_id UUID NOT NULL REFERENCES organisations(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_campagne_vote_statut CHECK (statut IN ('BROUILLON','PLANIFIE','OUVERT','SUSPENDU','CLOTURE','RESULTATS_PUBLIES')),
|
|
|
|
|
CONSTRAINT chk_campagne_vote_mode CHECK (mode_scrutin IN ('MAJORITAIRE_UN_TOUR','MAJORITAIRE_DEUX_TOURS','PROPORTIONNEL','BUREAU_CONSENSUEL')),
|
|
|
|
|
CONSTRAINT chk_campagne_vote_type CHECK (type_vote IN ('ELECTION_BUREAU','ADOPTION_RESOLUTION','MODIFICATION_STATUTS','EXCLUSION_MEMBRE','REFERENDUM'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_vote_orga ON campagnes_vote(organisation_id);
|
|
|
|
|
|
|
|
|
|
-- Candidats
|
|
|
|
|
CREATE TABLE IF NOT EXISTS candidats (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
membre_associe_id VARCHAR(36),
|
|
|
|
|
nom_candidature VARCHAR(150) NOT NULL,
|
|
|
|
|
nombre_voix INTEGER DEFAULT 0,
|
|
|
|
|
photo_url VARCHAR(500),
|
|
|
|
|
pourcentage NUMERIC(5,2),
|
|
|
|
|
profession_foi TEXT,
|
|
|
|
|
campagne_vote_id UUID NOT NULL REFERENCES campagnes_vote(id) ON DELETE CASCADE
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_candidat_campagne ON candidats(campagne_vote_id);
|
|
|
|
|
|
|
|
|
|
-- Comptes épargne
|
|
|
|
|
CREATE TABLE IF NOT EXISTS comptes_epargne (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
date_derniere_transaction DATE,
|
|
|
|
|
date_ouverture DATE NOT NULL,
|
|
|
|
|
description VARCHAR(500),
|
|
|
|
|
numero_compte VARCHAR(50) NOT NULL UNIQUE,
|
|
|
|
|
solde_actuel NUMERIC(19,4) NOT NULL DEFAULT 0,
|
|
|
|
|
solde_bloque NUMERIC(19,4) NOT NULL DEFAULT 0,
|
|
|
|
|
statut VARCHAR(30) NOT NULL DEFAULT 'ACTIF',
|
|
|
|
|
type_compte VARCHAR(50) NOT NULL DEFAULT 'COURANT',
|
|
|
|
|
membre_id UUID NOT NULL REFERENCES utilisateurs(id) ON DELETE CASCADE,
|
|
|
|
|
organisation_id UUID NOT NULL REFERENCES organisations(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_compte_epargne_statut CHECK (statut IN ('ACTIF','INACTIF','BLOQUE','EN_CLOTURE','CLOTURE')),
|
|
|
|
|
CONSTRAINT chk_compte_epargne_type CHECK (type_compte IN ('COURANT','EPARGNE_LIBRE','EPARGNE_BLOQUEE','DEPOT_A_TERME','EPARGNE_PROJET'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_compte_epargne_membre ON comptes_epargne(membre_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_compte_epargne_orga ON comptes_epargne(organisation_id);
|
|
|
|
|
|
|
|
|
|
-- Contributions collecte
|
|
|
|
|
CREATE TABLE IF NOT EXISTS contributions_collecte (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
alias_donateur VARCHAR(150),
|
|
|
|
|
date_contribution TIMESTAMP NOT NULL,
|
|
|
|
|
est_anonyme BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
|
message_soutien VARCHAR(500),
|
|
|
|
|
montant_soutien NUMERIC(19,4) NOT NULL,
|
|
|
|
|
statut_paiement VARCHAR(50) DEFAULT 'INITIALISE',
|
|
|
|
|
transaction_paiement_id VARCHAR(100),
|
|
|
|
|
campagne_id UUID NOT NULL REFERENCES campagnes_collecte(id) ON DELETE CASCADE,
|
|
|
|
|
membre_donateur_id UUID REFERENCES utilisateurs(id) ON DELETE SET NULL
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_contribution_campagne ON contributions_collecte(campagne_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_contribution_membre ON contributions_collecte(membre_donateur_id);
|
|
|
|
|
|
|
|
|
|
-- Demandes crédit
|
|
|
|
|
CREATE TABLE IF NOT EXISTS demandes_credit (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
cout_total_credit NUMERIC(19,4),
|
|
|
|
|
date_premier_echeance DATE,
|
|
|
|
|
date_soumission DATE NOT NULL,
|
|
|
|
|
date_validation DATE,
|
|
|
|
|
duree_mois_approuvee INTEGER,
|
|
|
|
|
duree_mois_demande INTEGER NOT NULL,
|
|
|
|
|
justification_detaillee TEXT,
|
|
|
|
|
montant_approuve NUMERIC(19,4),
|
|
|
|
|
montant_demande NUMERIC(19,4) NOT NULL,
|
|
|
|
|
notes_comite TEXT,
|
|
|
|
|
numero_dossier VARCHAR(50) NOT NULL UNIQUE,
|
|
|
|
|
statut VARCHAR(50) NOT NULL DEFAULT 'BROUILLON',
|
|
|
|
|
taux_interet_annuel NUMERIC(5,2),
|
|
|
|
|
type_credit VARCHAR(50) NOT NULL,
|
|
|
|
|
compte_lie_id UUID REFERENCES comptes_epargne(id) ON DELETE SET NULL,
|
|
|
|
|
membre_id UUID NOT NULL REFERENCES utilisateurs(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_demande_credit_statut CHECK (statut IN ('BROUILLON','SOUMISE','EN_EVALUATION','INFORMATIONS_REQUISES','APPROUVEE','REJETEE','DECAISSEE','SOLDEE','EN_CONTENTIEUX')),
|
|
|
|
|
CONSTRAINT chk_demande_credit_type CHECK (type_credit IN ('CONSOMMATION','IMMOBILIER','PROFESSIONNEL','AGRICOLE','SCOLAIRE','URGENCE','DECOUVERT'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_credit_membre ON demandes_credit(membre_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_credit_compte ON demandes_credit(compte_lie_id);
|
|
|
|
|
|
|
|
|
|
-- Dons religieux
|
|
|
|
|
CREATE TABLE IF NOT EXISTS dons_religieux (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
date_encaissement TIMESTAMP NOT NULL,
|
|
|
|
|
montant NUMERIC(19,4) NOT NULL,
|
|
|
|
|
periode_nature VARCHAR(150),
|
|
|
|
|
type_don VARCHAR(50) NOT NULL,
|
|
|
|
|
fidele_id UUID REFERENCES utilisateurs(id) ON DELETE SET NULL,
|
|
|
|
|
institution_id UUID NOT NULL REFERENCES organisations(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_don_type CHECK (type_don IN ('QUETE_ORDINAIRE','DIME','ZAKAT','OFFRANDE_SPECIALE','INTENTION_PRIERE'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_don_fidele ON dons_religieux(fidele_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_don_institution ON dons_religieux(institution_id);
|
|
|
|
|
|
|
|
|
|
-- Échéances crédit
|
|
|
|
|
CREATE TABLE IF NOT EXISTS echeances_credit (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
capital_amorti NUMERIC(19,4) NOT NULL,
|
|
|
|
|
capital_restant_du NUMERIC(19,4) NOT NULL,
|
|
|
|
|
date_echeance_prevue DATE NOT NULL,
|
|
|
|
|
date_paiement_effectif DATE,
|
|
|
|
|
interets_periode NUMERIC(19,4) NOT NULL,
|
|
|
|
|
montant_regle NUMERIC(19,4),
|
|
|
|
|
montant_total_exigible NUMERIC(19,4) NOT NULL,
|
|
|
|
|
ordre INTEGER NOT NULL,
|
|
|
|
|
penalites_retard NUMERIC(19,4),
|
|
|
|
|
statut VARCHAR(50) NOT NULL DEFAULT 'A_VENIR',
|
|
|
|
|
demande_credit_id UUID NOT NULL REFERENCES demandes_credit(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_echeance_statut CHECK (statut IN ('A_VENIR','EXIGIBLE','PAYEE','PAYEE_PARTIELLEMENT','EN_RETARD','IMPAYEE','RESTRUCTUREE'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_echeance_demande ON echeances_credit(demande_credit_id);
|
|
|
|
|
|
|
|
|
|
-- Échelons organigramme
|
|
|
|
|
CREATE TABLE IF NOT EXISTS echelons_organigramme (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
designation VARCHAR(200) NOT NULL,
|
|
|
|
|
niveau_echelon VARCHAR(50) NOT NULL,
|
|
|
|
|
zone_delegation VARCHAR(200),
|
|
|
|
|
echelon_parent_id UUID REFERENCES organisations(id) ON DELETE SET NULL,
|
|
|
|
|
organisation_id UUID NOT NULL REFERENCES organisations(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_echelon_niveau CHECK (niveau_echelon IN ('SIEGE_MONDIAL','NATIONAL','REGIONAL','LOCAL'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_echelon_org ON echelons_organigramme(organisation_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_echelon_parent ON echelons_organigramme(echelon_parent_id);
|
|
|
|
|
|
|
|
|
|
-- Garanties demande
|
|
|
|
|
CREATE TABLE IF NOT EXISTS garanties_demande (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
document_preuve_id VARCHAR(36),
|
|
|
|
|
reference_description VARCHAR(500),
|
|
|
|
|
type_garantie VARCHAR(50) NOT NULL,
|
|
|
|
|
valeur_estimee NUMERIC(19,4),
|
|
|
|
|
demande_credit_id UUID NOT NULL REFERENCES demandes_credit(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_garantie_type CHECK (type_garantie IN ('EPARGNE_BLOQUEE','CAUTION_SOLIDAIRE','MATERIELLE','IMMOBILIERE','FOND_GARANTIE'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_garantie_demande ON garanties_demande(demande_credit_id);
|
|
|
|
|
|
|
|
|
|
-- Projets ONG
|
|
|
|
|
CREATE TABLE IF NOT EXISTS projets_ong (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
budget_previsionnel NUMERIC(19,4),
|
|
|
|
|
date_fin_estimee DATE,
|
|
|
|
|
date_lancement DATE,
|
|
|
|
|
depenses_reelles NUMERIC(19,4),
|
|
|
|
|
description TEXT,
|
|
|
|
|
nom_projet VARCHAR(200) NOT NULL,
|
|
|
|
|
statut VARCHAR(50) NOT NULL DEFAULT 'EN_ETUDE',
|
|
|
|
|
zone_geographique VARCHAR(200),
|
|
|
|
|
organisation_id UUID NOT NULL REFERENCES organisations(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_projet_ong_statut CHECK (statut IN ('EN_ETUDE','FINANCEMENT','EN_COURS','EVALUE','CLOTURE'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_projet_ong_organisation ON projets_ong(organisation_id);
|
|
|
|
|
|
|
|
|
|
-- Tontines
|
|
|
|
|
CREATE TABLE IF NOT EXISTS tontines (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
date_debut_effective DATE,
|
|
|
|
|
date_fin_prevue DATE,
|
|
|
|
|
description TEXT,
|
|
|
|
|
frequence VARCHAR(50) NOT NULL,
|
|
|
|
|
limite_participants INTEGER,
|
|
|
|
|
montant_mise_tour NUMERIC(19,4),
|
|
|
|
|
nom VARCHAR(150) NOT NULL,
|
|
|
|
|
statut VARCHAR(50) NOT NULL DEFAULT 'PLANIFIEE',
|
|
|
|
|
type_tontine VARCHAR(50) NOT NULL,
|
|
|
|
|
organisation_id UUID NOT NULL REFERENCES organisations(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_tontine_statut CHECK (statut IN ('PLANIFIEE','EN_COURS','EN_PAUSE','CLOTUREE','ANNULEE')),
|
|
|
|
|
CONSTRAINT chk_tontine_frequence CHECK (frequence IN ('JOURNALIERE','HEBDOMADAIRE','DECADE','QUINZAINE','MENSUELLE','TRIMESTRIELLE')),
|
|
|
|
|
CONSTRAINT chk_tontine_type CHECK (type_tontine IN ('ROTATIVE_CLASSIQUE','VARIABLE','ACCUMULATIVE'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_tontine_organisation ON tontines(organisation_id);
|
|
|
|
|
|
|
|
|
|
-- Tours tontine
|
|
|
|
|
CREATE TABLE IF NOT EXISTS tours_tontine (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
cagnotte_collectee NUMERIC(19,4) NOT NULL DEFAULT 0,
|
|
|
|
|
date_ouverture_cotisations DATE NOT NULL,
|
|
|
|
|
date_tirage_remise DATE,
|
|
|
|
|
montant_cible NUMERIC(19,4) NOT NULL,
|
|
|
|
|
ordre_tour INTEGER NOT NULL,
|
|
|
|
|
statut_interne VARCHAR(30),
|
|
|
|
|
membre_beneficiaire_id UUID REFERENCES utilisateurs(id) ON DELETE SET NULL,
|
|
|
|
|
tontine_id UUID NOT NULL REFERENCES tontines(id) ON DELETE CASCADE
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_tour_tontine ON tours_tontine(tontine_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_tour_beneficiaire ON tours_tontine(membre_beneficiaire_id);
|
|
|
|
|
|
|
|
|
|
-- Transactions épargne
|
|
|
|
|
CREATE TABLE IF NOT EXISTS transactions_epargne (
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
|
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
date_modification TIMESTAMP,
|
|
|
|
|
cree_par VARCHAR(255),
|
|
|
|
|
modifie_par VARCHAR(255),
|
|
|
|
|
version BIGINT DEFAULT 0,
|
|
|
|
|
date_transaction TIMESTAMP NOT NULL,
|
|
|
|
|
montant NUMERIC(19,4) NOT NULL,
|
|
|
|
|
motif VARCHAR(500),
|
|
|
|
|
operateur_id VARCHAR(36),
|
|
|
|
|
origine_fonds VARCHAR(200),
|
|
|
|
|
piece_justificative_id UUID,
|
|
|
|
|
reference_externe VARCHAR(100),
|
|
|
|
|
solde_apres NUMERIC(19,4),
|
|
|
|
|
solde_avant NUMERIC(19,4),
|
|
|
|
|
statut_execution VARCHAR(50) DEFAULT 'REUSSIE',
|
|
|
|
|
type_transaction VARCHAR(50) NOT NULL,
|
|
|
|
|
compte_id UUID NOT NULL REFERENCES comptes_epargne(id) ON DELETE CASCADE,
|
|
|
|
|
CONSTRAINT chk_tx_epargne_type CHECK (type_transaction IN ('DEPOT','RETRAIT','TRANSFERT_ENTRANT','TRANSFERT_SORTANT','PAIEMENT_INTERETS','PRELEVEMENT_FRAIS','RETENUE_GARANTIE','LIBERATION_GARANTIE','REMBOURSEMENT_CREDIT')),
|
|
|
|
|
CONSTRAINT chk_tx_epargne_statut CHECK (statut_execution IN ('INITIALISE','EN_ATTENTE','EN_COURS','REUSSIE','ECHOUE','ANNULEE','EXPIRED'))
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_tx_epargne_compte ON transactions_epargne(compte_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_tx_epargne_reference ON transactions_epargne(reference_externe);
|
|
|
|
|
|
|
|
|
|
-- =============================================================================
|
|
|
|
|
-- Fin V2 — Entity Schema Alignment
|
|
|
|
|
-- =============================================================================
|