'' AND L0COMP = 0 GROUP BY 1; ALTER TABLE w_L0P01 ADD CONSTRAINT w_L0P01_pkey PRIMARY KEY(L0NDOS); UPDATE w_L0P01 SET L0NGHS = L0P01.L0NGHS FROM prod_shs.[PMSISCHEMA]_L0P01 L0P01 WHERE w_L0P01.L0NDOS = L0P01.L0NDOS AND w_L0P01.L0DTGR = L0P01.L0DTGR AND L0P01.L0COMP = 0 AND w_L0P01.L0NGHS <> L0P01.L0NGHS; UPDATE w_L0P01 SET L0GHM9 = L0P01.L0GHM9 FROM prod_shs.[PMSISCHEMA]_L0P01 L0P01 WHERE w_L0P01.L0NDOS = L0P01.L0NDOS AND w_L0P01.L0DTGR = L0P01.L0DTGR AND L0P01.L0COMP = 0 AND w_L0P01.L0GHM9 <> L0P01.L0GHM9 ; UPDATE w_L0P01 SET L0NGHS_BEBE_1 = L0P01.L0NGHS FROM prod_shs.[PMSISCHEMA]_L0P01 L0P01 WHERE w_L0P01.L0NDOS = L0P01.L0NDME AND w_L0P01.L0DTGR = L0P01.L0DTGR AND L0P01.L0COMP = 0 AND L0P01.L0NDCO = 0; -- Code facture incohérent avec code ventes UPDATE prod_shs.[ACTIVITESCHEMA]_ADP01 SET ADCFAC = '1' WHERE ADCFAC <> '1' AND ADCJVT = '1' ; DROP TABLE IF EXISTS w_ADP01; CREATE TEMP TABLE w_ADP01 AS SELECT 'H'::text AS w_CODENV, ADDOSS AS w_ADDOSS, ADDCPL AS w_ADDCPL, to_char(ADDOSS,'FM00000000') AS w_ADDOSS_a, to_char(ADDCPL,'FM00') AS w_ADDCPL_a, to_char(CASE WHEN ADDOL1 <> 0 AND COALESCE(SFQSEJ,'1') NOT IN ('0','5') AND ADCPRP = '1' AND to_char(ADDOL1,'FM00000000') NOT LIKE '50%' THEN ADDOL1 ELSE ADDOSS END,'FM00000000') AS w_ADDOL1, to_char(ADDOSS,'FM00000000') || '.' || to_char(ADDCPL,'FM00') AS w_ADDOSSDCPL, ADCSER || '|' || ADACTI || '|' || ADETAG || '|' || ADCHLT || '|' || ADMEDR || '|' || COALESCE(w_L0P01.L0GHM9,'') || '|' || COALESCE(w_L0P01.L0NGHS,'0000') || '|' || COALESCE(w_L0P01.L0NGHS_BEBE_1,'0000') || '|' || COALESCE(w_L0P01.L0NGHS_BEBE_2,'0000') || '|' || COALESCE(w_L0P01.L0NGHS_BEBE_3,'0000') || '|' || ADCFSS || '|' || ADCFMC || '|' || ADCFMM || '|' || ADCODM || '|' || ADCRIS AS key, ADCSER AS w_ADCSER, ADACTI AS w_ADACTI, ADETAG AS w_ADETAG, ADCHLT AS w_ADCHLT, CASE WHEN ADCPRP = '1' THEN ADDTE1 ELSE '20991231' END AS w_ADDTE1, COALESCE(CASE WHEN ADCPRP = '1' THEN to_date(to_char(ADDTE1,'FM00000000'),'YYYYMMDD') ELSE '20991231' END,'20991231') AS w_ADDTE1_date, ADHREN AS w_ADHREN, CASE WHEN ADCPRP = '1' AND ADCSOR = '1' THEN ADDTS1 ELSE '20991231' END AS w_ADDTS1, COALESCE(CASE WHEN ADCPRP = '1' AND ADCSOR = '1' THEN to_date(to_char(ADDTS1,'FM00000000'),'YYYYMMDD') ELSE '20991231' END,'20991231') AS w_ADDTS1_date, ADHRSO AS w_ADHRSO, to_timestamp( CASE WHEN ADCPRP = '1' THEN ADDTE1 ELSE '20991231' END || to_char(CASE WHEN ADHREN BETWEEN 0 AND 240000 THEN ADHREN ELSE 0 END,'0000'),'YYYYMMDD HH24MI' )::timestamp without time zone AS w_ADDTHREN, to_timestamp( CASE WHEN ADCPRP = '1' AND ADCSOR = '1' THEN ADDTS1 ELSE '20991231' END || to_char(CASE WHEN ADHRSO BETWEEN 0 AND 240000 THEN ADHRSO ELSE 0 END,'0000'),'YYYYMMDD HH24MI' )::timestamp without time zone AS w_ADDTHRSO, AD$$$6 AS w_AD$$$6, CASE WHEN substr(AD$$$6, 1, 1) = '2' THEN '6' WHEN substr(AD$$$6, 1, 1) = '3' THEN '7' WHEN substr(AD$$$6, 1, 1) = '4' THEN '0' ELSE '8' END as w_AD$$$6_ME, CASE WHEN substr(AD$$$6, 2, 1) = '1' THEN '6' WHEN substr(AD$$$6, 2, 1) = '2' THEN '6' WHEN substr(AD$$$6, 2, 1) = '3' THEN '7' WHEN substr(AD$$$6, 2, 1) = '5' THEN '9' WHEN substr(AD$$$6, 2, 1) = '6' THEN '7' ELSE '8' END as w_AD$$$6_MS, COALESCE(SFQSEJ,'1') AS w_SFQSEJ, to_char(CASE WHEN ADDOL1 <> 0 AND COALESCE(SFQSEJ,'1') NOT IN ('0','5') AND ADCPRP = '1' AND to_char(ADDOL1,'FM00000000') NOT LIKE '50%' THEN ADDOL1 ELSE ADDOSS END,'00000000') || CASE WHEN ADCPRP = '1' THEN ADDTE1 ELSE '20991231' END AS w_DTE1DOL1, (CASE WHEN ADDCPL = 0 THEN '1' ELSE '0' END)::text AS w_DOL1UN, ADSEXM AS w_ADSEXM, ADDMED AS w_ADDMED, to_char(ADMEDR,'FM0000') AS w_ADMEDR, ADCPRP AS w_ADCPRP, ADCSOR AS w_ADCSOR, ADQURG AS w_ADQURG, ADSPL1 AS w_ADSPL1, COALESCE(w_L0P01.L0DTGR,0) AS L0DTGR, COALESCE(to_date(to_char(w_L0P01.L0DTGR,'FM00000000'),'YYYYMMDD'),'20991231') AS L0DTGR_date, COALESCE(L0NGHS,'0000') AS L0NGHS, COALESCE(w_L0P01.L0GHM9,'') AS L0GHM9, COALESCE(L0NGHS_BEBE_1,'0000') AS L0NGHS_BEBE_1, COALESCE(L0NGHS_BEBE_2,'0000') AS L0NGHS_BEBE_2, COALESCE(L0NGHS_BEBE_3,'0000') AS L0NGHS_BEBE_3, ADCFSS AS w_ADCFSS, ADCFMC AS w_ADCFMC, ADCFMM AS w_ADCFMM, ADCANN AS w_ADCANN, ADADAV AS w_ADADAV, ADCFAC AS w_ADCFAC, ADPAD5 AS w_ADPAD5, ADDTFA AS w_ADDTFA, COALESCE(to_date(to_char(ADDTFA,'FM00000000'),'YYYYMMDD'), '20991231') AS w_ADDTFA_date, ADCJVT AS w_ADCJVT, ADAAJV AS w_ADAAJV, ADMMJV AS w_ADMMJV, COALESCE(to_date(to_char(ADAAJV * 10000 + ADMMJV * 100 + 01,'FM00000000'),'YYYYMMDD') + interval '1 month' - interval '1 day', '20991231') AS w_ADDTJV_date, CASE WHEN ADAAJV >= [ENV_ADM_ANNEEDEBUT] AND ADAAJV < 2100 THEN '1' WHEN ADDTS1 >= [ENV_ADM_ANNEEDEBUT]0101 THEN '1' WHEN ADCJVT <> '1' THEN '1' ELSE '0' END AS CTIOK, ADCODM AS w_ADCODM, ADAD1M AS w_ADAD1M, ADAD2M AS w_ADAD2M, ADVILM AS w_ADVILM, ADTELM AS w_ADTELM, ADCRIS AS w_ADCRIS, case when length(ADNMDT) > 3 AND ADMEDT IN ('0000', '9999') THEN ADNMDT ELSE to_char(ADMEDT,'FM0000') END AS w_ADMEDT, ADNOM1 AS w_ADNOM1, ADPREM AS w_ADPREM, ADMTSS AS w_ADMTSS, ADMTMc AS w_ADMTMC, DMNOMM as nom FROM prod_shs.[ACTIVITESCHEMA]h_ADP01H LEFT JOIN prod_shs.[ACTIVITESCHEMA]_SFP01 ON ADCSER = SFCSER LEFT JOIN w_L0P01 ON ADDOSS = L0NDOS LEFT JOIN prod_shs.[ACTIVITESCHEMA]_DMP01 ON DMDMED = ADDMED; CREATE INDEX w_ADP01_i1 ON w_ADP01 USING btree (w_ADDOSS); INSERT INTO w_ADP01 SELECT 'P' AS w_CODENV, ADDOSS, ADDCPL, to_char(ADDOSS,'FM00000000') AS w_ADDOSS_a, to_char(ADDCPL,'FM00') AS w_ADDCPL_a, to_char(CASE WHEN ADDOL1 <> 0 AND COALESCE(SFQSEJ,'1') NOT IN ('0','5') AND ADCPRP = '1' AND to_char(ADDOL1,'FM00000000') NOT LIKE '50%' THEN ADDOL1 ELSE ADDOSS END,'FM00000000') AS w_ADDOL1, to_char(ADDOSS,'FM00000000') || '.' || to_char(ADDCPL,'FM00') AS w_ADDOSSDCPL, ADCSER || '|' || ADACTI || '|' || ADETAG || '|' || ADCHLT || '|' || ADMEDR || '|' || COALESCE(w_L0P01.L0GHM9,'') || '|' || COALESCE(w_L0P01.L0NGHS,'0000') || '|' || COALESCE(w_L0P01.L0NGHS_BEBE_1,'0000') || '|' || COALESCE(w_L0P01.L0NGHS_BEBE_2,'0000') || '|' || COALESCE(w_L0P01.L0NGHS_BEBE_3,'0000') || '|' || ADCFSS || '|' || ADCFMC || '|' || ADCFMM || '|' || ADCODM || '|' || ADCRIS AS key, ADCSER AS w_ADCSER, ADACTI AS w_ADACTI, ADETAG AS w_ADETAG, ADCHLT AS w_ADCHLT, CASE WHEN ADCPRP = '1' THEN ADDTE1 ELSE '20991231' END AS w_ADDTE1, COALESCE(CASE WHEN ADCPRP = '1' THEN to_date(to_char(ADDTE1,'FM00000000'),'YYYYMMDD') ELSE '20991231' END,'20991231') AS w_ADDTE1_date, ADHREN AS w_ADHREN, CASE WHEN ADCPRP = '1' AND ADCSOR = '1' THEN ADDTS1 ELSE '20991231' END AS w_ADDTS1, COALESCE(CASE WHEN ADCPRP = '1' AND ADCSOR = '1' THEN to_date(to_char(ADDTS1,'FM00000000'),'YYYYMMDD') ELSE '20991231' END,'20991231') AS w_ADDTS1_date, ADHRSO AS w_ADHRSO, to_timestamp( CASE WHEN ADCPRP = '1' THEN ADDTE1 ELSE '20991231' END || to_char(CASE WHEN ADHREN BETWEEN 0 AND 240000 THEN ADHREN ELSE 0 END,'0000'),'YYYYMMDD HH24MI' )::timestamp without time zone AS w_ADDTHREN, to_timestamp( CASE WHEN ADCPRP = '1' AND ADCSOR = '1' THEN ADDTS1 ELSE '20991231' END || to_char(CASE WHEN ADHRSO BETWEEN 0 AND 240000 THEN ADHRSO ELSE 0 END,'0000'),'YYYYMMDD HH24MI' )::timestamp without time zone AS w_ADDTHRSO, AD$$$6, CASE WHEN substr(AD$$$6, 1, 1) = '2' THEN '6' WHEN substr(AD$$$6, 1, 1) = '3' THEN '7' WHEN substr(AD$$$6, 1, 1) = '4' THEN '0' ELSE '8' END as w_AD$$$6_ME, CASE WHEN substr(AD$$$6, 2, 1) = '1' THEN '6' WHEN substr(AD$$$6, 2, 1) = '2' THEN '6' WHEN substr(AD$$$6, 2, 1) = '3' THEN '7' WHEN substr(AD$$$6, 2, 1) = '5' THEN '9' WHEN substr(AD$$$6, 2, 1) = '6' THEN '7' ELSE '8' END as w_AD$$$6_MS, COALESCE(SFQSEJ,'1') AS w_SFQSEJ, to_char(CASE WHEN ADDOL1 <> 0 AND COALESCE(SFQSEJ,'1') NOT IN ('0','5') AND ADCPRP = '1' AND to_char(ADDOL1,'FM00000000') NOT LIKE '50%' THEN ADDOL1 ELSE ADDOSS END,'00000000') || CASE WHEN ADCPRP = '1' THEN ADDTE1 ELSE '20991231' END AS w_DTE1DOL1, (CASE WHEN ADDCPL = 0 THEN '1' ELSE '0' END)::text AS w_DOL1UN, ADSEXM AS w_ADSEXM, ADDMED AS w_ADDMED, to_char(ADMEDR,'FM0000') AS w_ADMEDR, ADCPRP AS w_ADCPRP, ADCSOR AS w_ADCSOR, ADQURG AS w_ADQURG, ADSPL1 AS w_ADSPL1, COALESCE(w_L0P01.L0DTGR,0) AS L0DTGR, COALESCE(to_date(to_char(w_L0P01.L0DTGR,'FM00000000'),'YYYYMMDD'),'20991231') AS L0DTGR_date, COALESCE(w_L0P01.L0NGHS,'0000') AS L0NGHS, COALESCE(w_L0P01.L0GHM9,'') AS L0GHM9, COALESCE(w_L0P01.L0NGHS_BEBE_1,'0000') AS L0NGHS_BEBE_1, COALESCE(w_L0P01.L0NGHS_BEBE_2,'0000') AS L0NGHS_BEBE_2, COALESCE(w_L0P01.L0NGHS_BEBE_3,'0000') AS L0NGHS_BEBE_3, ADCFSS AS w_ADCFSS, ADCFMC AS w_ADCFMC, ADCFMM AS w_ADCFMM, ADCANN AS w_ADCANN, ADADAV AS w_ADADAV, ADCFAC AS w_ADCFAC, ADPAD5 AS w_ADPAD5, ADDTFA AS w_ADDTFA, COALESCE(to_date(to_char(ADDTFA,'FM00000000'),'YYYYMMDD'), '20991231') AS w_ADDTFA_date, ADCJVT AS w_ADCJVT, ADAAJV AS w_ADAAJV, ADMMJV AS w_ADMMJV, COALESCE(to_date(to_char(ADAAJV * 10000 + ADMMJV * 100 + 01,'FM00000000'),'YYYYMMDD') + interval '1 month' - interval '1 day', '20991231') AS w_ADDTJV_date, CASE WHEN ADAAJV >= [ENV_ADM_ANNEEDEBUT] AND ADAAJV < 2100 THEN '1' WHEN ADDTS1 >= [ENV_ADM_ANNEEDEBUT]0101 THEN '1' WHEN ADCJVT <> '1' THEN '1' ELSE '0' END AS CTIOK, ADCODM AS w_ADCODM, ADAD1M AS w_ADAD1M, ADAD2M AS w_ADAD2M, ADVILM AS w_ADVILM, ADTELM AS w_ADTELM, ADCRIS AS w_ADCRIS, case when length(ADNMDT) > 3 AND ADMEDT IN ('0000', '9999') THEN ADNMDT ELSE to_char(ADMEDT,'FM0000') END AS w_ADMEDT, ADNOM1 AS w_ADNOM1, ADPREM AS w_ADPREM, ADMTSS AS w_ADMTSS, ADMTMc AS w_ADMTMC FROM prod_shs.[ACTIVITESCHEMA]p_ADP01P LEFT JOIN prod_shs.[ACTIVITESCHEMA]_SFP01 ON ADCSER = SFCSER LEFT JOIN w_ADP01 ON ADDOSS = w_ADDOSS AND ADDCPL = w_ADDCPL LEFT JOIN w_L0P01 ON ADDOSS = L0NDOS WHERE w_ADDOSS IS NULL; INSERT INTO w_ADP01 SELECT '' AS w_CODENV, ADDOSS, ADDCPL, to_char(ADDOSS,'FM00000000') AS w_ADDOSS_a, to_char(ADDCPL,'FM00') AS w_ADDCPL_a, to_char(CASE WHEN ADDOL1 <> 0 AND COALESCE(SFQSEJ,'1') NOT IN ('0','5') AND ADCPRP = '1' AND to_char(ADDOL1,'FM00000000') NOT LIKE '50%' THEN ADDOL1 ELSE ADDOSS END,'FM00000000') AS w_ADDOL1, to_char(ADDOSS,'FM00000000') || '.' || to_char(ADDCPL,'FM00') AS w_ADDOSSDCPL, ADCSER || '|' || ADACTI || '|' || ADETAG || '|' || ADCHLT || '|' || ADMEDR || '|' || COALESCE(w_L0P01.L0GHM9,'') || '|' || COALESCE(w_L0P01.L0NGHS,'0000') || '|' || COALESCE(w_L0P01.L0NGHS_BEBE_1,'0000') || '|' || COALESCE(w_L0P01.L0NGHS_BEBE_2,'0000') || '|' || COALESCE(w_L0P01.L0NGHS_BEBE_3,'0000') || '|' || ADCFSS || '|' || ADCFMC || '|' || ADCFMM || '|' || ADCODM || '|' || ADCRIS AS key, ADCSER AS w_ADCSER, ADACTI AS w_ADACTI, ADETAG AS w_ADETAG, ADCHLT AS w_ADCHLT, CASE WHEN ADCPRP = '1' THEN ADDTE1 ELSE '20991231' END AS w_ADDTE1, COALESCE(CASE WHEN ADCPRP = '1' THEN to_date(to_char(ADDTE1,'FM00000000'),'YYYYMMDD') ELSE '20991231' END,'20991231') AS w_ADDTE1_date, ADHREN AS w_ADHREN, CASE WHEN ADCPRP = '1' AND ADCSOR = '1' THEN ADDTS1 ELSE '20991231' END AS w_ADDTS1, COALESCE(CASE WHEN ADCPRP = '1' AND ADCSOR = '1' THEN to_date(to_char(ADDTS1,'FM00000000'),'YYYYMMDD') ELSE '20991231' END,'20991231') AS w_ADDTS1_date, ADHRSO AS w_ADHRSO, to_timestamp( CASE WHEN ADCPRP = '1' THEN ADDTE1 ELSE '20991231' END || to_char(CASE WHEN ADHREN BETWEEN 0 AND 240000 THEN ADHREN ELSE 0 END,'0000'),'YYYYMMDD HH24MI' )::timestamp without time zone AS w_ADDTHREN, to_timestamp( CASE WHEN ADCPRP = '1' AND ADCSOR = '1' AND ADDTS1 != 0 THEN ADDTS1 ELSE '20991231' END || to_char(CASE WHEN ADHRSO BETWEEN 0 AND 240000 THEN ADHRSO ELSE 0 END,'0000'),'YYYYMMDD HH24MI' )::timestamp without time zone AS w_ADDTHRSO, AD$$$6, CASE WHEN substr(AD$$$6, 1, 1) = '2' THEN '6' WHEN substr(AD$$$6, 1, 1) = '3' THEN '7' WHEN substr(AD$$$6, 1, 1) = '4' THEN '0' ELSE '8' END as w_AD$$$6_ME, CASE WHEN substr(AD$$$6, 2, 1) = '1' THEN '6' WHEN substr(AD$$$6, 2, 1) = '2' THEN '6' WHEN substr(AD$$$6, 2, 1) = '3' THEN '7' WHEN substr(AD$$$6, 2, 1) = '5' THEN '9' WHEN substr(AD$$$6, 2, 1) = '6' THEN '7' ELSE '8' END as w_AD$$$6_MS, COALESCE(SFQSEJ,'1') AS w_SFQSEJ, to_char(CASE WHEN ADDOL1 <> 0 AND SFQSEJ NOT IN ('0','5') AND ADCPRP = '1' AND to_char(ADDOL1,'FM00000000') NOT LIKE '50%' THEN ADDOL1 ELSE ADDOSS END,'00000000') || CASE WHEN ADCPRP = '1' THEN ADDTE1 ELSE '20991231' END AS w_DTE1DOL1, (CASE WHEN ADDCPL = 0 THEN '1' ELSE '0' END)::text AS w_DOL1UN, ADSEXM AS w_ADSEXM, ADDMED AS w_ADDMED, to_char(ADMEDR,'FM0000') AS w_ADMEDR, ADCPRP AS w_ADCPRP, ADCSOR AS w_ADCSOR, ADQURG AS w_ADQURG, ADSPL1 AS w_ADSPL1, COALESCE(w_L0P01.L0DTGR,0) AS L0DTGR, COALESCE(to_date(to_char(w_L0P01.L0DTGR,'FM00000000'),'YYYYMMDD'),'20991231') AS L0DTGR_date, COALESCE(w_L0P01.L0NGHS,'0000') AS L0NGHS, COALESCE(w_L0P01.L0GHM9,'') AS L0GHM9, COALESCE(w_L0P01.L0NGHS_BEBE_1,'0000') AS L0NGHS_BEBE_1, COALESCE(w_L0P01.L0NGHS_BEBE_2,'0000') AS L0NGHS_BEBE_2, COALESCE(w_L0P01.L0NGHS_BEBE_3,'0000') AS L0NGHS_BEBE_3, ADCFSS AS w_ADCFSS, ADCFMC AS w_ADCFMC, ADCFMM AS w_ADCFMM, ADCANN AS w_ADCANN, ADADAV AS w_ADADAV, ADCFAC AS w_ADCFAC, ADPAD5 AS w_ADPAD5, ADDTFA AS w_ADDTFA, COALESCE(to_date(to_char(ADDTFA,'FM00000000'),'YYYYMMDD'), '20991231') AS w_ADDTFA_date, ADCJVT AS w_ADCJVT, ADAAJV AS w_ADAAJV, ADMMJV AS w_ADMMJV, COALESCE(to_date(to_char(ADAAJV * 10000 + ADMMJV * 100 + 01,'FM00000000'),'YYYYMMDD') + interval '1 month' - interval '1 day', '20991231') AS w_ADDTJV_date, CASE WHEN ADAAJV >= [ENV_ADM_ANNEEDEBUT] AND ADAAJV < 2100 THEN '1' WHEN ADDTS1 >= [ENV_ADM_ANNEEDEBUT]0101 THEN '1' WHEN ADCJVT <> '1' THEN '1' ELSE '0' END AS CTIOK, ADCODM AS w_ADCODM, ADAD1M AS w_ADAD1M, ADAD2M AS w_ADAD2M, ADVILM AS w_ADVILM, ADTELM AS w_ADTELM, ADCRIS AS w_ADCRIS, case when length(ADNMDT) > 3 AND ADMEDT IN ('0000', '9999') THEN ADNMDT ELSE to_char(ADMEDT,'FM0000') END AS w_ADMEDT, ADNOM1 AS w_ADNOM1, ADPREM AS w_ADPREM, ADMTSS AS w_ADMTSS, ADMTMc AS w_ADMTMC FROM prod_shs.[ACTIVITESCHEMA]_ADP01 LEFT JOIN prod_shs.[ACTIVITESCHEMA]_SFP01 ON ADCSER = SFCSER LEFT JOIN w_ADP01 ON ADDOSS = w_ADDOSS AND ADDCPL = w_ADDCPL LEFT JOIN w_L0P01 ON ADDOSS = L0NDOS WHERE w_ADDOSS IS NULL AND ADCPRP = '1'; -- Médecin de référence modifié sur les additifs, il faut modifier les additifs antérieus UPDATE w_ADP01 SET w_ADMEDR = subview.w_ADMEDR_last, key = key || '|' || subview.w_ADMEDR_last FROM ( SELECT w_ADDOSS, (MAX(ARRAY[to_char(w_ADDCPL,'FM00'),w_ADMEDR]))[2] AS w_ADMEDR_last FROM w_ADP01 GROUP BY 1 HAVING count(DISTINCT w_ADMEDR) > 1 ) subview WHERE w_ADP01.w_ADDOSS = subview.w_ADDOSS AND w_ADP01.w_ADMEDR <> subview.w_ADMEDR_last ; -- Dossiers séances ouverts à tord (services forcés séance) UPDATE w_adp01 SET w_ADCANN = 'A' WHERE w_ADCSER IN (SELECT code_original FROM activite[PX].t_services_facturation WHERE type_sejour = '5') AND w_ADCSOR = '0' AND w_ADDTE1_date <= (now() - interval '7 days') AND w_ADCANN <> 'A' AND w_ADDOSS NOT IN (SELECT ACDOSS FROM prod_shs.[ACTIVITESCHEMA]_ACP01 WHERE ACCANN = '1'); -- Dossiers séances ouverts à tord (19-302) UPDATE w_adp01 SET w_ADCANN = 'A' WHERE w_ADCSER IN ( SELECT t_services_facturation.code_original FROM activite[PX].t_services_facturation JOIN base.t_modes_traitement ON mode_traitement_id = t_modes_traitement.oid JOIN base.t_dmt ON dmt_id = t_dmt.oid WHERE t_modes_traitement.code = '19' AND t_dmt.code = '302') AND w_ADCSOR = '0' AND w_ADDTE1_date <= (now() - interval '7 days') AND w_ADCANN <> 'A' AND w_ADDOSS NOT IN (SELECT ACDOSS FROM prod_shs.[ACTIVITESCHEMA]_ACP01 WHERE ACCANN = '1'); DELETE FROM w_ADP01 WHERE w_ADCANN <> ''; DROP TABLE IF EXISTS w_CCP01_next_jvt; CREATE TEMP TABLE w_CCP01_next_jvt AS SELECT COALESCE(to_date(MAX(CCANEE * 10000 + CCMOIS * 100 + 01),'YYYYMMDD') + interval '2 month' - interval '1 day', '20991231') AS CCDTJV_date FROM prod_shs.[ACTIVITESCHEMA]_CCP01 WHERE CCCMON = 'E' AND CCMOIS <= 12 AND CCNOR3 IN (105) ; UPDATE w_ADP01 SET w_ADDTJV_date = CASE WHEN w_ADCSOR <> '1' THEN '20991231' WHEN w_ADDTS1_date <= CCDTJV_date THEN CCDTJV_date ELSE date_trunc('month', w_ADDTS1_date) + interval '1 month' - interval '1 day' END FROM w_CCP01_next_jvt WHERE w_ADCJVT <> '1'; UPDATE w_ADP01 SET w_ADAAJV = date_part('year', w_ADDTJV_date), w_ADMMJV = date_part('month', w_ADDTJV_date) WHERE w_ADCJVT <> '1'; DROP TABLE IF EXISTS w_ADP01_keys; CREATE TEMP TABLE w_ADP01_keys AS SELECT key, w_ADCSER, w_ADACTI, w_ADETAG, w_ADCHLT, w_ADMEDR, L0NGHS, L0GHM9, L0NGHS_BEBE_1, L0NGHS_BEBE_2, L0NGHS_BEBE_3, w_ADCFSS, w_ADCFMC, w_ADCFMM, w_ADCODM, w_ADCRIS, ''::text AS mode_traitement_code, ''::text AS dmt_code, '0'::text AS type_sejour_force, 0::bigint AS lieu_id, 0::bigint AS medecin_sejour_id, 0::bigint AS ghs_id, 0::bigint AS ghm_id, 0::bigint AS ghs_bebe1_id, 0::bigint AS ghs_bebe2_id, 0::bigint AS ghs_bebe3_id, 0::bigint AS tiers_payant_0_id, 0::bigint AS tiers_payant_1_id, 0::bigint AS tiers_payant_2_id, 0::bigint AS tiers_payant_22_id, 0::bigint AS code_postal_id, 0::bigint AS risque_id FROM w_ADP01 GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16; INSERT INTO activite[PX].t_lieux( code_original_1, code_original_2, code_original_3, code_original_4) SELECT w_ADCSER, w_ADACTI, w_ADETAG, w_ADETAG || '|' || w_ADCHLT FROM w_ADP01_keys LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = w_ADCSER AND code_original_2 = w_ADACTI AND code_original_3 = w_ADETAG AND code_original_4 = w_ADETAG || '|' || w_ADCHLT ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4; UPDATE w_ADP01_keys set lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE code_original_1 = w_ADCSER AND code_original_2 = w_ADACTI AND code_original_3 = w_ADETAG AND code_original_4 = w_ADETAG || '|' || w_ADCHLT; UPDATE w_ADP01_keys SET mode_traitement_code = t_modes_traitement.code, dmt_code = t_dmt.code, type_sejour_force = CASE WHEN t_services_facturation.type_sejour IN ('1', '2', '3', '31', '4', '5') THEN t_services_facturation.type_sejour ELSE '0' END FROM activite[PX].t_services_facturation JOIN base.t_modes_traitement ON t_services_facturation.mode_traitement_id = t_modes_traitement.oid JOIN base.t_dmt ON t_services_facturation.dmt_id = t_dmt.oid WHERE t_services_facturation.code_original = w_ADCSER ; UPDATE w_ADP01_keys set medecin_sejour_id = t_medecins_administratifs.oid FROM activite[PX].t_medecins_administratifs WHERE code_original = w_ADMEDR; UPDATE w_ADP01_keys set ghs_id = t_ghs.oid FROM base.t_ghs WHERE L0NGHS <> '0000' AND to_char(t_ghs.code,'FM0000') = L0NGHS; UPDATE w_ADP01_keys set ghm_id = t_ghm.oid FROM base.t_ghm WHERE t_ghm.code = L0GHM9 AND t_ghm.code NOT LIKE '90%'; UPDATE w_ADP01_keys set ghs_bebe1_id = t_ghs.oid FROM base.t_ghs WHERE L0NGHS_BEBE_1 <> '0000' AND to_char(t_ghs.code,'FM0000') = L0NGHS_BEBE_1; UPDATE w_ADP01_keys set ghs_bebe2_id = t_ghs.oid FROM base.t_ghs WHERE L0NGHS_BEBE_2 <> '0000' AND to_char(t_ghs.code,'FM0000') = L0NGHS_BEBE_2; UPDATE w_ADP01_keys set ghs_bebe3_id = t_ghs.oid FROM base.t_ghs WHERE L0NGHS_BEBE_3 <> '0000' AND to_char(t_ghs.code,'FM0000') = L0NGHS_BEBE_3; ALTER TABLE w_ADP01_keys ADD CONSTRAINT w_ADP01_keys_pkey PRIMARY KEY(key); UPDATE w_ADP01_keys set tiers_payant_0_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE code_original = '0000'; UPDATE w_ADP01_keys set tiers_payant_1_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE w_ADCFSS <> 0 AND w_ADCFSS <> 9999 AND code_original = w_ADCFSS; UPDATE w_ADP01_keys set tiers_payant_2_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE w_ADCFMC <> 0 AND w_ADCFMC <> 9999 AND code_original = w_ADCFMC; UPDATE w_ADP01_keys set tiers_payant_22_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE w_ADCFMM <> 0 AND w_ADCFMM <> 9999 AND code_original = w_ADCFMM; UPDATE w_ADP01_keys set code_postal_id = t_codes_postaux.oid FROM base.t_codes_postaux WHERE w_ADCODM = t_codes_postaux.code; UPDATE w_ADP01_keys set risque_id = t_risque.oid FROM activite[PX].t_risque WHERE w_ADCRIS = t_risque.code; UPDATE activite[PX].t_lieux SET service_facturation_id = COALESCE(t_services_facturation.oid,0), mode_traitement_id = COALESCE(t_services_facturation.mode_traitement_id,0) FROM activite[PX].t_services_facturation WHERE code_original_1 = t_services_facturation.code_original AND (t_lieux.service_facturation_id <> COALESCE(t_services_facturation.oid,0) OR t_lieux.mode_traitement_id <> COALESCE(t_services_facturation.mode_traitement_id,0) ) ; UPDATE activite[PX].t_lieux SET activite_id = COALESCE(t_activites.oid,0) FROM activite[PX].t_activites WHERE code_original_2 = t_activites.code_original AND t_lieux.activite_id <> COALESCE(t_activites.oid,0) ; UPDATE activite[PX].t_lieux SET lit_id = COALESCE(t_lits.oid,0) FROM activite[PX].t_lits WHERE code_original_4 = t_lits.code_original AND t_lieux.lit_id <> COALESCE(t_lits.oid,0) ; DROP TABLE IF EXISTS w_ADP01_SEJOUR; CREATE TEMP TABLE w_ADP01_SEJOUR AS SELECT w_ADDOL1, COUNT(CASE WHEN w_DOL1UN = '1' THEN w_ADDOSS ELSE NULl END) AS count, MIN(w_ADDTE1) AS w_ADDTE1, MIN(w_ADHREN) AS w_ADHREN, MAX(w_ADDTS1) AS w_ADDTS1, MAX(w_ADHRSO) AS w_ADHRSO, MIN(w_AD$$$6_ME) AS w_AD$$$6_ME, MIN(w_AD$$$6_MS) AS w_AD$$$6_MS, MIN(w_DTE1DOL1) AS w_DTE1DOL1_1, MAX(w_DTE1DOL1) AS w_DTE1DOL1_9 FROM w_ADP01 GROUP BY 1; UPDATE w_ADP01_SEJOUR SET w_ADDTE1 = w_ADP01.w_ADDTE1, w_ADHREN = w_ADP01.w_ADHREN, w_AD$$$6_ME = w_ADP01.w_AD$$$6_ME FROM w_ADP01 WHERE w_ADP01_SEJOUR.w_ADDOL1 = w_ADP01.w_ADDOL1 AND w_ADP01_SEJOUR.w_DTE1DOL1_1 = w_ADP01.w_DTE1DOL1 AND (w_ADP01_SEJOUR.w_ADDTE1 <> w_ADP01.w_ADDTE1 OR w_ADP01_SEJOUR.w_ADHREN <> w_ADP01.w_ADHREN OR w_ADP01_SEJOUR.w_AD$$$6_ME <> w_ADP01.w_AD$$$6_ME); UPDATE w_ADP01_SEJOUR SET w_ADDTS1 = w_ADP01.w_ADDTS1, w_ADHRSO = w_ADP01.w_ADHRSO, w_AD$$$6_MS = w_ADP01.w_AD$$$6_MS FROM w_ADP01 WHERE w_ADP01_SEJOUR.w_ADDOL1 = w_ADP01.w_ADDOL1 AND w_ADP01_SEJOUR.w_DTE1DOL1_9 = w_ADP01.w_DTE1DOL1 AND (w_ADP01_SEJOUR.w_ADDTS1 <> w_ADP01.w_ADDTS1 OR w_ADP01_SEJOUR.w_ADHRSO <> w_ADP01.w_ADHRSO OR w_ADP01_SEJOUR.w_AD$$$6_MS <> w_ADP01.w_AD$$$6_MS ); UPDATE w_ADP01 SET w_DOL1UN = '0' FROM w_ADP01_SEJOUR WHERE w_ADP01.w_ADDOL1 = w_ADP01_SEJOUR.w_ADDOL1 AND COUNT > 1 AND w_DOL1UN = '1' AND w_ADP01.w_DTE1DOL1 <> w_ADP01_SEJOUR.w_DTE1DOL1_1; UPDATE w_ADP01 SET w_DOL1UN = '0' FROM ( SELECT w_ADDOL1, MIN(w_ADDOSS) AS first_ADDOSS FROM w_ADP01 GROUP BY 1 HAVING count(CASE WHEN w_DOL1UN = '1' THEN 1 ELSE NULL END) > 1 ) subview WHERE w_ADP01.w_ADDOL1 = subview.w_ADDOL1 AND w_ADDOSS <> first_ADDOSS AND w_DOL1UN = '1'; CREATE INDEX w_ADP01_i2 ON w_ADP01 USING btree (w_ADDOL1); CREATE INDEX w_ADP01_i5 ON w_ADP01 USING btree (key); CREATE INDEX w_ADP01_i4 ON w_ADP01 USING btree (w_CODENV); CREATE INDEX w_ADP01_i9 ON w_ADP01 USING btree (w_ADDOSS_a); ALTER TABLE w_ADP01 ADD CONSTRAINT w_ADP01_pkey PRIMARY KEY(w_ADDOSSDCPL); ALTER TABLE w_ADP01_SEJOUR ADD CONSTRAINT w_ADP01_SEJOUR_pkey PRIMARY KEY(w_ADDOL1); DROP TABLE IF EXISTS w_ADP01_autres; CREATE TEMP TABLE w_ADP01_autres AS SELECT FTDOSS AS ADDOSS FROM prod_shs.[ACTIVITESCHEMA]_FTP01 WHERE FTMTFA <> (FTMTRG + FTMTOD) GROUP BY 1 UNION SELECT FDDOSS AS ADDOSS FROM prod_shs.[ACTIVITESCHEMA]_FDP03 WHERE FDAMRG >= [ENV_ADM_ANNEEDEBUT]01 GROUP BY 1 UNION SELECT FDDOSS AS ADDOSS FROM prod_shs.[ACTIVITESCHEMA]p_FDP03P WHERE FDAMRG >= [ENV_ADM_ANNEEDEBUT]01 GROUP BY 1 UNION SELECT FDDOSS AS ADDOSS FROM prod_shs.[ACTIVITESCHEMA]h_FDP03H WHERE FDAMRG >= [ENV_ADM_ANNEEDEBUT]01 GROUP BY 1; UPDATE w_ADP01 SET CTIOK = '1' WHERE CTIOK <> '1' AND w_ADDOSS IN (SELECT ADDOSS FROM w_ADP01_autres); UPDATE w_ADP01 SET CTIOK = '1' WHERE CTIOK <> '1' AND w_ADDOL1 IN (SELECT w_ADDOL1 FROM w_ADP01 WHERE CTIOK = '1'); DELETE FROM w_ADP01 WHERE CTIOK <> '1'; UPDATE w_ADP01 SET L0NGHS_BEBE_1 = '0000' WHERE L0NGHS_BEBE_1 NOT BETWEEN '0000' AND '9999'; -- Suppression des tables de travail DROP TABLE IF EXISTS w_L0P01; DROP TABLE IF EXISTS w_CCP01_next_jvt; ]]> DMNOMM OR p_patients.prenom <> DMPREM OR p_patients.date_naissance <> base.cti_to_date(DMAANM, DMMMNM, DMJJNM) OR code_sexe <> CASE WHEN DMSEXM IN ('2','3', '5') THEN '2' ELSE '1' END ); ]]> 0 OR (MAX(MFNBRE_FOR) > 0 AND SUM(MFNBRE_GHS) = 0); CREATE INDEX w_MFP01_ext_i1 ON w_MFP01_ext USING btree (w_MFDOSS); DROP TABLE IF EXISTS w_sejours; CREATE TEMP TABLE w_sejours AS SELECT ''::text AS finess, w_ADP01.w_ADDOL1 as no_sejour, w_ADDOSSDCPL as code_original, w_ADDMED as no_patient, COALESCE(to_date(to_char(w_ADP01_SEJOUR.w_ADDTE1,'FM00000000'),'YYYYMMDD'),'20991231') as date_entree, w_ADP01_SEJOUR.w_ADHREN * 100 as heure_entree, COALESCE(to_date(to_char(w_ADP01_SEJOUR.w_ADDTS1,'FM00000000'),'YYYYMMDD'),'20991231') as date_sortie, w_ADP01_SEJOUR.w_ADHRSO * 100 as heure_sortie, CASE WHEN w_ADSEXM IN ('2','3', '5') THEN '2' ELSE '1' END as code_sexe, 0 AS age, CASE WHEN w_ADCSOR = '1' THEN 1 ELSE 0 END as code_sorti, CASE WHEN w_ADCPRP <> '1' THEN 1 ELSE 0 END as code_prevu, CASE WHEN type_sejour_force <> '0' AND type_sejour_force <> '31' THEN type_sejour_force WHEN type_sejour_force = 31 AND to_date(to_char(w_ADP01.w_ADDTS1,'FM00000000'),'YYYYMMDD')::date - to_date(to_char(w_ADP01.w_ADDTE1,'FM00000000'),'YYYYMMDD')::date <= 1 THEN '3' WHEN type_sejour_force = 31 THEN '1' WHEN mode_traitement_code IN ('07') OR dmt_code IN ('958') THEN '3' WHEN mode_traitement_code IN ('19') AND dmt_code IN ('302') THEN '5' WHEN mode_traitement_code IN ('19', '23') THEN '2' WHEN mode_traitement_code IN ('04') AND to_date(to_char(w_ADP01.w_ADDTS1,'FM00000000'),'YYYYMMDD') = to_date(to_char(w_ADP01.w_ADDTE1,'FM00000000'),'YYYYMMDD') THEN '2' WHEN mode_traitement_code IN ('04') THEN '1' WHEN mode_traitement_code IN ('03') AND to_date(to_char(w_ADP01.w_ADDTS1,'FM00000000'),'YYYYMMDD') = to_date(to_char(w_ADP01.w_ADDTE1,'FM00000000'),'YYYYMMDD') THEN '2' WHEN mode_traitement_code IN ('10') AND w_SFQSEJ NOT IN ('0', '5') AND to_date(to_char(w_ADP01.w_ADDTS1,'FM00000000'),'YYYYMMDD') = to_date(to_char(w_ADP01.w_ADDTE1,'FM00000000'),'YYYYMMDD') THEN '2' WHEN mode_traitement_code IN ('03') THEN '1' WHEN w_SFQSEJ IN ('0', '5') THEN '3' ELSE '1' END as type_sejour, w_ADP01_keys.lieu_id AS lieu_sortie_id, w_ADP01_keys.medecin_sejour_id, w_ADP01_keys.ghs_id, w_ADP01_keys.ghm_id, w_ADP01_keys.ghs_bebe1_id, w_ADP01_keys.ghs_bebe2_id, w_ADP01_keys.ghs_bebe3_id, L0DTGR_date as date_groupage, CASE WHEN w_ADSPL1 = '' OR w_ADSPL1 = '0' THEN '0' ELSE '1' END as code_cp_demandee, t_services_facturation.mode_traitement_id as mode_traitement_id, w_ADP01_SEJOUR.w_AD$$$6_ME as mode_entree, '0'::character(1) as provenance, w_ADP01_SEJOUR.w_AD$$$6_MS as mode_sortie, '0'::character(1) as destination, w_ADP01_keys.tiers_payant_0_id, w_ADP01_keys.tiers_payant_1_id, w_ADP01_keys.tiers_payant_2_id, w_ADP01_keys.tiers_payant_22_id, CASE WHEN substr(w_AD$$$6, 3, 2) = 'BG' THEN 1 ELSE 0 END AS est_budget_global, w_ADP01_keys.code_postal_id, w_ADP01_keys.risque_id FROM w_ADP01_sejours_modifies w_ADP01 JOIN w_ADP01_SEJOUR ON w_ADP01.w_ADDOL1 = w_ADP01_SEJOUR.w_ADDOL1 JOIN w_ADP01_keys ON w_ADP01.key = w_ADP01_keys.key JOIN activite[PX].t_services_facturation ON w_ADP01.w_ADCSER = t_services_facturation.code_original WHERE w_DOL1UN = '1' AND w_ADCANN = ''; UPDATE w_sejours SET type_sejour = '3' WHERE type_sejour <> '3' AND no_sejour IN (SELECT w_MFDOSS FROM w_MFP01_ext); -- Forcage type selon séjour UPDATE w_sejours SET type_sejour = t_sejour.type_sejour FROM activite.t_sejour WHERE t_sejour.no_sejour = w_sejours.no_sejour AND t_sejour.type_sejour IN ('1','2','3','4','5','6','9'); -- FINESS UPDATE w_sejours SET finess = t_finess.code FROM activite[PX].t_lieux JOIN activite[PX].t_services_facturation on service_facturation_id = t_services_facturation.oid JOIN base.t_finess ON finess_id = t_finess.oid WHERE lieu_sortie_id = t_lieux.oid; UPDATE w_sejours SET finess = '000000000' WHERE finess = ''; UPDATE activite[PX].p_sejours SET code_original = w_sejours.code_original, finess = w_sejours.finess, no_patient = w_sejours.no_patient, date_entree = w_sejours.date_entree, heure_entree = w_sejours.heure_entree, date_sortie = w_sejours.date_sortie, heure_sortie = w_sejours.heure_sortie, code_sexe = w_sejours.code_sexe, age = w_sejours.age, code_sorti = w_sejours.code_sorti, code_prevu = w_sejours.code_prevu, type_sejour = w_sejours.type_sejour, lieu_sortie_id = w_sejours.lieu_sortie_id, medecin_sejour_id = w_sejours.medecin_sejour_id, code_cp_demandee = w_sejours.code_cp_demandee, mode_traitement_id = w_sejours.mode_traitement_id, mode_entree = w_sejours.mode_entree, provenance = w_sejours.provenance, mode_sortie = w_sejours.mode_sortie, destination = w_sejours.destination, tiers_payant_0_id = w_sejours.tiers_payant_0_id, tiers_payant_1_id = w_sejours.tiers_payant_1_id, tiers_payant_2_id = w_sejours.tiers_payant_2_id, tiers_payant_22_id = w_sejours.tiers_payant_22_id, est_budget_global = w_sejours.est_budget_global, date_groupage = w_sejours.date_groupage, ghs_id = w_sejours.ghs_id, ghm_id = w_sejours.ghm_id, ghs_bebe1_id = w_sejours.ghs_bebe1_id, ghs_bebe2_id = w_sejours.ghs_bebe2_id, ghs_bebe3_id = w_sejours.ghs_bebe3_id, code_postal_id = w_sejours.code_postal_id, risque_id = w_sejours.risque_id FROM w_sejours WHERE w_sejours.no_sejour = p_sejours.no_sejour AND ( w_sejours.code_original IS DISTINCT FROM p_sejours.code_original OR w_sejours.finess IS DISTINCT FROM p_sejours.finess OR w_sejours.no_patient IS DISTINCT FROM p_sejours.no_patient OR w_sejours.date_entree IS DISTINCT FROM p_sejours.date_entree OR w_sejours.heure_entree IS DISTINCT FROM p_sejours.heure_entree OR w_sejours.date_sortie IS DISTINCT FROM p_sejours.date_sortie OR w_sejours.heure_sortie IS DISTINCT FROM p_sejours.heure_sortie OR w_sejours.code_sexe IS DISTINCT FROM p_sejours.code_sexe OR w_sejours.age IS DISTINCT FROM p_sejours.age OR w_sejours.code_sorti IS DISTINCT FROM p_sejours.code_sorti OR w_sejours.code_prevu IS DISTINCT FROM p_sejours.code_prevu OR w_sejours.type_sejour IS DISTINCT FROM p_sejours.type_sejour OR w_sejours.lieu_sortie_id IS DISTINCT FROM p_sejours.lieu_sortie_id OR w_sejours.medecin_sejour_id IS DISTINCT FROM p_sejours.medecin_sejour_id OR w_sejours.code_cp_demandee IS DISTINCT FROM p_sejours.code_cp_demandee OR w_sejours.mode_traitement_id IS DISTINCT FROM p_sejours.mode_traitement_id OR w_sejours.mode_entree IS DISTINCT FROM p_sejours.mode_entree OR w_sejours.provenance IS DISTINCT FROM p_sejours.provenance OR w_sejours.mode_sortie IS DISTINCT FROM p_sejours.mode_sortie OR w_sejours.destination IS DISTINCT FROM p_sejours.destination OR w_sejours.tiers_payant_0_id IS DISTINCT FROM p_sejours.tiers_payant_0_id OR w_sejours.tiers_payant_1_id IS DISTINCT FROM p_sejours.tiers_payant_1_id OR w_sejours.tiers_payant_2_id IS DISTINCT FROM p_sejours.tiers_payant_2_id OR w_sejours.tiers_payant_22_id IS DISTINCT FROM p_sejours.tiers_payant_22_id OR w_sejours.est_budget_global IS DISTINCT FROM p_sejours.est_budget_global OR w_sejours.date_groupage IS DISTINCT FROM p_sejours.date_groupage OR w_sejours.ghs_id IS DISTINCT FROM p_sejours.ghs_id OR w_sejours.ghm_id IS DISTINCT FROM p_sejours.ghm_id OR w_sejours.ghs_bebe1_id IS DISTINCT FROM p_sejours.ghs_bebe1_id OR w_sejours.ghs_bebe2_id IS DISTINCT FROM p_sejours.ghs_bebe2_id OR w_sejours.ghs_bebe3_id IS DISTINCT FROM p_sejours.ghs_bebe3_id OR w_sejours.code_postal_id IS DISTINCT FROM p_sejours.code_postal_id OR w_sejours.risque_id IS DISTINCT FROM p_sejours.risque_id ); INSERT INTO activite[PX].p_sejours ( finess, no_sejour, code_original, no_patient, date_entree, heure_entree, date_sortie, heure_sortie, code_sexe, age, code_sorti, code_prevu, type_sejour, lieu_sortie_id, medecin_sejour_id, ghs_id, ghm_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, date_groupage, code_cp_demandee, mode_traitement_id, mode_entree, provenance, mode_sortie, destination, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, est_budget_global, code_postal_id, risque_id ) SELECT w_sejours.finess, w_sejours.no_sejour, w_sejours.code_original, w_sejours.no_patient, w_sejours.date_entree, w_sejours.heure_entree, w_sejours.date_sortie, w_sejours.heure_sortie, w_sejours.code_sexe, w_sejours.age, w_sejours.code_sorti, w_sejours.code_prevu, w_sejours.type_sejour, w_sejours.lieu_sortie_id, w_sejours.medecin_sejour_id, w_sejours.ghs_id, w_sejours.ghm_id, w_sejours.ghs_bebe1_id, w_sejours.ghs_bebe2_id, w_sejours.ghs_bebe3_id, w_sejours.date_groupage, w_sejours.code_cp_demandee, w_sejours.mode_traitement_id, w_sejours.mode_entree, w_sejours.provenance, w_sejours.mode_sortie, w_sejours.destination, w_sejours.tiers_payant_0_id, w_sejours.tiers_payant_1_id, w_sejours.tiers_payant_2_id, w_sejours.tiers_payant_22_id, w_sejours.est_budget_global, w_sejours.code_postal_id, w_sejours.risque_id FROM w_sejours LEFT JOIN activite[PX].p_sejours ON (w_sejours.no_sejour = p_sejours.no_sejour) WHERE p_sejours.no_sejour IS NULL; DELETE FROM activite[PX].p_sejours WHERE no_sejour NOT IN (SELECT w_ADDOL1 FROM w_ADP01 WHERE w_DOL1UN = '1' AND w_ADCANN = ''); -- Séjours ignorés UPDATE activite[PX].p_sejours SET etat = 'I' FROM activite.t_sejour WHERE t_sejour.no_sejour = p_sejours.no_sejour AND est_ignore = '1' AND etat <> 'I' AND '[PX]' = ''; UPDATE activite[PX].p_sejours SET etat = '' WHERE etat = 'I' AND no_sejour NOT IN (SELECT no_sejour FROM activite.t_sejour WHERE est_ignore = '1') AND '[PX]' = ''; -- Médecin séjour forcé UPDATE activite[PX].p_sejours SET medecin_sejour_id = t_sejour.medecin_sejour_id FROM activite.t_sejour WHERE t_sejour.no_sejour = p_sejours.no_sejour AND t_sejour.medecin_sejour_id <> 0 AND p_sejours.medecin_sejour_id IS DISTINCT FROM t_sejour.medecin_sejour_id AND '[PX]' = ''; -- recréation index -- Suppression tables de travail DROP TABLE IF EXISTS w_ADP01_keys; DROP TABLE IF EXISTS w_ADP01_SEJOUR; DROP TABLE IF EXISTS w_sejours; -- transferts d'établissements INSERT INTO base.t_etablissements(code, texte, texte_court) SELECT DDNDOP, DDNDOP, DDNDOP FROM prod_shs.[ACTIVITESCHEMA]_DDP01 WHERE DDNDOP NOT IN (SELECT code FROM base.t_etablissements) GROUP BY 1,2,3 ; -- transferts d'établissements INSERT INTO base.t_etablissements(code, texte, texte_court) SELECT DDNDOD, DDNDOD, DDNDOD FROM prod_shs.[ACTIVITESCHEMA]_DDP01 WHERE DDNDOD NOT IN (SELECT code FROM base.t_etablissements) GROUP BY 1,2,3 ; INSERT INTO activite[PX].p_sejours_transferts (sejour_id, provenance_id, destination_id) SELECT p_sejours.oid, (MAX(ARRAY[DDDCPL::text,provenance.oid::text]))[2]::bigint AS provenance_id, (MAX(ARRAY[DDDCPL::text,destination.oid::text]))[2]::bigint AS destination_id FROM activite[PX].p_sejours JOIN prod_shs.[ACTIVITESCHEMA]_DDP01 ON DDDOSS = no_sejour LEFT JOIN base.t_etablissements provenance ON DDNDOP = provenance.code AND DDNDOP != '' LEFT JOIN base.t_etablissements destination ON DDNDOD = destination.code AND DDNDOD != '' WHERE 1!=1 OR DDNDOD != '' OR DDNDOP != '' GROUP BY 1 ; -- Assurance INSERT INTO activite[PX].p_sejours_assurance( sejour_id, nom_assure, prenom_assure, tiers_payant_0_id, tiers_payant_1_id, matricule_1, tiers_payant_2_id, matricule_2, tiers_payant_22_id, matricule_22 ) SELECT p_sejours.oid AS sejour_id, MAX(w_ADNOM1) AS nom_assure, MAX(w_ADPREM) prenom_assure, MAX(p_sejours.tiers_payant_0_id), MAX(p_sejours.tiers_payant_1_id), MAX(substr(w_ADMTSS,1,13)), MAX(p_sejours.tiers_payant_2_id), MAX(CASE WHEN w_ADMTMC <> '' THEN w_ADMTMC ELSE substr(w_ADMTSS,1,13) END) AS matricule_2, MAX(p_sejours.tiers_payant_22_id), MAX(''::text) AS matricule_2 FROM w_ADP01 JOIN activite[PX].p_sejours ON code_original = w_ADDOSSDCPL GROUP BY 1 ; ]]> COALESCE(t_services_facturation.oid,0) OR t_lieux.mode_traitement_id <> COALESCE(t_services_facturation.mode_traitement_id,0) ) ; UPDATE activite[PX].t_lieux SET activite_id = COALESCE(t_activites.oid,0) FROM activite[PX].t_activites WHERE code_original_2 = t_activites.code_original AND t_lieux.activite_id <> COALESCE(t_activites.oid,0) ; UPDATE activite[PX].t_lieux SET lit_id = COALESCE(t_lits.oid,0) FROM activite[PX].t_lits WHERE code_original_4 = t_lits.code_original AND t_lieux.lit_id <> COALESCE(t_lits.oid,0) ; DROP TABLE IF EXISTS w_SOP01_2; CREATE TEMP TABLE w_SOP01_2 AS SELECT w_ADDOL1, w_ADDTHREN, w_ADDTHRSO, w_ADQURG, w_SODOSS, w_SODCPL, w_SOCSER, w_SOACTI, w_SOETAG, w_SOCHLT, w_SOMEDS, w_SODTSS, w_SOHRSO, w_SODTE1, w_SOHREN, '1'::text AS w_QENTREE, w_SODTHREN, '1'::text AS w_QSORTIE, w_SODTHRSO, ''::text AS w_SOCSER_before, ''::text AS w_SOETAG_before, ''::text AS w_SOCSER_next, ''::text AS w_SOETAG_next, COALESCE(t_lieux.oid,0) AS lieu_id FROM w_SOP01 LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = w_SOCSER AND code_original_2 = w_SOACTI AND code_original_3 = w_SOETAG AND code_original_4 = w_SOETAG || '|' || w_SOCHLT ) ORDER BY w_ADDOL1, w_SODTHRSO; DROP SEQUENCE IF EXISTS w_SOP01_seq; CREATE TEMP SEQUENCE w_SOP01_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; DROP TABLE IF EXISTS w_SOP01; CREATE TEMP TABLE w_SOP01 AS SELECT nextval('w_SOP01_seq'::regclass) AS sequence, w_ADDOL1, w_ADDTHREN, w_ADDTHRSO, w_ADQURG, w_SODOSS, w_SODCPL, w_SOCSER, w_SOACTI, w_SOETAG, w_SOCHLT, w_SOMEDS, w_SODTSS, w_SOHRSO, w_SODTE1, w_SOHREN, w_QENTREE, w_SODTHREN, w_QSORTIE, w_SODTHRSO, w_SOCSER_before, w_SOETAG_before, w_SOCSER_next, w_SOETAG_next, lieu_id FROM w_SOP01_2 ORDER BY w_ADDOL1, w_SODTHRSO; -- Correction mouvements erronés UPDATE w_SOP01 SET w_SODTHREN = w_SOP01_before.w_SODTHRSO + interval '1 SECOND' FROM w_SOP01 w_SOP01_before WHERE w_SOP01.w_ADDOL1 = w_SOP01_before.w_ADDOL1 AND w_SOP01.sequence = w_SOP01_before.sequence + 1; DROP TABLE IF EXISTS w_SOP01_SEJOUR; CREATE TEMP TABLE w_SOP01_SEJOUR AS SELECT w_ADDOL1 FROM w_SOP01 GROUP BY 1 HAVING count(*) > 1; DELETE FROM w_SOP01 USING w_SOP01_SEJOUR WHERE w_SOP01_SEJOUR.w_ADDOL1 = w_SOP01.w_ADDOL1 AND w_SODTHREN > w_ADDTHRSO; DELETE FROM w_SOP01 USING w_SOP01_SEJOUR WHERE w_SOP01_SEJOUR.w_ADDOL1 = w_SOP01.w_ADDOL1 AND w_SODTHRSO < w_ADDTHREN ; -- DROP TABLE IF EXISTS w_SOP01_SEJOUR; CREATE TEMP TABLE w_SOP01_SEJOUR AS SELECT w_ADDOL1, MIN(sequence) AS sequence_1, MAX(sequence) AS sequence_9 FROM w_SOP01 GROUP BY 1; UPDATE w_SOP01 SET w_SODTHRSO = w_ADDTHRSO FROM w_SOP01_SEJOUR WHERE w_SOP01.w_ADDOL1 = w_SOP01_SEJOUR.w_ADDOL1 AND w_SOP01.sequence = w_SOP01_SEJOUR.sequence_9 AND w_SODTHRSO <> w_ADDTHRSO AND (w_SOP01_SEJOUR.sequence_1 <> w_SOP01_SEJOUR.sequence_9 OR (w_SOP01_SEJOUR.sequence_1 = w_SOP01_SEJOUR.sequence_9 AND w_SODTHRSO < w_ADDTHRSO)); UPDATE w_SOP01 SET w_SODTHREN = w_ADDTHREN FROM w_SOP01_SEJOUR WHERE w_SOP01.w_ADDOL1 = w_SOP01_SEJOUR.w_ADDOL1 AND w_SOP01.sequence = w_SOP01_SEJOUR.sequence_1 AND w_SODTHREN <> w_ADDTHREN; UPDATE w_SOP01 SET w_QSORTIE = '0', w_SOCSER_next = w_SOP01_next.w_SOCSER, w_SOETAG_next = w_SOP01_next.w_SOETAG FROM w_SOP01 w_SOP01_next WHERE w_SOP01.w_ADDOL1 = w_SOP01_next.w_ADDOL1 AND w_SOP01.sequence = w_SOP01_next.sequence - 1; UPDATE w_SOP01 SET w_QENTREE = '0', w_SODTHREN = w_SOP01_before.w_SODTHRSO + interval '1 SECOND', w_SOCSER_before = w_SOP01_before.w_SOCSER, w_SOETAG_before = w_SOP01_before.w_SOETAG FROM w_SOP01 w_SOP01_before WHERE w_SOP01.w_ADDOL1 = w_SOP01_before.w_ADDOL1 AND w_SOP01.sequence = w_SOP01_before.sequence + 1; -- -- Génération fichier de base DROP TABLE IF EXISTS w_mouvements_sejour; CREATE TEMP TABLE w_mouvements_sejour AS SELECT w_SOP01.w_ADDOL1, w_SOP01.w_ADDOL1 AS no_sejour, p_sejours.oid AS sejour_id, sequence, p_calendrier.date, p_calendrier.jour_semaine, p_calendrier.is_weekend, CASE WHEN p_calendrier.date = date(w_SODTHREN) THEN extract('hour' from w_SODTHREN) * 10000 + extract('minute' from w_SODTHREN) * 100 + extract('second' from w_SODTHREN) ELSE 0 END AS heure_debut, CASE WHEN p_calendrier.date = date(w_SODTHRSO) THEN extract('hour' from w_SODTHRSO) * 10000 + extract('minute' from w_SODTHRSO) * 100 + extract('second' from w_SODTHRSO) ELSE 240000 END AS heure_fin, CASE WHEN w_QENTREE = '1' AND p_calendrier.date = date(w_SODTHREN) AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_entrees_directes, CASE WHEN w_QSORTIE = '1' AND p_calendrier.date = date(w_SODTHRSO) AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_sorties_directes, CASE WHEN w_QENTREE = '1' AND p_calendrier.date = date(w_SODTHREN) AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_entree, CASE WHEN w_QSORTIE = '1' AND p_calendrier.date = date(w_SODTHRSO) AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_sortie, CASE WHEN p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_hospitalisation, CASE WHEN w_QENTREE = '1' AND p_calendrier.date = date(w_SODTHREN) AND p_sejours.type_sejour = '2' THEN 1 ELSE 0 END AS nb_ambulatoires, CASE WHEN w_QENTREE = '1' AND p_calendrier.date = date(w_SODTHREN) AND p_sejours.type_sejour = '3' THEN 1 ELSE 0 END AS nb_externes, CASE WHEN w_ADQURG = '1' AND p_calendrier.date = date(w_SODTHREN) AND w_QENTREE = '1' THEN 1 ELSE 0 END AS nb_urgences, 0 as nb_seances, CASE WHEN p_calendrier.date = date(w_SODTHREN) AND p_sejours.type_sejour = '1' AND w_QENTREE <> '1' AND w_SOCSER <> w_SOCSER_before THEN 1 ELSE 0 END AS nb_entrees_mutation_service, CASE WHEN p_calendrier.date = date(w_SODTHRSO) AND p_sejours.type_sejour = '1' AND w_QSORTIE <> '1' AND w_SOCSER <> w_SOCSER_next THEN 1 ELSE 0 END AS nb_sorties_mutation_service, CASE WHEN p_calendrier.date = date(w_SODTHREN) AND p_sejours.type_sejour = '1' AND w_QENTREE <> '1' AND w_SOETAG <> w_SOETAG_before THEN 1 ELSE 0 END AS nb_entrees_mutation_etage, CASE WHEN p_calendrier.date = date(w_SODTHRSO) AND p_sejours.type_sejour = '1' AND w_QSORTIE <> '1' AND w_SOETAG <> w_SOETAG_next THEN 1 ELSE 0 END AS nb_sorties_mutation_etage, 0 AS nb_entrees_mutation_activite, 0 AS nb_sorties_mutation_activite, 0 AS nb_entrees_mutation_unite_medicale, 0 AS nb_sorties_mutation_unite_medicale, CASE WHEN p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_jours_js_inclus, CASE WHEN p_sejours.type_sejour = '1' AND (p_calendrier.date <> date(p_sejours.date_sortie) OR p_sejours.code_sorti <> '1') THEN 1 ELSE 0 END AS nb_jours_js_non_inclus, CASE WHEN p_sejours.type_sejour = '1' AND t_lits.chambre_particuliere = 'O' THEN '1' WHEN p_sejours.type_sejour = '2' AND t_lits.chambre_particuliere = 'O' AND w_QENTREE = '1' AND p_calendrier.date = date(w_SODTHREN) THEN '1' ELSE '0' END AS est_chambre_particuliere, CASE WHEN p_sejours.type_sejour = '1' AND t_lits.chambre_particuliere = 'O' THEN 1 WHEN p_sejours.type_sejour = '2' AND t_lits.chambre_particuliere = 'O' AND w_QENTREE = '1' AND p_calendrier.date = date(w_SODTHREN) THEN 1 ELSE 0 END AS nb_chambres_particulieres, 0 AS nb_bebes, lieu_id, p_sejours.medecin_sejour_id as medecin_sejour_id FROM w_SOP01 JOIN activite[PX].p_sejours ON w_SOP01.w_ADDOL1 = p_sejours.no_sejour AND p_sejours.etat = '' JOIN activite[PX].t_lits ON w_SOETAG || '|' || w_SOCHLT = t_lits.code_original JOIN base.p_calendrier ON (p_calendrier.date BETWEEN date(w_SODTHREN) AND date(w_SODTHRSO) AND p_calendrier.date <= now() ) WHERE p_sejours.code_prevu <> '1' ORDER BY sequence, p_calendrier.date; DELETE FROM w_mouvements_sejour WHERE heure_fin < heure_debut ; CREATE INDEX w_mouvements_sejour_i1 ON w_mouvements_sejour USING btree (no_sejour); -- Séances d'après actes DROP TABLE IF EXISTS w_MFP01_seances; CREATE TEMP TABLE w_MFP01_seances AS SELECT w_ADDOL1, COALESCE(to_date(to_char(MFDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, SUM(CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END) AS MFNBRE FROM prod_shs.[ACTIVITESCHEMA]_MFP01CLI JOIN w_ADP01_sejours_modifies w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = '') WHERE (MFRUPR = 189 OR MFCCLE IN ('D01', 'D02', 'D03', 'D04', 'D05', 'D06', 'D07', 'D08', 'D09', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'D19')) GROUP BY 1,2; INSERT INTO w_MFP01_seances SELECT w_ADDOL1, COALESCE(to_date(to_char(ACDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, SUM(CASE WHEN w_ADADAV IN ('2', '4', '6') AND ACNBRE > 0 THEN 0 - ACNBRE ELSE ACNBRE END) AS ACNBRE FROM prod_shs.[ACTIVITESCHEMA]_ACP01 JOIN w_ADP01_sejours_modifies w_ADP01 ON (ACDOSS = w_ADDOSS AND ACDCPL = w_ADDCPL AND W_ADCFAC <> '1' AND w_CODENV = '') WHERE W_ADCFAC <> '1' AND ACCCLE IN ('K', 'ATM') AND ACCNAT ='DIA' AND ACCCLH = '2' AND ACCANN = '1' GROUP BY 1,2; INSERT INTO w_MFP01_seances SELECT w_ADDOL1, COALESCE(to_date(to_char(MFDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, SUM(CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END) AS MFNBRE FROM prod_shs.[ACTIVITESCHEMA]p_MFP01CLIP JOIN w_ADP01_sejours_modifies w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = 'P') WHERE (MFRUPR = 189 OR MFCCLE IN ('D01', 'D02', 'D03', 'D04', 'D05', 'D06', 'D07', 'D08', 'D09', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'D19')) GROUP BY 1,2; INSERT INTO w_MFP01_seances SELECT w_ADDOL1, COALESCE(to_date(to_char(MFDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, SUM(CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END) AS MFNBRE FROM prod_shs.[ACTIVITESCHEMA]h_MFP01CLIH JOIN w_ADP01_sejours_modifies w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = 'H') WHERE (MFRUPR = 189 OR MFCCLE IN ('D01', 'D02', 'D03', 'D04', 'D05', 'D06', 'D07', 'D08', 'D09', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'D19')) GROUP BY 1,2; CREATE INDEX w_MFP01_seances_i1 ON w_MFP01_seances USING btree (w_ADDOL1); UPDATE w_mouvements_sejour SET nb_seances = MFNBRE FROM w_MFP01_seances, activite[PX].t_lieux JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid WHERE w_MFP01_seances.w_ADDOL1 = w_mouvements_sejour.no_sejour AND date(MFDTA1_date) = w_mouvements_sejour.date AND lieu_id = t_lieux.oid AND t_services_facturation.type_t2a NOT IN ('2','3'); -- seances selon GHS pmsi DROP TABLE IF EXISTS w_sejours_seances; CREATE TEMP TABLE w_sejours_seances AS SELECT p_sejours.no_sejour, date_entree AS date, 1 AS nb_seances FROM activite[PX].p_sejours JOIN activite[PX].t_lieux On lieu_sortie_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON t_services_facturation.oid = service_facturation_id JOIN base.t_ghs ON p_sejours.ghs_id = t_ghs.oid JOIN base.t_ghm ON p_sejours.ghm_id = t_ghm.oid WHERE (date_sortie - date_entree) <= 1 AND p_sejours.type_sejour <> '5' AND t_services_facturation.type_sejour NOT IN ('2','0sauf5') AND (t_ghs.texte ilike '%séance%' OR t_ghm.code LIKE '28%'); CREATE INDEX w_sejours_seances_i1 ON w_sejours_seances USING btree (no_sejour); UPDATE w_mouvements_sejour SET nb_seances = w_sejours_seances.nb_seances FROM w_sejours_seances WHERE w_sejours_seances.no_sejour = w_mouvements_sejour.no_sejour AND w_sejours_seances.date = w_mouvements_sejour.date AND w_mouvements_sejour.nb_seances IS DISTINCT FROM w_sejours_seances.nb_seances; -- Séances non trouvées sur séjours forcés DROP TABLE IF EXISTS w_sejours_sans_seance; CREATE TEMP TABLE w_sejours_sans_seance AS SELECT w_mouvements_sejour.no_sejour, p_sejours.date_entree, MIN(CASE WHEN w_mouvements_sejour.date = date_entree THEN heure_debut ELSE 999999 END) AS heure_debut FROM w_mouvements_sejour JOIN activite[PX].p_sejours ON w_mouvements_sejour.no_sejour = p_sejours.no_sejour JOIN activite[PX].p_patients ON p_sejours.no_patient = p_patients.no_patient WHERE type_sejour = '5' GROUP BY 1,2 HAVING SUM(nb_seances) = 0; CREATE INDEX w_sejours_sans_seance_i1 ON w_sejours_sans_seance USING btree (no_sejour); UPDATE w_mouvements_sejour SET nb_seances = 1 FROM w_sejours_sans_seance WHERE w_mouvements_sejour.no_sejour = w_sejours_sans_seance.no_sejour AND w_mouvements_sejour.date = w_sejours_sans_seance.date_entree AND w_mouvements_sejour.heure_debut = w_sejours_sans_seance.heure_debut; -- Bébés DROP TABLE IF EXISTS w_MFP01_bebes; CREATE TEMP TABLE w_MFP01_bebes AS SELECT w_ADDOL1, MAX(CASE WHEN t_actes.texte ILIKE '%multiple%' THEN 2 ELSE 1 END) AS nb_bebes FROM prod_shs.[ACTIVITESCHEMA]_MFP01CCAM JOIN w_ADP01_sejours_modifies w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = '') JOIN base.t_actes ON substring(MFCCAM, 1, 7) = t_actes.code AND MFCCAM LIKE 'JQG%' AND t_actes.texte ILIKE 'accouchement%' WHERE MFDCPL = 0 AND MFCCAC = '1' GROUP BY 1; INSERT INTO w_MFP01_bebes SELECT w_ADDOL1, MAX(CASE WHEN t_actes.texte ILIKE '%multiple%' THEN 2 ELSE 1 END) AS nb_bebes FROM prod_shs.[ACTIVITESCHEMA]_ACP01 JOIN w_ADP01_sejours_modifies w_ADP01 ON (ACDOSS = w_ADDOSS AND ACDCPL = w_ADDCPL AND W_ADCFAC <> '1' AND w_CODENV = '') JOIN base.t_actes ON substring(ACCCAM, 1, 7) = t_actes.code AND ACCCAM LIKE 'JQG%' AND t_actes.texte ILIKE 'accouchement%' WHERE ACCCLH = '2' AND ACDCPL = 0 AND ACCCAC = '1' GROUP BY 1; INSERT INTO w_MFP01_bebes SELECT w_ADDOL1, MAX(CASE WHEN t_actes.texte ILIKE '%multiple%' THEN 2 ELSE 1 END) AS nb_bebes FROM prod_shs.[ACTIVITESCHEMA]p_MFP01CCAMP JOIN w_ADP01_sejours_modifies w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = '') JOIN base.t_actes ON substring(MFCCAM, 1, 7) = t_actes.code AND MFCCAM LIKE 'JQG%' AND t_actes.texte ILIKE 'accouchement%' WHERE MFDCPL = 0 AND MFCCAC = '1' GROUP BY 1; INSERT INTO w_MFP01_bebes SELECT w_ADDOL1, MAX(CASE WHEN t_actes.texte ILIKE '%multiple%' THEN 2 ELSE 1 END) AS nb_bebes FROM prod_shs.[ACTIVITESCHEMA]h_MFP01CCAMH JOIN w_ADP01_sejours_modifies w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = '') JOIN base.t_actes ON substring(MFCCAM, 1, 7) = t_actes.code AND MFCCAM LIKE 'JQG%' AND t_actes.texte ILIKE 'accouchement%' WHERE MFDCPL = 0 AND MFCCAC = '1' GROUP BY 1; CREATE INDEX w_MFP01_bebes_i1 ON w_MFP01_bebes USING btree (w_ADDOL1); UPDATE w_mouvements_sejour SET nb_bebes = w_MFP01_bebes.nb_bebes FROM w_MFP01_bebes WHERE w_MFP01_bebes.w_ADDOL1 = w_mouvements_sejour.no_sejour AND (nb_entrees_directes = 1 OR nb_externes = 1 OR nb_ambulatoires = 1); -- génération écarts DELETE FROM w_mouvements_sejour WHERE nb_entrees_directes = 0 AND nb_sorties_directes = 0 AND est_jour_hospitalisation <> '1' AND nb_ambulatoires = 0 AND nb_externes = 0 AND nb_urgences = 0 AND nb_seances = 0 AND nb_entrees_mutation_service = 0 AND nb_sorties_mutation_service = 0 AND nb_entrees_mutation_etage = 0 AND nb_sorties_mutation_etage = 0 AND nb_entrees_mutation_activite = 0 AND nb_sorties_mutation_activite = 0 AND nb_entrees_mutation_unite_medicale = 0 AND nb_sorties_mutation_unite_medicale = 0 AND nb_jours_js_inclus = 0 AND nb_jours_js_non_inclus = 0 AND est_chambre_particuliere <> '1' AND nb_chambres_particulieres = 0 AND nb_bebes = 0; DELETE FROM activite[PX].p_mouvements_sejour WHERE no_sejour NOT IN (SELECT w_ADDOL1 FROM w_ADP01 WHERE w_DOL1UN = '1' AND w_ADCANN = ''); DELETE FROM activite[PX].p_mouvements_sejour WHERE no_sejour IN (SELECT w_ADDOL1 FROM w_ADP01_sejours_modifies WHERE w_DOL1UN = '1' AND w_ADCANN = ''); SELECT base.cti_disable_index('activite[PX]', 'i_mouvements_sejour_1'); SELECT base.cti_disable_index('activite[PX]', 'i_mouvements_sejour_2'); SELECT base.cti_disable_index('activite[PX]', 'i_mouvements_sejour_3'); SELECT base.cti_disable_index('activite[PX]', 'i_mouvements_sejour_4'); SELECT base.cti_disable_index('activite[PX]', 'i_mouvements_sejour_5'); INSERT INTO activite[PX].p_mouvements_sejour( sejour_id, no_sejour, date, nb_jours_js_non_inclus, lieu_id, nb_entrees_directes, nb_sorties_directes, nb_urgences, nb_externes, nb_ambulatoires, medecin_sejour_id, nb_jours_js_inclus, nb_seances, nb_entrees_mutation_service, nb_sorties_mutation_service, nb_entrees_mutation_activite, nb_sorties_mutation_activite, nb_entrees_mutation_etage, nb_sorties_mutation_etage, nb_chambres_particulieres, heure_debut, heure_fin, est_jour_entree, est_jour_sortie, est_jour_hospitalisation, est_chambre_particuliere, nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes, jour_semaine, is_weekend) SELECT sejour_id, no_sejour, date,nb_jours_js_non_inclus, lieu_id, nb_entrees_directes, nb_sorties_directes, nb_urgences, nb_externes, nb_ambulatoires, medecin_sejour_id, nb_jours_js_inclus, nb_seances, nb_entrees_mutation_service, nb_sorties_mutation_service, nb_entrees_mutation_activite, nb_sorties_mutation_activite, nb_entrees_mutation_etage, nb_sorties_mutation_etage, nb_chambres_particulieres, heure_debut, heure_fin, est_jour_entree, est_jour_sortie, est_jour_hospitalisation, est_chambre_particuliere, nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes, jour_semaine, is_weekend FROM w_mouvements_sejour ORDER BY no_sejour, sequence; SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_1'); SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_2'); SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_3'); SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_4'); SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_5'); -- Suppression tables de travail DROP TABLE IF EXISTS w_SOP01; DROP TABLE IF EXISTS w_SOP01_2; DROP TABLE IF EXISTS w_mouvements_sejour; DROP TABLE IF EXISTS w_MFP01_seances; DROP TABLE IF EXISTS w_MFP01_bebes; UPDATE activite[PX].p_sejours SET type_sejour = '5' FROM activite[PX].t_lieux JOIN activite[PX].t_services_facturation ON t_services_facturation.oid = service_facturation_id WHERE lieu_sortie_id = t_lieux.oid AND p_sejours.type_sejour <> '5' AND p_sejours.type_sejour <> '1' AND t_services_facturation.type_sejour NOT IN ('2','0sauf5') AND no_sejour IN ( SELECT no_sejour FROM activite[PX].p_mouvements_sejour WHERE nb_seances > 0); UPDATE activite[PX].p_mouvements_sejour SET nb_externes = 0, nb_ambulatoires = 0 FROM activite[PX].p_sejours WHERE p_mouvements_sejour.no_sejour = p_sejours.no_sejour AND p_sejours.type_sejour = '5' AND ( nb_externes <> 0 OR nb_ambulatoires <> 0 ); ]]> 0) THEN '1' ELSE '0' END) AS FTCEXP_0, MAX(CASE WHEN FTTYPC = '0' THEN GREATEST(FTDTEX, w_ADDTFA) ELSE 0 END) AS FTDTEX_0, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '0' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_0_date, MAX(CASE WHEN FTTYPC = '0' THEN FTNBOR ELSE 0 END) AS FTNBOR_0, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_0_C, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_0_H, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_0_C, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_0_H, MAX(CASE WHEN FTTYPC = '1' THEN to_char(FTCCAI,'FM0000') ELSE NULL END) AS FTCCAI_1, MAX(CASE WHEN FTTYPC = '1' THEN FTCEXP ELSE '' END) AS FTCEXP_1, MAX(CASE WHEN FTTYPC = '1' THEN FTDTEX ELSE 0 END) AS FTDTEX_1, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '1' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_1_date, MAX(CASE WHEN FTTYPC = '1' THEN FTNBOR ELSE 0 END) AS FTNBOR_1, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_1_C, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_1_H, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_1_C, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_1_H, MAX(CASE WHEN FTTYPC = '2' THEN to_char(FTCCAI,'FM0000') ELSE NULL END) AS FTCCAI_2, MAX(CASE WHEN FTTYPC = '2' THEN FTCEXP ELSE '' END) AS FTCEXP_2, MAX(CASE WHEN FTTYPC = '2' THEN FTDTEX ELSE 0 END) AS FTDTEX_2, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '2' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_2_date, MAX(CASE WHEN FTTYPC = '2' THEN FTNBOR ELSE 0 END) AS FTNBOR_2, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_2_C, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_2_H, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_2_C, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_2_H, MAX(CASE WHEN FTTYPC = '3' THEN to_char(FTCCAI,'FM0000') ELSE NULL END) AS FTCCAI_22, MAX(CASE WHEN FTTYPC = '3' THEN FTCEXP ELSE '' END) AS FTCEXP_22, MAX(CASE WHEN FTTYPC = '3' THEN FTDTEX ELSE 0 END) AS FTDTEX_22, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '3' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_22_date, MAX(CASE WHEN FTTYPC = '3' THEN FTNBOR ELSE 0 END) AS FTNBOR_22, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_22_C, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_22_H, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_22_C, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_22_H FROM prod_shs.[ACTIVITESCHEMA]_FTP01 JOIN w_ADP01_factures_modifiees w_ADP01 ON (FTDOSS = w_ADDOSS AND FTDCPL = w_ADDCPL AND w_CODENV = '') GROUP BY 1; INSERT INTO w_FTP01_GROUP SELECT w_ADDOSSDCPL, MAX(CASE WHEN FTTYPC = '0' AND (FTCEXP = '1' OR FTDTEX <> 0) THEN '1' ELSE '0' END) AS FTCEXP_0, MAX(CASE WHEN FTTYPC = '0' THEN GREATEST(FTDTEX, w_ADDTFA) ELSE 0 END) AS FTDTEX_0, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '0' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_0_date, MAX(CASE WHEN FTTYPC = '0' THEN FTNBOR ELSE 0 END) AS FTNBOR_0, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_0_C, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_0_H, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_0_C, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_0_H, MAX(CASE WHEN FTTYPC = '1' THEN to_char(FTCCAI,'FM0000') ELSE NULL END) AS FTCCAI_1, MAX(CASE WHEN FTTYPC = '1' THEN FTCEXP ELSE '' END) AS FTCEXP_1, MAX(CASE WHEN FTTYPC = '1' THEN FTDTEX ELSE 0 END) AS FTDTEX_1, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '1' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_1_date, MAX(CASE WHEN FTTYPC = '1' THEN FTNBOR ELSE 0 END) AS FTNBOR_1, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_1_C, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_1_H, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_1_C, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_1_H, MAX(CASE WHEN FTTYPC = '2' THEN to_char(FTCCAI,'FM0000') ELSE NULL END) AS FTCCAI_2, MAX(CASE WHEN FTTYPC = '2' THEN FTCEXP ELSE '' END) AS FTCEXP_2, MAX(CASE WHEN FTTYPC = '2' THEN FTDTEX ELSE 0 END) AS FTDTEX_2, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '2' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_2_date, MAX(CASE WHEN FTTYPC = '2' THEN FTNBOR ELSE 0 END) AS FTNBOR_2, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_2_C, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_2_H, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_2_C, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_2_H, MAX(CASE WHEN FTTYPC = '3' THEN to_char(FTCCAI,'FM0000') ELSE NULL END) AS FTCCAI_22, MAX(CASE WHEN FTTYPC = '3' THEN FTCEXP ELSE '' END) AS FTCEXP_22, MAX(CASE WHEN FTTYPC = '3' THEN FTDTEX ELSE 0 END) AS FTDTEX_22, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '3' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_22_date, MAX(CASE WHEN FTTYPC = '3' THEN FTNBOR ELSE 0 END) AS FTNBOR_22, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_22_C, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_22_H, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_22_C, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_22_H FROM prod_shs.[ACTIVITESCHEMA]p_FTP01P JOIN w_ADP01_factures_modifiees w_ADP01 ON (FTDOSS = w_ADDOSS AND FTDCPL = w_ADDCPL AND w_CODENV = 'P') GROUP BY 1; INSERT INTO w_FTP01_GROUP SELECT w_ADDOSSDCPL, MAX(CASE WHEN FTTYPC = '0' AND (FTCEXP = '1' OR FTDTEX <> 0) THEN '1' ELSE '0' END) AS FTCEXP_0, MAX(CASE WHEN FTTYPC = '0' THEN GREATEST(FTDTEX, w_ADDTFA) ELSE 0 END) AS FTDTEX_0, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '0' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_0_date, MAX(CASE WHEN FTTYPC = '0' THEN FTNBOR ELSE 0 END) AS FTNBOR_0, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_0_C, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_0_H, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_0_C, SUM(CASE WHEN FTTYPC = '0' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_0_H, MAX(CASE WHEN FTTYPC = '1' THEN to_char(FTCCAI,'FM0000') ELSE NULL END) AS FTCCAI_1, MAX(CASE WHEN FTTYPC = '1' THEN FTCEXP ELSE '' END) AS FTCEXP_1, MAX(CASE WHEN FTTYPC = '1' THEN FTDTEX ELSE 0 END) AS FTDTEX_1, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '1' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_1_date, MAX(CASE WHEN FTTYPC = '1' THEN FTNBOR ELSE 0 END) AS FTNBOR_1, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_1_C, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_1_H, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_1_C, SUM(CASE WHEN FTTYPC = '1' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_1_H, MAX(CASE WHEN FTTYPC = '2' THEN to_char(FTCCAI,'FM0000') ELSE NULL END) AS FTCCAI_2, MAX(CASE WHEN FTTYPC = '2' THEN FTCEXP ELSE '' END) AS FTCEXP_2, MAX(CASE WHEN FTTYPC = '2' THEN FTDTEX ELSE 0 END) AS FTDTEX_2, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '2' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_2_date, MAX(CASE WHEN FTTYPC = '2' THEN FTNBOR ELSE 0 END) AS FTNBOR_2, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_2_C, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_2_H, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_2_C, SUM(CASE WHEN FTTYPC = '2' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_2_H, MAX(CASE WHEN FTTYPC = '3' THEN to_char(FTCCAI,'FM0000') ELSE NULL END) AS FTCCAI_22, MAX(CASE WHEN FTTYPC = '3' THEN FTCEXP ELSE '' END) AS FTCEXP_22, MAX(CASE WHEN FTTYPC = '3' THEN FTDTEX ELSE 0 END) AS FTDTEX_22, COALESCE(to_date(to_char(MAX(CASE WHEN FTTYPC = '3' THEN FTDTEX ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS FTDTEX_22_date, MAX(CASE WHEN FTTYPC = '3' THEN FTNBOR ELSE 0 END) AS FTNBOR_22, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS FTMTFA_22_C, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS FTMTFA_22_H, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '1' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_22_C, SUM(CASE WHEN FTTYPC = '3' AND FTCCLH = '2' THEN FTMTRG + FTMTRM + FTMTOD ELSE 0 END) AS FTMTRG_22_H FROM prod_shs.[ACTIVITESCHEMA]h_FTP01H JOIN w_ADP01_factures_modifiees w_ADP01 ON (FTDOSS = w_ADDOSS AND FTDCPL = w_ADDCPL AND w_CODENV = 'H') GROUP BY 1; ALTER TABLE w_FTP01_GROUP ADD CONSTRAINT w_FTP01_GROUP_pkey PRIMARY KEY(w_ADDOSSDCPL); DROP TABLE IF EXISTS w_MCP01_GROUP; CREATE TEMP TABLE w_MCP01_GROUP AS SELECT w_ADDOSSDCPL, COALESCE(to_date(to_char(MAX(CASE WHEN MCCPTE = 41110000 OR MCCPTE = 41910000 THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_0_C_date, COALESCE(to_date(to_char(MAX(CASE WHEN MCCPTE = 41210000 OR MCCPTE = 41920000 THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_0_H_date, COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41110001 AND 41111999) OR (MCCPTE BETWEEN 41113000 AND 41114999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_1_C_date , COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41210001 AND 41211999) OR (MCCPTE BETWEEN 41213000 AND 41214999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_1_H_date , COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41112001 AND 41112999) OR (MCCPTE BETWEEN 41115000 AND 41119999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_2_C_date , COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41212001 AND 41212999) OR (MCCPTE BETWEEN 41215000 AND 41219999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_2_H_date FROM prod_shs.[ACTIVITESCHEMA]_MCP01ACTI JOIN w_ADP01_factures_modifiees w_ADP01 ON (MCDOSA = w_ADDOSS_A AND MCDCPA = w_ADDCPL_A AND w_CODENV = '') WHERE ((MCCPTE BETWEEN 41110000 AND 41119999) OR (MCCPTE BETWEEN 41210000 AND 41219999) OR (MCCPTE BETWEEN 41910000 AND 41920000)) AND MCDOSA != '' AND MCDOSA <> '00000000' AND MCCJAL >= 100 GROUP BY 1; INSERT INTO w_MCP01_GROUP SELECT w_ADDOSSDCPL, COALESCE(to_date(to_char(MAX(CASE WHEN MCCPTE = 41110000 OR MCCPTE = 41910000 THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_0_C_date, COALESCE(to_date(to_char(MAX(CASE WHEN MCCPTE = 41210000 OR MCCPTE = 41920000 THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_0_H_date, COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41110001 AND 41111999) OR (MCCPTE BETWEEN 41113000 AND 41114999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_1_C_date , COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41210001 AND 41211999) OR (MCCPTE BETWEEN 41213000 AND 41214999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_1_H_date , COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41112001 AND 41112999) OR (MCCPTE BETWEEN 41115000 AND 41119999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_2_C_date , COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41212001 AND 41212999) OR (MCCPTE BETWEEN 41215000 AND 41219999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_2_H_date FROM prod_shs.[ACTIVITESCHEMA]p_MCP01ACTIP JOIN w_ADP01_factures_modifiees w_ADP01 ON (MCDOSA = w_ADDOSS_A AND MCDCPA = w_ADDCPL_A AND w_CODENV = 'P') WHERE ((MCCPTE BETWEEN 41110000 AND 41119999) OR (MCCPTE BETWEEN 41210000 AND 41219999) OR (MCCPTE BETWEEN 41910000 AND 41920000)) AND MCDOSA != '' AND MCDOSA <> '00000000' AND MCCJAL >= 100 GROUP BY 1; INSERT INTO w_MCP01_GROUP SELECT w_ADDOSSDCPL, COALESCE(to_date(to_char(MAX(CASE WHEN MCCPTE = 41110000 OR MCCPTE = 41910000 THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_0_C_date, COALESCE(to_date(to_char(MAX(CASE WHEN MCCPTE = 41210000 OR MCCPTE = 41920000 THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_0_H_date, COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41110001 AND 41111999) OR (MCCPTE BETWEEN 41113000 AND 41114999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_1_C_date , COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41210001 AND 41211999) OR (MCCPTE BETWEEN 41213000 AND 41214999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_1_H_date , COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41112001 AND 41112999) OR (MCCPTE BETWEEN 41115000 AND 41119999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_2_C_date , COALESCE(to_date(to_char(MAX(CASE WHEN (MCCPTE BETWEEN 41212001 AND 41212999) OR (MCCPTE BETWEEN 41215000 AND 41219999) THEN MCDTEC ELSE 00010101 END),'FM00000000'),'YYYYMMDD'),'00010101') AS MCDTEC_2_H_date FROM prod_shs.[ACTIVITESCHEMA]h_MCP01ACTIH JOIN w_ADP01_factures_modifiees w_ADP01 ON (MCDOSA = w_ADDOSS_A AND MCDCPA = w_ADDCPL_A AND w_CODENV = 'H') WHERE ((MCCPTE BETWEEN 41110000 AND 41119999) OR (MCCPTE BETWEEN 41210000 AND 41219999) OR (MCCPTE BETWEEN 41910000 AND 41920000)) AND MCDOSA != '' AND MCDOSA <> '00000000' AND MCCJAL >= 100 GROUP BY 1; ALTER TABLE w_MCP01_GROUP ADD CONSTRAINT w_MCP01_GROUP_pkey PRIMARY KEY(w_ADDOSSDCPL); DROP TABLE IF EXISTS w_factures; CREATE TEMP TABLE w_factures AS SELECT COALESCE(p_factures.oid,nextval('activite[PX].s_factures'::regclass)) AS oid, p_sejours.oid AS sejour_id, w_ADDOL1 AS no_sejour, w_ADP01.w_ADDOSS, w_ADP01.w_ADDCPL, w_ADP01.w_ADDOSSDCPL AS no_facture, CASE WHEN w_ADADAV = '0' THEN w_ADP01.w_ADDOSSDCPL ELSE substr(w_ADP01.w_ADDOSSDCPL,1,9) || '00' END AS no_facture_reference, CASE WHEN w_ADADAV = '0' THEN COALESCE(p_factures.oid,0) ELSE 0 END AS facture_reference_id, ''::text AS no_facture_od_avoir, 0::bigint AS facture_od_avoir_id, w_ADP01.w_ADDTE1_date AS date_debut, w_ADP01.w_ADDTS1_date AS date_fin, p_sejours.ghs_id, p_sejours.ghs_bebe1_id, p_sejours.ghs_bebe2_id, p_sejours.ghs_bebe3_id, p_sejours.code_cp_demandee AS code_cp_demandee, CASE WHEN w_ADADAV IN ('2', '4', '6') THEN '1' WHEN w_ADADAV IN ('1', '3') THEN '2' WHEN w_ADADAV IN ('5') THEN '3' ELSE '0' END AS type_facture, CASE WHEN w_ADADAV IN ('2', '4', '6') THEN 1::numeric ELSE 0::numeric END AS nb_rejets, CASE WHEN w_ADPAD5 = '1' THEN '1' WHEN w_ADCFAC = '1' THEN '1' ELSE '0' END AS code_facture, CASE WHEN w_ADPAD5 = '1' OR w_ADCFAC = '1' THEN CASE WHEN w_ADDTFA_date <> '20991231' THEN w_ADDTFA_date ELSE w_ADDTS1_date END ELSE '20991231' END AS date_facture, w_ADCJVT AS code_vente, w_ADAAJV * 100 + w_ADMMJV AS mois_vente, w_ADDTJV_date AS date_vente, w_CODENV AS code_cloture, CASE WHEN p_sejours.ghs_id > 0 THEN 'GHS' ELSE '' END AS particularite_t2a, COALESCE(t_tiers_payant_0.oid,0) AS tiers_payant_0_id, COALESCE(t_tiers_payant_1.oid,0) AS tiers_payant_1_id, COALESCE(t_tiers_payant_2.oid,0) AS tiers_payant_2_id, COALESCE(t_tiers_payant_22.oid,0) AS tiers_payant_22_id, COALESCE(FTMTFA_0_C + FTMTFA_1_C + FTMTFA_2_C + FTMTFA_22_C,0) AS montant_facture_c, COALESCE(FTMTFA_0_H + FTMTFA_1_H + FTMTFA_2_H + FTMTFA_22_H,0) AS montant_facture_h, COALESCE(FTMTFA_0_C,0) AS montant_facture_0_c, COALESCE(FTMTFA_0_H,0) AS montant_facture_0_h, COALESCE(FTMTFA_1_C,0) AS montant_facture_1_c, COALESCE(FTMTFA_1_H,0) AS montant_facture_1_h, COALESCE(FTMTFA_2_C,0) AS montant_facture_2_c, COALESCE(FTMTFA_2_H,0) AS montant_facture_2_h, COALESCE(FTMTFA_22_C,0) AS montant_facture_22_c, COALESCE(FTMTFA_22_H,0) AS montant_facture_22_h, COALESCE(FTMTFA_0_C + FTMTFA_1_C + FTMTFA_2_C + FTMTFA_22_C,0) AS montant_comptabilise_c, COALESCE(FTMTFA_0_H + FTMTFA_1_H + FTMTFA_2_H + FTMTFA_22_H,0) AS montant_comptabilise_h, COALESCE(FTMTFA_0_C,0) AS montant_comptabilise_0_c, COALESCE(FTMTFA_0_H,0) AS montant_comptabilise_0_h, COALESCE(FTMTFA_1_C,0) AS montant_comptabilise_1_c, COALESCE(FTMTFA_1_H,0) AS montant_comptabilise_1_h, COALESCE(FTMTFA_2_C,0) AS montant_comptabilise_2_c, COALESCE(FTMTFA_2_H,0) AS montant_comptabilise_2_h, COALESCE(FTMTFA_22_C,0) AS montant_comptabilise_22_c, COALESCE(FTMTFA_22_H,0) AS montant_comptabilise_22_h, COALESCE(FTMTRG_0_C + FTMTRG_1_C + FTMTRG_2_C + FTMTRG_22_C,0) AS montant_regle_c, COALESCE(FTMTRG_0_H + FTMTRG_1_H + FTMTRG_2_H + FTMTRG_22_H,0) AS montant_regle_h, COALESCE(FTMTRG_0_C,0) AS montant_regle_0_c, COALESCE(FTMTRG_0_H,0) AS montant_regle_0_h, COALESCE(FTMTRG_1_C,0) AS montant_regle_1_c, COALESCE(FTMTRG_1_H,0) AS montant_regle_1_h, COALESCE(FTMTRG_2_C,0) AS montant_regle_2_c, COALESCE(FTMTRG_2_H,0) AS montant_regle_2_h, COALESCE(FTMTRG_22_C,0) AS montant_regle_22_c, COALESCE(FTMTRG_22_H,0) AS montant_regle_22_h, COALESCE(FTCEXP_0,'0') AS code_expedie_0, COALESCE(FTCEXP_1,'0') AS code_expedie_1, COALESCE(FTCEXP_2,'0') AS code_expedie_2, COALESCE(FTCEXP_22,'0') AS code_expedie_22, COALESCE(CASE WHEN FTDTEX_1_date > '00010101' THEN FTDTEX_1_date WHEN FTDTEX_2_date > '00010101' THEN FTDTEX_2_date WHEN FTDTEX_0_date > '00010101' THEN FTDTEX_0_date ELSE FTDTEX_2_date END, '00010101') AS date_expedition, CASE WHEN w_ADDTFA_date <> '20991231' AND COALESCE(FTDTEX_0_date,'20991231') < w_ADDTFA_date THEN w_ADDTFA_date ELSE COALESCE(FTDTEX_0_date,'00010101') END AS date_expedition_0, COALESCE(FTDTEX_1_date,'00010101') AS date_expedition_1, COALESCE(FTDTEX_2_date,'00010101') AS date_expedition_2, COALESCE(FTDTEX_22_date,'00010101') AS date_expedition_22, COALESCE(FTNBOR_0,0) AS no_bordereau_0, COALESCE(FTNBOR_1,0) AS no_bordereau_1, COALESCE(FTNBOR_2,0) AS no_bordereau_2, COALESCE(FTNBOR_22,0) AS no_bordereau_22, COALESCE(GREATEST(MCDTEC_0_C_date, MCDTEC_1_C_date, MCDTEC_2_C_date, MCDTEC_0_H_date, MCDTEC_1_H_date, MCDTEC_2_H_date),'20991231') AS date_solde, COALESCE(GREATEST(MCDTEC_0_C_date, MCDTEC_1_C_date, MCDTEC_2_C_date),'20991231') AS date_solde_c, COALESCE(GREATEST(MCDTEC_0_H_date, MCDTEC_1_H_date, MCDTEC_2_H_date),'20991231') AS date_solde_h, COALESCE(MCDTEC_0_C_date,'20991231') AS date_solde_0_c, COALESCE(MCDTEC_0_H_date,'20991231') AS date_solde_0_h, COALESCE(MCDTEC_1_C_date,'20991231') AS date_solde_1_c, COALESCE(MCDTEC_1_H_date,'20991231') AS date_solde_1_h, COALESCE(MCDTEC_2_C_date,'20991231') AS date_solde_2_c, COALESCE(MCDTEC_2_H_date,'20991231') AS date_solde_2_h, COALESCE(MCDTEC_2_C_date,'20991231') AS date_solde_22_c, COALESCE(MCDTEC_2_H_date,'20991231') AS date_solde_22_h, 0::numeric AS montant_encours_c, 0::numeric AS montant_encours_0_c, 0::numeric AS montant_encours_1_c, 0::numeric AS montant_encours_2_c, 0::numeric AS montant_encours_22_c, 0::numeric AS montant_encours_h, 0::numeric AS montant_encours_0_h, 0::numeric AS montant_encours_1_h, 0::numeric AS montant_encours_2_h, 0::numeric AS montant_encours_22_h, '20991231'::date AS date_solde_reference, '20991231'::date AS date_solde_reference_c, '20991231'::date AS date_solde_reference_h, '20991231'::date AS date_solde_reference_0_c, '20991231'::date AS date_solde_reference_1_c, '20991231'::date AS date_solde_reference_2_c, '20991231'::date AS date_solde_reference_22_c, '20991231'::date AS date_solde_reference_0_h, '20991231'::date AS date_solde_reference_1_h, '20991231'::date AS date_solde_reference_2_h, '20991231'::date AS date_solde_reference_22_h, 0::numeric AS delai_facture, 0::numeric AS delai_solde, 0::numeric AS delai_expedition, 0::numeric AS delai_expedition_0, 0::numeric AS delai_expedition_1, 0::numeric AS delai_expedition_2, 0::numeric AS delai_expedition_22, 0::numeric AS delai_solde_0_c, 0::numeric AS delai_solde_0_h, 0::numeric AS delai_solde_1_c, 0::numeric AS delai_solde_1_h, 0::numeric AS delai_solde_2_c, 0::numeric AS delai_solde_2_h, 0::numeric AS delai_solde_22_c, 0::numeric AS delai_solde_22_h, '20991231'::date AS date_encours, 0::numeric AS montant_facture_c_actes_inclus_dans_sejour, 0::numeric AS montant_facture_h_actes_inclus_dans_sejour, 0::numeric AS montant_comptabilise_budget_global_c FROM w_ADP01_factures_modifiees w_ADP01 JOIN activite[PX].p_sejours ON w_ADP01.w_ADDOL1 = p_sejours.no_sejour LEFT JOIN w_FTP01_GROUP ON (w_FTP01_GROUP.w_ADDOSSDCPL = w_ADP01.w_ADDOSSDCPL) LEFt JOIN w_MCP01_GROUP ON (w_MCP01_GROUP.w_ADDOSSDCPL = w_ADP01.w_ADDOSSDCPL) LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_0 ON '0000' = t_tiers_payant_0.code_original LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_1 ON FTCCAI_1 = t_tiers_payant_1.code_original LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_2 ON FTCCAI_2 = t_tiers_payant_2.code_original LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_22 ON FTCCAI_22 = t_tiers_payant_22.code_original LEFT JOIN activite[PX].p_factures ON w_ADP01.w_ADDOSSDCPL = p_factures.no_facture; ALTER TABLE w_factures ADD CONSTRAINT w_factures_pkey PRIMARY KEY(no_facture); CREATE INDEX w_factures_i1 ON w_factures USING btree (w_ADDOSS); CREATE INDEX w_factures_i2 ON w_factures USING btree (no_facture_reference); DROP TABLE IF EXISTS w_factures_od_avoir; CREATE TEMP TABLE w_factures_od_avoir AS SELECT oid AS facture_od_avoir_id, no_facture AS no_facture_od_avoir, ''::text AS no_facture, 0::bigint AS facture_id, w_ADDOSS, w_ADDCPL, montant_facture_c, montant_facture_0_c, montant_facture_1_c, montant_facture_2_c, montant_facture_22_c, montant_facture_h, montant_facture_0_h, montant_facture_1_h, montant_facture_2_h, montant_facture_22_h FROM w_factures WHERE type_facture = '1'; ALTER TABLE w_factures_od_avoir ADD CONSTRAINT w_factures_od_avoir_od_pkey PRIMARY KEY(no_facture_od_avoir); CREATE INDEX w_factures_od_avoir_i1 ON w_factures_od_avoir USING btree (w_ADDOSS); UPDATE w_factures_od_avoir SET no_facture = w_factures.no_facture, facture_id = w_factures.oid FROM w_factures WHERE w_factures_od_avoir.w_ADDOSS = w_factures.w_ADDOSS AND w_factures_od_avoir.w_ADDCPL = w_factures.w_ADDCPL + 1 AND w_factures_od_avoir.montant_facture_c = 0 - w_factures.montant_facture_c AND w_factures_od_avoir.montant_facture_0_c = 0 - w_factures.montant_facture_0_c AND w_factures_od_avoir.montant_facture_1_c = 0 - w_factures.montant_facture_1_c AND w_factures_od_avoir.montant_facture_2_c = 0 - w_factures.montant_facture_2_c AND w_factures_od_avoir.montant_facture_22_c = 0 - w_factures.montant_facture_22_c AND w_factures_od_avoir.montant_facture_h = 0 - w_factures.montant_facture_h AND w_factures_od_avoir.montant_facture_0_h = 0 - w_factures.montant_facture_0_h AND w_factures_od_avoir.montant_facture_1_h = 0 - w_factures.montant_facture_1_h AND w_factures_od_avoir.montant_facture_2_h = 0 - w_factures.montant_facture_2_h AND w_factures_od_avoir.montant_facture_22_h = 0 - w_factures.montant_facture_22_h; UPDATE w_factures SET type_facture = 'X' , no_facture_od_avoir = w_factures_od_avoir.no_facture_od_avoir, facture_od_avoir_id = w_factures_od_avoir.facture_od_avoir_id FROM w_factures_od_avoir WHERE w_factures.no_facture = w_factures_od_avoir.no_facture AND w_factures_od_avoir.no_facture <> '' AND w_factures_od_avoir.no_facture_od_avoir <> ''; UPDATE w_factures SET no_facture_od_avoir = w_factures_od_avoir.no_facture, facture_od_avoir_id = w_factures_od_avoir.facture_id FROM w_factures_od_avoir WHERE w_factures.no_facture = w_factures_od_avoir.no_facture_od_avoir AND w_factures_od_avoir.no_facture <> '' AND w_factures_od_avoir.no_facture_od_avoir <> ''; DROP TABLE IF EXISTS w_factures_references; CREATE TEMP TABLE w_factures_references AS SELECT w_ADDOSS, COALESCE(MIN(CASE WHEN type_facture NOT IN ('X', '1') THEN no_facture ELSE NULL END), MIN(no_facture)) AS no_facture_reference FROM w_factures GROUP BY 1; UPDATE w_factures SET no_facture_reference = w_factures_references.no_facture_reference, facture_reference_id = 0 FROM w_factures_references WHERE w_factures.w_ADDOSS = w_factures_references.w_ADDOSS AND w_factures.no_facture_reference <> w_factures_references.no_facture_reference; UPDATE w_factures SET type_facture = '0' WHERE type_facture <> '0' AND no_facture = no_facture_reference; DROP TABLE IF EXISTS w_factures_references_soldes; CREATE TEMP TABLE w_factures_references_soldes AS SELECT no_facture_reference, MAX(date_solde) AS date_solde_reference, MAX(date_solde_c) AS date_solde_reference_c, MAX(date_solde_h) AS date_solde_reference_h, MAX(date_solde_0_c) AS date_solde_reference_0_c, MAX(date_solde_0_h) AS date_solde_reference_0_h, MAX(date_solde_1_c) AS date_solde_reference_1_c, MAX(date_solde_1_h) AS date_solde_reference_1_h, MAX(date_solde_2_c) AS date_solde_reference_2_c, MAX(date_solde_2_h) AS date_solde_reference_2_h, MAX(date_solde_22_c) AS date_solde_reference_22_c, MAX(date_solde_22_h) AS date_solde_reference_22_h FROM w_factures GROUP BY no_facture_reference; ALTER TABLE w_factures_references_soldes ADD CONSTRAINT w_factures_references_soldes_pkey PRIMARY KEY(no_facture_reference); UPDATE w_factures SET facture_reference_id = w_factures_references.oid FROM w_factures w_factures_references WHERE w_factures.no_facture_reference = w_factures_references.no_facture AND w_factures.facture_reference_id <> w_factures_references.oid; UPDATE w_factures SET facture_od_avoir_id = w_factures_od_avoir.oid FROM w_factures w_factures_od_avoir WHERE w_factures.no_facture_od_avoir = w_factures_od_avoir.no_facture AND w_factures.facture_od_avoir_id <> w_factures_od_avoir.oid; SELECT base.cti_disable_index('activite[PX]', 'i_factures_3'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_4'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_5'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_6'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_7'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_8'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_9'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_10'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_11'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_12'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_13'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_14'); DELETE FROM activite[PX].p_factures WHERE no_facture IN (SELECT w_ADDOSSDCPL FROM w_ADP01_factures_modifiees); INSERT INTO activite[PX].p_factures ( oid, sejour_id, no_sejour, no_facture, no_facture_reference, facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, date_debut, date_fin, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, code_cp_demandee, type_facture, nb_rejets, code_facture, date_facture, code_vente, mois_vente, date_vente, code_cloture, particularite_t2a, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, montant_facture_c, montant_facture_h, montant_facture_0_c, montant_facture_0_h, montant_facture_1_c, montant_facture_1_h, montant_facture_2_c, montant_facture_2_h, montant_facture_22_c, montant_facture_22_h, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_22_c, montant_comptabilise_22_h, montant_regle_c, montant_regle_h, montant_regle_0_c, montant_regle_0_h, montant_regle_1_c, montant_regle_1_h, montant_regle_2_c, montant_regle_2_h, montant_regle_22_c, montant_regle_22_h, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_22, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, date_expedition_22, no_bordereau_0, no_bordereau_1, no_bordereau_2, no_bordereau_22, date_solde, date_solde_c, date_solde_h, date_solde_0_c, date_solde_0_h, date_solde_1_c, date_solde_1_h, date_solde_2_c, date_solde_2_h, date_solde_22_c, date_solde_22_h, montant_encours_c, montant_encours_0_c, montant_encours_1_c, montant_encours_2_c, montant_encours_22_c, montant_encours_h, montant_encours_0_h, montant_encours_1_h, montant_encours_2_h, montant_encours_22_h, date_solde_reference, date_solde_reference_c, date_solde_reference_h, date_solde_reference_0_c, date_solde_reference_1_c, date_solde_reference_2_c, date_solde_reference_22_c, date_solde_reference_0_h, date_solde_reference_1_h, date_solde_reference_2_h, date_solde_reference_22_h, delai_facture, delai_solde, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, delai_expedition_22, delai_solde_0_c, delai_solde_0_h, delai_solde_1_c, delai_solde_1_h, delai_solde_2_c, delai_solde_2_h, delai_solde_22_c, delai_solde_22_h, date_encours, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_comptabilise_budget_global_c ) SELECT oid, sejour_id, no_sejour, no_facture, w_factures.no_facture_reference, facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, date_debut, date_fin, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, code_cp_demandee, type_facture, nb_rejets, code_facture, date_facture, code_vente, mois_vente, date_vente, code_cloture, particularite_t2a, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, montant_facture_c, montant_facture_h, montant_facture_0_c, montant_facture_0_h, montant_facture_1_c, montant_facture_1_h, montant_facture_2_c, montant_facture_2_h, montant_facture_22_c, montant_facture_22_h, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_22_c, montant_comptabilise_22_h, montant_regle_c, montant_regle_h, montant_regle_0_c, montant_regle_0_h, montant_regle_1_c, montant_regle_1_h, montant_regle_2_c, montant_regle_2_h, montant_regle_22_c, montant_regle_22_h, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_22, CASE WHEN date_expedition <> '00010101' THEN date_expedition ELSE '20991231' END, CASE WHEN date_expedition_0 <> '00010101' THEN date_expedition_0 ELSE '20991231' END, CASE WHEN date_expedition_1 <> '00010101' THEN date_expedition_1 ELSE '20991231' END, CASE WHEN date_expedition_2 <> '00010101' THEN date_expedition_2 ELSE '20991231' END, CASE WHEN date_expedition_22 <> '00010101' THEN date_expedition_22 ELSE '20991231' END, no_bordereau_0, no_bordereau_1, no_bordereau_2, no_bordereau_22, CASE WHEN date_solde <> '00010101' THEN date_solde ELSE '20991231' END, CASE WHEN date_solde_c <> '00010101' THEN date_solde_c ELSE '20991231' END, CASE WHEN date_solde_h <> '00010101' THEN date_solde_h ELSE '20991231' END, CASE WHEN date_solde_0_c <> '00010101' THEN date_solde_0_c ELSE '20991231' END, CASE WHEN date_solde_0_h <> '00010101' THEN date_solde_0_h ELSE '20991231' END, CASE WHEN date_solde_1_c <> '00010101' THEN date_solde_1_c ELSE '20991231' END, CASE WHEN date_solde_1_h <> '00010101' THEN date_solde_1_h ELSE '20991231' END, CASE WHEN date_solde_2_c <> '00010101' THEN date_solde_2_c ELSE '20991231' END, CASE WHEN date_solde_2_h <> '00010101' THEN date_solde_2_h ELSE '20991231' END, CASE WHEN date_solde_22_c <> '00010101' THEN date_solde_22_c ELSE '20991231' END, CASE WHEN date_solde_22_h <> '00010101' THEN date_solde_22_h ELSE '20991231' END, montant_encours_c, montant_encours_0_c, montant_encours_1_c, montant_encours_2_c, montant_encours_22_c, montant_encours_h, montant_encours_0_h, montant_encours_1_h, montant_encours_2_h, montant_encours_22_h, CASE WHEN w_factures_references_soldes.date_solde_reference <> '00010101' THEN w_factures_references_soldes.date_solde_reference ELSE '20991231' END, CASE WHEN w_factures_references_soldes.date_solde_reference_c <> '00010101' THEN w_factures_references_soldes.date_solde_reference_c ELSE '20991231' END, CASE WHEN w_factures_references_soldes.date_solde_reference_h <> '00010101' THEN w_factures_references_soldes.date_solde_reference_h ELSE '20991231' END, CASE WHEN w_factures_references_soldes.date_solde_reference_0_c <> '00010101' THEN w_factures_references_soldes.date_solde_reference_0_c ELSE '20991231' END, CASE WHEN w_factures_references_soldes.date_solde_reference_1_c <> '00010101' THEN w_factures_references_soldes.date_solde_reference_1_c ELSE '20991231' END, CASE WHEN w_factures_references_soldes.date_solde_reference_2_c <> '00010101' THEN w_factures_references_soldes.date_solde_reference_2_c ELSE '20991231' END, CASE WHEN w_factures_references_soldes.date_solde_reference_22_c <> '00010101' THEN w_factures_references_soldes.date_solde_reference_22_c ELSE '20991231' END, CASE WHEN w_factures_references_soldes.date_solde_reference_0_h <> '00010101' THEN w_factures_references_soldes.date_solde_reference_0_h ELSE '20991231' END, CASE WHEN w_factures_references_soldes.date_solde_reference_1_h <> '00010101' THEN w_factures_references_soldes.date_solde_reference_1_h ELSE '20991231' END, CASE WHEN w_factures_references_soldes.date_solde_reference_2_h <> '00010101' THEN w_factures_references_soldes.date_solde_reference_2_h ELSE '20991231' END, CASE WHEN w_factures_references_soldes.date_solde_reference_22_h <> '00010101' THEN w_factures_references_soldes.date_solde_reference_22_h ELSE '20991231' END, delai_facture, delai_solde, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, delai_expedition_22, delai_solde_0_c, delai_solde_0_h, delai_solde_1_c, delai_solde_1_h, delai_solde_2_c, delai_solde_2_h, delai_solde_22_c, delai_solde_22_h, date_encours, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_comptabilise_budget_global_c FROM w_factures JOIN w_factures_references_soldes ON w_factures.no_facture_reference = w_factures_references_soldes.no_facture_reference WHERE oid NOT IN (SELECT oid FROM activite[PX].p_factures); SELECT base.cti_enable_index('activite[PX]', 'i_factures_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_5'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_6'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_7'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_8'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_9'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_10'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_11'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_12'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_13'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_14'); -- Suppression tables de travail DROP TABLE IF EXISTS w_FTP01_GROUP; DROP TABLE IF EXISTS w_MCP01_GROUP; DROP TABLE IF EXISTS w_factures; ]]> ACNBRE ; -- DROP TABLE IF EXISTS w_ACP01; CREATE TEMP TABLE w_ACP01 AS SELECT w_ADDOSSDCPL, ACDTA1, COALESCE(to_date(to_char(ACDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS ACDTA1_date, COALESCE(to_date(to_char(CASE WHEN ACDTA9 >= ACDTA1 THEN ACDTA9 ELSE ACDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS ACDTA9_date, w_ADCSER AS ACCSER, w_ADACTI AS ACACTI, w_ADETAG AS ACETAG, w_ADCHLT AS ACCHLT, substr(to_char(ACRUPR,'0000'),3,3) AS ACRUPR, ACCCLE, ACCLPP, w_ADCSER || '|' || w_ADACTI || '|' || w_ADETAG || '|' || w_ADCHLT || '|' || ACCLPP || '|' || ACCCLE || '|' || substr(to_char(ACRUPR,'0000'),3,3) AS key, CASE WHEN w_ADADAV IN ('2', '4', '6') AND ACNBRE > 0 THEN 0 - ACNBRE ELSE ACNBRE END AS ACNBRE, CASE WHEN ACCOE1 <> 0 THEN ACCOE1 ELSE 1 END AS ACCOE1, ACPRUA FROM prod_shs.[ACTIVITESCHEMA]_ACP01 JOIN w_ADP01 ON (ACDOSS = w_ADDOSS AND ACDCPL = w_ADDCPL AND W_ADCFAC <> '1' AND w_CODENV = '') WHERE ACCCLH = '1' AND ACCANN = '1'; UPDATE w_ACP01 SET ACPRUA = TRPRUE FROM w_TRP01 WHERE ACCSER = TRCSER AND ACRUPR = TRCRUB AND ACPRUA = 0 AND ACDTA1 BETWEEN TRDTT1 AND TRDTT9; DROP TABLE IF EXISTS w_ACP01_keys; CREATE TEMP TABLE w_ACP01_keys AS SELECT key, ACCSER, ACACTI, ACETAG, ACCHLT, ACCCLE, ACCLPP, ACRUPR, 0::bigint AS rubrique_facturation_id, ''::text AS prestation_code, 0::bigint AS prestation_id, 0::bigint AS lieu_id, 0::bigint AS ucd_id, 0::bigint AS lpp_id FROM w_ACP01 GROUP BY 1,2,3,4,5,6,7,8; UPDATE w_ACP01_keys SET prestation_code = 'GHS' WHERE ACCCLE = 'GHS'; UPDATE w_ACP01_keys SET prestation_code = 'EXH' WHERE ACCCLE = 'EXH'; UPDATE w_ACP01_keys SET prestation_code = CASE WHEN TRPRST <> '' THEN TRPRST ELSE TRPRSA END FROM prod_shs.[ACTIVITESCHEMA]_TRP01 WHERE prestation_code = '' AND TRCENR = 'A51' AND TRSUJT = '' AND ACCSER = TRCSER AND ACRUPR = TRCRUB ; DROP TABLE IF EXISTS w_TRP01; CREATE TEMP TABLE w_TRP01 AS SELECT TRCRUB, CASE WHEN MAX(TRPRST) <> '' THEN MAX(TRPRST) ELSE MAX(TRPRSA) END AS TRPRST FROM prod_shs.[ACTIVITESCHEMA]_TRP01 WHERE TRCENR = 'A51' AND TRSUJT = '' AND (TRPRST <> '' OR TRPRSA <> '') GROUP BY 1; UPDATE w_ACP01_keys SET prestation_code = TRPRST FROM w_TRP01 WHERE prestation_code = '' AND ACRUPR = TRCRUB ; UPDATE w_ACP01_keys SET prestation_code = 'NOEMIE' WHERE prestation_code = '' AND ACRUPR = '998'; UPDATE w_ACP01_keys SET prestation_code = 'DIV' WHERE prestation_code = ''; ALTER TABLE w_ACP01_keys ADD CONSTRAINT w_ACP01_keys_pkey PRIMARY KEY(key); INSERT INTO activite[PX].t_lieux(code_original_1, code_original_2, code_original_3, code_original_4) SELECT ACCSER, ACACTI, ACETAG, ACETAG || '|' || ACCHLT FROM w_ACP01_keys LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = ACCSER AND code_original_2 = ACACTI AND code_original_3 = ACETAG AND code_original_4 = ACETAG || '|' || ACCHLT ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4; INSERT INTO activite.t_prestations(code_original, code, texte, texte_court, clinique_honoraire) SELECT prestation_code, prestation_code, prestation_code, prestation_code, '' FROM w_ACP01_keys WHERE prestation_code NOT IN (SELECT code FROM activite.t_prestations) GROUP BY prestation_code ORDER BY prestation_code; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT ACRUPR, ACRUPR, ACRUPR, ACRUPR FROM w_ACP01_keys WHERE ACRUPR NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation) GROUP BY ACRUPR ORDER BY ACRUPR; UPDATE w_ACP01_keys SET prestation_id = t_prestations.oid FROM activite.t_prestations WHERE prestation_code = t_prestations.code; UPDATE w_ACP01_keys SET rubrique_facturation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation WHERE ACRUPR = t_rubriques_facturation.code_original; UPDATE w_ACP01_keys set ucd_id = t_ucd.oid FROM base.t_ucd WHERE ACCLPP <> '' AND t_ucd.code = ACCLPP; UPDATE w_ACP01_keys set lpp_id = t_lpp.oid FROM base.t_lpp WHERE ACCLPP <> '' AND t_lpp.code = ACCLPP; UPDATE w_ACP01_keys SET lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE code_original_1 = ACCSER AND code_original_2 = ACACTI AND code_original_3 = ACETAG AND code_original_4 = ACETAG || '|' || ACCHLT; DROP TABLE IF EXISTS w_factures_lignes_non_facturees_c; CREATE TEMP TABLE w_factures_lignes_non_facturees_c AS SELECT p_factures.oid AS facture_id, w_ADDOSSDCPL AS no_facture, ACDTA1_date AS date_debut, ACDTA9_date AS date_fin, ACNBRE AS nb_rubrique, ACCOE1 AS coefficient, w_ACP01_keys.rubrique_facturation_id AS rubrique_facturation_id, w_ACP01_keys.prestation_id AS prestation_id, ACPRUA AS prix_unitaire, w_ACP01_keys.lieu_id AS lieu_id, w_ACP01_keys.ucd_id, w_ACP01_keys.lpp_id FROM w_ACP01 JOIN activite[PX].p_factures ON w_ADDOSSDCPL = p_factures.no_facture JOIN w_ACP01_keys ON w_ACP01.key = w_ACP01_keys.key; DELETE FROM activite[PX].p_factures_lignes_non_facturees_c WHERE no_facture IN (SELECT no_facture FROM w_factures_lignes_non_facturees_c GROUP BY 1); DELETE FROM activite[PX].p_factures_lignes_non_facturees_c WHERE no_facture IN (SELECT no_facture FROM activite[PX].p_factures WHERE code_facture >= '1' GROUP BY 1); INSERT INTO activite[PX].p_factures_lignes_non_facturees_c ( facture_id, no_facture, date_debut, date_fin, nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, prix_unitaire, lieu_id, ucd_id, lpp_id ) SELECT facture_id, no_facture, date_debut, date_fin, nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, prix_unitaire, lieu_id, ucd_id, lpp_id FROM w_factures_lignes_non_facturees_c; -- Suppression tables de travail DROP TABLE IF EXISTS w_TRP01; DROP TABLE IF EXISTS w_ACP01; DROP TABLE IF EXISTS w_ACP01_keys; DROP TABLE IF EXISTS w_factures_lignes_non_facturees_c; ]]> = MFDTA1 THEN MFDTA9 ELSE MFDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS MFDTA9_date, MFCSER, MFACTI, MFETAG, MFCHLT, substr(to_char(MFRUPR,'0000'),3,3) AS MFRUPR, substr(to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'0000'),3,3) AS MFCPRC, MFCCLE, MFCGHS, MFCLPP, MFCGHS || '|' || MFCLPP || '|' || MFCSER || '|' || MFACTI || '|' || MFETAG || '|' || MFCHLT || '|' || MFCCLE || '|' || substr(to_char(MFRUPR,'0000'),3,3) || '|' || substr(to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'0000'),3,3) AS key, CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END AS MFNBRE, CASE WHEN MFCOE1 <> 0 THEN MFCOE1 ELSE 1 END AS MFCOE1, CASE WHEN MFCOET <> 0 THEN MFCOET ELSE 1 END AS MFCOET, ABS(MFPRUA) AS MFPRUA, MFTFAM, MFTFA1, MFTFA2, MFTFA3, MFMFAM, MFMFA1, MFMFA2, MFMFA3, CASE WHEN w_ADPAD5 = '1' THEN MFMCAM ELSE MFMFAM END AS MFMCAM, CASE WHEN w_ADPAD5 = '1' THEN MFMCA1 ELSE MFMFA1 END AS MFMCA1, CASE WHEN w_ADPAD5 = '1' THEN MFMCA2 ELSE MFMFA2 END AS MFMCA2, CASE WHEN w_ADPAD5 = '1' THEN MFMCA3 ELSE MFMFA3 END AS MFMCA3 FROM prod_shs.[ACTIVITESCHEMA]_MFP01CLI JOIN w_ADP01_factures_modifiees ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = '') ; INSERT INTO w_MFP01 SELECT w_ADDOSSDCPL, COALESCE(to_date(to_char(MFDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, COALESCE(to_date(to_char(CASE WHEN MFDTA9 >= MFDTA1 THEN MFDTA9 ELSE MFDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS MFDTA9_date, MFCSER, MFACTI, MFETAG, MFCHLT, substr(to_char(MFRUPR,'0000'),3,3) AS MFRUPR, substr(to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'0000'),3,3) AS MFCPRC, MFCCLE, MFCGHS, MFCLPP, MFCGHS || '|' || MFCLPP || '|' || MFCSER || '|' || MFACTI || '|' || MFETAG || '|' || MFCHLT || '|' || MFCCLE || '|' || substr(to_char(MFRUPR,'0000'),3,3) || '|' || substr(to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'0000'),3,3) AS key, CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END AS MFNBRE, CASE WHEN MFCOE1 <> 0 THEN MFCOE1 ELSE 1 END AS MFCOE1, CASE WHEN MFCOET <> 0 THEN MFCOET ELSE 1 END AS MFCOET, ABS(MFPRUA) AS MFPRUA, MFTFAM, MFTFA1, MFTFA2, MFTFA3, MFMFAM, MFMFA1, MFMFA2, MFMFA3, CASE WHEN w_ADPAD5 = '1' THEN MFMCAM ELSE MFMFAM END AS MFMCAM, CASE WHEN w_ADPAD5 = '1' THEN MFMCA1 ELSE MFMFA1 END AS MFMCA1, CASE WHEN w_ADPAD5 = '1' THEN MFMCA2 ELSE MFMFA2 END AS MFMCA2, CASE WHEN w_ADPAD5 = '1' THEN MFMCA3 ELSE MFMFA3 END AS MFMCA3 FROM prod_shs.[ACTIVITESCHEMA]p_MFP01CLIP JOIN w_ADP01_factures_modifiees ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = 'P') ; INSERT INTO w_MFP01 SELECT w_ADDOSSDCPL, COALESCE(to_date(to_char(MFDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, COALESCE(to_date(to_char(CASE WHEN MFDTA9 >= MFDTA1 THEN MFDTA9 ELSE MFDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS MFDTA9_date, MFCSER, MFACTI, MFETAG, MFCHLT, substr(to_char(MFRUPR,'0000'),3,3) AS MFRUPR, substr(to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'0000'),3,3) AS MFCPRC, MFCCLE, MFCGHS, MFCLPP, MFCGHS || '|' || MFCLPP || '|' || MFCSER || '|' || MFACTI || '|' || MFETAG || '|' || MFCHLT || '|' || MFCCLE || '|' || substr(to_char(MFRUPR,'0000'),3,3) || '|' || substr(to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'0000'),3,3) AS key, CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END AS MFNBRE, CASE WHEN MFCOE1 <> 0 THEN MFCOE1 ELSE 1 END AS MFCOE1, CASE WHEN MFCOET <> 0 THEN MFCOET ELSE 1 END AS MFCOET, ABS(MFPRUA) AS MFPRUA, MFTFAM, MFTFA1, MFTFA2, MFTFA3, MFMFAM, MFMFA1, MFMFA2, MFMFA3, CASE WHEN w_ADPAD5 = '1' THEN MFMCAM ELSE MFMFAM END AS MFMCAM, CASE WHEN w_ADPAD5 = '1' THEN MFMCA1 ELSE MFMFA1 END AS MFMCA1, CASE WHEN w_ADPAD5 = '1' THEN MFMCA2 ELSE MFMFA2 END AS MFMCA2, CASE WHEN w_ADPAD5 = '1' THEN MFMCA3 ELSE MFMFA3 END AS MFMCA3 FROM prod_shs.[ACTIVITESCHEMA]h_MFP01CLIH JOIN w_ADP01_factures_modifiees ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = 'H') ; CREATE INDEX w_MFP01_i1 ON w_MFP01 USING btree (w_ADDOSSDCPL); CREATE INDEX w_MFP01_i2 ON w_MFP01 USING btree (key); DROP TABLE IF EXISTS w_MFP01_keys; CREATE TEMP TABLE w_MFP01_keys AS SELECT key, MFCSER, MFACTI, MFETAG, MFCHLT, MFCCLE, MFRUPR, MFCPRC, MFCGHS, MFCLPP, 0::bigint AS rubrique_facturation_id, 0::bigint AS rubrique_comptabilisation_id, ''::text AS prestation_code, 0::bigint AS prestation_id, 0::bigint AS lieu_id, 0::bigint AS ghs_id, ''::text AS compte_produit, 0::bigint AS compte_produit_id, 0::bigint AS ucd_id, 0::bigint AS lpp_id FROM w_MFP01 GROUP BY 1,2,3,4,5,6,7,8,9,10; UPDATE w_MFP01_keys SET prestation_code = 'GHS' WHERE MFCCLE = 'GHS'; UPDATE w_MFP01_keys SET prestation_code = 'EXH' WHERE MFCCLE = 'EXH'; UPDATE w_MFP01_keys set ghs_id = t_ghs.oid FROM base.t_ghs WHERE MFCGHS <> '0000' AND to_char(t_ghs.code,'FM0000') = MFCGHS; UPDATE w_MFP01_keys set ucd_id = t_ucd.oid FROM base.t_ucd WHERE MFCLPP <> '' AND t_ucd.code = MFCLPP; UPDATE w_MFP01_keys set lpp_id = t_lpp.oid FROM base.t_lpp WHERE MFCLPP <> '' AND t_lpp.code = MFCLPP; UPDATE w_MFP01_keys SET prestation_code = CASE WHEN TRPRST <> '' THEN TRPRST ELSE TRPRSA END FROM prod_shs.[ACTIVITESCHEMA]_TRP01 WHERE prestation_code = '' AND TRCENR = 'A51' AND TRSUJT = '' AND MFCSER = TRCSER AND MFRUPR = TRCRUB ; UPDATE w_MFP01_keys SET compte_produit = TRCPTE FROM prod_shs.[ACTIVITESCHEMA]_TRP01 WHERE TRCENR = 'A51' AND TRSUJT = '' AND MFCSER = TRCSER AND MFRUPR = TRCRUB ; UPDATE w_MFP01_keys SET prestation_code = 'NOEMIE' WHERE prestation_code = '' AND MFRUPR = '998'; UPDATE w_MFP01_keys SET prestation_code = 'DIV' WHERE prestation_code = ''; ALTER TABLE w_MFP01_keys ADD CONSTRAINT w_MFP01_keys_pkey PRIMARY KEY(key); INSERT INTO activite[PX].t_lieux(code_original_1, code_original_2, code_original_3, code_original_4) SELECT MFCSER, MFACTI, MFETAG, MFETAG || '|' || MFCHLT FROM w_MFP01_keys LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = MFCSER AND code_original_2 = MFACTI AND code_original_3 = MFETAG AND code_original_4 = MFETAG || '|' || MFCHLT ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4; INSERT INTO activite.t_prestations(code_original, code, texte, texte_court, clinique_honoraire) SELECT prestation_code, prestation_code, prestation_code, prestation_code, '' FROM w_MFP01_keys WHERE prestation_code NOT IN (SELECT code FROM activite.t_prestations) GROUP BY prestation_code ORDER BY prestation_code; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT MFRUPR, MFRUPR, MFRUPR, MFRUPR FROM w_MFP01_keys WHERE MFRUPR NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation) GROUP BY MFRUPR ORDER BY MFRUPR; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT MFCPRC, MFCPRC, MFCPRC, MFCPRC FROM w_MFP01_keys WHERE MFCPRC NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation) GROUP BY MFCPRC ORDER BY MFCPRC; UPDATE w_MFP01_keys SET prestation_id = t_prestations.oid FROM activite.t_prestations WHERE prestation_code = t_prestations.code; UPDATE w_MFP01_keys SET rubrique_facturation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation WHERE MFRUPR = t_rubriques_facturation.code_original; UPDATE w_MFP01_keys SET rubrique_comptabilisation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation WHERE MFCPRC = t_rubriques_facturation.code_original; UPDATE w_MFP01_keys SET lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE code_original_1 = MFCSER AND code_original_2 = MFACTI AND code_original_3 = MFETAG AND code_original_4 = MFETAG || '|' || MFCHLT; INSERT INTO activite[PX].t_compte(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_compte); INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court) SELECT compte_produit, compte_produit, MAX(COALESCE(PEINT3,compte_produit)), MAX(COALESCE(PEINT3,compte_produit)) FROM w_MFP01_keys LEFT JOIN prod_shs.[ACTIVITESCHEMA]_PEP01 ON compte_produit = PECPTE WHERE compte_produit NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code_original IS NOT NULL) GROUP BY 1 ORDER BY 1; UPDATE w_MFP01_keys SET compte_produit_id = t_compte.oid FROM activite[PX].t_compte WHERE compte_produit = t_compte.code_original; -- Remplacement des codes dialyse INSERT INTO activite.t_divers (code, texte, valeur, description) SELECT 'TRANSGHSDXX', 'Transformation des GHS en Dxx', '', 'Transformation des prestations GHS en Dxx selong GHS, la rubrique de facturation prend la valeur du GHS' WHERE 'TRANSGHSDXX' NOT IN (SELECT code FROM activite.t_divers); ; INSERT INTO activite[PX].t_rubriques_facturation (code_original, code, texte, texte_court) SELECT t_ghs.code::text, t_ghs.code::text, t_ghs.texte, t_ghs.texte FROM base.t_ghs JOIN activite.t_divers ON t_divers.code = 'TRANSGHSDXX' AND t_divers.valeur = '1' WHERE t_ghs.code IN (9602,9603,9604,9605,9617) AND t_ghs.code::text NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code_original IS NOT NULL) ; INSERT INTO activite[PX].t_rubriques_facturation (code_original, code, texte, texte_court) SELECT t_prestations.code::text, t_prestations.code::text, t_prestations.texte, t_prestations.texte FROM activite.t_prestations JOIN activite.t_divers ON t_divers.code = 'TRANSGHSDXX' AND t_divers.valeur = '1' WHERE (t_prestations.code LIKE 'D1%' OR t_prestations.code LIKE 'D2%') AND t_prestations.code::text NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code_original IS NOT NULL) ; UPDATE w_MFP01_keys SET prestation_code = 'D09', rubrique_facturation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation JOIN activite.t_divers ON t_divers.code = 'TRANSGHSDXX' AND t_divers.valeur = '1' WHERE MFCCLE = 'GHS' AND MFCGHS = 9605 AND t_rubriques_facturation.code = '9605'; UPDATE w_MFP01_keys SET prestation_code = 'D10', rubrique_facturation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation JOIN activite.t_divers ON t_divers.code = 'TRANSGHSDXX' AND t_divers.valeur = '1' WHERE MFCCLE = 'GHS' AND MFCGHS = 9617 AND t_rubriques_facturation.code = '9617'; UPDATE w_MFP01_keys SET prestation_code = 'D17', rubrique_facturation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation JOIN activite.t_divers ON t_divers.code = 'TRANSGHSDXX' AND t_divers.valeur = '1' WHERE MFCCLE = 'GHS' AND MFCGHS = 9604 AND t_rubriques_facturation.code = '9604'; UPDATE w_MFP01_keys SET prestation_code = 'D18', rubrique_facturation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation JOIN activite.t_divers ON t_divers.code = 'TRANSGHSDXX' AND t_divers.valeur = '1' WHERE MFCCLE = 'GHS' AND MFCGHS = 9602 AND t_rubriques_facturation.code = '9602'; UPDATE w_MFP01_keys SET prestation_code = 'D19', rubrique_facturation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation JOIN activite.t_divers ON t_divers.code = 'TRANSGHSDXX' AND t_divers.valeur = '1' WHERE MFCCLE = 'GHS' AND MFCGHS = 9603 AND t_rubriques_facturation.code = '9603'; UPDATE w_MFP01_keys SET rubrique_facturation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation JOIN activite.t_divers ON t_divers.code = 'TRANSGHSDXX' AND t_divers.valeur = '1' WHERE MFRUPR IN (188,189) AND prestation_code IN ('D11','D13','D14','D15','D16','D20','D22') AND t_rubriques_facturation.code_original = prestation_code AND rubrique_facturation_id <> t_rubriques_facturation.oid; UPDATE activite[PX].p_factures_lignes_non_facturees_c SET rubrique_facturation_id = t_rubriques_facturation.oid FROM activite.t_prestations JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = t_prestations.code JOIN activite.t_divers ON t_divers.code = 'TRANSGHSDXX' AND t_divers.valeur = '1' WHERE prestation_id = t_prestations.oid AND t_prestations.code IN ('D11','D13','D14','D15','D16','D20','D22') AND rubrique_facturation_id <> t_rubriques_facturation.oid ; UPDATE w_MFP01_keys SET prestation_id = t_prestations.oid FROM activite.t_prestations WHERE prestation_code = t_prestations.code AND w_MFP01_keys.prestation_id IS DISTINCT FROM t_prestations.oid; DROP TABLE IF EXISTS w_factures_lignes_c; CREATE TEMP TABLE w_factures_lignes_c AS SELECT p_factures.oid AS facture_id, w_MFP01.w_ADDOSSDCPL AS no_facture, MFCOE1 AS coefficient, MFCOET AS coefficient_mco, w_MFP01.MFCGHS, w_MFP01_keys.ghs_id, w_MFP01_keys.rubrique_facturation_id AS rubrique_facturation_id, w_MFP01_keys.rubrique_comptabilisation_id AS rubrique_comptabilisation_id, w_MFP01_keys.compte_produit_id AS compte_produit_id, w_MFP01_keys.prestation_id AS prestation_id, w_MFP01_keys.lieu_id AS lieu_id, 1::bigint AS origine_facturation_id, w_MFP01_keys.ucd_id, w_MFP01_keys.lpp_id, date_trunc('month', MFDTA9_date) AS MFDTA9_month, MFPRUA AS prix_unitaire, MFTFAM AS taux_0, MFTFA1 AS taux_1, MFTFA2 AS taux_2, MFTFA3 AS taux_22, w_MFP01.MFDTA1_date AS date_debut, w_MFP01.MFDTA9_date AS date_fin, w_MFP01.MFNBRE AS nb_rubrique, CASE WHEN w_MFP01.MFCCLE = 'GHS' AND w_MFP01.MFRUPR = 111 THEN 0 ELSE w_MFP01.MFNBRE END AS nb_prestation, MFMFAM + MFMFA1 + MFMFA2 + MFMFA3 AS montant_facture, MFMFAM AS montant_facture_0, MFMFA1 AS montant_facture_1, MFMFA2 AS montant_facture_2, MFMFA3 AS montant_facture_22, MFMCAM + MFMCA1 + MFMCA2 + MFMCA3 AS montant_comptabilise, MFMCAM AS montant_comptabilise_0, MFMCA1 AS montant_comptabilise_1, MFMCA2 AS montant_comptabilise_2, MFMCA3 AS montant_comptabilise_22, 0::numeric AS montant_encours, 0::numeric AS montant_encours_0, 0::numeric AS montant_encours_1, 0::numeric AS montant_encours_2, 0::numeric AS montant_encours_22, 0::numeric AS montant_facture_actes_inclus_dans_sejour, 0::numeric AS montant_facture_0_actes_inclus_dans_sejour, 0::numeric AS montant_facture_1_actes_inclus_dans_sejour, 0::numeric AS montant_facture_2_actes_inclus_dans_sejour, 0::numeric AS montant_facture_22_actes_inclus_dans_sejour, 0::numeric AS montant_comptabilise_budget_global_1, 0::numeric AS rubrique_facture_id FROM w_MFP01 JOIN activite[PX].p_factures ON w_ADDOSSDCPL = p_factures.no_facture JOIN w_MFP01_keys ON w_MFP01.key = w_MFP01_keys.key; UPDATE w_factures_lignes_c SET nb_prestation = CASE WHEN nb_rubrique >=0 THEN 1 ELSE -1 END FROM (SELECT no_facture, ghs_id, prestation_id, rubrique_facturation_id, MAX(date_debut) AS date_debut FROM w_factures_lignes_c WHERE prestation_id IN (SELECT oid FROM activite.t_prestations WHERE code = 'GHS') AND rubrique_facturation_id IN (SELECT oid FROM activite[PX].t_rubriques_facturation WHERE code = '111') GROUP BY 1,2,3,4 ) subview WHERE w_factures_lignes_c.no_facture = subview.no_facture AND w_factures_lignes_c.ghs_id = subview.ghs_id AND w_factures_lignes_c.prestation_id = subview.prestation_id AND w_factures_lignes_c.rubrique_facturation_id = subview.rubrique_facturation_id AND w_factures_lignes_c.date_debut = subview.date_debut ; -- Supprimer les montants GHS qui chevauchent les EXH DROP TABLE IF EXISTS w_factures_exh; CREATE TEMP TABLE w_factures_exh AS SELECT no_facture, MIN(w_factures_lignes_c.date_debut) AS date_debut_exh FROM w_factures_lignes_c JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND t_prestations.code IN ('EXH') GROUP BY 1; DROP TABLE IF EXISTS w_factures_ghs; CREATE TEMP TABLE w_factures_ghs AS SELECT w_factures_lignes_c.no_facture, MIN(date_debut_exh) AS date_debut_exh, MAX(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN date_fin ELSE NULL END) AS date_fin_ghs, NULL::TID AS ctid_fin_ghs, SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END) AS nb_rubrique_ghs_ok, SUM(CASE WHEN w_factures_lignes_c.date_fin >= date_debut_exh THEN 1 ELSE 0 END) AS nb_rubrique_ghs_ko, SUM(prix_unitaire) AS prix_unitaire_total_ghs, round(base.cti_division(SUM(montant_facture), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END * CASE WHEN montant_facture < 0 THEN -1 ELSE 1 END)),2) AS prix_unitaire_ghs, 0::numeric AS prix_unitaire_ghs_last, SUM(montant_facture) AS montant_facture_total_ghs, round(base.cti_division(SUM(montant_facture), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END )),2) AS montant_facture_ghs, 0::numeric AS montant_facture_ghs_last, SUM(montant_facture_0) AS montant_facture_0_total_ghs, round(base.cti_division(SUM(montant_facture_0), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END )),2) AS montant_facture_0_ghs, 0::numeric AS montant_facture_0_ghs_last, SUM(montant_facture_1) AS montant_facture_1_total_ghs, round(base.cti_division(SUM(montant_facture_1), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END )),2) AS montant_facture_1_ghs, 0::numeric AS montant_facture_1_ghs_last, SUM(montant_facture_2) AS montant_facture_2_total_ghs, round(base.cti_division(SUM(montant_facture_2), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END )),2) AS montant_facture_2_ghs, 0::numeric AS montant_facture_2_ghs_last, SUM(montant_facture_22) AS montant_facture_22_total_ghs, round(base.cti_division(SUM(montant_facture_22), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END )),2) AS montant_facture_22_ghs, 0::numeric AS montant_facture_22_ghs_last, SUM(montant_comptabilise) AS montant_comptabilise_total_ghs, round(base.cti_division(SUM(montant_comptabilise), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END )),2) AS montant_comptabilise_ghs, 0::numeric AS montant_comptabilise_ghs_last, SUM(montant_comptabilise_0) AS montant_comptabilise_0_total_ghs, round(base.cti_division(SUM(montant_comptabilise_0), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END )),2) AS montant_comptabilise_0_ghs, 0::numeric AS montant_comptabilise_0_ghs_last, SUM(montant_comptabilise_1) AS montant_comptabilise_1_total_ghs, round(base.cti_division(SUM(montant_comptabilise_1), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END )),2) AS montant_comptabilise_1_ghs, 0::numeric AS montant_comptabilise_1_ghs_last, SUM(montant_comptabilise_2) AS montant_comptabilise_2_total_ghs, round(base.cti_division(SUM(montant_comptabilise_2), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END )),2) AS montant_comptabilise_2_ghs, 0::numeric AS montant_comptabilise_2_ghs_last, SUM(montant_comptabilise_22) AS montant_comptabilise_22_total_ghs, round(base.cti_division(SUM(montant_comptabilise_22), SUM(CASE WHEN w_factures_lignes_c.date_fin < date_debut_exh THEN 1 ELSE 0 END )),2) AS montant_comptabilise_22_ghs, 0::numeric AS montant_comptabilise_22_ghs_last FROM w_factures_lignes_c JOIN w_factures_exh ON w_factures_exh.no_facture = w_factures_lignes_c.no_facture JOIN activite[PX].t_rubriques_facturation ON rubrique_facturation_id = t_rubriques_facturation.oid AND t_rubriques_facturation.code = '111' JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND t_prestations.code IN ('GHS') WHERE montant_encours = 0 GROUP BY 1 HAVING SUM(CASE WHEN w_factures_lignes_c.date_fin >= date_debut_exh THEN nb_rubrique ELSE 0 END) <> 0; UPDATE w_factures_ghs SET ctid_fin_ghs = w_factures_lignes_c.CTID FROM w_factures_lignes_c JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND t_prestations.code IN ('GHS') JOIN activite[PX].t_rubriques_facturation ON rubrique_facturation_id = t_rubriques_facturation.oid AND t_rubriques_facturation.code = '111' WHERE w_factures_lignes_c.no_facture = w_factures_ghs.no_facture AND w_factures_lignes_c.date_fin = w_factures_ghs.date_fin_ghs; UPDATE w_factures_ghs SET montant_facture_ghs_last = montant_facture_total_ghs + montant_facture_ghs - nb_rubrique_ghs_ok * montant_facture_ghs, montant_facture_0_ghs_last = montant_facture_0_total_ghs + montant_facture_0_ghs - nb_rubrique_ghs_ok * montant_facture_0_ghs, montant_facture_1_ghs_last = montant_facture_1_total_ghs + montant_facture_1_ghs - nb_rubrique_ghs_ok * montant_facture_1_ghs, montant_facture_2_ghs_last = montant_facture_2_total_ghs + montant_facture_2_ghs - nb_rubrique_ghs_ok * montant_facture_2_ghs, montant_facture_22_ghs_last = montant_facture_22_total_ghs + montant_facture_22_ghs - nb_rubrique_ghs_ok * montant_facture_22_ghs, montant_comptabilise_ghs_last = montant_comptabilise_total_ghs + montant_comptabilise_ghs - nb_rubrique_ghs_ok * montant_comptabilise_ghs, montant_comptabilise_0_ghs_last = montant_comptabilise_0_total_ghs + montant_comptabilise_0_ghs - nb_rubrique_ghs_ok * montant_comptabilise_0_ghs, montant_comptabilise_1_ghs_last = montant_comptabilise_1_total_ghs + montant_comptabilise_1_ghs - nb_rubrique_ghs_ok * montant_comptabilise_1_ghs, montant_comptabilise_2_ghs_last = montant_comptabilise_2_total_ghs + montant_comptabilise_2_ghs - nb_rubrique_ghs_ok * montant_comptabilise_2_ghs, montant_comptabilise_22_ghs_last = montant_comptabilise_22_total_ghs + montant_comptabilise_22_ghs - nb_rubrique_ghs_ok * montant_comptabilise_22_ghs; UPDATE w_factures_lignes_c SET nb_prestation = CASE WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN 1 ELSE 0 END, prix_unitaire = CASE WHEN date_fin > date_fin_ghs THEN 0 ELSE prix_unitaire_total_ghs END, montant_facture = CASE WHEN date_fin > date_fin_ghs THEN 0 WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN montant_facture_ghs_last ELSE montant_facture_ghs END, montant_facture_0 = CASE WHEN date_fin > date_fin_ghs THEN 0 WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN montant_facture_0_ghs_last ELSE montant_facture_0_ghs END, montant_facture_1 = CASE WHEN date_fin > date_fin_ghs THEN 0 WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN montant_facture_1_ghs_last ELSE montant_facture_1_ghs END, montant_facture_2 = CASE WHEN date_fin > date_fin_ghs THEN 0 WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN montant_facture_2_ghs_last ELSE montant_facture_2_ghs END, montant_facture_22 = CASE WHEN date_fin > date_fin_ghs THEN 0 WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN montant_facture_22_ghs_last ELSE montant_facture_22_ghs END, montant_comptabilise = CASE WHEN date_fin > date_fin_ghs THEN 0 WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN montant_comptabilise_ghs_last ELSE montant_comptabilise_ghs END, montant_comptabilise_0 = CASE WHEN date_fin > date_fin_ghs THEN 0 WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN montant_comptabilise_0_ghs_last ELSE montant_comptabilise_0_ghs END, montant_comptabilise_1 = CASE WHEN date_fin > date_fin_ghs THEN 0 WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN montant_comptabilise_1_ghs_last ELSE montant_comptabilise_1_ghs END, montant_comptabilise_2 = CASE WHEN date_fin > date_fin_ghs THEN 0 WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN montant_comptabilise_2_ghs_last ELSE montant_comptabilise_2_ghs END, montant_comptabilise_22 = CASE WHEN date_fin > date_fin_ghs THEN 0 WHEN w_factures_lignes_c.CTID = ctid_fin_ghs THEN montant_comptabilise_22_ghs_last ELSE montant_comptabilise_22_ghs END FROM w_factures_ghs, activite.t_prestations, activite[PX].t_rubriques_facturation WHERE w_factures_ghs.no_facture = w_factures_lignes_c.no_facture AND prestation_id = t_prestations.oid AND t_prestations.code IN ('GHS') AND rubrique_facturation_id = t_rubriques_facturation.oid AND t_rubriques_facturation.code = '111'; -- Rubriques internes cti SELECT activite[PX].cti_reorganize_rubrique_facture_c('w_factures_lignes_c'); -- Valider les lignes SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_1'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_2'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_3'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_4'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_5'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_6'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_7'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_8'); DELETE FROM activite[PX].p_factures_lignes_c WHERE no_facture IN (SELECT w_ADDOSSDCPL FROM w_ADP01_factures_modifiees); INSERT INTO activite[PX].p_factures_lignes_c ( facture_id, no_facture, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, rubrique_facture_id, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, ucd_id, lpp_id, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour, montant_comptabilise_budget_global_1, origine_facturation_id ) SELECT facture_id, no_facture, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, rubrique_facture_id, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, ucd_id, lpp_id, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour, montant_comptabilise_budget_global_1, origine_facturation_id FROM w_factures_lignes_c; -- Mise à jour factures et séjour (GHS selon facturation) DROP TABLE IF EXISTS w_MFP01_ghs; CREATE TEMP TABLE w_MFP01_ghs AS SELECT p_factures.oid AS facture_id, w_MFP01.w_ADDOSSDCPL AS no_facture, MAX(CASE WHEN w_MFP01.MFCGHS < '5800' OR w_MFP01.MFCGHS > '5836' THEN w_MFP01_keys.ghs_id ELSE 0 END) AS ghs_id FROM w_MFP01 JOIN activite[PX].p_factures ON w_ADDOSSDCPL = p_factures.no_facture AND p_factures.ghs_id = 0 JOIN w_MFP01_keys ON w_MFP01.key = w_MFP01_keys.key WHERE w_MFP01.MFCCLE = 'GHS' GROUP BY 1,2; CREATE INDEX w_MFP01_ghs_i1 ON w_MFP01_ghs USING btree (no_facture); UPDATE activite[PX].p_factures SET ghs_id = w_MFP01_ghs.ghs_id FROM w_MFP01_ghs WHERE p_factures.ghs_id = 0 AND w_MFP01_ghs.no_facture = p_factures.no_facture AND w_MFP01_ghs.ghs_id <> 0; UPDATE activite[PX].p_sejours SET ghs_id = p_factures.ghs_id FROM activite[PX].p_factures WHERE p_sejours.ghs_id = 0 AND p_factures.no_sejour = p_sejours.no_sejour AND p_factures.type_facture = '0' AND p_factures.ghs_id <> 0; -- Eclatement des supplements par jour SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_2'); DROP TABLE IF EXISTS w_factures_lignes_sup_c; CREATE TEMP TABLE w_factures_lignes_sup_c AS SELECT CTID AS from_CTID, * FROM activite[PX].p_factures_lignes_c WHERE prestation_id IN (SELECT oid FROM activite.t_prestations WHERE code IN ('PJ', 'FJ', 'PHJ', 'SSM', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO') OR t_prestations.type_ventilation_jour = '1' ) AND (nb_prestation > 1 or nb_prestation < -1); DROP TABLE IF EXISTS w_factures_lignes_sup_c_sup; CREATE TEMP TABLE w_factures_lignes_sup_c_sup AS SELECT from_CTID, no_facture, date AS date_debut, date AS date_fin, CASE WHEN nb_rubrique < 0 THEN -1 ELSE 1 END AS nb_rubrique, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, ucd_id, lpp_id, round(montant_facture / ABS(nb_prestation),2) AS montant_facture, round(montant_facture_0 / ABS(nb_prestation),2) AS montant_facture_0, round(montant_facture_1 / ABS(nb_prestation),2) AS montant_facture_1, round(montant_facture_2 / ABS(nb_prestation),2) AS montant_facture_2, round(montant_facture_22 / ABS(nb_prestation),2) AS montant_facture_22, taux_0, taux_1, taux_2, taux_22, finess, prix_unitaire, lieu_id, CASE WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation, round(montant_comptabilise / ABS(nb_prestation),2) AS montant_comptabilise, round(montant_comptabilise_0 / ABS(nb_prestation),2) AS montant_comptabilise_0, round(montant_comptabilise_1 / ABS(nb_prestation),2) AS montant_comptabilise_1, round(montant_comptabilise_2 / ABS(nb_prestation),2) AS montant_comptabilise_2, round(montant_comptabilise_22 / ABS(nb_prestation),2) AS montant_comptabilise_22, round(montant_encours / ABS(nb_prestation),2) AS montant_encours, round(montant_encours_0 / ABS(nb_prestation),2) AS montant_encours_0, round(montant_encours_1 / ABS(nb_prestation),2) AS montant_encours_1, round(montant_encours_2 / ABS(nb_prestation),2) AS montant_encours_2, round(montant_encours_22 / ABS(nb_prestation),2) AS montant_encours_22, round(montant_facture_actes_inclus_dans_sejour / ABS(nb_prestation),2) AS montant_facture_actes_inclus_dans_sejour, round(montant_facture_0_actes_inclus_dans_sejour / ABS(nb_prestation),2) AS montant_facture_0_actes_inclus_dans_sejour, round(montant_facture_1_actes_inclus_dans_sejour / ABS(nb_prestation),2) AS montant_facture_1_actes_inclus_dans_sejour, round(montant_facture_2_actes_inclus_dans_sejour / ABS(nb_prestation),2) AS montant_facture_2_actes_inclus_dans_sejour, round(montant_facture_22_actes_inclus_dans_sejour / ABS(nb_prestation),2) AS montant_facture_22_actes_inclus_dans_sejour, origine_facturation_id, round(montant_comptabilise_budget_global_1 / ABS(nb_prestation),2) AS montant_comptabilise_budget_global_1, facture_id FROM w_factures_lignes_sup_c JOIN base.p_calendrier ON date_debut BETWEEN p_calendrier.date - ABS(nb_prestation)::integer + 1 AND p_calendrier.date AND p_calendrier.date <> date_debut ; DROP TABLE IF EXISTS w_factures_lignes_sup_c_sup_tot; CREATE TEMP TABLE w_factures_lignes_sup_c_sup_tot AS SELECT from_CTID, SUM(montant_facture) AS montant_facture, SUM(montant_facture_0) AS montant_facture_0, SUM(montant_facture_1) AS montant_facture_1, SUM(montant_facture_2) AS montant_facture_2, SUM(montant_facture_22) AS montant_facture_22, SUM(montant_comptabilise) AS montant_comptabilise, SUM(montant_comptabilise_0) AS montant_comptabilise_0, SUM(montant_comptabilise_1) AS montant_comptabilise_1, SUM(montant_comptabilise_2) AS montant_comptabilise_2, SUM(montant_comptabilise_22) AS montant_comptabilise_22, SUM(montant_encours) AS montant_encours, SUM(montant_encours_0) AS montant_encours_0, SUM(montant_encours_1) AS montant_encours_1, SUM(montant_encours_2) AS montant_encours_2, SUM(montant_encours_22) AS montant_encours_22, SUM(montant_facture_actes_inclus_dans_sejour) AS montant_facture_actes_inclus_dans_sejour, SUM(montant_facture_0_actes_inclus_dans_sejour) AS montant_facture_0_actes_inclus_dans_sejour, SUM(montant_facture_1_actes_inclus_dans_sejour) AS montant_facture_1_actes_inclus_dans_sejour, SUM(montant_facture_2_actes_inclus_dans_sejour) AS montant_facture_2_actes_inclus_dans_sejour, SUM(montant_facture_22_actes_inclus_dans_sejour) AS montant_facture_22_actes_inclus_dans_sejour, SUM(montant_comptabilise_budget_global_1) AS montant_comptabilise_budget_global_1 FROM w_factures_lignes_sup_c_sup GROUP BY 1; UPDATE activite[PX].p_factures_lignes_c SET date_fin = p_factures_lignes_c.date_debut, nb_rubrique = CASE WHEN p_factures_lignes_c.nb_rubrique < 0 THEN -1 ELSE 1 END , nb_prestation = CASE WHEN p_factures_lignes_c.nb_prestation < 0 THEN -1 ELSE 1 END , montant_facture = p_factures_lignes_c.montant_facture - w_factures_lignes_sup_c_sup_tot.montant_facture, montant_facture_0 = p_factures_lignes_c.montant_facture_0 - w_factures_lignes_sup_c_sup_tot.montant_facture_0, montant_facture_1 = p_factures_lignes_c.montant_facture_1 - w_factures_lignes_sup_c_sup_tot.montant_facture_1, montant_facture_2 = p_factures_lignes_c.montant_facture_2 - w_factures_lignes_sup_c_sup_tot.montant_facture_2, montant_facture_22 = p_factures_lignes_c.montant_facture_22 - w_factures_lignes_sup_c_sup_tot.montant_facture_22, montant_comptabilise = p_factures_lignes_c.montant_comptabilise - w_factures_lignes_sup_c_sup_tot.montant_comptabilise, montant_comptabilise_0 = p_factures_lignes_c.montant_comptabilise_0 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_0, montant_comptabilise_1 = p_factures_lignes_c.montant_comptabilise_1 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_1, montant_comptabilise_2 = p_factures_lignes_c.montant_comptabilise_2 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_2, montant_comptabilise_22 = p_factures_lignes_c.montant_comptabilise_22 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_22, montant_encours = p_factures_lignes_c.montant_encours - w_factures_lignes_sup_c_sup_tot.montant_encours, montant_encours_0 = p_factures_lignes_c.montant_encours_0 - w_factures_lignes_sup_c_sup_tot.montant_encours_0, montant_encours_1 = p_factures_lignes_c.montant_encours_1 - w_factures_lignes_sup_c_sup_tot.montant_encours_1, montant_encours_2 = p_factures_lignes_c.montant_encours_2 - w_factures_lignes_sup_c_sup_tot.montant_encours_2, montant_encours_22 = p_factures_lignes_c.montant_encours_22 - w_factures_lignes_sup_c_sup_tot.montant_encours_22, montant_facture_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_0_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_1_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_2_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_22_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_22_actes_inclus_dans_sejour, montant_comptabilise_budget_global_1 = p_factures_lignes_c.montant_comptabilise_budget_global_1 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_budget_global_1 FROM w_factures_lignes_sup_c_sup_tot WHERE p_factures_lignes_c.CTID = from_CTID; INSERT INTO activite[PX].p_factures_lignes_c( no_facture, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, ucd_id, lpp_id, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, taux_0, taux_1, taux_2, taux_22, finess, prix_unitaire, lieu_id, nb_prestation, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour, origine_facturation_id, montant_comptabilise_budget_global_1, facture_id) SELECT no_facture, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, ucd_id, lpp_id, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, taux_0, taux_1, taux_2, taux_22, finess, prix_unitaire, lieu_id, nb_prestation, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour, origine_facturation_id, montant_comptabilise_budget_global_1, facture_id FROM w_factures_lignes_sup_c_sup; -- Lieu exécution SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_4'); UPDATE activite[PX].p_factures_lignes_c SET lieu_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_factures , activite[PX].p_mouvements_sejour WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND p_factures.no_sejour = p_mouvements_sejour.no_sejour AND p_factures_lignes_c.date_fin = p_mouvements_sejour.date AND (230000 BETWEEN p_mouvements_sejour.heure_debut AND p_mouvements_sejour.heure_fin OR nb_entrees_directes = 1 AND heure_fin = 240000 OR nb_sorties_directes = 1 ) AND p_factures_lignes_c.lieu_id <> p_mouvements_sejour.lieu_id; SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_2'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_5'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_6'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_7'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_8'); -- Pour les chambres particulières, regroupement des lignes si même rubrique DROP TABLE IF EXISTS w_fact_cp; CREATE TEMP TABLE w_fact_cp AS SELECT no_facture, date_debut, date_fin, nb_rubrique, nb_prestation, rubrique_facturation_id, rubrique_comptabilisation_id, prestation_id, SUM(prix_unitaire) AS prix_unitaire, SUM(montant_facture) AS montant_facture, SUM(montant_comptabilise) AS montant_comptabilise, MAX(taux_1) AS taux_1, SUM(montant_facture_1) AS montant_facture_1, SUM(montant_comptabilise_1) AS montant_comptabilise_1, MAX(taux_2) AS taux_2, SUM(montant_facture_2) AS montant_facture_2, SUM(montant_comptabilise_2) AS montant_comptabilise_2, MAX(taux_22) AS taux_22, SUM(montant_facture_22) AS montant_facture_22, SUM(montant_comptabilise_22) AS montant_comptabilise_22, MAX(taux_0) AS taux_0, SUM(montant_facture_0) AS montant_facture_0, SUM(montant_comptabilise_0) AS montant_comptabilise_0, count(*) AS nb, MIN(CTID) AS keep_CTID FROM activite[PX].p_factures_lignes_c WHERE montant_facture <> 0 AND date_debut = date_fin AND rubrique_facturation_id IN (SELECT to_id FROM activite[PX].t_listes JOIN activite[PX].t_listes_contenu ON liste_id = t_listes.oid WHERE t_listes.code = 'CTI_SHO_R') GROUP BY 1,2,3,4,5,6,7,8 HAVING count(*) > 1 ORDER BY 1,2,3,4,5,6,7,8; UPDATE w_fact_cp SET taux_1 = round(base.cti_division(montant_facture_1 * 100.00 , montant_facture),0), taux_2 = round(base.cti_division(montant_facture_2 * 100.00 , montant_facture),0), taux_22 = round(base.cti_division(montant_facture_22 * 100.00 , montant_facture),0); UPDATE w_fact_cp SET taux_0 = 100 - taux_1 - taux_2 - taux_22; UPDATE activite[PX].p_factures_lignes_c SET rubrique_facturation_id = CASE WHEN p_factures_lignes_c.CTID = keep_CTID THEN p_factures_lignes_c.rubrique_facturation_id ELSE -123456789 END, prix_unitaire = w_fact_cp.prix_unitaire, montant_facture = w_fact_cp.montant_facture, montant_comptabilise = w_fact_cp.montant_comptabilise, taux_1 = w_fact_cp.taux_1, montant_facture_1 = w_fact_cp.montant_facture_1, montant_comptabilise_1 = w_fact_cp.montant_comptabilise_1, taux_2 = w_fact_cp.taux_2, montant_facture_2 = w_fact_cp.montant_facture_2, montant_comptabilise_2 = w_fact_cp.montant_comptabilise_2, taux_0 = w_fact_cp.taux_0, montant_facture_0 = w_fact_cp.montant_facture_0, montant_comptabilise_0 = w_fact_cp.montant_comptabilise_0 FROM w_fact_cp WHERE p_factures_lignes_c.no_facture = w_fact_cp.no_facture AND p_factures_lignes_c.date_debut = w_fact_cp.date_debut AND p_factures_lignes_c.date_fin = w_fact_cp.date_fin AND p_factures_lignes_c.nb_rubrique = w_fact_cp.nb_rubrique AND p_factures_lignes_c.nb_prestation = w_fact_cp.nb_prestation AND p_factures_lignes_c.rubrique_facturation_id = w_fact_cp.rubrique_facturation_id AND p_factures_lignes_c.rubrique_comptabilisation_id = w_fact_cp.rubrique_comptabilisation_id AND p_factures_lignes_c.prestation_id = w_fact_cp.prestation_id; DELETE FROM activite[PX].p_factures_lignes_c WHERE rubrique_facturation_id = -123456789; ]]> '' THEN TRPRST ELSE TRPRSA END FROM prod_shs.[ACTIVITESCHEMA]_TRP01 WHERE MFCCLE = '' AND TRCENR = 'A51' AND TRSUJT = '' AND w_ADCSER = TRCSER AND FDRUPR = TRCRUB ; UPDATE w_FDP03_keys SET MFCCLE = 'NOEMIE' WHERE MFCCLE = '' AND FDRUPR = '998'; UPDATE w_FDP03_keys SET MFCCLE = 'DIV' WHERE MFCCLE = '' ; ALTER TABLE w_FDP03_keys ADD CONSTRAINT w_FDP03_keys_pkey PRIMARY KEY(key); INSERT INTO activite.t_prestations(code_original, code, texte, texte_court, clinique_honoraire) SELECT MFCCLE, MFCCLE, MFCCLE, MFCCLE, '' FROM w_FDP03_keys WHERE MFCCLE NOT IN (SELECT code FROM activite.t_prestations) GROUP BY MFCCLE ORDER BY MFCCLE; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT FDRUPR, FDRUPR, FDRUPR, FDRUPR FROM w_FDP03_keys WHERE FDRUPR NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation) GROUP BY FDRUPR ORDER BY FDRUPR; UPDATE w_FDP03_keys SET prestation_id = t_prestations.oid FROM activite.t_prestations WHERE MFCCLE = t_prestations.code; UPDATE w_FDP03_keys SET rubrique_comptabilisee_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation WHERE FDRUPR = t_rubriques_facturation.code_original; -- Montants ventes DROP TABLE IF EXISTS w_factures_soldes_c; CREATE TEMP TABLE w_factures_soldes_c AS SELECT p_factures.oid AS facture_id, w_ADDOSSDCPL AS no_facture, date_vente AS date_comptable, w_MFP01_keys.rubrique_comptabilisation_id AS rubrique_comptabilisee_id, w_MFP01_keys.prestation_id AS prestation_id, SUM(MFMCAM + MFMCA1 + MFMCA2 + MFMCA3) AS montant_comptabilise, SUM(MFMCAM) AS montant_comptabilise_0, SUM(MFMCA1) AS montant_comptabilise_1, SUM(MFMCA2) AS montant_comptabilise_2, SUM(MFMCA3) AS montant_comptabilise_22, 0::numeric AS montant_regle, 0::numeric AS montant_regle_0, 0::numeric AS montant_regle_1, 0::numeric AS montant_regle_2, 0::numeric AS montant_regle_22, '0'::text AS od_avoir FROM w_MFP01 JOIN activite[PX].p_factures ON w_ADDOSSDCPL = p_factures.no_facture JOIN w_MFP01_keys ON w_MFP01.key = w_MFP01_keys.key GROUP BY 1,2,3,4,5 ; -- Montants réglés INSERT INTO w_factures_soldes_c SELECT p_factures.oid AS facture_id, w_ADDOSSDCPL AS no_facture, w_FDDTRG_date AS date_comptable, w_FDP03_keys.rubrique_comptabilisee_id AS rubrique_comptabilisee_id, w_FDP03_keys.prestation_id AS prestation_id, 0::numeric AS montant_comptabilise, 0::numeric AS montant_comptabilise_0, 0::numeric AS montant_comptabilise_1, 0::numeric AS montant_comptabilise_2, 0::numeric AS montant_comptabilise_22, SUM(FDMTRG) AS montant_regle, SUM(FDMTRG_0) AS montant_montant_regle_0, SUM(FDMTRG_1) AS montant_montant_regle_1, SUM(FDMTRG_2) AS montant_montant_regle_2, SUM(FDMTRG_22) AS montant_montant_regle_22, '0'::text AS od_avoir FROM w_FDP03 JOIN activite[PX].p_factures ON w_ADDOSSDCPL = p_factures.no_facture JOIN w_FDP03_keys ON w_FDP03.key = w_FDP03_keys.key GROUP BY 1,2,3,4,5; -- Alimentation tables SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_c_1'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_c_2'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_c_3'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_c_4'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_c_8'); DELETE FROM activite[PX].p_factures_soldes_c WHERE no_facture IN (SELECT w_ADDOSSDCPL FROM w_ADP01_factures_modifiees); INSERT INTO activite[PX].p_factures_soldes_c ( facture_id, no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, od_avoir, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_regle, montant_regle_0, montant_regle_1, montant_regle_2, montant_regle_22 ) SELECT facture_id, no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, od_avoir, SUM(montant_comptabilise), SUM(montant_comptabilise_0), SUM(montant_comptabilise_1), SUM(montant_comptabilise_2), SUM(montant_comptabilise_22), SUM(montant_regle), SUM(montant_regle_0), SUM(montant_regle_1), SUM(montant_regle_2), SUM(montant_regle_22) FROM w_factures_soldes_c GROUP BY 1,2,3,4,5,6; SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_2'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_8'); -- Suppression tables de travail DROP TABLE IF EXISTS w_MFP01; DROP TABLE IF EXISTS w_FDP03; DROP TABLE IF EXISTS w_factures_lignes_c; DROP TABLE IF EXISTS w_factures_soldes_c; ]]> '' ORDER BY TRSUJT, TRDTTR; DROP SEQUENCE IF EXISTS w_TRP01_seq; CREATE TEMP SEQUENCE w_TRP01_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; UPDATE w_TRP01 SET TRSEQU = nextval('w_TRP01_seq'::regclass); UPDATE w_TRP01 SET TRDTT9 = w_TRP01_next.TRDTT1 -1 FROM w_TRP01 w_TRP01_next WHERE w_TRP01.TRSUJT = w_TRP01_next.TRSUJT AND w_TRP01.TRSEQU = w_TRP01_next.TRSEQU - 1; DROP TABLE IF EXISTS w_ACP01; CREATE TEMP TABLE w_ACP01 AS SELECT w_ADDOSSDCPL, ACDTA1, COALESCE(to_date(to_char(ACDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS ACDTA1_date, ACHRA1, COALESCE(to_date(to_char(CASE WHEN ACDTA9 >= ACDTA1 THEN ACDTA9 ELSE ACDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS ACDTA9_date, w_ADCSER AS ACCSER, w_ADACTI AS ACACTI, w_ADETAG AS ACETAG, w_ADCHLT AS ACCHLT, to_char(ACRUPR,'FM0000') AS ACRUPR, ACCCLE, CASE WHEN ACCCAM <> '' THEN ACCCAM ELSE ACCCLE END AS ACCCAM, ACCCAC, ACCCXD, ACCCPT, ACCCM1, ACCCM2, ACCCM3, ACCCM4, w_ADCSER || '|' || w_ADACTI || '|' || w_ADETAG || '|' || w_ADCHLT || '|' || ACCCLE || '|' || ACCCAM || '|' || to_char(ACRUPR,'FM0000') AS key, CASE WHEN w_ADADAV IN ('2', '4', '6') AND ACNBRE > 0 THEN 0 - ACNBRE ELSE ACNBRE END AS ACNBRE, CASE WHEN ACCOE1 <> 0 THEN ACCOE1 ELSE 1 END AS ACCOE1, ACPRUA, ACMTDP FROM prod_shs.[ACTIVITESCHEMA]_ACP01 JOIN w_ADP01 ON (ACDOSS = w_ADDOSS AND ACDCPL = w_ADDCPL AND W_ADCFAC <> '1' AND w_CODENV = '') WHERE ACCCLH = '2' AND ACCANN = '1'; UPDATE w_ACP01 SET ACPRUA = TRPRUE FROM w_TRP01 WHERE ACCCLE = TRSUJT AND ACPRUA = 0 AND ACDTA1 BETWEEN TRDTT1 AND TRDTT9; DROP TABLE IF EXISTS w_ACP01_keys; CREATE TEMP TABLE w_ACP01_keys AS SELECT key, ACCSER, ACACTI, ACETAG, ACCHLT, ACCCLE, ACRUPR, ACCCAM, 0::bigint AS medecin_facture_id, ''::text AS prestation_code, 0::bigint AS prestation_id, 0::bigint AS acte_id, 0::bigint AS lieu_id FROM w_ACP01 GROUP BY 1,2,3,4,5,6,7,8; UPDATE w_ACP01_keys SET prestation_code = CASE WHEN TRPRST <> '' THEN TRPRST WHEN TRPRSA <> '' THEN TRPRSA ELSE ACCCLE END FROM prod_shs.[ACTIVITESCHEMA]_TRP01 WHERE prestation_code = '' AND TRCENR = 'A59' AND TRSUJT = ACCCLE ; UPDATE w_ACP01_keys SET prestation_code = 'DIV' WHERE prestation_code = ''; ALTER TABLE w_ACP01_keys ADD CONSTRAINT w_ACP01_keys_pkey PRIMARY KEY(key); INSERT INTO activite[PX].t_lieux(code_original_1, code_original_2, code_original_3, code_original_4) SELECT ACCSER, ACACTI, ACETAG, ACETAG || '|' || ACCHLT FROM w_ACP01_keys LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = ACCSER AND code_original_2 = ACACTI AND code_original_3 = ACETAG AND code_original_4 = ACETAG || '|' || ACCHLT ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4; INSERT INTO activite.t_prestations(code_original, code, texte, texte_court, clinique_honoraire) SELECT prestation_code, prestation_code, prestation_code, prestation_code, '' FROM w_ACP01_keys WHERE prestation_code NOT IN (SELECT code FROM activite.t_prestations) GROUP BY prestation_code ORDER BY prestation_code; DROP TABLE IF EXISTS w_new_actes; CREATE TEMP TABLE w_new_actes AS SELECT substring(ACCCAM, 1, 7) as acte_code, substring(ACCCAM, 1, 7) as acte_texte, substring(ACCCAM, 1, 7) as acte_texte_court, CASE WHEN length(ACCCAM) >= 7 THEN 'CCAM' ELSE 'NGAP' END as nomenclature, t_ccam_regroupements.oid as ccam_1_id, t_ccam_regroupements.oid as ccam_4_id FROM w_ACP01_keys LEFT JOIN base.t_actes ON t_actes.code = substring(ACCCAM, 1, 7), base.t_ccam_regroupements WHERE 1=1 AND t_ccam_regroupements.code = 'NGAP' AND t_actes.code IS NULL; INSERT INTO base.t_actes(code, texte, texte_court, nomenclature, ccam_regroupement_id_1, ccam_regroupement_id_4) SELECT acte_code, acte_texte, acte_texte_court, nomenclature, ccam_1_id, ccam_4_id FROM w_new_actes GROUP BY acte_code, acte_texte, acte_texte_court, nomenclature, ccam_1_id, ccam_4_id; UPDATE w_ACP01_keys SET prestation_id = t_prestations.oid FROM activite.t_prestations WHERE prestation_code = t_prestations.code; UPDATE w_ACP01_keys SET medecin_facture_id = t_medecins_administratifs.oid FROM activite[PX].t_medecins_administratifs WHERE ACRUPR = t_medecins_administratifs.code_original; UPDATE w_ACP01_keys SET acte_id = t_actes.oid FROM base.t_actes WHERE substring(ACCCAM, 1, 7) = t_actes.code; UPDATE w_ACP01_keys SET lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE code_original_1 = ACCSER AND code_original_2 = ACACTI AND code_original_3 = ACETAG AND code_original_4 = ACETAG || '|' || ACCHLT; DROP TABLE IF EXISTS w_factures_lignes_non_facturees_h; CREATE TEMP TABLE w_factures_lignes_non_facturees_h AS SELECT p_factures.oid AS facture_id, w_ADDOSSDCPL AS no_facture, ACDTA1_date AS date_debut, ACHRA1 * 10000 AS heure_debut, ACDTA9_date AS date_fin, ACNBRE AS nb_rubrique, ACCOE1 AS coefficient, w_ACP01_keys.medecin_facture_id AS medecin_facture_id, w_ACP01_keys.prestation_id AS prestation_id, ACPRUA AS prix_unitaire, ACMTDP AS montant_depassement, w_ACP01_keys.lieu_id AS lieu_id, w_ACP01_keys.acte_id AS acte_id, ACCCAC AS activite_ccam, ACCCXD AS extension_ccam, ACCCPT AS phase_ccam, ACCCM1 AS modificateur_ccam_1, ACCCM2 AS modificateur_ccam_2, ACCCM3 AS modificateur_ccam_3, ACCCM4 AS modificateur_ccam_4 FROM w_ACP01 JOIN activite[PX].p_factures ON w_ADDOSSDCPL = p_factures.no_facture JOIN w_ACP01_keys ON w_ACP01.key = w_ACP01_keys.key ; DELETE FROM activite[PX].p_factures_lignes_non_facturees_h WHERE no_facture IN (SELECT no_facture FROM w_factures_lignes_non_facturees_h GROUP BY 1); DELETE FROM activite[PX].p_factures_lignes_non_facturees_h WHERE no_facture IN (SELECT no_facture FROM activite[PX].p_factures WHERE code_facture >= '1' GROUP BY 1); INSERT INTO activite[PX].p_factures_lignes_non_facturees_h ( facture_id, no_facture, date_debut, heure_debut, date_fin, nb_rubrique, coefficient, medecin_facture_id, prestation_id, prix_unitaire, montant_depassement, lieu_id, acte_id, activite_ccam, extension_ccam, phase_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4 ) SELECT facture_id, no_facture, date_debut, heure_debut, date_fin, nb_rubrique, coefficient, medecin_facture_id, prestation_id, prix_unitaire, montant_depassement, lieu_id, acte_id, activite_ccam, extension_ccam, phase_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4 FROM w_factures_lignes_non_facturees_h; ]]> = MFDTA1 THEN MFDTA9 ELSE MFDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS MFDTA9_date, MFCSER, MFACTI, MFETAG, MFCHLT, to_char(MFRUPR,'FM0000') AS MFRUPR, to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS MFCPRC, MFCCLE, CASE WHEN MFCCAM <> '' THEN SUBSTR(MFCCAM,1,7) ELSE MFCCLE END AS MFCCAM, MFCCAC, MFCCXD, MFCCPT, MFCCM1, MFCCM2, MFCCM3, MFCCM4, MFCSER || '|' || MFACTI || '|' || MFETAG || '|' || MFCHLT || '|' || MFCCLE || '|' || SUBSTR(MFCCAM,1,7) || '|' || to_char(MFRUPR,'FM0000') || '|' || to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS key, CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END AS MFNBRE, CASE WHEN MFCOE1 <> 0 THEN MFCOE1 ELSE 1 END AS MFCOE1, CASE WHEN MFCOET <> 0 THEN MFCOET ELSE 1 END AS MFCOET, ABS(MFPRUA) AS MFPRUA, MFTFAM, MFTFA1, MFTFA2, MFTFA3, MFMFAM, MFMFA1, MFMFA2, MFMFA3, MFMTDP, CASE WHEN w_ADPAD5 = '1' THEN MFMCAM ELSE MFMFAM END AS MFMCAM, CASE WHEN w_ADPAD5 = '1' THEN MFMCA1 ELSE MFMFA1 END AS MFMCA1, CASE WHEN w_ADPAD5 = '1' THEN MFMCA2 ELSE MFMFA2 END AS MFMCA2, CASE WHEN w_ADPAD5 = '1' THEN MFMCA3 ELSE MFMFA3 END AS MFMCA3 FROM prod_shs.[ACTIVITESCHEMA]_MFP01CCAM JOIN w_ADP01_factures_modifiees w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = '') ; INSERT INTO w_MFP01 SELECT w_ADDOSSDCPL, COALESCE(to_date(to_char(MFDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, MFHRA1, COALESCE(to_date(to_char(CASE WHEN MFDTA9 >= MFDTA1 THEN MFDTA9 ELSE MFDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS MFDTA9_date, MFCSER, MFACTI, MFETAG, MFCHLT, to_char(MFRUPR,'FM0000') AS MFRUPR, to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS MFCPRC, MFCCLE, MFCCLE AS MFCCAM, ''::text AS MFCCAC, ''::text AS MFCCXD, ''::text AS MFCCPT, ''::text AS MFCCM1, ''::text AS MFCCM2, ''::text AS MFCCM3, ''::text AS MFCCM4, MFCSER || '|' || MFACTI || '|' || MFETAG || '|' || MFCHLT || '|' || MFCCLE || '||' || to_char(MFRUPR,'FM0000') || '|' || to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS key, CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END AS MFNBRE, CASE WHEN MFCOE1 <> 0 THEN MFCOE1 ELSE 1 END AS MFCOE1, CASE WHEN MFCOET <> 0 THEN MFCOET ELSE 1 END AS MFCOET, ABS(MFPRUA) AS MFPRUA, MFTFAM, MFTFA1, MFTFA2, MFTFA3, MFMFAM, MFMFA1, MFMFA2, MFMFA3, MFMTDP, CASE WHEN w_ADPAD5 = '1' THEN MFMCAM ELSE MFMFAM END AS MFMCAM, CASE WHEN w_ADPAD5 = '1' THEN MFMCA1 ELSE MFMFA1 END AS MFMCA1, CASE WHEN w_ADPAD5 = '1' THEN MFMCA2 ELSE MFMFA2 END AS MFMCA2, CASE WHEN w_ADPAD5 = '1' THEN MFMCA3 ELSE MFMFA3 END AS MFMCA3 FROM prod_shs.[ACTIVITESCHEMA]_MFP01HON JOIN w_ADP01_factures_modifiees w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = '') ; INSERT INTO w_MFP01 SELECT w_ADDOSSDCPL, COALESCE(to_date(to_char(MFDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, MFHRA1, COALESCE(to_date(to_char(CASE WHEN MFDTA9 >= MFDTA1 THEN MFDTA9 ELSE MFDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS MFDTA9_date, MFCSER, MFACTI, MFETAG, MFCHLT, to_char(MFRUPR,'FM0000') AS MFRUPR, to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS MFCPRC, MFCCLE, MFCCLE AS MFCCAM, ''::text AS MFCCAC, ''::text AS MFCCXD, ''::text AS MFCCPT, ''::text AS MFCCM1, ''::text AS MFCCM2, ''::text AS MFCCM3, ''::text AS MFCCM4, MFCSER || '|' || MFACTI || '|' || MFETAG || '|' || MFCHLT || '|' || MFCCLE || '||' || to_char(MFRUPR,'FM0000') || '|' || to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS key, CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END AS MFNBRE, CASE WHEN MFCOE1 <> 0 THEN MFCOE1 ELSE 1 END AS MFCOE1, CASE WHEN MFCOET <> 0 THEN MFCOET ELSE 1 END AS MFCOET, ABS(MFPRUA) AS MFPRUA, MFTFAM, MFTFA1, MFTFA2, MFTFA3, MFMFAM, MFMFA1, MFMFA2, MFMFA3, MFMTDP, CASE WHEN w_ADPAD5 = '1' THEN MFMCAM ELSE MFMFAM END AS MFMCAM, CASE WHEN w_ADPAD5 = '1' THEN MFMCA1 ELSE MFMFA1 END AS MFMCA1, CASE WHEN w_ADPAD5 = '1' THEN MFMCA2 ELSE MFMFA2 END AS MFMCA2, CASE WHEN w_ADPAD5 = '1' THEN MFMCA3 ELSE MFMFA3 END AS MFMCA3 FROM prod_shs.[ACTIVITESCHEMA]p_MFP01HONP JOIN w_ADP01_factures_modifiees w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = 'P') ; INSERT INTO w_MFP01 SELECT w_ADDOSSDCPL, COALESCE(to_date(to_char(MFDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, MFHRA1, COALESCE(to_date(to_char(CASE WHEN MFDTA9 >= MFDTA1 THEN MFDTA9 ELSE MFDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS MFDTA9_date, MFCSER, MFACTI, MFETAG, MFCHLT, to_char(MFRUPR,'FM0000') AS MFRUPR, to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS MFCPRC, MFCCLE, CASE WHEN MFCCAM <> '' THEN SUBSTR(MFCCAM,1,7) ELSE MFCCLE END AS MFCCAM, MFCCAC, MFCCXD, MFCCPT, MFCCM1, MFCCM2, MFCCM3, MFCCM4, MFCSER || '|' || MFACTI || '|' || MFETAG || '|' || MFCHLT || '|' || MFCCLE || '|' || SUBSTR(MFCCAM,1,7) || '|' || to_char(MFRUPR,'FM0000') || '|' || to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS key, CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END AS MFNBRE, CASE WHEN MFCOE1 <> 0 THEN MFCOE1 ELSE 1 END AS MFCOE1, CASE WHEN MFCOET <> 0 THEN MFCOET ELSE 1 END AS MFCOET, ABS(MFPRUA) AS MFPRUA, MFTFAM, MFTFA1, MFTFA2, MFTFA3, MFMFAM, MFMFA1, MFMFA2, MFMFA3, MFMTDP, CASE WHEN w_ADPAD5 = '1' THEN MFMCAM ELSE MFMFAM END AS MFMCAM, CASE WHEN w_ADPAD5 = '1' THEN MFMCA1 ELSE MFMFA1 END AS MFMCA1, CASE WHEN w_ADPAD5 = '1' THEN MFMCA2 ELSE MFMFA2 END AS MFMCA2, CASE WHEN w_ADPAD5 = '1' THEN MFMCA3 ELSE MFMFA3 END AS MFMCA3 FROM prod_shs.[ACTIVITESCHEMA]p_MFP01CCAMP JOIN w_ADP01_factures_modifiees w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = 'P') ; INSERT INTO w_MFP01 SELECT w_ADDOSSDCPL, COALESCE(to_date(to_char(MFDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, MFHRA1, COALESCE(to_date(to_char(CASE WHEN MFDTA9 >= MFDTA1 THEN MFDTA9 ELSE MFDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS MFDTA9_date, MFCSER, MFACTI, MFETAG, MFCHLT, to_char(MFRUPR,'FM0000') AS MFRUPR, to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS MFCPRC, MFCCLE, MFCCLE AS MFCCAM, ''::text AS MFCCAC, ''::text AS MFCCXD, ''::text AS MFCCPT, ''::text AS MFCCM1, ''::text AS MFCCM2, ''::text AS MFCCM3, ''::text AS MFCCM4, MFCSER || '|' || MFACTI || '|' || MFETAG || '|' || MFCHLT || '|' || MFCCLE || '||' || to_char(MFRUPR,'FM0000') || '|' || to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS key, CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END AS MFNBRE, CASE WHEN MFCOE1 <> 0 THEN MFCOE1 ELSE 1 END AS MFCOE1, CASE WHEN MFCOET <> 0 THEN MFCOET ELSE 1 END AS MFCOET, ABS(MFPRUA) AS MFPRUA, MFTFAM, MFTFA1, MFTFA2, MFTFA3, MFMFAM, MFMFA1, MFMFA2, MFMFA3, MFMTDP, CASE WHEN w_ADPAD5 = '1' THEN MFMCAM ELSE MFMFAM END AS MFMCAM, CASE WHEN w_ADPAD5 = '1' THEN MFMCA1 ELSE MFMFA1 END AS MFMCA1, CASE WHEN w_ADPAD5 = '1' THEN MFMCA2 ELSE MFMFA2 END AS MFMCA2, CASE WHEN w_ADPAD5 = '1' THEN MFMCA3 ELSE MFMFA3 END AS MFMCA3 FROM prod_shs.[ACTIVITESCHEMA]h_MFP01HONH JOIN w_ADP01_factures_modifiees w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = 'H') ; INSERT INTO w_MFP01 SELECT w_ADDOSSDCPL, COALESCE(to_date(to_char(MFDTA1,'FM00000000'),'YYYYMMDD'), w_ADDTE1_date) AS MFDTA1_date, MFHRA1, COALESCE(to_date(to_char(CASE WHEN MFDTA9 >= MFDTA1 THEN MFDTA9 ELSE MFDTA1 END,'FM00000000'),'YYYYMMDD'), w_ADDTS1_date) AS MFDTA9_date, MFCSER, MFACTI, MFETAG, MFCHLT, to_char(MFRUPR,'FM0000') AS MFRUPR, to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS MFCPRC, MFCCLE, CASE WHEN MFCCAM <> '' THEN SUBSTR(MFCCAM,1,7) ELSE MFCCLE END AS MFCCAM, MFCCAC, MFCCXD, MFCCPT, MFCCM1, MFCCM2, MFCCM3, MFCCM4, MFCSER || '|' || MFACTI || '|' || MFETAG || '|' || MFCHLT || '|' || MFCCLE || '|' || SUBSTR(MFCCAM,1,7) || '|' || to_char(MFRUPR,'FM0000') || '|' || to_char(CASE WHEN MFCPRC <> 0 THEN MFCPRC ELSE MFRUPR END,'FM0000') AS key, CASE WHEN MFMFA1 + MFMFA2 + MFMFA3 + MFMFAM < 0 AND MFNBRE > 0 THEN 0 - MFNBRE ELSE MFNBRE END AS MFNBRE, CASE WHEN MFCOE1 <> 0 THEN MFCOE1 ELSE 1 END AS MFCOE1, CASE WHEN MFCOET <> 0 THEN MFCOET ELSE 1 END AS MFCOET, ABS(MFPRUA) AS MFPRUA, MFTFAM, MFTFA1, MFTFA2, MFTFA3, MFMFAM, MFMFA1, MFMFA2, MFMFA3, MFMTDP, CASE WHEN w_ADPAD5 = '1' THEN MFMCAM ELSE MFMFAM END AS MFMCAM, CASE WHEN w_ADPAD5 = '1' THEN MFMCA1 ELSE MFMFA1 END AS MFMCA1, CASE WHEN w_ADPAD5 = '1' THEN MFMCA2 ELSE MFMFA2 END AS MFMCA2, CASE WHEN w_ADPAD5 = '1' THEN MFMCA3 ELSE MFMFA3 END AS MFMCA3 FROM prod_shs.[ACTIVITESCHEMA]h_MFP01CCAMH JOIN w_ADP01_factures_modifiees w_ADP01 ON (MFDOSS = w_ADDOSS AND MFDCPL = w_ADDCPL AND W_ADCFAC = '1' AND w_CODENV = 'H') ; CREATE INDEX w_MFP01_i1 ON w_MFP01 USING btree (w_ADDOSSDCPL); CREATE INDEX w_MFP01_i2 ON w_MFP01 USING btree (key); DROP TABLE IF EXISTS w_MFP01_keys; CREATE TEMP TABLE w_MFP01_keys AS SELECT key, MFCSER, MFACTI, MFETAG, MFCHLT, MFCCLE, MFRUPR, MFCPRC, MFCCAM, 0::bigint AS medecin_facture_id, 0::bigint AS medecin_comptabilise_id, ''::text AS prestation_code, 0::bigint AS prestation_id, 0::bigint AS acte_id, 0::bigint AS lieu_id FROM w_MFP01 GROUP BY 1,2,3,4,5,6,7,8,9; UPDATE w_MFP01_keys SET prestation_code = CASE WHEN TRPRST <> '' THEN TRPRST WHEN TRPRSA <> '' THEN TRPRSA ELSE MFCCLE END FROM prod_shs.[ACTIVITESCHEMA]_TRP01 WHERE prestation_code = '' AND TRCENR = 'A59' AND TRSUJT = MFCCLE ; UPDATE w_MFP01_keys SET prestation_code = 'DIV' WHERE prestation_code = ''; ALTER TABLE w_MFP01_keys ADD CONSTRAINT w_MFP01_keys_pkey PRIMARY KEY(key); INSERT INTO activite[PX].t_lieux(code_original_1, code_original_2, code_original_3, code_original_4) SELECT MFCSER, MFACTI, MFETAG, MFETAG || '|' || MFCHLT FROM w_MFP01_keys LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = MFCSER AND code_original_2 = MFACTI AND code_original_3 = MFETAG AND code_original_4 = MFETAG || '|' || MFCHLT ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4; INSERT INTO activite.t_prestations(code_original, code, texte, texte_court, clinique_honoraire) SELECT prestation_code, prestation_code, prestation_code, prestation_code, '' FROM w_MFP01_keys WHERE prestation_code NOT IN (SELECT code FROM activite.t_prestations) GROUP BY prestation_code ORDER BY prestation_code; DROP TABLE IF EXISTS w_actes; CREATE TEMP TABLE w_actes AS SELECT substring(MFCCAM, 1, 7) as acte_code, substring(MFCCAM, 1, 7) as acte_texte, substring(MFCCAM, 1, 7) as acte_texte_court, CASE WHEN length(MFCCAM) >= 7 THEN 'CCAM' ELSE 'NGAP' END as nomenclature, t_ccam_regroupements .oid as ccam_id_1, t_ccam_regroupements.oid as ccam_id_4 FROM w_MFP01_keys LEFT JOIN base.t_actes ON t_actes.code = substring(MFCCAM, 1, 7), base.t_ccam_regroupements WHERE 1=1 AND t_actes.code IS NULL AND t_ccam_regroupements.code = 'NGAP'; INSERT INTO base.t_actes(code, texte, texte_court, nomenclature, ccam_regroupement_id_1, ccam_regroupement_id_4) SELECT acte_code, acte_texte, acte_texte_court, nomenclature, ccam_id_1, ccam_id_4 FROM w_actes GROUP BY acte_code,acte_texte,acte_texte_court, nomenclature, ccam_id_1,ccam_id_4; UPDATE w_MFP01_keys SET prestation_id = t_prestations.oid FROM activite.t_prestations WHERE prestation_code = t_prestations.code; UPDATE w_MFP01_keys SET medecin_facture_id = t_medecins_administratifs.oid FROM activite[PX].t_medecins_administratifs WHERE MFRUPR = t_medecins_administratifs.code_original; UPDATE w_MFP01_keys SET medecin_comptabilise_id = t_medecins_administratifs.oid FROM activite[PX].t_medecins_administratifs WHERE MFCPRC = t_medecins_administratifs.code_original; UPDATE w_MFP01_keys SET acte_id = t_actes.oid FROM base.t_actes WHERE substring(MFCCAM, 1, 7) = t_actes.code; UPDATE w_MFP01_keys SET lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE code_original_1 = MFCSER AND code_original_2 = MFACTI AND code_original_3 = MFETAG AND code_original_4 = MFETAG || '|' || MFCHLT; DROP TABLE IF EXISTS w_factures_lignes_h; CREATE TEMP TABLE w_factures_lignes_h AS SELECT p_factures.oid AS facture_id, w_ADDOSSDCPL AS no_facture, MFDTA1_date AS date_debut, MFHRA1 * 10000 AS heure_debut, MFDTA9_date AS date_fin, MFNBRE AS nb_rubrique, MFNBRE AS nb_prestation, MFCOE1 AS coefficient, MFCOET AS coefficient_mco, w_MFP01_keys.medecin_facture_id AS medecin_facture_id, w_MFP01_keys.medecin_comptabilise_id AS medecin_comptabilise_id, w_MFP01_keys.prestation_id AS prestation_id, w_MFP01_keys.acte_id AS acte_id, MFCCAC AS activite_ccam, MFCCXD AS extension_ccam, MFCCPT AS phase_ccam, MFCCM1 AS modificateur_ccam_1, MFCCM2 AS modificateur_ccam_2, MFCCM3 AS modificateur_ccam_3, MFCCM4 AS modificateur_ccam_4, MFMFAM + MFMFA1 + MFMFA2 + MFMFA3 AS montant_facture, MFMFAM AS montant_facture_0, MFMFA1 AS montant_facture_1, MFMFA2 AS montant_facture_2, MFMFA3 AS montant_facture_22, MFMTDP AS montant_depassement, MFTFAM AS taux_0, MFTFA1 AS taux_1, MFTFA2 AS taux_2, MFTFA3 AS taux_22, MFPRUA AS prix_unitaire, w_MFP01_keys.lieu_id AS lieu_id, MFMCAM + MFMCA1 + MFMCA2 + MFMCA3 AS montant_comptabilise, MFMCAM AS montant_comptabilise_0, MFMCA1 AS montant_comptabilise_1, MFMCA2 AS montant_comptabilise_2, MFMCA3 AS montant_comptabilise_22, 0::numeric AS montant_encours, 0::numeric AS montant_encours_0, 0::numeric AS montant_encours_1, 0::numeric AS montant_encours_2, 0::numeric AS montant_encours_22, 0::numeric AS montant_facture_actes_inclus_dans_sejour, 0::numeric AS montant_facture_0_actes_inclus_dans_sejour, 0::numeric AS montant_facture_1_actes_inclus_dans_sejour, 0::numeric AS montant_facture_2_actes_inclus_dans_sejour, 0::numeric AS montant_facture_22_actes_inclus_dans_sejour FROM w_MFP01 JOIN activite[PX].p_factures ON w_ADDOSSDCPL = p_factures.no_facture JOIN w_MFP01_keys ON w_MFP01.key = w_MFP01_keys.key ; SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_1'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_2'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_3'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_4'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_5'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_6'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_7'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_8'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_9'); DELETE FROM activite[PX].p_factures_lignes_h WHERE no_facture IN (SELECT w_ADDOSSDCPL FROM w_ADP01_factures_modifiees); INSERT INTO activite[PX].p_factures_lignes_h ( facture_id, no_facture, date_debut, heure_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, medecin_facture_id, medecin_comptabilise_id, prestation_id, acte_id, activite_ccam, extension_ccam, phase_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_depassement, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour ) SELECT facture_id, no_facture, date_debut, heure_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, medecin_facture_id, medecin_comptabilise_id, prestation_id, acte_id, activite_ccam, extension_ccam, phase_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_depassement, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour FROM w_factures_lignes_h; SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_2'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_5'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_6'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_7'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_8'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_9'); ]]> '' THEN TRPRST ELSE TRPRSA END AS prestation_code, MAX(TRCRUB) AS rubrique_code FROM prod_shs.[ACTIVITESCHEMA]_trp01 WHERE TRCENR = 'A51' GROUP BY 1 ORDER BY 1; UPDATE w_factures_lignes_bg SET rubrique_code = w_prestations.rubrique_code FROM w_prestations WHERE w_factures_lignes_bg.rubrique_code = w_prestations.prestation_code ; INSERT INTO activite.t_prestations(code, code_original, texte, texte_court) SELECT prestation_code, prestation_code, prestation_code, prestation_code FROM w_factures_lignes_bg LEFT JOIN activite.t_prestations ON prestation_code = t_prestations.code WHERE t_prestations.code IS NULL GROUP BY prestation_code; INSERT INTO activite[PX].t_rubriques_facturation(code, code_original, texte, texte_court) SELECT rubrique_code, rubrique_code, rubrique_code, rubrique_code FROM w_factures_lignes_bg LEFT JOIN activite[PX].t_rubriques_facturation ON rubrique_code = t_rubriques_facturation.code WHERE t_rubriques_facturation.code IS NULL GROUP BY rubrique_code; INSERT INTO activite[PX].p_factures_lignes_c( no_facture, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, prestation_id, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, origine_facturation_id, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour, montant_comptabilise_budget_global_1) SELECT no_facture, date_debut, date_fin, nombre AS nb_rubrique, nombre AS nb_prestation, coefficient AS coefficient, coefficient_mco AS coefficient_mco, COALESCE(t_rubriques_facturation.oid,0) AS rubrique_facturation_id, COALESCE(t_rubriques_facturation.oid,0) AS rubrique_comptabilisation_id, COALESCE(t_prestations.oid,0) AS prestation_id, 0 AS montant_facture, 0 AS montant_facture_0, 0 AS montant_facture_1, 0 AS montant_facture_2, 0 AS montant_facture_22, 0 AS taux_0, taux_remboursement AS taux_1, 0 AS taux_2, 0 AS taux_22, prix_unitaire, lieu_id, 0 AS montant_comptabilise, 0 AS montant_comptabilise_0, 0 AS montant_comptabilise_1, 0 AS montant_comptabilise_2, 0 AS montant_comptabilise_22, 0 AS montant_encours, 0 AS montant_encours_0, 0 AS montant_encours_1, 0 AS montant_encours_2, 0 AS montant_encours_22, 4 AS origine_facturation_id, 0 AS montant_facture_actes_inclus_dans_sejour, 0 AS montant_facture_0_actes_inclus_dans_sejour, 0 AS montant_facture_1_actes_inclus_dans_sejour, 0 AS montant_facture_2_actes_inclus_dans_sejour, 0 AS montant_facture_22_actes_inclus_dans_sejour, montant_comptabilise_budget_global_c AS montant_comptabilise_budget_global_1 FROM w_factures_lignes_bg LEFT JOIN activite.t_prestations ON prestation_code = t_prestations.code LEFT JOIN activite[PX].t_rubriques_facturation ON rubrique_code = t_rubriques_facturation.code ; ]]> 0 THEN MCAMTC::text||'01' ELSE NULL END,'YYYYMMDD') AS date_comptable, ''::text AS no_sejour, 0::bigint AS sejour_id, ''::text AS no_facture, 0::bigint AS facture_id, 0::bigint AS medecin_administratif_id, 0::bigint AS tiers_payant_id, ''::text AS mode_reglement_code, '':: text AS type_ecriture, '':: text AS type_piece, CASE WHEN MCCCLH = '1' THEN 'C' ELSE 'H' END AS clinique_honoraire FROM prod_shs.[ACTIVITESCHEMA]_MCP01 WHERE MCTYMV = 0 AND MCCANN <> 'A' AND MCCJAL NOT IN (1,2) ; UPDATE w_MCP01 SET no_sejour = p_factures.no_sejour, sejour_id = p_factures.sejour_id, no_facture = p_factures.no_facture, facture_id = p_factures.oid FROM activite[PX].p_factures WHERE (MCDOSA||'.'||MCDCPA) = p_factures.no_facture ; DROP TABLE IF EXISTS w_CCP01_next; CREATE TEMP TABLE w_CCP01_next AS SELECT MAX(CCANEE*100+CCMOIS + CASE WHEN CCMOIS <> 12 THEN 1 ELSE 89 END) AS CCAMTC FROM prod_shs.[ACTIVITESCHEMA]_CCP01 WHERE CCMOIS <= 12 AND CCMLTT <> 0 AND CCNOR3 IN (320) ; UPDATE w_MCP01 SET MCAMTC = CASE WHEN to_number(substr(MCDTEC,1,6),'FM999999') < CCAMTC THEN CCAMTC ELSE to_number(substr(MCDTEC,1,6),'FM999999') END, date_comptable = to_date(CASE WHEN to_number(substr(MCDTEC,1,6),'FM999999') < CCAMTC THEN CCAMTC ELSE to_number(substr(MCDTEC,1,6),'FM999999') END || '01','YYYYMMDD') FROM w_CCP01_next WHERE MCPOIC <> '1' AND MCAMTC <> CASE WHEN to_number(substr(MCDTEC,1,6),'FM999999') < CCAMTC THEN CCAMTC ELSE to_number(substr(MCDTEC,1,6),'FM999999') END AND MCTYMV = 0 AND MCCANN <> 'A' ; UPDATE w_MCP01 SET MCCPTE = CLCPTE, MCTYPE = CLTYPG FROM prod_shs.[ACTIVITESCHEMA]_CLP01 WHERE MCTYPE = CLTYPE AND MCSANA = CLCCOL AND ( MCCPTE <> CLCPTE OR MCTYPE <> CLTYPG ) ; DELETE FROM activite[PX].p_ecriture_comptable USING (SELECT COALESCE(MIN(date_comptable),'0001-01-01') AS date_comptable_min FROM w_MCP01) subview WHERE p_ecriture_comptable.date_comptable >= date_comptable_min ; INSERT INTO activite[PX].p_ecriture_comptable( code_original, date_comptable, type_ecriture, type_piece, piece, mode_reglement_code, clinique_honoraire, compte_id, journal_id, sejour_id, no_sejour, facture_id, no_facture, medecin_id, tiers_payant_id, texte, montant_credit, montant_debit, est_comptabilise, taux_tva) SELECT to_char(MCFOLI,'FM00000')||'.'||to_char(MCLIGN,'FM00') AS code_original, w_MCP01.date_comptable, CASE WHEN t_journal.type_journal = 'VE' AND MCCPTE LIKE '411%' THEN 'VCLI' WHEN t_journal.type_journal = 'VE' AND MCCPTE LIKE '412%' THEN 'VCLI' WHEN t_journal.type_journal = 'VE' AND MCCPTE LIKE '445%' THEN 'VTVA' WHEN t_journal.type_journal = 'VE' AND w_MCP01.clinique_honoraire = 'C' THEN 'VPRD' WHEN t_journal.type_journal = 'VE' AND w_MCP01.clinique_honoraire = 'H' THEN 'VHON' WHEN MCCPTE LIKE '758%' THEN 'PEPR' WHEN MCCPTE LIKE '658%' THEN 'PEPR' WHEN t_journal.type_journal <> 'VE' AND MCCPTE LIKE '468%' THEN 'ATT' WHEN t_journal.type_journal <> 'VE' AND MCCPTE LIKE '471%' THEN 'ATT' WHEN t_journal.type_journal <> 'VE' AND MCCPTE LIKE '411%' THEN 'RCLI' WHEN t_journal.type_journal <> 'VE' AND MCCPTE LIKE '412%' THEN 'RCLI' WHEN t_journal.type_journal <> 'VE' AND MCCPTE LIKE '419%' THEN 'ACPT' WHEN t_journal.type_journal <> 'VE' AND MCCPTE LIKE '51%' THEN 'BANQ' WHEN t_journal.type_journal <> 'VE' AND MCCPTE LIKE '531%' THEN 'BANQ' WHEN t_journal.type_journal <> 'VE' AND MCCPTE LIKE '466%' THEN 'PHON' WHEN t_journal.type_journal <> 'VE' AND MCCPTE LIKE '7%' THEN 'XPRD' WHEN t_journal.type_journal <> 'VE' AND MCCPTE LIKE '445%' THEN 'XTVA' ELSE '?'||to_char(MCCJAL,'FM000') END AS type_ecriture, CASE WHEN t_journal.type_journal = 'VE' THEN 'VENTE' ELSE t_journal.type_journal END AS type_piece, MCAMTC::text || to_char(MCCJAL,'FM000') AS piece, w_MCP01.mode_reglement_code, w_MCP01.clinique_honoraire, COALESCE(t_compte.oid,0) AS compte_id, COALESCE(t_journal.oid,0) AS journal_id, w_MCP01.sejour_id, w_MCP01.no_sejour, w_MCP01.facture_id, w_MCP01.no_facture, w_MCP01.medecin_administratif_id, w_MCP01.tiers_payant_id, MCINT3 AS texte, CASE WHEN MCSENS = 'C' THEN MCMONT ELSE 0.00 END AS CREDIT, CASE WHEN MCSENS = 'D' THEN MCMONT ELSE 0.00 END AS DEBIT, CASE WHEN MCPOIC = '1' THEN '1'::text ELSE '0'::text END AS est_comptabilise, COALESCE(t_compte.taux_tva,0) AS taux_tva FROM w_MCP01 LEFT JOIN activite[PX].t_compte ON MCCPTE = t_compte.code LEFT JOIN activite[PX].t_journal ON w_MCP01.MCCJAL = t_journal.code_original WHERE t_journal.type_journal IS DISTINCT FROM 'IGNORE' ; ]]> = [ENV_ADM_ANNEEDEBUT] GROUP BY 1 HAVING SUM(CASE WHEN CCNOR3 = 235 THEN CCMLCL ELSE 0 END) <> 0 ORDER BY 1; TRUNCATE activite[PX].p_chiffrier_comptable; INSERT INTO activite[PX].p_chiffrier_comptable( date_comptable, montant_ventes_c, montant_reglements_c, montant_solde_client_c, montant_ventes_h, montant_reglements_h, montant_solde_client_h) SELECT COALESCE(to_date(CCANEE * 10000 + CCMOIS * 100 + 01, 'YYYYMMDD') + interval '1 month' - interval '1 day', '20991231') AS date_comptable, SUM(CASE WHEN CCNOR3 = 105 THEN CCMLCL ELSE 0 END) AS montant_ventes_c, SUM(CASE WHEN CCNOR3 = 230 THEN CCMLCL ELSE 0 END) AS montant_reglements_c, SUM(CASE WHEN CCNOR3 = 235 THEN CCMLCL ELSE 0 END) AS montant_solde_client_c, SUM(CASE WHEN CCNOR3 = 105 THEN CCMLHO ELSE 0 END) AS montant_ventes_h, SUM(CASE WHEN CCNOR3 = 230 THEN CCMLHO ELSE 0 END) AS montant_reglements_h, SUM(CASE WHEN CCNOR3 = 235 THEN CCMLHO ELSE 0 END) AS montant_solde_client_h FROM prod_shs.[ACTIVITESCHEMA]_CCP01 WHERE CCCMON = 'E' AND CCMOIS <= 12 AND CCNOR3 IN (105, 230, 235) AND CCANEE >= [ENV_ADM_ANNEEDEBUT] GROUP BY 1 ORDER BY 1; TRUNCATE activite[PX].p_factures_comptables; DROP TABLE IF EXISTS w_factures_comptables; CREATE TEMP TABLE w_factures_comptables AS SELECT 'H'::text AS historique, FTDOSS, FTDCPL, 0 AS facture_id, to_char(FTDOSS,'FM00000000') || '.' || to_char(FTDCPL,'FM00') AS no_facture, to_date(to_char(FTDTJV,'FM00000000'),'YYYYMMDD') AS date_comptable, SUM(CASE WHEN FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS montant_ventes_c, 0::numeric AS montant_reglements_c, SUM(CASE WHEN FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS montant_ventes_h, 0::numeric AS montant_reglements_h FROM prod_shs.[ACTIVITESCHEMA]h_FTP01H GROUP BY 1,2,3,4,5,6; CREATE INDEX w_factures_comptables_i1 ON w_factures_comptables USING btree (FTDOSS); INSERT INTO w_factures_comptables SELECT 'P'::text AS historique, FTP01.FTDOSS, FTP01.FTDCPL, 0 AS facture_id, to_char(FTP01.FTDOSS,'FM00000000') || '.' || to_char(FTP01.FTDCPL,'FM00') AS no_facture, to_date(to_char(FTDTJV,'FM00000000'),'YYYYMMDD') AS date_comptable, SUM(CASE WHEN FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS montant_ventes_c, 0::numeric AS montant_reglements_c, SUM(CASE WHEN FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS montant_ventes_h, 0::numeric AS montant_reglements_h FROM prod_shs.[ACTIVITESCHEMA]p_FTP01P FTP01 LEFT JOIN w_factures_comptables ON FTP01.FTDOSS = w_factures_comptables.FTDOSS AND FTP01.FTDCPL = w_factures_comptables.FTDCPL WHERE w_factures_comptables.FTDOSS IS NULL GROUP BY 1,2,3,4,5,6; INSERT INTO w_factures_comptables SELECT ''::text AS historique, FTP01.FTDOSS, FTP01.FTDCPL, 0 AS facture_id, to_char(FTP01.FTDOSS,'FM00000000') || '.' || to_char(FTP01.FTDCPL,'FM00') AS no_facture, to_date(to_char(FTDTJV,'FM00000000'),'YYYYMMDD') AS date_comptable, SUM(CASE WHEN FTCCLH = '1' THEN FTMTFA ELSE 0 END) AS montant_ventes_c, 0::numeric AS montant_reglements_c, SUM(CASE WHEN FTCCLH = '2' THEN FTMTFA ELSE 0 END) AS montant_ventes_h, 0::numeric AS montant_reglements_h FROM prod_shs.[ACTIVITESCHEMA]_FTP01 FTP01 LEFT JOIN w_factures_comptables ON FTP01.FTDOSS = w_factures_comptables.FTDOSS AND FTP01.FTDCPL = w_factures_comptables.FTDCPL WHERE w_factures_comptables.FTDOSS IS NULL GROUP BY 1,2,3,4,5,6; INSERT INTO w_factures_comptables SELECT 'H'::text AS historique, FDDOSS, FDDCPL, 0 AS facture_id, to_char(FDDOSS,'FM00000000') || '.' || to_char(FDDCPL,'FM00') AS no_facture, to_date(to_char(FDAMRG * 100 + 01,'FM00000000'), 'YYYYMMDD') + interval '1 month' - interval '1 day' AS date_comptable, 0::numeric AS montant_ventes_c, SUM(CASE WHEN FDCCLH = '1' THEN FDMPRM + FDMPOD ELSE 0 END) AS montant_reglements_c, 0::numeric AS montant_ventes_h, SUM(CASE WHEN FDCCLH = '2' THEN FDMPRM + FDMPOD ELSE 0 END) AS montant_reglements_h FROM prod_shs.[ACTIVITESCHEMA]h_FDP03H JOIN w_factures_comptables ON FDDOSS = w_factures_comptables.FTDOSS AND FDDCPL = w_factures_comptables.FTDCPL AND historique = 'H' WHERE FDAMRG >= [ENV_ADM_ANNEEDEBUT]01 GROUP BY 1,2,3,4,5,6; INSERT INTO w_factures_comptables SELECT 'P'::text AS historique, FDDOSS, FDDCPL, 0 AS facture_id, to_char(FDDOSS,'FM00000000') || '.' || to_char(FDDCPL,'FM00') AS no_facture, to_date(to_char(FDAMRG * 100 + 01,'FM00000000'), 'YYYYMMDD') + interval '1 month' - interval '1 day' AS date_comptable, 0::numeric AS montant_ventes_c, SUM(CASE WHEN FDCCLH = '1' THEN FDMPRM + FDMPOD ELSE 0 END) AS montant_reglements_c, 0::numeric AS montant_ventes_h, SUM(CASE WHEN FDCCLH = '2' THEN FDMPRM + FDMPOD ELSE 0 END) AS montant_reglements_h FROM prod_shs.[ACTIVITESCHEMA]p_FDP03P JOIN w_factures_comptables ON FDDOSS = w_factures_comptables.FTDOSS AND FDDCPL = w_factures_comptables.FTDCPL AND historique = 'P' WHERE FDAMRG >= [ENV_ADM_ANNEEDEBUT]01 GROUP BY 1,2,3,4,5,6; INSERT INTO w_factures_comptables SELECT ''::text AS historique, FDDOSS, FDDCPL, 0 AS facture_id, to_char(FDDOSS,'FM00000000') || '.' || to_char(FDDCPL,'FM00') AS no_facture, to_date(to_char(FDAMRG * 100 + 01,'FM00000000'), 'YYYYMMDD') + interval '1 month' - interval '1 day' AS date_comptable, 0::numeric AS montant_ventes_c, SUM(CASE WHEN FDCCLH = '1' THEN FDMPRM + FDMPOD ELSE 0 END) AS montant_reglements_c, 0::numeric AS montant_ventes_h, SUM(CASE WHEN FDCCLH = '2' THEN FDMPRM + FDMPOD ELSE 0 END) AS montant_reglements_h FROM prod_shs.[ACTIVITESCHEMA]_FDP03 JOIN w_factures_comptables ON FDDOSS = w_factures_comptables.FTDOSS AND FDDCPL = w_factures_comptables.FTDCPL AND historique = '' WHERE FDAMRG >= [ENV_ADM_ANNEEDEBUT]01 GROUP BY 1,2,3,4,5,6; INSERT INTO activite[PX].p_factures_comptables( facture_id, no_facture, date_comptable, montant_ventes_c, montant_reglements_c, montant_ventes_h, montant_reglements_h) SELECT facture_id, no_facture, date_comptable, SUM(montant_ventes_c), SUM(montant_reglements_c), SUM(montant_ventes_h), SUM(montant_reglements_h) FROM w_factures_comptables WHERE date_comptable >= '[ENV_ADM_ANNEEDEBUT]0101' GROUP BY 1,2,3; ]]> 0 WHERE t_tiers_payant.code_original = CFCCAI AND COALESCE(t_tiers_payant.grand_regime_id,0) = 0 AND t_grands_regimes.oid <> 0; -- Adresses des tiers INSERT INTO base.t_codes_postaux(code, texte, texte_court, departement_id) SELECT CACODP, MAX(CAVILE), MAX(CAVILE), MAX(t_departements.oid) FROM prod_shs.[ACTIVITESCHEMA]_CAP01 LEFT JOIN base.t_codes_postaux ON CACODP = t_codes_postaux.code JOIN base.t_departements ON CACODP NOT LIKE '97%' AND substr(CACODP,1,2) = t_departements.code OR CACODP LIKE '97%' AND substr(CACODP,1,3) = t_departements.code WHERE t_codes_postaux.oid IS NULL GROUP BY 1 ; UPDATE activite[PX].t_tiers_payant SET adresse = CAADRE || ' ' || CAADRS, code_postal_id = COALESCE(t_codes_postaux.oid,0), ville = CAVILE, telephone = CATLPH, fax = CAFAXC FROM prod_shs.[ACTIVITESCHEMA]_CAP01 LEFT JOIN base.t_codes_postaux ON CACODP = t_codes_postaux.code WHERE t_tiers_payant.code_original = CACCAI AND ( adresse IS DISTINCT FROM (CAADRE || ' ' || CAADRS) OR code_postal_id IS DISTINCT FROM COALESCE(t_codes_postaux.oid,0) OR ville IS DISTINCT FROM CAVILE OR telephone IS DISTINCT FROM CATLPH OR fax IS DISTINCT FROM CAFAXC ) ; ]]> '' AND spe.code_original IS NULL ORDER BY SPCSPE; INSERT INTO activite[PX].t_specialites_medecin(oid, code, code_original, texte, texte_court) SELECT 0, '', '0', 'Non saisie', 'Non saisie' WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_specialites_medecin); INSERT INTO base.t_medecins(oid, nom, prenom, numero_ordre, specialite_id ) SELECT 0, 'Non renseigné', '', '', 0 WHERE 0 NOT IN (SELECT oid FROM base.t_medecins); INSERT INTO activite[PX].t_medecins_administratifs(oid, code_original, code, nom, prenom, specialite_id, medecin_id) SELECT 0, '0', '****', 'Non renseigné', '', 0, 0 WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_medecins_administratifs); DROP TABLE IF EXISTS w_medecins; CREATE TEMP TABLE w_medecins AS SELECT to_char(MDPRAT,'FM0000') AS MDPRAT, base.cti_soundex_nom(MDNOMS) AS MDNOMS_SOUNDEX, base.cti_soundex_nom(COALESCE(MDPRES,'')) AS MDPRES_SOUNDEX, MDNOMS, COALESCE(MDPRES,'') AS MDPRES, COALESCE(MDNIOM,'') AS MDNIOM, MDCSPE, COALESCE(t_medecins_administratifs.medecin_id,0) as medecin_id FROM prod_shs.[ACTIVITESCHEMA]_MDP01 LEFT JOIN activite[PX].t_medecins_administratifs ON to_char(MDPRAT,'FM0000') = t_medecins_administratifs.code_original; INSERT INTO base.t_medecins(nom, prenom, numero_ordre, specialite_id) SELECT w_medecins.MDNOMS, w_medecins.MDPRES, w_medecins.MDNIOM, 0 FROM (SELECT SUBSTR(MDNOMS_SOUNDEX, 1, 8) AS MDNOMS_SOUNDEX, SUBSTR(MDPRES_SOUNDEX, 1, 8) AS MDPRES_SOUNDEX, MDNIOM, MIN(MDPRAT) AS MDPRAT FROM w_medecins GROUP BY 1,2,3) subview, w_medecins WHERE w_medecins.MDPRAT = subview.MDPRAT AND subview.MDNOMS_SOUNDEX || ',' || subview.MDPRES_SOUNDEX || ',' || subview.MDNIOM NOT IN (SELECT substr(base.cti_soundex_nom(nom),1,8) || ',' || substr(base.cti_soundex_nom(prenom),1,8) || ',' || numero_ordre FROM base.t_medecins); INSERT INTO base.t_medecins(nom, prenom, numero_ordre, specialite_id) SELECT w_medecins.MDNOMS, w_medecins.MDPRES, w_medecins.MDNIOM, 0 FROM (SELECT MDNOMS_SOUNDEX, MDPRES_SOUNDEX, MIN(MDPRAT) AS MDPRAT FROM w_medecins GROUP BY 1,2) subview, w_medecins WHERE w_medecins.MDPRAT = subview.MDPRAT AND subview.MDNOMS_SOUNDEX || ',' || subview.MDPRES_SOUNDEX NOT IN (SELECT base.cti_soundex_nom(nom) || ',' || base.cti_soundex_nom(prenom) FROM base.t_medecins); UPDATE w_medecins SET medecin_id = subview.medecin_id FROM (SELECT substr(base.cti_soundex_nom(nom),1,8) as nom , substr(base.cti_soundex_nom(prenom),1,8) as prenom, numero_ordre, MIN(oid) AS medecin_id FROM base.t_medecins GROUP BY 1,2,3) subview WHERE SUBSTR(MDNOMS_SOUNDEX, 1, 8) = subview.nom AND SUBSTR(MDPRES_SOUNDEX, 1, 8) = subview.prenom AND MDNIOM = subview.numero_ordre AND w_medecins.medecin_id = 0; UPDATE w_medecins SET medecin_id = subview.medecin_id FROM (SELECT base.cti_soundex_nom(nom) as nom , base.cti_soundex_nom(prenom) as prenom, MIN(oid) AS medecin_id FROM base.t_medecins GROUP BY 1,2) subview WHERE SUBSTR(MDNOMS_SOUNDEX, 1, 8) = subview.nom AND SUBSTR(MDPRES_SOUNDEX, 1, 8) = subview.prenom AND w_medecins.medecin_id = 0; INSERT INTO activite[PX].t_medecins_administratifs(code_original, code, nom, prenom, specialite_id, medecin_id) SELECT DISTINCT MDPRAT, MDPRAT, MDNOMS, MDPRES, COALESCE(t_specialites_medecin.oid,0), medecin_id FROM w_medecins LEFT JOIN base.t_specialites_medecin ON (MDCSPE = t_specialites_medecin.code_original) WHERE MDPRAT NOT IN (SELECT code_original FROM activite[PX].t_medecins_administratifs); UPDATE activite[PX].t_medecins_administratifs SET nom = MDNOMS, prenom = MDPRES, specialite_id = COALESCE(t_specialites_medecin.oid,0), medecin_id = w_medecins.medecin_id FROM w_medecins LEFT JOIN base.t_specialites_medecin ON (MDCSPE = t_specialites_medecin.code_original) WHERE w_medecins.MDPRAT = t_medecins_administratifs.code_original AND ( t_medecins_administratifs.nom <> MDNOMS OR t_medecins_administratifs.prenom <> MDPRES OR t_medecins_administratifs.specialite_id <> COALESCE(t_specialites_medecin.oid,0) OR t_medecins_administratifs.medecin_id <> w_medecins.medecin_id ); UPDATE base.t_medecins SET specialite_id = subview.specialite_id FROM (SELECT t_medecins.oid, MIN(t_medecins_administratifs.specialite_id) as specialite_id FROM base.t_medecins, activite[PX].t_medecins_administratifs , base.t_specialites_medecin WHERE t_medecins.oid = t_medecins_administratifs.medecin_id AND t_medecins_administratifs.specialite_id = t_specialites_medecin.oid GROUP BY t_medecins.oid) subview WHERE t_medecins.oid = subview.oid AND t_medecins.oid <> 0 AND t_medecins.specialite_id = 0; -- Code rpps UPDATE base.t_medecins SET code_rpps = subview.RPPS FROM ( SELECT medecin_id, count(DISTINCT MDRPPS), MAX(MDRPPS::text) AS RPPS FROM activite[PX].t_medecins_administratifs JOIN base.t_medecins ON t_medecins_administratifs.medecin_id = t_medecins.oid JOIN prod_shs.[ACTIVITESCHEMA]_MDP03 ON code_original = to_char(MDPRAT,'FM0000') WHERE MDRPPS <> 0 AND t_medecins.code_rpps = '' AND medecin_id <> 0 GROUP BY 1 HAVING count(DISTINCT MDRPPS) = 1 ) subview WHERE t_medecins.oid = subview.medecin_id ; -- Adresse INSERT INTO base.t_codes_postaux(code, texte, texte_court, departement_id) SELECT MDCODP, MAX(MDVIL1), MAX(MDVIL1), MAX(t_departements.oid) FROM prod_shs.[ACTIVITESCHEMA]_MDP01 LEFT JOIN base.t_codes_postaux ON MDCODP = t_codes_postaux.code JOIN base.t_departements ON MDCODP NOT LIKE '97%' AND substr(MDCODP,1,2) = t_departements.code OR MDCODP LIKE '97%' AND substr(MDCODP,1,3) = t_departements.code WHERE t_codes_postaux.oid IS NULL GROUP BY 1 ; UPDATE activite[PX].t_medecins_administratifs SET adresse = MDADRE || ' ' || MDADS1, code_postal_id = COALESCE(t_codes_postaux.oid,0), ville = MDVIL1, telephone = MDTLPH, fax = MDTLPF, no_adeli = MDNIOM FROM prod_shs.[ACTIVITESCHEMA]_MDP01 LEFT JOIN base.t_codes_postaux ON MDCODP = t_codes_postaux.code WHERE t_medecins_administratifs.code_original = to_char(MDPRAT,'FM0000') AND ( adresse IS DISTINCT FROM (MDADRE || ' ' || MDADS1) OR code_postal_id IS DISTINCT FROM COALESCE(t_codes_postaux.oid,0) OR ville IS DISTINCT FROM MDVIL1 OR telephone IS DISTINCT FROM MDTLPH OR fax IS DISTINCT FROM MDTLPF OR no_adeli IS DISTINCT FROM MDNIOM ) ; ]]> 0 AND t_codes_postaux.departement_id = 0 AND t_departements.code = substring(t_codes_postaux.code, 1, 2); UPDATE base.t_codes_postaux SET departement_id = t_departements.oid FROM base.t_departements WHERE 1=1 AND substring(t_codes_postaux.code, 1, 2) IN ('97', '98') AND t_codes_postaux.oid <> 0 AND t_codes_postaux.departement_id = 0 AND t_departements.code = substring(t_codes_postaux.code, 1, 3); SELECT base.cti_reorganize_codes_postaux_c('activite'); ]]> '' AND SOCSER NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) GROUP BY SOCSER ORDER BY 1; INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, nb_lits) SELECT SOCSER, SOCSER,SOCSER, SOCSER, 0 FROM prod_shs.[ACTIVITESCHEMA]p_SOP01P WHERE SOCSER <> '' AND SOCSER NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) GROUP BY SOCSER ORDER BY 1; INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, nb_lits) SELECT SOCSER, SOCSER,SOCSER, SOCSER, 0 FROM prod_shs.[ACTIVITESCHEMA]h_SOP01H WHERE SOCSER <> '' AND SOCSER NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) GROUP BY SOCSER ORDER BY 1; INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, nb_lits) SELECT ADCSER, ADCSER,ADCSER, ADCSER, 0 FROM prod_shs.[ACTIVITESCHEMA]_ADP01 WHERE ADCSER <> '' AND ADCSER NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) GROUP BY ADCSER ORDER BY 1; INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, nb_lits) SELECT ADCSER, ADCSER,ADCSER, ADCSER, 0 FROM prod_shs.[ACTIVITESCHEMA]p_ADP01P WHERE ADCSER <> '' AND ADCSER NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) GROUP BY ADCSER ORDER BY 1; INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, nb_lits) SELECT ADCSER, ADCSER,ADCSER, ADCSER, 0 FROM prod_shs.[ACTIVITESCHEMA]h_ADP01H WHERE ADCSER <> '' AND ADCSER NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) GROUP BY ADCSER ORDER BY 1; INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, nb_lits) SELECT MFCSER, MFCSER,MFCSER, MFCSER, 0 FROM prod_shs.[ACTIVITESCHEMA]_MFP01CLI WHERE MFCSER <> '' AND MFCSER NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) GROUP BY MFCSER ORDER BY 1; INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, nb_lits) SELECT MFCSER, MFCSER,MFCSER, MFCSER, 0 FROM prod_shs.[ACTIVITESCHEMA]p_MFP01CLIP WHERE MFCSER <> '' AND MFCSER NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) GROUP BY MFCSER ORDER BY 1; INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, nb_lits) SELECT MFCSER, MFCSER,MFCSER, MFCSER, 0 FROM prod_shs.[ACTIVITESCHEMA]h_MFP01CLIH WHERE MFCSER <> '' AND MFCSER NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) GROUP BY MFCSER ORDER BY 1; UPDATE activite[PX].t_services_facturation SET mode_traitement_id = COALESCE(t_modes_traitement.oid,0) FROM prod_shs.[ACTIVITESCHEMA]_SFP01 LEFT JOIN base.t_modes_traitement ON substr(SFCDMT,1,2) = t_modes_traitement.code WHERE t_services_facturation.code_original = SFCSER AND COALESCE(mode_traitement_id,0) = 0 AND COALESCE(mode_traitement_id,0) <> COALESCE(t_modes_traitement.oid,0); UPDATE activite[PX].t_services_facturation SET dmt_id = COALESCE(t_dmt.oid,0) FROM prod_shs.[ACTIVITESCHEMA]_SFP01 LEFT JOIN base.t_dmt ON substr(SFCDMT,3,3) = t_dmt.code WHERE t_services_facturation.code_original = SFCSER AND COALESCE(dmt_id,0) = 0 AND COALESCE(dmt_id,0) <> COALESCE(t_dmt.oid,0); -- Unités médicales INSERT INTO activite[PX].t_unites_medicales(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_unites_medicales); INSERT INTO activite[PX].t_unites_medicales(code_original, code, texte, texte_court) SELECT L3CDUM, L3CDUM, L3LBUM, L3LBUM FROM prod_shs.[PMSISCHEMA]_L3P01 WHERE L3CDUM NOT IN (SELECT code_original FROM activite[PX].t_unites_medicales) ORDER BY L3CDUM; -- Activités INSERT INTO activite[PX].t_activites(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_activites); INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT ASACTI, ASACTI, ASINTS, ASINTS FROM prod_shs.[ACTIVITESCHEMA]_ASP01 WHERE ASACTI NOT IN (SELECT code_original FROM activite[PX].t_activites) ORDER BY ASACTI; INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT SOACTI, SOACTI,SOACTI, SOACTI FROM prod_shs.[ACTIVITESCHEMA]_SOP01 WHERE SOACTI <> '' AND SOACTI NOT IN (SELECT code_original FROM activite[PX].t_activites) GROUP BY SOACTI ORDER BY 1; INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT SOACTI, SOACTI,SOACTI, SOACTI FROM prod_shs.[ACTIVITESCHEMA]p_SOP01P WHERE SOACTI <> '' AND SOACTI NOT IN (SELECT code_original FROM activite[PX].t_activites) GROUP BY SOACTI ORDER BY 1; INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT SOACTI, SOACTI,SOACTI, SOACTI FROM prod_shs.[ACTIVITESCHEMA]h_SOP01H WHERE SOACTI <> '' AND SOACTI NOT IN (SELECT code_original FROM activite[PX].t_activites) GROUP BY SOACTI ORDER BY 1; INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT ADACTI, ADACTI,ADACTI, ADACTI FROM prod_shs.[ACTIVITESCHEMA]_ADP01 WHERE ADACTI <> '' AND ADACTI NOT IN (SELECT code_original FROM activite[PX].t_activites) GROUP BY ADACTI ORDER BY 1; INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT ADACTI, ADACTI,ADACTI, ADACTI FROM prod_shs.[ACTIVITESCHEMA]p_ADP01P WHERE ADACTI <> '' AND ADACTI NOT IN (SELECT code_original FROM activite[PX].t_activites) GROUP BY ADACTI ORDER BY 1; INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT ADACTI, ADACTI,ADACTI, ADACTI FROM prod_shs.[ACTIVITESCHEMA]h_ADP01H WHERE ADACTI <> '' AND ADACTI NOT IN (SELECT code_original FROM activite[PX].t_activites) GROUP BY ADACTI ORDER BY 1; INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT MFACTI, MFACTI,MFACTI, MFACTI FROM prod_shs.[ACTIVITESCHEMA]_MFP01CLI WHERE MFACTI <> '' AND MFACTI NOT IN (SELECT code_original FROM activite[PX].t_activites) GROUP BY MFACTI ORDER BY 1; INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT MFACTI, MFACTI,MFACTI, MFACTI FROM prod_shs.[ACTIVITESCHEMA]p_MFP01CLIP WHERE MFACTI <> '' AND MFACTI NOT IN (SELECT code_original FROM activite[PX].t_activites) GROUP BY MFACTI ORDER BY 1; INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT MFACTI, MFACTI,MFACTI, MFACTI FROM prod_shs.[ACTIVITESCHEMA]h_MFP01CLIH WHERE MFACTI <> '' AND MFACTI NOT IN (SELECT code_original FROM activite[PX].t_activites) GROUP BY MFACTI ORDER BY 1; -- Etages et lits INSERT INTO activite[PX].t_etages(oid, code_original, code, texte, texte_court, nb_lits) SELECT 0, 0, '', 'Non renseigné', 'Non renseigné', 0 WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_etages); INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT CHETAG, CHETAG, MAX(CASE WHEN CHINTS <> '' THEN CHINTS ELSE CHETAG END),MAX( CASE WHEN CHINTS <> '' THEN CHINTS ELSE CHETAG END), MAX(CHNLIT) FROM prod_shs.[ACTIVITESCHEMA]_CHP01 WHERE CHACTI = '' AND CHCHLT = '' AND CHETAG NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY 1,2 ORDER BY 1; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT SOETAG, SOETAG,SOETAG, SOETAG, 0 FROM prod_shs.[ACTIVITESCHEMA]_SOP01 WHERE SOETAG <> '' AND SOETAG NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY SOETAG ORDER BY 1; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT SOETAG, SOETAG,SOETAG, SOETAG, 0 FROM prod_shs.[ACTIVITESCHEMA]p_SOP01P WHERE SOETAG <> '' AND SOETAG NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY SOETAG ORDER BY 1; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT SOETAG, SOETAG,SOETAG, SOETAG, 0 FROM prod_shs.[ACTIVITESCHEMA]h_SOP01H WHERE SOETAG <> '' AND SOETAG NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY SOETAG ORDER BY 1; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT ADETAG, ADETAG, ADETAG, ADETAG, 0 FROM prod_shs.[ACTIVITESCHEMA]_ADP01 WHERE ADETAG <> '' AND ADETAG NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY ADETAG ORDER BY 1; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT ADETAG, ADETAG, ADETAG, ADETAG, 0 FROM prod_shs.[ACTIVITESCHEMA]p_ADP01P WHERE ADETAG <> '' AND ADETAG NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY ADETAG ORDER BY 1; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT ADETAG, ADETAG, ADETAG, ADETAG, 0 FROM prod_shs.[ACTIVITESCHEMA]h_ADP01H WHERE ADETAG <> '' AND ADETAG NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY ADETAG ORDER BY 1; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT MFETAG, MFETAG, MFETAG, MFETAG, 0 FROM prod_shs.[ACTIVITESCHEMA]_MFP01CLI WHERE MFETAG <> '' AND MFETAG NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY MFETAG ORDER BY 1; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT MFETAG, MFETAG, MFETAG, MFETAG, 0 FROM prod_shs.[ACTIVITESCHEMA]p_MFP01CLIP WHERE MFETAG <> '' AND MFETAG NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY MFETAG ORDER BY 1; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT MFETAG, MFETAG, MFETAG, MFETAG, 0 FROM prod_shs.[ACTIVITESCHEMA]h_MFP01CLIH WHERE MFETAG <> '' AND MFETAG NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY MFETAG ORDER BY 1; UPDATE activite[PX].t_lits SET code_original = t_etages.code_original || '|' || t_lits.code_original FROM activite[PX].t_etages WHERE t_lits.etage_id = t_etages.oid AND t_lits.code_original NOT LIKE '%|%'; UPDATE activite[PX].t_lits SET code_original = '|' WHERE oid = 0; INSERT INTO activite[PX].t_lits(oid, code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT 0, 0, '', 'Non renseigné', 'Non renseigné', 0, 'N' WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_lits); INSERT INTO activite[PX].t_lits(code, code_original, texte, texte_court, etage_id) SELECT '****', t_etages.code_original || '|' , 'Non renseigné', 'Non renseigné', t_etages.oid FROM activite[PX].t_etages LEFT JOIN activite[PX].t_lits ON t_etages.oid = t_lits.etage_id AND t_lits.code_original = t_etages.code_original || '|' WHERE t_etages.code_original <> '' AND t_lits.oid IS NULL; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT CHETAG || '|' || CHCHLT, CHCHLT, CASE WHEN CHINTS <> '' THEN CHINTS ELSE CHCHLT END, CASE WHEN CHINTS <> '' THEN CHINTS ELSE CHCHLT END, t_etages.oid, CASE WHEN CHCHLT <> '' AND SUBSTR(CHCHLT,5,1) = '' THEN 'O' ELSE 'N' END FROM prod_shs.[ACTIVITESCHEMA]_CHP01 JOIN activite[PX].t_etages ON CHETAG = t_etages.code_original WHERE CHACTI = '' AND CHCHLT <> '' AND CHETAG || '|' || CHCHLT NOT IN (SELECT code_original FROM activite[PX].t_lits) ORDER BY 1; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT SOETAG || '|' || SOCHLT, SOCHLT, SOCHLT, SOCHLT, t_etages.oid, CASE WHEN SOCHLT <> '' AND SUBSTR(SOCHLT,5,1) = '' THEN 'O' ELSE 'N' END FROM prod_shs.[ACTIVITESCHEMA]_SOP01 JOIN activite[PX].t_etages ON SOETAG = t_etages.code_original WHERE SOETAG <> '' AND SOCHLT <> '' AND SOETAG || '|' || SOCHLT NOT IN (SELECT code_original FROM activite[PX].t_lits) GROUP BY SOETAG, SOCHLT, t_etages.oid ORDER BY SOETAG, SOCHLT; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT SOETAG || '|' || SOCHLT, SOCHLT, SOCHLT, SOCHLT, t_etages.oid, CASE WHEN SOCHLT <> '' AND SUBSTR(SOCHLT,5,1) = '' THEN 'O' ELSE 'N' END FROM prod_shs.[ACTIVITESCHEMA]p_SOP01P JOIN activite[PX].t_etages ON SOETAG = t_etages.code_original WHERE SOETAG <> '' AND SOCHLT <> '' AND SOETAG || '|' || SOCHLT NOT IN (SELECT code_original FROM activite[PX].t_lits) GROUP BY SOETAG, SOCHLT, t_etages.oid ORDER BY SOETAG, SOCHLT; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT SOETAG || '|' || SOCHLT, SOCHLT, SOCHLT, SOCHLT, t_etages.oid, CASE WHEN SOCHLT <> '' AND SUBSTR(SOCHLT,5,1) = '' THEN 'O' ELSE 'N' END FROM prod_shs.[ACTIVITESCHEMA]h_SOP01H JOIN activite[PX].t_etages ON SOETAG = t_etages.code_original WHERE SOETAG <> '' AND SOCHLT <> '' AND SOETAG || '|' || SOCHLT NOT IN (SELECT code_original FROM activite[PX].t_lits) GROUP BY SOETAG, SOCHLT, t_etages.oid ORDER BY SOETAG, SOCHLT; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT ADETAG || '|' || ADCHLT, ADCHLT, ADCHLT, ADCHLT, t_etages.oid, CASE WHEN ADCHLT <> '' AND SUBSTR(ADCHLT,5,1) = '' THEN 'O' ELSE 'N' END FROM prod_shs.[ACTIVITESCHEMA]_ADP01 JOIN activite[PX].t_etages ON ADETAG = t_etages.code_original WHERE ADETAG <> '' AND ADCHLT <> '' AND ADETAG || '|' || ADCHLT NOT IN (SELECT code_original FROM activite[PX].t_lits) GROUP BY ADETAG, ADCHLT, t_etages.oid ORDER BY ADETAG, ADCHLT; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT ADETAG || '|' || ADCHLT, ADCHLT, ADCHLT, ADCHLT, t_etages.oid, CASE WHEN ADCHLT <> '' AND SUBSTR(ADCHLT,5,1) = '' THEN 'O' ELSE 'N' END FROM prod_shs.[ACTIVITESCHEMA]p_ADP01P JOIN activite[PX].t_etages ON ADETAG = t_etages.code_original WHERE ADETAG <> '' AND ADCHLT <> '' AND ADETAG || '|' || ADCHLT NOT IN (SELECT code_original FROM activite[PX].t_lits) GROUP BY ADETAG, ADCHLT, t_etages.oid ORDER BY ADETAG, ADCHLT; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT ADETAG || '|' || ADCHLT, ADCHLT, ADCHLT, ADCHLT, t_etages.oid, CASE WHEN ADCHLT <> '' AND SUBSTR(ADCHLT,5,1) = '' THEN 'O' ELSE 'N' END FROM prod_shs.[ACTIVITESCHEMA]h_ADP01H JOIN activite[PX].t_etages ON ADETAG = t_etages.code_original WHERE ADETAG <> '' AND ADCHLT <> '' AND ADETAG || '|' || ADCHLT NOT IN (SELECT code_original FROM activite[PX].t_lits) GROUP BY ADETAG, ADCHLT, t_etages.oid ORDER BY ADETAG, ADCHLT; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT MFETAG || '|' || MFCHLT, MFCHLT, MFCHLT, MFCHLT, t_etages.oid, CASE WHEN MFCHLT <> '' AND SUBSTR(MFCHLT,5,1) = '' THEN 'O' ELSE 'N' END FROM prod_shs.[ACTIVITESCHEMA]_MFP01CLI JOIN activite[PX].t_etages ON MFETAG = t_etages.code_original WHERE MFETAG <> '' AND MFCHLT <> '' AND MFETAG || '|' || MFCHLT NOT IN (SELECT code_original FROM activite[PX].t_lits) GROUP BY MFETAG, MFCHLT, t_etages.oid ORDER BY MFETAG, MFCHLT; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT MFETAG || '|' || MFCHLT, MFCHLT, MFCHLT, MFCHLT, t_etages.oid, CASE WHEN MFCHLT <> '' AND SUBSTR(MFCHLT,5,1) = '' THEN 'O' ELSE 'N' END FROM prod_shs.[ACTIVITESCHEMA]p_MFP01CLIP JOIN activite[PX].t_etages ON MFETAG = t_etages.code_original WHERE MFETAG <> '' AND MFCHLT <> '' AND MFETAG || '|' || MFCHLT NOT IN (SELECT code_original FROM activite[PX].t_lits) GROUP BY MFETAG, MFCHLT, t_etages.oid ORDER BY MFETAG, MFCHLT; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT MFETAG || '|' || MFCHLT, MFCHLT, MFCHLT, MFCHLT, t_etages.oid, CASE WHEN MFCHLT <> '' AND SUBSTR(MFCHLT,5,1) = '' THEN 'O' ELSE 'N' END FROM prod_shs.[ACTIVITESCHEMA]h_MFP01CLIH JOIN activite[PX].t_etages ON MFETAG = t_etages.code_original WHERE MFETAG <> '' AND MFCHLT <> '' AND MFETAG || '|' || MFCHLT NOT IN (SELECT code_original FROM activite[PX].t_lits) GROUP BY MFETAG, MFCHLT, t_etages.oid ORDER BY MFETAG, MFCHLT; UPDATE activite[PX].t_lits SET chambre_particuliere = CASE WHEN split_part(code_original, '|', 2) <> '' AND SUBSTR(split_part(code_original, '|', 2),5,1) = '' THEN 'O' ELSE 'N' END WHERE chambre_particuliere <> CASE WHEN split_part(code_original, '|', 2) <> '' AND SUBSTR(split_part(code_original, '|', 2),5,1) = '' THEN 'O' ELSE 'N' END AND chambre_particuliere = ''; ]]> 'F' AND SUBSTR(SXCACA, 5 , 1) <> 'N' AND SXCACA NOT IN (SELECT code FROM activite.t_prestations) ORDER BY SXCACA; INSERT INTO activite.t_prestations(code_original, code, texte, texte_court, clinique_honoraire) SELECT SXCACA, SXCACA, SXINTS, SXINTS, CASE WHEN SXCCLH = '1' THEN 'C' WHEN SXCCLH = '2' THEN 'H' ELSE '' END FROM ( SELECT 'FJ' AS SXCACA, 'FORFAIT JOURNALIER' AS SXINTS, '1' AS SXCCLH UNION SELECT 'N' AS SXCACA, 'SUPPLEMENT NUIT' AS SXINTS, '2' AS SXCCLH UNION SELECT 'F' AS SXCACA, 'SUPPLEMENT FERIE' AS SXINTS, '2' AS SXCCLH UNION SELECT 'DIV' AS SXCACA, 'DIVERS' AS SXINTS, '' AS SXCCLH UNION SELECT 'NOEMIE' AS SXCACA, 'ACOMPTES NOEMIE' AS SXINTS, '1' AS SXCCLH ) SXP01 WHERE SXCACA NOT IN (SELECT code FROM activite.t_prestations) ORDER BY SXCACA; INSERT INTO activite[PX].t_risque(code, texte) SELECT ADCRIS, ADCRIS FROM prod_shs.[ACTIVITESCHEMA]_ADP01 LEFT JOIN activite[PX].t_risque ON t_risque.code = ADCRIS WHERE 1=1 AND ADCRIS IS DISTINCT FROM NULL AND t_risque.code IS NULL GROUP BY 1,2; ]]> 'PJ' THEN t_prestations.code ELSE 'PJS' END AS prestation_mcode FROM activite[PX].p_factures_lignes_c JOIN activite[PX].t_lieux ON lieu_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON t_services_facturation.oid = service_facturation_id JOIN activite.t_prestations ON prestation_id = t_prestations.oid WHERE date_fin >= '20170701' AND date_debut >= '20170701' AND type_t2a = '2' AND prestation_id = ANY (SELECT to_id FROM activite.t_listes_contenu JOIN activite.t_listes ON liste_id = t_listes.oid AND t_listes.code = 'DMAP_MFS') AND montant_comptabilise <> 0 AND montant_comptabilise_1 <> 0 AND round(prix_unitaire * nb_prestation,2) <> montant_comptabilise AND abs(round(prix_unitaire * nb_prestation,2)) <> abs(montant_comptabilise)+(nb_prestation*18) ORDER BY no_facture, prestation_id ; -- Calcul tarif plein UPDATE w_moins10 SET montant_facture_1 = CASE WHEN prestation_code = 'PJ' THEN round(prix_unitaire * nb_prestation * taux_1 / 100,2) - montant_fj ELSE round(prix_unitaire * nb_prestation * taux_1 / 100,2) END, montant_facture = CASE WHEN prestation_code = 'PJ' THEN round(prix_unitaire * nb_prestation * taux_1 / 100,2) - montant_fj ELSE round(prix_unitaire * nb_prestation * taux_1 / 100,2) END + (montant_facture_2+montant_facture_22+montant_facture_0) ; -- Génération prestations spécifiques INSERT INTO activite.t_prestations (code, texte, texte_court) SELECT prestation_mcode, t_prestations.texte || ' (-10%)', t_prestations.texte || ' (-10%)' FROM w_moins10 JOIN activite.t_prestations on prestation_id = t_prestations.oid WHERE prestation_mcode NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL) GROUP BY 1,2,3 ; -- Maj tarif plein UPDATE activite[PX].p_factures_lignes_c SET montant_facture = w_moins10.montant_facture, montant_facture_1 = w_moins10.montant_facture_1 FROM w_moins10 WHERE p_factures_lignes_c.CTID = w_moins10.CTID_orig; ; -- Génération -10% UPDATE w_moins10 SET montant_facture = montant_comptabilise - montant_facture, montant_facture_1 = montant_comptabilise_1 - montant_facture_1, montant_facture_2 = montant_comptabilise_2 - montant_facture_2, montant_facture_22 = montant_comptabilise_22 - montant_facture_22, montant_facture_0 = montant_comptabilise_0 - montant_facture_0, montant_comptabilise = 0, montant_comptabilise_1 = 0, montant_comptabilise_2 = 0, montant_comptabilise_22 = 0, montant_comptabilise_0 = 0, prestation_id = t_prestations.oid FROM activite.t_prestations WHERE t_prestations.code = prestation_mcode ; ALTER TABLE w_moins10 DROP COLUMN CTID_orig; ALTER TABLE w_moins10 DROP COLUMN montant_fj; ALTER TABLE w_moins10 DROP COLUMN prestation_code; ALTER TABLE w_moins10 DROP COLUMN prestation_mcode; INSERT INTO activite[PX].p_factures_lignes_c SELECT * FROM w_moins10 WHERE montant_facture <> 0 ; SELECT activite[PX].cti_reorganize_rubrique_facture_c('activite[PX].p_factures_lignes_c'); ]]> 0 OR p_factures.montant_comptabilise_h <> 0) AND p_factures.no_facture NOT IN (SELECT no_facture FROM activite[PX].p_factures_lignes_c WHERE date_fin < '20110101' ) AND p_factures.no_facture NOT IN (SELECT no_facture FROM activite[PX].p_factures_lignes_h WHERE date_fin < '20110101' ); INSERT INTO activite[PX].p_factures_lignes_c ( facture_id, no_facture, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, prestation_id, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour, montant_comptabilise_budget_global_1, origine_facturation_id ) SELECT oid AS facture_id, no_facture, date_debut, date_fin, 0 AS nb_rubrique, 0 AS nb_prestation, 1 AS coefficient, 1 AS coefficient_mco, 0 AS rubrique_facturation_id, 0 AS rubrique_comptabilisation_id, 0 AS prestation_id, montant_facture_c, montant_facture_0_c, montant_facture_1_c, montant_facture_2_c, montant_facture_22_c, 0 AS taux_0, 0 AS taux_1, 0 AS taux_2, 0 AS taux_22, montant_facture_c AS prix_unitaire, lieu_sortie_id AS lieu_id, montant_comptabilise_c, montant_comptabilise_0_c, montant_comptabilise_1_c, montant_comptabilise_2_c, montant_comptabilise_22_c, 0 AS montant_encours, 0 AS montant_encours_0, 0 AS montant_encours_1, 0 AS montant_encours_2, 0 AS montant_encours_22, 0 AS montant_facture_actes_inclus_dans_sejour, 0 AS montant_facture_0_actes_inclus_dans_sejour, 0 AS montant_facture_1_actes_inclus_dans_sejour, 0 AS montant_facture_2_actes_inclus_dans_sejour, 0 AS montant_facture_22_actes_inclus_dans_sejour, 0 AS montant_comptabilise_budget_global_1, 1 AS origine_facturation_id FROM w_factures_anciennes WHERE montant_comptabilise_c <> 0; INSERT INTO activite[PX].p_factures_soldes_c ( facture_id, no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, od_avoir, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_regle, montant_regle_0, montant_regle_1, montant_regle_2, montant_regle_22 ) SELECT oid AS facture_id, no_facture, date_vente AS date_comptable, 0 AS rubrique_comptabilisee_id, 0 AS prestation_id, '0' AS od_avoir, montant_comptabilise_c, montant_comptabilise_0_c, montant_comptabilise_1_c, montant_comptabilise_2_c, montant_comptabilise_22_c, 0 AS montant_regle, 0 AS montant_regle_0, 0 AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_factures_anciennes WHERE montant_comptabilise_c <> 0; INSERT INTO activite[PX].p_factures_lignes_h ( facture_id, no_facture, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, medecin_facture_id, medecin_comptabilise_id, prestation_id, acte_id, activite_ccam, extension_ccam, phase_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_depassement, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour ) SELECT oid AS facture_id, no_facture, date_debut, date_fin, 0 AS nb_rubrique, 0 AS nb_prestation, 1 AS coefficient, 1 AS coefficient_mco, 0 AS medecin_facture_id, 0 AS medecin_comptabilise_id, 0 AS prestation_id, 0 AS acte_id, '' AS activite_ccam, '' AS aextension_ccam, '' AS aphase_ccam, '' AS amodificateur_ccam_1, '' AS amodificateur_ccam_2, '' AS amodificateur_ccam_3, '' AS amodificateur_ccam_4, montant_facture_h, montant_facture_0_h, montant_facture_1_h, montant_facture_2_h, montant_facture_22_h, 0 AS montant_depassement, 0 AS taux_0, 0 AS taux_1, 0 AS taux_2, 0 AS taux_22, montant_facture_h AS prix_unitaire, lieu_sortie_id AS lieu_id, montant_comptabilise_h, montant_comptabilise_0_h, montant_comptabilise_1_h, montant_comptabilise_2_h, montant_comptabilise_22_h, 0 AS montant_encours, 0 AS montant_encours_0, 0 AS montant_encours_1, 0 AS montant_encours_2, 0 AS montant_encours_22, 0 AS montant_facture_actes_inclus_dans_sejour, 0 AS montant_facture_0_actes_inclus_dans_sejour, 0 AS montant_facture_1_actes_inclus_dans_sejour, 0 AS montant_facture_2_actes_inclus_dans_sejour, 0 AS montant_facture_22_actes_inclus_dans_sejour FROM w_factures_anciennes WHERE montant_comptabilise_h <> 0; INSERT INTO activite[PX].p_factures_soldes_h ( facture_id, no_facture, date_comptable, medecin_comptabilise_id, od_avoir, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_regle, montant_regle_0, montant_regle_1, montant_regle_2, montant_regle_22 ) SELECT oid AS facture_id, no_facture, date_vente AS date_comptable, 0 AS medecin_comptabilise_id, '0' AS od_avoir, montant_comptabilise_h, montant_comptabilise_0_h, montant_comptabilise_1_h, montant_comptabilise_2_h, montant_comptabilise_22_h, 0 AS montant_regle, 0 AS montant_regle_0, 0 AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_factures_anciennes WHERE montant_comptabilise_h <> 0; ]]> '' GROUP BY 1,2,3 ORDER BY 1; -- Maj code postal sur séjours UPDATE activite[PX].p_sejours SET code_postal_id = t_codes_postaux.oid FROM base.t_codes_postaux, w_ADP01 WHERE w_ADP01.w_ADCODM = t_codes_postaux.code AND p_sejours.no_sejour = '[CPX]' || w_ADP01.w_ADDOSS_a AND w_ADP01.w_ADCODM IS NOT NULL AND w_ADP01.w_ADCODM <> '' AND p_sejours.code_postal_id = 0; -- Maj table OID INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'c_postaux', code_postal_id FROM activite[PX].p_sejours WHERE code_postal_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'c_postaux') GROUP BY 2; -- Ajout médecins traitants dans ACTIVITE (Ajouter dans BASE) INSERT INTO activite[PX].t_medecins_traitants_administratifs(code_original, code, nom, prenom, specialite_id, no_rpps) SELECT DISTINCT w_ADP01.w_ADMEDT, w_ADP01.w_ADMEDT, w_ADP01.w_ADMEDT, '', 0, '' FROM w_ADP01 WHERE w_ADMEDT NOT IN (SELECT code FROM activite[PX].t_medecins_traitants_administratifs); -- maj code rpps UPDATE activite[PX].t_medecins_traitants_administratifs SET no_rpps = MDRPPS FROM prod_shs.[ACTIVITESCHEMA]_MDP03 WHERE MDPRAT = t_medecins_traitants_administratifs.code AND (t_medecins_traitants_administratifs.no_rpps IS NULL OR t_medecins_traitants_administratifs.no_rpps = '' OR t_medecins_traitants_administratifs.no_rpps <> MDRPPS AND MDRPPS IS not NULL AND MDRPPS <> 0 ); -- maj nom prenom spe medecin de référence UPDATE activite[PX].t_medecins_traitants_administratifs SET nom = MDNOMS, prenom = MDPRES, specialite_id = COALESCE(t_specialites_medecin.oid,0) FROM prod_shs.[ACTIVITESCHEMA]_MDP03 JOIN prod_shs.[ACTIVITESCHEMA]_MDP01 ON [ACTIVITESCHEMA]_MDP03.MDPRAT = [ACTIVITESCHEMA]_MDP01.MDPRAT LEFT JOIN base.t_specialites_medecin ON (MDCSPE = t_specialites_medecin.code_original) WHERE [ACTIVITESCHEMA]_MDP03.MDPRAT = t_medecins_traitants_administratifs.code_original AND ( t_medecins_traitants_administratifs.nom <> MDNOMS OR t_medecins_traitants_administratifs.prenom <> MDPRES OR t_medecins_traitants_administratifs.specialite_id <> COALESCE(t_specialites_medecin.oid,0) ); -- maj id médecin_traitant dans séjours UPDATE activite[PX].p_sejours SET medecin_traitant_id = t_medecins_traitants_administratifs.oid FROM w_ADP01 JOIN activite[PX].t_medecins_traitants_administratifs ON w_ADP01.w_ADMEDT = t_medecins_traitants_administratifs.code WHERE w_ADP01.w_ADDOSS_a = p_sejours.no_sejour AND w_ADP01.w_ADMEDT IS NOT NULL AND w_ADP01.w_ADMEDT <> '0000' AND medecin_traitant_id IS DISTINCT FROM t_medecins_traitants_administratifs.oid ; -- ajout des coordonnees par sejour DROP TABLE IF EXISTS w_ADP09 ; CREATE TEMP TABLE w_ADP09 AS SELECT * FROM ( SELECT * FROM prod_shs.[ACTIVITESCHEMA]h_ADP09H UNION SELECT * FROM prod_shs.[ACTIVITESCHEMA]p_ADP09p UNION SELECT * FROM prod_shs.[ACTIVITESCHEMA]_ADP09 ) subq GROUP BY 1,2,3 ; -- ajout des coordonnees par sejour DROP TABLE IF EXISTS w_ADP09 ; CREATE TEMP TABLE w_ADP09 AS SELECT * FROM ( SELECT * FROM prod_shs.[ACTIVITESCHEMA]h_ADP09H UNION SELECT * FROM prod_shs.[ACTIVITESCHEMA]p_ADP09p UNION SELECT * FROM prod_shs.[ACTIVITESCHEMA]_ADP09 ) subq GROUP BY 1,2,3 ; -- ajout des coordonnees par sejour INSERT INTO activite[PX].p_coordonnees_patient ( sejour_id, adresse, code_postal_id, commune, telephone_fixe, telephone_portable, email ) SELECT p_sejours.oid, MAX(w_ADAD1M || CASE WHEN w_ADAD2M != '' THEN ' - ' || w_ADAD2M ELSE '' END), MAX(COALESCE(t_codes_postaux.oid,0)), MAX(w_ADVILM), MAX(w_ADTELM), MAX(ADPORM), MAX(ADMAIL) FROM w_ADP01 LEFT JOIN w_ADP09 ON w_ADDOSS = ADDOSS LEFT JOIN base.t_codes_postaux ON w_ADCODM = t_codes_postaux.code JOIN activite[PX].p_sejours ON code_original = w_ADDOSSDCPL GROUP BY 1 ; ]]> '2099-12-31'; -- Montants facturés pour calculées non passées en fin de journée UPDATE activite[PX].p_factures SET montant_facture_c = subview.montant_facture_c, montant_facture_0_c = subview.montant_facture_0_c, montant_facture_1_c = subview.montant_facture_1_c, montant_facture_2_c = subview.montant_facture_2_c, montant_facture_22_c = subview.montant_facture_22_c FROM ( SELECT p_factures.no_facture, SUM(p_factures_lignes_c.montant_facture) AS montant_facture_c, SUM(p_factures_lignes_c.montant_facture_0) AS montant_facture_0_c, SUM(p_factures_lignes_c.montant_facture_1) AS montant_facture_1_c, SUM(p_factures_lignes_c.montant_facture_2) AS montant_facture_2_c, SUM(p_factures_lignes_c.montant_facture_22) AS montant_facture_22_c from activite[PX].p_factures join activite[PX].p_factures_lignes_c on p_factures.no_facture = p_factures_lignes_c.no_facture WHERE p_factures.code_facture = '2' GROUP BY 1 ) subview WHERE p_factures.no_facture = subview.no_facture AND ( p_factures.montant_facture_c IS DISTINCT FROM subview.montant_facture_c OR p_factures.montant_facture_0_c IS DISTINCT FROM subview.montant_facture_0_c OR p_factures.montant_facture_1_c IS DISTINCT FROM subview.montant_facture_1_c OR p_factures.montant_facture_2_c IS DISTINCT FROM subview.montant_facture_2_c OR p_factures.montant_facture_22_c IS DISTINCT FROM subview.montant_facture_22_c ); UPDATE activite[PX].p_factures SET montant_facture_h = subview.montant_facture_h, montant_facture_0_h = subview.montant_facture_0_h, montant_facture_1_h = subview.montant_facture_1_h, montant_facture_2_h = subview.montant_facture_2_h, montant_facture_22_h = subview.montant_facture_22_h FROM ( SELECT p_factures.no_facture, SUM(p_factures_lignes_h.montant_facture) AS montant_facture_h, SUM(p_factures_lignes_h.montant_facture_0) AS montant_facture_0_h, SUM(p_factures_lignes_h.montant_facture_1) AS montant_facture_1_h, SUM(p_factures_lignes_h.montant_facture_2) AS montant_facture_2_h, SUM(p_factures_lignes_h.montant_facture_22) AS montant_facture_22_h from activite[PX].p_factures join activite[PX].p_factures_lignes_h on p_factures.no_facture = p_factures_lignes_h.no_facture WHERE p_factures.code_facture = '2' GROUP BY 1 ) subview WHERE p_factures.no_facture = subview.no_facture AND ( p_factures.montant_facture_h IS DISTINCT FROM subview.montant_facture_h OR p_factures.montant_facture_0_h IS DISTINCT FROM subview.montant_facture_0_h OR p_factures.montant_facture_1_h IS DISTINCT FROM subview.montant_facture_1_h OR p_factures.montant_facture_2_h IS DISTINCT FROM subview.montant_facture_2_h OR p_factures.montant_facture_22_h IS DISTINCT FROM subview.montant_facture_22_h ); ]]> '2099-12-31'; DROP TABLE IF EXISTS w_sejours_total; CREATE TEMP TABLE w_sejours_total AS SELECT p_sejours.no_sejour AS no_sejour, MAX(COALESCE(p_factures.date_facture,'20991231')) AS date_facture, MAX(COALESCE(p_factures.date_expedition,'20991231')) AS date_expedition, MAX(COALESCE(p_factures.date_solde,'20991231')) AS date_solde, SUM(COALESCE(p_factures.montant_facture_c,0)) AS montant_facture_c, SUM(COALESCE(p_factures.montant_facture_h,0)) AS montant_facture_h, SUM(COALESCE(p_factures.montant_regle_c,0)) AS montant_regle_c, SUM(COALESCE(p_factures.montant_regle_h,0)) AS montant_regle_h, SUM(COALESCE(CASE WHEN p_factures.type_facture <> 'P' AND p_factures.type_facture <> 'E' AND p_factures.type_facture <> 'G' THEN 1 ELSE 0 END,0)) AS nb_factures, SUM(COALESCE(CASE WHEN p_factures.type_facture = '0' THEN 0 ELSE 1 END,0)) AS nb_factures_regularisation, SUM(COALESCE(p_factures.nb_rejets,0)) AS nb_rejets, SUM(COALESCE(p_factures.montant_facture_0_c,0)) AS montant_facture_0_c, SUM(COALESCE(p_factures.montant_facture_0_h,0)) AS montant_facture_0_h, SUM(COALESCE(p_factures.montant_regle_0_c,0)) AS montant_regle_0_c, SUM(COALESCE(p_factures.montant_regle_0_h,0)) AS montant_regle_0_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_0_c <> 0 OR p_factures.montant_facture_0_h <> 0) THEN p_factures.date_expedition_0 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_0, MAX(COALESCE(CASE WHEN p_factures.date_solde_0_c < '2099-12-31' AND p_factures.date_solde_0_c > p_factures.date_solde_0_h THEN p_factures.date_solde_0_c ELSE p_factures.date_solde_0_h END,'20991231' )) AS date_solde_0, SUM(COALESCE(p_factures.montant_facture_1_c,0)) AS montant_facture_1_c, SUM(COALESCE(p_factures.montant_facture_1_h,0)) AS montant_facture_1_h, SUM(COALESCE(p_factures.montant_regle_1_c,0)) AS montant_regle_1_c, SUM(COALESCE(p_factures.montant_regle_1_h,0)) AS montant_regle_1_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_1_c <> 0 OR p_factures.montant_facture_1_h <> 0) THEN p_factures.date_expedition_1 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_1, MAX(COALESCE(CASE WHEN p_factures.date_solde_1_c < '2099-12-31' AND p_factures.date_solde_1_c > p_factures.date_solde_1_h THEN p_factures.date_solde_1_c ELSE p_factures.date_solde_1_h END,'20991231' )) AS date_solde_1, SUM(COALESCE(p_factures.montant_facture_2_c,0)) AS montant_facture_2_c, SUM(COALESCE(p_factures.montant_facture_2_h,0)) AS montant_facture_2_h, SUM(COALESCE(p_factures.montant_regle_2_c,0)) AS montant_regle_2_c, SUM(COALESCE(p_factures.montant_regle_2_h,0)) AS montant_regle_2_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_2_c <> 0 OR p_factures.montant_facture_2_h <> 0) THEN p_factures.date_expedition_2 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_2, MAX(COALESCE(CASE WHEN p_factures.date_solde_2_c < '2099-12-31' AND p_factures.date_solde_2_c > p_factures.date_solde_2_h THEN p_factures.date_solde_2_c ELSE p_factures.date_solde_2_h END,'20991231' )) AS date_solde_2, SUM(COALESCE(p_factures.montant_facture_22_c,0)) AS montant_facture_22_c, SUM(COALESCE(p_factures.montant_facture_22_h,0)) AS montant_facture_22_h, SUM(COALESCE(p_factures.montant_regle_22_c,0)) AS montant_regle_22_c, SUM(COALESCE(p_factures.montant_regle_22_h,0)) AS montant_regle_22_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_22_c <> 0 OR p_factures.montant_facture_22_h <> 0) THEN p_factures.date_expedition_22 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_22, MAX(COALESCE(CASE WHEN p_factures.date_solde_22_c < '2099-12-31' AND p_factures.date_solde_22_c > p_factures.date_solde_22_h THEN p_factures.date_solde_22_c ELSE p_factures.date_solde_22_h END,'20991231' )) AS date_solde_22 , SUM(COALESCE(p_factures.montant_comptabilise_c,0)) AS montant_comptabilise_c, SUM(COALESCE(p_factures.montant_comptabilise_h,0)) AS montant_comptabilise_h, SUM(COALESCE(p_factures.montant_comptabilise_0_c,0)) AS montant_comptabilise_0_c, SUM(COALESCE(p_factures.montant_comptabilise_0_h,0)) AS montant_comptabilise_0_h, SUM(COALESCE(p_factures.montant_comptabilise_1_c,0)) AS montant_comptabilise_1_c, SUM(COALESCE(p_factures.montant_comptabilise_1_h,0)) AS montant_comptabilise_1_h, SUM(COALESCE(p_factures.montant_comptabilise_2_c,0)) AS montant_comptabilise_2_c, SUM(COALESCE(p_factures.montant_comptabilise_2_h,0)) AS montant_comptabilise_2_h, SUM(COALESCE(p_factures.montant_comptabilise_22_c,0)) AS montant_comptabilise_22_c, SUM(COALESCE(p_factures.montant_comptabilise_22_h,0)) AS montant_comptabilise_22_h, SUM(COALESCE(p_factures.montant_comptabilise_budget_global_c,0)) AS montant_comptabilise_budget_global_c, SUM(COALESCE(p_factures.montant_facture_c_actes_inclus_dans_sejour,0)) AS montant_facture_c_actes_inclus_dans_sejour, SUM(COALESCE(p_factures.montant_facture_h_actes_inclus_dans_sejour,0)) AS montant_facture_h_actes_inclus_dans_sejour FROM activite[PX].p_sejours LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND type_facture <> 'P' GROUP BY p_sejours.no_sejour; ALTER TABLE w_sejours_total ADD CONSTRAINT w_sejours_total_pkey PRIMARY KEY(no_sejour); UPDATE activite[PX].p_sejours SET date_facture = w_sejours_total.date_facture, date_expedition = w_sejours_total.date_expedition, date_solde = w_sejours_total.date_solde, montant_facture_c = w_sejours_total.montant_facture_c, montant_facture_h = w_sejours_total.montant_facture_h, montant_regle_c = w_sejours_total.montant_regle_c, montant_regle_h = w_sejours_total.montant_regle_h, nb_factures = w_sejours_total.nb_factures, nb_factures_regularisation = w_sejours_total.nb_factures_regularisation, nb_factures_rejet = w_sejours_total.nb_rejets, montant_facture_0_c = w_sejours_total.montant_facture_0_c, montant_facture_0_h = w_sejours_total.montant_facture_0_h, montant_regle_0_c = w_sejours_total.montant_regle_0_c, montant_regle_0_h = w_sejours_total.montant_regle_0_h, date_expedition_0 = CASE WHEN w_sejours_total.date_expedition_0 <> '0001-01-01' THEN w_sejours_total.date_expedition_0 ELSE '2099-12-31' END, date_solde_0 = w_sejours_total.date_solde_0, montant_facture_1_c = w_sejours_total.montant_facture_1_c, montant_facture_1_h = w_sejours_total.montant_facture_1_h, montant_regle_1_c = w_sejours_total.montant_regle_1_c, montant_regle_1_h = w_sejours_total.montant_regle_1_h, date_expedition_1 = CASE WHEN w_sejours_total.date_expedition_1 <> '0001-01-01' THEN w_sejours_total.date_expedition_1 ELSE '2099-12-31' END, date_solde_1 = w_sejours_total.date_solde_1, montant_facture_2_c = w_sejours_total.montant_facture_2_c, montant_facture_2_h = w_sejours_total.montant_facture_2_h, montant_regle_2_c = w_sejours_total.montant_regle_2_c, montant_regle_2_h = w_sejours_total.montant_regle_2_h, date_expedition_2 = CASE WHEN w_sejours_total.date_expedition_2 <> '0001-01-01' THEN w_sejours_total.date_expedition_2 ELSE '2099-12-31' END, date_solde_2 = w_sejours_total.date_solde_2, montant_facture_22_c = w_sejours_total.montant_facture_22_c, montant_facture_22_h = w_sejours_total.montant_facture_22_h, montant_regle_22_c = w_sejours_total.montant_regle_22_c, montant_regle_22_h = w_sejours_total.montant_regle_22_h, date_expedition_22 = CASE WHEN w_sejours_total.date_expedition_22 <> '0001-01-01' THEN w_sejours_total.date_expedition_22 ELSE '2099-12-31' END, date_solde_22 = w_sejours_total.date_solde_22, montant_comptabilise_c = w_sejours_total.montant_comptabilise_c, montant_comptabilise_h = w_sejours_total.montant_comptabilise_h, montant_comptabilise_0_c = w_sejours_total.montant_comptabilise_0_c, montant_comptabilise_0_h = w_sejours_total.montant_comptabilise_0_h, montant_comptabilise_1_c = w_sejours_total.montant_comptabilise_1_c, montant_comptabilise_1_h = w_sejours_total.montant_comptabilise_1_h, montant_comptabilise_2_c = w_sejours_total.montant_comptabilise_2_c, montant_comptabilise_2_h = w_sejours_total.montant_comptabilise_2_h, montant_comptabilise_22_c = w_sejours_total.montant_comptabilise_22_c, montant_comptabilise_22_h = w_sejours_total.montant_comptabilise_22_h, montant_comptabilise_budget_global_c = w_sejours_total.montant_comptabilise_budget_global_c, montant_facture_c_actes_inclus_dans_sejour = w_sejours_total.montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour = w_sejours_total.montant_facture_h_actes_inclus_dans_sejour FROM w_sejours_total WHERE w_sejours_total.no_sejour = p_sejours.no_sejour AND ( p_sejours.date_facture IS DISTINCT FROM w_sejours_total.date_facture OR p_sejours.date_expedition IS DISTINCT FROM w_sejours_total.date_expedition OR p_sejours.date_solde IS DISTINCT FROM w_sejours_total.date_solde OR p_sejours.montant_facture_c IS DISTINCT FROM w_sejours_total.montant_facture_c OR p_sejours.montant_facture_h IS DISTINCT FROM w_sejours_total.montant_facture_h OR p_sejours.montant_regle_c IS DISTINCT FROM w_sejours_total.montant_regle_c OR p_sejours.montant_regle_h IS DISTINCT FROM w_sejours_total.montant_regle_h OR p_sejours.nb_factures IS DISTINCT FROM w_sejours_total.nb_factures OR p_sejours.nb_factures_regularisation IS DISTINCT FROM w_sejours_total.nb_factures_regularisation OR p_sejours.nb_factures_rejet IS DISTINCT FROM w_sejours_total.nb_rejets OR p_sejours.montant_facture_0_c IS DISTINCT FROM w_sejours_total.montant_facture_0_c OR p_sejours.montant_facture_0_h IS DISTINCT FROM w_sejours_total.montant_facture_0_h OR p_sejours.montant_regle_0_c IS DISTINCT FROM w_sejours_total.montant_regle_0_c OR p_sejours.montant_regle_0_h IS DISTINCT FROM w_sejours_total.montant_regle_0_h OR p_sejours.date_expedition_0 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_0 <> '0001-01-01' THEN w_sejours_total.date_expedition_0 ELSE '2099-12-31' END OR p_sejours.date_solde_0 IS DISTINCT FROM w_sejours_total.date_solde_0 OR p_sejours.montant_facture_1_c IS DISTINCT FROM w_sejours_total.montant_facture_1_c OR p_sejours.montant_facture_1_h IS DISTINCT FROM w_sejours_total.montant_facture_1_h OR p_sejours.montant_regle_1_c IS DISTINCT FROM w_sejours_total.montant_regle_1_c OR p_sejours.montant_regle_1_h IS DISTINCT FROM w_sejours_total.montant_regle_1_h OR p_sejours.date_expedition_1 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_1 <> '0001-01-01' THEN w_sejours_total.date_expedition_1 ELSE '2099-12-31' END OR p_sejours.date_solde_1 IS DISTINCT FROM w_sejours_total.date_solde_1 OR p_sejours.montant_facture_2_c IS DISTINCT FROM w_sejours_total.montant_facture_2_c OR p_sejours.montant_facture_2_h IS DISTINCT FROM w_sejours_total.montant_facture_2_h OR p_sejours.montant_regle_2_c IS DISTINCT FROM w_sejours_total.montant_regle_2_c OR p_sejours.montant_regle_2_h IS DISTINCT FROM w_sejours_total.montant_regle_2_h OR p_sejours.date_expedition_2 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_2 <> '0001-01-01' THEN w_sejours_total.date_expedition_2 ELSE '2099-12-31' END OR p_sejours.date_solde_2 IS DISTINCT FROM w_sejours_total.date_solde_2 OR p_sejours.montant_facture_22_c IS DISTINCT FROM w_sejours_total.montant_facture_22_c OR p_sejours.montant_facture_22_h IS DISTINCT FROM w_sejours_total.montant_facture_22_h OR p_sejours.montant_regle_22_c IS DISTINCT FROM w_sejours_total.montant_regle_22_c OR p_sejours.montant_regle_22_h IS DISTINCT FROM w_sejours_total.montant_regle_22_h OR p_sejours.date_expedition_22 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_22 <> '0001-01-01' THEN w_sejours_total.date_expedition_22 ELSE '2099-12-31' END OR p_sejours.date_solde_22 IS DISTINCT FROM w_sejours_total.date_solde_22 OR p_sejours.montant_comptabilise_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_c OR p_sejours.montant_comptabilise_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_h OR p_sejours.montant_comptabilise_0_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_0_c OR p_sejours.montant_comptabilise_0_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_0_h OR p_sejours.montant_comptabilise_1_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_1_c OR p_sejours.montant_comptabilise_1_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_1_h OR p_sejours.montant_comptabilise_2_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_2_c OR p_sejours.montant_comptabilise_2_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_2_h OR p_sejours.montant_comptabilise_22_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_22_c OR p_sejours.montant_comptabilise_22_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_22_h OR p_sejours.montant_comptabilise_budget_global_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_budget_global_c OR p_sejours.montant_facture_c_actes_inclus_dans_sejour IS DISTINCT FROM w_sejours_total.montant_facture_c_actes_inclus_dans_sejour OR p_sejours.montant_facture_h_actes_inclus_dans_sejour IS DISTINCT FROM w_sejours_total.montant_facture_h_actes_inclus_dans_sejour ); UPDATE activite[PX].p_sejours SET delai_groupage = CASE WHEN code_sorti = '1' AND date_groupage > date_sortie AND date_groupage < '2099-12-31' AND ghs_id <> 0 THEN date_groupage - date_sortie ELSE 0 END, delai_facture = CASE WHEN code_sorti = '1' AND date_facture > date_sortie AND date_facture < '2099-12-31' AND date_facture > date_sortie THEN date_facture - date_sortie ELSE 0 END, delai_expedition = CASE WHEN code_sorti = '1' AND date_expedition > date_sortie AND date_facture < '2099-12-31' AND date_expedition < '2099-12-31' THEN date_expedition - date_sortie ELSE 0 END, delai_solde = CASE WHEN code_sorti = '1' AND date_solde > date_sortie AND date_facture < '2099-12-31' AND date_solde < '2099-12-31' THEN date_solde - date_sortie ELSE 0 END, delai_expedition_0 = CASE WHEN code_sorti = '1' AND date_expedition_0 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_0 < '2099-12-31' THEN date_expedition_0 - date_sortie ELSE 0 END, delai_solde_0 = CASE WHEN code_sorti = '1'AND date_solde_0 > date_sortie AND date_facture < '2099-12-31' AND date_solde_0 < '2099-12-31' THEN date_solde_0 - date_sortie ELSE 0 END, delai_expedition_1 = CASE WHEN code_sorti = '1' AND date_expedition_1 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_1 < '2099-12-31' THEN date_expedition_1 - date_sortie ELSE 0 END, delai_solde_1 = CASE WHEN code_sorti = '1' AND date_solde_1 > date_sortie AND date_facture < '2099-12-31' AND date_solde_1 < '2099-12-31' THEN date_solde_1 - date_sortie ELSE 0 END, delai_expedition_2 = CASE WHEN code_sorti = '1' AND date_expedition_2 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_2 < '2099-12-31' THEN date_expedition_2 - date_sortie ELSE 0 END, delai_solde_2 = CASE WHEN code_sorti = '1' AND date_solde_2 > date_sortie AND date_facture < '2099-12-31' AND date_solde_2 < '2099-12-31' THEN date_solde_2 - date_sortie ELSE 0 END, delai_expedition_22 = CASE WHEN code_sorti = '1' AND date_expedition_22 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_22 < '2099-12-31' THEN date_expedition_22 - date_sortie ELSE 0 END, delai_solde_22 = CASE WHEN code_sorti = '1' AND date_solde_22 > date_sortie AND date_facture < '2099-12-31' AND date_solde_22 < '2099-12-31' THEN date_solde_22 - date_sortie ELSE 0 END WHERE delai_groupage IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_groupage > date_sortie AND date_groupage < '2099-12-31' AND ghs_id <> 0 THEN date_groupage - date_sortie ELSE 0 END OR delai_facture IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_facture > date_sortie AND date_facture < '2099-12-31' AND date_facture > date_sortie THEN date_facture - date_sortie ELSE 0 END OR delai_expedition IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition > date_sortie AND date_facture < '2099-12-31' AND date_expedition < '2099-12-31' THEN date_expedition - date_sortie ELSE 0 END OR delai_solde IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde > date_sortie AND date_facture < '2099-12-31' AND date_solde < '2099-12-31' THEN date_solde - date_sortie ELSE 0 END OR delai_expedition_0 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_0 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_0 < '2099-12-31' THEN date_expedition_0 - date_sortie ELSE 0 END OR delai_solde_0 IS DISTINCT FROM CASE WHEN code_sorti = '1'AND date_solde_0 > date_sortie AND date_facture < '2099-12-31' AND date_solde_0 < '2099-12-31' THEN date_solde_0 - date_sortie ELSE 0 END OR delai_expedition_1 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_1 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_1 < '2099-12-31' THEN date_expedition_1 - date_sortie ELSE 0 END OR delai_solde_1 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde_1 > date_sortie AND date_facture < '2099-12-31' AND date_solde_1 < '2099-12-31' THEN date_solde_1 - date_sortie ELSE 0 END OR delai_expedition_2 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_2 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_2 < '2099-12-31' THEN date_expedition_2 - date_sortie ELSE 0 END OR delai_solde_2 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde_2 > date_sortie AND date_facture < '2099-12-31' AND date_solde_2 < '2099-12-31' THEN date_solde_2 - date_sortie ELSE 0 END OR delai_expedition_22 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_22 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_22 < '2099-12-31' THEN date_expedition_22 - date_sortie ELSE 0 END OR delai_solde_22 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde_22 > date_sortie AND date_facture < '2099-12-31' AND date_solde_22 < '2099-12-31' THEN date_solde_22 - date_sortie ELSE 0 END; -- SHS a la possibilité de fusionner des patients en double -- Le lien se fait au travers du nom du patient dans lequel on retrouver la référence vers le "nouveau" patient / patient "maitre" WITH lien_fusion_patient AS ( SELECT p_sejours.no_sejour, ltrim(trim(split_part(p_patients.nom, 'VOIR IDENTITE', 2)), 0) as new_no_patient FROM activite[PX].p_sejours JOIN activite[PX].p_patients ON p_patients.no_patient = p_sejours.no_patient WHERE p_patients.nom ilike '%VOIR IDENTITE%' ) UPDATE activite[PX].p_sejours SET no_patient = lien_fusion_patient.new_no_patient FROM lien_fusion_patient WHERE 1=1 AND p_sejours.no_sejour = lien_fusion_patient.no_sejour AND p_sejours.no_patient IS DISTINCT FROM lien_fusion_patient.new_no_patient ; ]]> 0 AND oid NOT IN (SELECT oid FROM activite[PX].t_unites_fonctionnelles); ; UPDATE activite[PX].t_lieux SET unite_fonctionnelle_id = service_facturation_id ; ]]>