-- 1/3 : Création de la table temporaire
DROP TABLE IF EXISTS w_dbsetup
;

CREATE TEMP TABLE w_dbsetup AS
    SELECT
    	CASE WHEN t_classes.oid = 0 THEN t_classes.oid ELSE 1 END AS oid,
    	t_classes.code,
    	t_classes.texte,
    	t_classes.is_cti,
    	t_classes.sequence, 
    	t_listes_tables.code as table_code,
    	t_classes.contenu_by_code
    FROM 
    	pmsi.t_classes, 
    	pmsi.t_listes_tables 
    WHERE  
    	(is_cti = '1' OR t_classes.code ilike 'CTI_%')
    	AND table_id = t_listes_tables.oid 
    ORDER BY t_classes.code LIMIT 0
;

-- 2/3 : Peuplement de la table temporaire
INSERT INTO w_dbsetup(
    oid,
    code,
    texte,
    is_cti,
    sequence,
    table_code,
    contenu_by_code
)
VALUES
(1, 'CTI_ACTCL', 'Actes classants', '1', 11, 'ACTE', '0'),
(1, 'CTI_AGE_TX_RECOURS', 'Tranches d''âge taux de recours', '1', 11, 'AGE', '0'),
(1, 'CTI_APP_CIM10', 'Cancérologie appareil', '1', 10, 'DIAG', '0'),
(1, 'CTI_ARRETEVERS', 'Prestations Arrêté versement', '1', 10, 'PRESTA', '1'),
(1, 'CTI_CLASSES_OMEDIT', 'Classes OMEDIT', '1', 7, 'LPP', '0'),
(1, 'CTI_CMA_2025', 'CMA', '1', 14, 'DIAG', '0'),
(1, 'CTI_DUROVA', 'Durées OVALIDE', '1', 8, 'DURSEJ', '0'),
(1, 'CTI_EXPERTCTL_OVA', 'Categorie Controles OVALIDE', '1', 9, 'EXPERTCTL', '0'),
(1, 'CTI_GHMDA', 'Domaines d''activité ATIH', '1', 9, 'GHM', '0'),
(1, 'CTI_GHMGA', 'Groupes d''activité ATIH', '1', 7, 'GHM', '0'),
(1, 'CTI_GHMGP', 'Groupes de planification ATIH', '1', 8, 'GHM', '0'),
(1, 'CTI_GHM_DEDO', 'GHM dédoublé 2017', '1', 10, 'GHM', '0'),
(1, 'CTI_GM2009', 'Gestes marqueurs MSAP 2009', '1', 7, 'ACTE', '0'),
(1, 'CTI_GM2010', 'Gestes marqueurs MSAP 2010', '1', 8, 'ACTE', '0'),
(1, 'CTI_GM2012', 'Gestes marqueurs nationaux 2012', '1', 6, 'ACTE', '0'),
(1, 'CTI_GM_MSAP_2012', 'Gestes marqueurs MSAP 2012', '1', 9, 'ACTE', '0'),
(1, 'CTI_GM_MSAP_2014', 'Gestes marqueurs MSAP 2014', '1', 10, 'ACTE', '0'),
(1, 'CTI_GM_MSAP_2015', 'Gestes marqueurs MSAP 2015', '1', 12, 'ACTE', '0'),
(1, 'CTI_HOSAMB', 'Ambulatoires - Hospitalisés', '1', 7, 'DURSEJ', '0'),
(1, 'CTI_IND_UCD_1', 'Indications UCD Niveau 1', '1', 10, 'INDICATIONUCD', '0'),
(1, 'CTI_IND_UCD_2', 'Indications UCD Niveau 2', '1', 11, 'INDICATIONUCD', '0'),
(1, 'CTI_LCIM10_POLYHL', 'CIM10 polyhandicap lourd', '1', 13, 'DIAG', '0'),
(1, 'CTI_LPP_CLADIMED_1', 'CLADIMED', '1', 10, 'LPP', '0'),
(1, 'CTI_LPP_CLADIMED_2', 'CLADIMED (2)', '1', 11, 'LPP', '0'),
(1, 'CTI_LPP_CLADIMED_3', 'CLADIMED (3)', '1', 12, 'LPP', '0'),
(1, 'CTI_LPP_CLADIMED_4', 'CLADIMED (4)', '1', 13, 'LPP', '0'),
(1, 'CTI_LPP_CLADIMED_5', 'CLADIMED (5)', '1', 14, 'LPP', '0'),
(1, 'CTI_ORG_CIM10', 'Cancérologie organe', '1', 11, 'DIAG', '0'),
(1, 'CTI_ORG_DET_CIM10', 'Cancérologie organe détaillé', '1', 12, 'DIAG', '0'),
(1, 'CTI_OVA_UCD', 'Groupe UCD', '1', 10, 'UCD', '0'),
(1, 'CTI_PER_CTL', 'Périodicité contrôles', '1', 11, 'EXPERTCTL', '0'),
(1, 'CTI_PREDCA', 'Décomposition CA (CTI)', '1', 9, 'PRESTA', '0'),
(1, 'CTI_RAFA_P', 'Prestations OVALIDE (CTI)', '1', 8, 'PRESTA', '0'),
(1, 'CTI_REG', 'Nouvelles Régions', '1', 10, 'CODEPOST', '0'),
(1, 'CTI_REGRP_OMEDIT', 'Regroupements OMEDIT', '1', 8, 'LPP', '0'),
(1, 'CTI_SEV_CPOM', 'Sévérités CPOM', '1', 6, 'GHM', '0'),
(1, 'CTI_SEV_MAHOS', 'Sévérités MAHOS', '1', 5, 'GHM', '0'),
(1, 'CTI_TAGE', 'Tranches d''âge', '1', 9, 'AGE', '0'),
(1, 'CTI_TER_SAN', 'Territoires de Santé', '1', 11, 'CODEPOST', '0'),
(1, 'CTI_TRA_AG_OVA', 'Tranches d''âge Ovalide', '1', 10, 'AGE', '0'),
(1, 'CTI_TX_REC', 'Classe Age tx de rec', '1', 31, 'AGE', '0'),
(1, 'CTI_TYPEFACT', 'Type facturation', '1', 7, 'TYPEFACT', '0'),
(1, 'CTI_TYP_EXP', 'Type de contrôle expert', '1', 10, 'EXPERTCTL', '0'),
(1, 'ETUDE_BARIATRIQUE_2022', 'Etude chirurgie bariatrique 2022', '1', 13, 'ACTE', '0')
;

