'' 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
;
]]>