-- 3/3 : Màj de la table iCTI
DELETE FROM pmsi.t_classes 
WHERE 
	oid NOT IN (
		SELECT t_classes.oid 
		FROM 
			w_dbsetup, 
			pmsi.t_listes_tables, 
			pmsi.t_classes
		WHERE 
			w_dbsetup.table_code = t_listes_tables.code 
			AND t_classes.sequence = w_dbsetup.sequence 
			AND t_classes.table_id = t_listes_tables.oid 
	)
	AND is_cti = '1';  

UPDATE pmsi.t_classes SET
	code = w_dbsetup.code,       
	texte = w_dbsetup.texte,       
	table_id = t_listes_tables.oid,      
	is_cti = w_dbsetup.is_cti,
	contenu_by_code = w_dbsetup.contenu_by_code
FROM 
	w_dbsetup,
	pmsi.t_listes_tables     
WHERE 
	w_dbsetup.table_code = t_listes_tables.code 
	AND t_classes.sequence = w_dbsetup.sequence 
	AND t_classes.table_id = t_listes_tables.oid ;     


INSERT INTO pmsi.t_classes(code, texte, table_id, is_cti, sequence, contenu_by_code)     
SELECT 
	w_dbsetup.code, 
	w_dbsetup.texte, 
	t_listes_tables.oid, 
	w_dbsetup.is_cti, 
	w_dbsetup.sequence,
	w_dbsetup.contenu_by_code
FROM 
	w_dbsetup, 
	pmsi.t_listes_tables       
WHERE 
	w_dbsetup.table_code = t_listes_tables.code 
	AND t_listes_tables.oid::text || '-'::text || w_dbsetup.sequence::text NOT IN (SELECT table_id::text || '-'::text || sequence::text FROM pmsi.t_classes) AND w_dbsetup.texte NOT LIKE '*SUPPRIME%';