''; UPDATE prod_cegi.CJ_SEJOUR SET SEJ_UAGE = 'H' FROM prod_cegiloghos.OPERA_SEJ WHERE SEJ_NUMDOS = NO_DOSSIER AND ( ETB_ID::text = ANY (string_to_array('[ID_ETAB]'::text,',')) OR '[ID_ETAB]' = '' OR '[ID_ETAB]' = '-1' ); ANALYSE prod_cegi.CJ_SEJOUR ; ]]> 10 ORDER BY 1 LIMIT 1 ; DROP TABLE IF EXISTS w_CEGIFIRSTSTART; CREATE TEMP TABLE w_CEGIFIRSTSTART AS SELECT date(min(CASE WHEN SEJ_CREAT_APPLI = 'LOGHOS1st' AND SEJ_DT_SORTIE >= CEGIFIRSTSTART_significativedate THEN SEJ_DT_SORTIE ELSE NULL END)) AS CEGIFIRSTSTART_date, date(min(CASE WHEN SEJ_UAGE = 'H' THEN SEJ_DT_SORTIE ELSE NULL END)) AS CEGILOGHOSSTART_date FROM prod_cegi.CJ_SEJOUR LEFT JOIN w_LOGHOS1st_date ON 1=1 ; -- Si pas de LOGHOS, tout est en first UPDATE prod_cegi.CJ_SEJOUR SET SEJ_UAGE = 'F' FROM w_CEGIFIRSTSTART WHERE CEGIFIRSTSTART_date IS NULL AND SEJ_UAGE IS DISTINCT FROM 'H' AND ( ETB_ID::text = ANY (string_to_array('[ID_ETAB]'::text,',')) OR '[ID_ETAB]' = '' OR '[ID_ETAB]' = '-1' ); UPDATE prod_cegi.CJ_SEJOUR SET SEJ_UAGE = 'F' FROM w_CEGIFIRSTSTART WHERE COALESCE(SEJ_DT_SORTIE,'20991231') >= CEGIFIRSTSTART_date AND SEJ_DT_ENTREE >= CEGIFIRSTSTART_date AND SEJ_UAGE IS DISTINCT FROM 'H' AND ( ETB_ID::text = ANY (string_to_array('[ID_ETAB]'::text,',')) OR '[ID_ETAB]' = '' OR '[ID_ETAB]' = '-1' ); UPDATE prod_cegi.CJ_SEJOUR SET SEJ_UAGE = 'F' WHERE SEJ_UAGE IS DISTINCT FROM 'F' AND SEJ_ID IN (SELECT SEJ_ID FROM prod_cegi.CJ_EFS) AND ( ETB_ID::text = ANY (string_to_array('[ID_ETAB]'::text,',')) OR '[ID_ETAB]' = '' OR '[ID_ETAB]' = '-1' ) ; ANALYSE prod_cegi.CJ_SEJOUR ; ]]> = '[ENV_ADM_ANNEEDEBUT]0101' OR DATE_SORTIE_SEJOUR IS NULL OR DATE_SORTIE_SEJOUR <= '00010101' OR NO_DOSSIER IN ( ( SELECT DISTINCT NO_DOSSIER FROM prod_cegiloghos.OPERA_FAC WHERE DATE_CALCUL_FACTURE IS NULL OR DATE_CALCUL_FACTURE >= '[ENV_ADM_ANNEEDEBUT]0101' OR DATE_ENVOI_CETELIC_FACT_AMO >= '[ENV_ADM_ANNEEDEBUT]0101' OR DATE_ENVOI_CETELIC_FACT_AMC >= '[ENV_ADM_ANNEEDEBUT]0101' ) UNION ( SELECT DISTINCT NO_DOSSIER FROM prod_cegiloghos.OPERA_REG WHERE DATE_REGLEMENT >= '[ENV_ADM_ANNEEDEBUT]0101' ) ) ; UPDATE w_OPERA_SEJ_select SET DATE_SORTIE_SEJOUR = '20991231', DATE_HEURE_SORTIE_SEJOUR = '20991231' WHERE TYPE_DOSSIER NOT IN('A', 'E', 'I', 'Q') AND (DATE_SORTIE_SEJOUR IS NULL OR DATE_SORTIE_SEJOUR <= '00010101'); UPDATE w_OPERA_SEJ_select SET DATE_SORTIE_SEJOUR = DATE_ENTREE_SEJOUR, DATE_HEURE_SORTIE_SEJOUR = DATE_HEURE_ENTREE_SEJOUR WHERE (DATE_SORTIE_SEJOUR IS NULL OR DATE_SORTIE_SEJOUR <= '00010101'); -- Suppression des dossiers sans numéro de dossier DELETE FROM w_OPERA_SEJ_select WHERE trim(NO_DOSSIER) = '' OR NO_DOSSIER IS NULL; -- Suppression éventuelle dossiers en double DELETE FROM w_OPERA_SEJ_select USING ( SELECT NO_DOSSIER, MAX(CTID) AS CTID_ok FROM w_OPERA_SEJ_select GROUP BY 1 HAVING count(*) > 1 ) subview WHERE w_OPERA_SEJ_select.NO_DOSSIER = subview.NO_DOSSIER AND w_OPERA_SEJ_select.CTID IS DISTINCT FROM subview.CTID_OK; ALTER TABLE w_OPERA_SEJ_select ADD CONSTRAINT w_OPERA_SEJ_select_pkey PRIMARY KEY(NO_DOSSIER); DROP TABLE IF EXISTS w_OPERA_ACT_annee; CREATE TEMP TABLE w_OPERA_ACT_annee AS SELECT OPERA_ACT.NO_DOSSIER, OPERA_ACT.NO_FACTURE, MAX(OPERA_ACT.PERIODE_ANNEE) AS PERIODE_ANNEE, date(MIN(CASE WHEN CODE_PRESTA IN ('PJ') THEN DATE_ACTE_DEBUT ELSE NULL END)) AS DATE_FACT_DEBUT_PJ, date(MAX(CASE WHEN CODE_PRESTA IN ('PJ') THEN DATE_ACTE_FIN ELSE NULL END)) AS DATE_FACT_FIN_PJ FROM prod_cegiloghos.OPERA_ACT JOIN w_OPERA_SEJ_select ON OPERA_ACT.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER WHERE NO_FACTURE <> '000000000' GROUP BY 1,2; ALTER TABLE w_OPERA_ACT_annee ADD CONSTRAINT w_OPERA_ACT_annee_pkey PRIMARY KEY(NO_FACTURE); UPDATE w_OPERA_ACT_annee SET DATE_FACT_DEBUT_PJ = date(DATE_ENTREE_SEJOUR) FROM prod_cegiloghos.OPERA_SEJ WHERE OPERA_SEJ.NO_DOSSIER = w_OPERA_ACT_annee.NO_DOSSIER AND ABS(date(DATE_ENTREE_SEJOUR)-DATE_FACT_DEBUT_PJ) = 1; UPDATE w_OPERA_ACT_annee SET DATE_FACT_FIN_PJ = date(DATE_SORTIE_SEJOUR) FROM prod_cegiloghos.OPERA_SEJ WHERE OPERA_SEJ.NO_DOSSIER = w_OPERA_ACT_annee.NO_DOSSIER AND ABS(date(DATE_SORTIE_SEJOUR)-DATE_FACT_FIN_PJ) = 1; DROP TABLE IF EXISTS w_OPERA_REG_annee; CREATE TEMP TABLE w_OPERA_REG_annee AS SELECT OPERA_REG.NO_FACTURE, MAX(OPERA_REG.PERIODE_ANNEE) AS PERIODE_ANNEE FROM prod_cegiloghos.OPERA_REG JOIN w_OPERA_SEJ_select ON OPERA_REG.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER WHERE NO_FACTURE <> '000000000' AND TYPE_REGLEMENT IN ('1', 'S') GROUP BY 1; ALTER TABLE w_OPERA_REG_annee ADD CONSTRAINT w_OPERA_REG_annee_pkey PRIMARY KEY(NO_FACTURE); -- Correction code UCD à 13 UPDATE prod_cegiloghos.OPERA_ACT SET CODE_UCD = substr(CODE_UCD,7) WHERE length(CODE_UCD) = 13 AND substr(CODE_UCD,1,6) = '000000' ; ]]> subview.EFT_ID AND CJ_XECF.MND_ID = subview.MND_ID AND (CJ_XECF.XECF_PLC LIKE '411%' OR CJ_XECF.XECF_PLC LIKE '412%' OR CJ_XECF.XECF_PLC LIKE '419%') ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = subview.EFT_ID FROM ( SELECT SEJ_ID, TER_ID, MND_ID, MAX(EFT_ID) AS EFT_ID FROM prod_cegi.CJ_EFT WHERE EFT_ID_AVOIR = 0 AND EFT_ETAT = 'F' AND EFT_TTC <> 0 GROUP BY 1,2,3 HAVING count(*) = 1 ) subview, prod_cegi.CJ_XECE WHERE CJ_XECF.XECE_ID = CJ_XECE.XECE_ID AND CJ_XECF.SEJ_ID = subview.SEJ_ID AND CJ_XECF.TER_ID = subview.TER_ID AND CJ_XECF.EFT_ID <> subview.EFT_ID AND CJ_XECF.MND_ID = subview.MND_ID AND (CJ_XECF.XECF_PLC LIKE '411%' OR CJ_XECF.XECF_PLC LIKE '412%' OR CJ_XECF.XECF_PLC LIKE '419%') ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = subview.EFT_ID FROM ( SELECT SEJ_ID, EFT_TER_TYPE, MND_ID, MAX(EFT_ID) AS EFT_ID FROM prod_cegi.CJ_EFT WHERE EFT_ID_AVOIR = 0 AND EFT_ETAT = 'F' GROUP BY 1,2,3 HAVING count(*) = 1 ) subview, prod_cegi.CJ_XECE LEFT JOIN w_CJ_TER ON CJ_XECE.TER_ID = w_CJ_TER.TER_ID WHERE CJ_XECF.XECE_ID = CJ_XECE.XECE_ID AND CJ_XECF.SEJ_ID = subview.SEJ_ID AND COALESCE(w_CJ_TER.EFT_TER_TYPE,'DBT') = subview.EFT_TER_TYPE AND CJ_XECF.EFT_ID <> subview.EFT_ID AND CJ_XECF.MND_ID = subview.MND_ID AND (CJ_XECF.XECF_PLC LIKE '411%' OR CJ_XECF.XECF_PLC LIKE '412%' OR CJ_XECF.XECF_PLC LIKE '419%') ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = subview.EFT_ID FROM ( SELECT SEJ_ID, MND_ID, MAX(EFT_ID) AS EFT_ID FROM prod_cegi.CJ_EFT GROUP BY 1,2 HAVING count(*) = 1 ) subview, prod_cegi.CJ_XECE WHERE CJ_XECF.XECE_ID = CJ_XECE.XECE_ID AND CJ_XECF.SEJ_ID = subview.SEJ_ID AND CJ_XECF.EFT_ID = 0 AND CJ_XECF.MND_ID = subview.MND_ID AND (CJ_XECF.XECF_PLC LIKE '411%' OR CJ_XECF.XECF_PLC LIKE '412%' OR CJ_XECF.XECF_PLC LIKE '419%') ; ANALYSE prod_cegi.CJ_XECF ; DROP TABLE IF EXISTS CJ_XECF_TER ; CREATE TEMP TABLE CJ_XECF_TER AS SELECT * FROM prod_cegi.CJ_XECF WHERE EFT_ID <> 0 AND SEJ_ID IN (SELECT SEJ_ID FROM prod_cegi.CJ_XECF WHERE EFT_ID = 0) ; ANALYSE CJ_XECF_TER ; CREATE INDEX CJ_XECF_TER_sej_id ON CJ_XECF_TER USING btree (sej_id) ; SELECT base.cti_execute(' UPDATE prod_cegi.CJ_XECF SET EFT_ID = subview.EFT_ID FROM ( SELECT SEJ_ID, XECE_ID, TER_ID, MND_ID, MAX(EFT_ID) AS EFT_ID FROM prod_cegi.CJ_XECF WHERE EFT_ID <> 0 GROUP BY 1,2,3,4 HAVING count(DISTINCT EFT_ID) = 1 ) subview WHERE CJ_XECF.SEJ_ID = subview.SEJ_ID AND CJ_XECF.TER_ID = subview.TER_ID AND CJ_XECF.MND_ID = subview.MND_ID AND CJ_XECF.XECE_ID = subview.XECE_ID AND CJ_XECF.EFT_ID = 0 AND (CJ_XECF.XECF_PLC LIKE ''411%'' OR CJ_XECF.XECF_PLC LIKE ''412%'' OR CJ_XECF.XECF_PLC LIKE ''419%'') ., UPDATE prod_cegi.CJ_XECF SET EFT_ID = CJ_XECF_TER.EFT_ID FROM CJ_XECF_TER WHERE CJ_XECF.EFT_ID = 0 AND CJ_XECF.SEJ_ID = CJ_XECF_TER.SEJ_ID AND Cj_XECF.XECF_PLC = CJ_XECF_TER.XECF_PLC AND Cj_XECF.TER_ID = CJ_XECF_TER.TER_ID AND Cj_XECF.XECF_MONT = 0-CJ_XECF_TER.XECF_MONT AND CJ_XECF_TER.EFT_ID <> 0 ',3) ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = subview.EFT_ID FROM ( SELECT SEJ_ID, TER_ID, MND_ID, MAX(EFT_ID) AS EFT_ID FROM prod_cegi.CJ_EFT WHERE EFT_ID_AVOIR = 0 AND EFT_ETAT = 'F' GROUP BY 1,2,3 ) subview, prod_cegi.CJ_XECE WHERE CJ_XECF.XECE_ID = CJ_XECE.XECE_ID AND CJ_XECF.SEJ_ID = subview.SEJ_ID AND CJ_XECF.TER_ID = subview.TER_ID AND CJ_XECF.EFT_ID = 0 AND CJ_XECF.MND_ID = subview.MND_ID AND (CJ_XECF.XECF_PLC LIKE '411%' OR CJ_XECF.XECF_PLC LIKE '412%' OR CJ_XECF.XECF_PLC LIKE '419%') ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = subview.EFT_ID FROM ( SELECT SEJ_ID, EFT_TER_TYPE, MND_ID, MAX(EFT_ID) AS EFT_ID FROM prod_cegi.CJ_EFT WHERE EFT_ID_AVOIR = 0 AND EFT_ETAT = 'F' GROUP BY 1,2,3 ) subview, prod_cegi.CJ_XECE LEFT JOIN w_CJ_TER ON CJ_XECE.TER_ID = w_CJ_TER.TER_ID WHERE CJ_XECF.XECE_ID = CJ_XECE.XECE_ID AND CJ_XECF.SEJ_ID = subview.SEJ_ID AND COALESCE(w_CJ_TER.EFT_TER_TYPE,'DBT') = subview.EFT_TER_TYPE AND CJ_XECF.EFT_ID = 0 AND CJ_XECF.MND_ID = subview.MND_ID AND (CJ_XECF.XECF_PLC LIKE '411%' OR CJ_XECF.XECF_PLC LIKE '412%' OR CJ_XECF.XECF_PLC LIKE '419%') ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = subview.EFT_ID FROM ( SELECT SEJ_ID, MND_ID, MAX(EFT_ID) AS EFT_ID FROM prod_cegi.CJ_EFT GROUP BY 1,2 ) subview, prod_cegi.CJ_XECE WHERE CJ_XECF.XECE_ID = CJ_XECE.XECE_ID AND CJ_XECF.SEJ_ID = subview.SEJ_ID AND CJ_XECF.EFT_ID = 0 AND CJ_XECF.MND_ID = subview.MND_ID AND (CJ_XECF.XECF_PLC LIKE '411%' OR CJ_XECF.XECF_PLC LIKE '412%' OR CJ_XECF.XECF_PLC LIKE '419%') ; UPDATE prod_cegi.CJ_XECF SET XECF_TYPE = 0 - XECF_TYPE WHERE CJ_XECF.XECF_TYPE >= 0 AND XECF_PLC LIKE '4197%' ; DROP TABLE IF EXISTS w_CJ_EFT_TIE; CREATE TEMP TABLE w_CJ_EFT_TIE AS SELECT EFS_ID, EFT_SEJHON, MAX(CASE WHEN EFT_TER_TYPE = 'CAI' THEN EFT_ID ELSE 0 END) AS EFT_ID_CAI, MAX(CASE WHEN EFT_TER_TYPE = 'CAI' THEN EFT_TIE_CENTR ELSE '' END) AS EFT_TIE_CENTR_CAI, MAX(CASE WHEN EFT_TER_TYPE = 'MUT' THEN EFT_ID ELSE 0 END) AS EFT_ID_MUT, MAX(CASE WHEN EFT_TER_TYPE = 'MUT' THEN EFT_TIE_CENTR ELSE '' END) AS EFT_TIE_CENTR_MUT, MAX(CASE WHEN EFT_TER_TYPE = 'DBT' THEN EFT_ID ELSE 0 END) AS EFT_ID_DBT, MAX(CASE WHEN EFT_TER_TYPE = 'DBT' THEN EFT_TIE_CENTR ELSE '' END) AS EFT_TIE_CENTR_DBT FROM prod_cegi.CJ_EFT GROUP BY 1,2 ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = EFT_ID_MUT FROM prod_cegi.CJ_EFT JOIN w_CJ_EFT_TIE ON CJ_EFT.EFS_ID = w_CJ_EFT_TIE.EFS_ID AND CJ_EFT.EFT_SEJHON = w_CJ_EFT_TIE.EFT_SEJHON WHERE CJ_EFT.EFT_ID = CJ_XECF.EFT_ID AND EFT_TER_TYPE = 'CAI' AND XECF_PLC <> EFT_TIE_CENTR_CAI AND XECF_PLC = EFT_TIE_CENTR_MUT AND EFT_ID_MUT <> 0 ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = EFT_ID_DBT FROM prod_cegi.CJ_EFT JOIN w_CJ_EFT_TIE ON CJ_EFT.EFS_ID = w_CJ_EFT_TIE.EFS_ID AND CJ_EFT.EFT_SEJHON = w_CJ_EFT_TIE.EFT_SEJHON WHERE CJ_EFT.EFT_ID = CJ_XECF.EFT_ID AND EFT_TER_TYPE = 'CAI' AND XECF_PLC <> EFT_TIE_CENTR_CAI AND XECF_PLC = EFT_TIE_CENTR_DBT AND EFT_ID_DBT <> 0 ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = EFT_ID_CAI FROM prod_cegi.CJ_EFT JOIN w_CJ_EFT_TIE ON CJ_EFT.EFS_ID = w_CJ_EFT_TIE.EFS_ID AND CJ_EFT.EFT_SEJHON = w_CJ_EFT_TIE.EFT_SEJHON WHERE CJ_EFT.EFT_ID = CJ_XECF.EFT_ID AND EFT_TER_TYPE = 'MUT' AND XECF_PLC <> EFT_TIE_CENTR_MUT AND XECF_PLC = EFT_TIE_CENTR_CAI AND EFT_ID_CAI <> 0 ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = EFT_ID_DBT FROM prod_cegi.CJ_EFT JOIN w_CJ_EFT_TIE ON CJ_EFT.EFS_ID = w_CJ_EFT_TIE.EFS_ID AND CJ_EFT.EFT_SEJHON = w_CJ_EFT_TIE.EFT_SEJHON WHERE CJ_EFT.EFT_ID = CJ_XECF.EFT_ID AND EFT_TER_TYPE = 'MUT' AND XECF_PLC <> EFT_TIE_CENTR_MUT AND XECF_PLC = EFT_TIE_CENTR_DBT AND EFT_ID_DBT <> 0 ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = EFT_ID_CAI FROM prod_cegi.CJ_EFT JOIN w_CJ_EFT_TIE ON CJ_EFT.EFS_ID = w_CJ_EFT_TIE.EFS_ID AND CJ_EFT.EFT_SEJHON = w_CJ_EFT_TIE.EFT_SEJHON WHERE CJ_EFT.EFT_ID = CJ_XECF.EFT_ID AND EFT_TER_TYPE = 'DBT' AND XECF_PLC <> EFT_TIE_CENTR_DBT AND XECF_PLC = EFT_TIE_CENTR_CAI AND EFT_ID_CAI <> 0 ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = EFT_ID_MUT FROM prod_cegi.CJ_EFT JOIN w_CJ_EFT_TIE ON CJ_EFT.EFS_ID = w_CJ_EFT_TIE.EFS_ID AND CJ_EFT.EFT_SEJHON = w_CJ_EFT_TIE.EFT_SEJHON WHERE CJ_EFT.EFT_ID = CJ_XECF.EFT_ID AND EFT_TER_TYPE = 'DBT' AND XECF_PLC <> EFT_TIE_CENTR_DBT AND XECF_PLC = EFT_TIE_CENTR_MUT AND EFT_ID_MUT <> 0 ; DROP TABLE IF EXISTS w_DFT_PLC_TYPE; CREATE TEMP TABLE w_DFT_PLC_TYPE AS SELECT XECF_PLC, EFT_SEJHON, (MAX(Array[to_char(nb,'FM000000000'),EFT_TER_TYPE]))[2] AS DFT_EFT_TER_TYPE FROM ( SELECT XECF_PLC, EFT_SEJHON, EFT_TER_TYPE, count(*) AS nb FROM prod_cegi.CJ_XECF JOIN prod_cegi.CJ_XECE ON CJ_XECF.XECE_ID = CJ_XECE.XECE_ID JOIN prod_cegi.CJ_EFT ON CJ_EFT.EFT_ID = CJ_XECF.EFT_ID WHERE EFT_TER_TYPE IN ('CAI','MUT','DBT') GROUP BY 1,2,3 ) subview GROUP BY 1,2 ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = CASE WHEN DFT_EFT_TER_TYPE = 'CAI' AND EFT_ID_CAI <> 0 THEN EFT_ID_CAI WHEN DFT_EFT_TER_TYPE = 'MUT' AND EFT_ID_MUT <> 0 THEN EFT_ID_MUT WHEN DFT_EFT_TER_TYPE = 'DBT' AND EFT_ID_DBT <> 0 THEN EFT_ID_DBT ELSE CJ_XECF.EFT_ID END FROM w_DFT_PLC_TYPE,prod_cegi.CJ_EFT JOIN w_CJ_EFT_TIE ON CJ_EFT.EFS_ID = w_CJ_EFT_TIE.EFS_ID AND CJ_EFT.EFT_SEJHON = w_CJ_EFT_TIE.EFT_SEJHON WHERE CJ_XECF.XECF_PLC = w_DFT_PLC_TYPE.XECF_PLC AND CJ_EFT.EFT_SEJHON = w_DFT_PLC_TYPE.EFT_SEJHON AND CJ_EFT.EFT_ID = CJ_XECF.EFT_ID AND EFT_TER_TYPE = 'CAI' AND CJ_XECF.XECF_PLC <> EFT_TIE_CENTR_CAI AND EFT_TER_TYPE <> DFT_EFT_TER_TYPE ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = CASE WHEN DFT_EFT_TER_TYPE = 'CAI' AND EFT_ID_CAI <> 0 THEN EFT_ID_CAI WHEN DFT_EFT_TER_TYPE = 'MUT' AND EFT_ID_MUT <> 0 THEN EFT_ID_MUT WHEN DFT_EFT_TER_TYPE = 'DBT' AND EFT_ID_DBT <> 0 THEN EFT_ID_DBT ELSE CJ_XECF.EFT_ID END FROM w_DFT_PLC_TYPE,prod_cegi.CJ_EFT JOIN w_CJ_EFT_TIE ON CJ_EFT.EFS_ID = w_CJ_EFT_TIE.EFS_ID AND CJ_EFT.EFT_SEJHON = w_CJ_EFT_TIE.EFT_SEJHON WHERE CJ_XECF.XECF_PLC = w_DFT_PLC_TYPE.XECF_PLC AND CJ_EFT.EFT_SEJHON = w_DFT_PLC_TYPE.EFT_SEJHON AND CJ_EFT.EFT_ID = CJ_XECF.EFT_ID AND EFT_TER_TYPE = 'MUT' AND CJ_XECF.XECF_PLC <> EFT_TIE_CENTR_MUT AND EFT_TER_TYPE <> DFT_EFT_TER_TYPE ; UPDATE prod_cegi.CJ_XECF SET EFT_ID = CASE WHEN DFT_EFT_TER_TYPE = 'CAI' AND EFT_ID_CAI <> 0 THEN EFT_ID_CAI WHEN DFT_EFT_TER_TYPE = 'MUT' AND EFT_ID_MUT <> 0 THEN EFT_ID_MUT WHEN DFT_EFT_TER_TYPE = 'DBT' AND EFT_ID_DBT <> 0 THEN EFT_ID_DBT ELSE CJ_XECF.EFT_ID END FROM w_DFT_PLC_TYPE,prod_cegi.CJ_EFT JOIN w_CJ_EFT_TIE ON CJ_EFT.EFS_ID = w_CJ_EFT_TIE.EFS_ID AND CJ_EFT.EFT_SEJHON = w_CJ_EFT_TIE.EFT_SEJHON WHERE CJ_XECF.XECF_PLC = w_DFT_PLC_TYPE.XECF_PLC AND CJ_EFT.EFT_SEJHON = w_DFT_PLC_TYPE.EFT_SEJHON AND CJ_EFT.EFT_ID = CJ_XECF.EFT_ID AND EFT_TER_TYPE = 'DBT' AND CJ_XECF.XECF_PLC <> EFT_TIE_CENTR_DBT AND EFT_TER_TYPE <> DFT_EFT_TER_TYPE ; ]]> 'NF') OR CJ_SEJOUR.SEJ_ID IN (SELECT DISTINCT SEJ_ID FROM prod_cegi.CJ_EFS WHERE efs_ttc <> 0) ) AND SEJ_NUMDOS NOT LIKE 'TMP%' ORDER BY SEJ_DT_ENTREE ; ANALYSE w_CJ_SEJOUR_select ; UPDATE w_CJ_SEJOUR_select SET SEJ_DT_SORTIE = NULL, SEJ_DTHR_SORTIE = NULL WHERE SEJ_DT_SORTIE < SEJ_DT_ENTREE; UPDATE w_CJ_SEJOUR_select SET SEJ_DT_SORTIE = '20991231', SEJ_DTHR_SORTIE = '20991231' WHERE TYD_LIBC NOT IN('A', 'U', 'E', 'I', 'Q') AND (SEJ_DT_SORTIE IS NULL OR SEJ_DT_SORTIE <= '00010101'); UPDATE w_CJ_SEJOUR_select SET SEJ_DT_SORTIE = SEJ_DT_ENTREE, SEJ_DTHR_SORTIE = SEJ_DTHR_ENTREE WHERE (SEJ_DT_SORTIE IS NULL OR SEJ_DT_SORTIE <= '00010101'); UPDATE w_CJ_SEJOUR_select SET OK ='O' WHERE SEJ_DT_SORTIE >= '[ENV_ADM_ANNEEDEBUT]0101' OR SEJ_DT_ENTREE >= '[ENV_ADM_ANNEEDEBUT]0101' ; UPDATE w_CJ_SEJOUR_select SET OK ='O' FROM prod_cegi.CJ_EFS WHERE w_CJ_SEJOUR_select.SEJ_ID = CJ_EFS.SEJ_ID AND OK <> 'O' AND EFS_DT_FAC >= '[ENV_ADM_ANNEEDEBUT]0101' ; DROP TABLE IF EXISTS w_CJ_EFS_ns; CREATE TEMP TABLE w_CJ_EFS_ns AS SELECT CJ_EFS.SEJ_ID, SUM(XECF_MONT) AS XECF_MONT, MIN(XECE_DATE) AS XECE_DATE, MAX(EFS_CPTA_TTC+EFS_CPTA_HON_TTC) AS EFS_CPTA_TTC FROM prod_cegi.CJ_XECF JOIN prod_cegi.CJ_XECE ON CJ_XECF.XECE_ID = CJ_XECE.XECE_ID JOIN prod_cegi.CJ_EFT ON CJ_EFT.EFT_ID = CJ_XECF.EFT_ID JOIN prod_cegi.CJ_EFS ON CJ_EFT.EFS_ID = CJ_EFS.EFS_ID WHERE CJ_XECF.EFT_ID <> 0 AND XECF_TYPE > 0 AND CJ_XECE.JNL_CODE <> ALL(SELECT JNL_CODE FROM prod_cegi.CJ_JNLNUMFAC) GROUP BY 1 HAVING MIN(XECE_DATE) >= '[ENV_ADM_ANNEEDEBUT]0101' OR round(MAX(EFS_CPTA_TTC+EFS_CPTA_HON_TTC)::numeric,2) <> round(SUM(XECF_MONT)::numeric,2) ; ANALYSE w_CJ_EFS_ns ; UPDATE w_CJ_SEJOUR_select SET OK ='O' FROM w_CJ_EFS_ns WHERE w_CJ_SEJOUR_select.SEJ_ID = w_CJ_EFS_ns.SEJ_ID AND OK <> 'O' ; -- Séjours non concernés DELETE FROM w_CJ_SEJOUR_select WHERE OK <> 'O' ; -- Supression élements en trop DELETE FROM w_CJ_SEJOUR_select USING (SELECT SEJ_ID, MIN(ctid) AS to_del FROM w_CJ_SEJOUR_select GROUP BY 1 HAVING count(*) > 1) sub WHERE ctid = to_del ; -- Doublons dans les numéros de séjour UPDATE w_CJ_SEJOUR_select SET SEJ_NUMDOS = new_SEJ_NUMDOS FROM ( SELECT ctid, SEJ_NUMDOS || CASE WHEN rank() OVER (PARTITION BY SEJ_NUMDOS ORDER BY SEJ_DT_ENTREE, ctid) > 1 THEN '_' || rank() OVER (PARTITION BY SEJ_ID,SEJ_NUMDOS ORDER BY SEJ_DT_ENTREE,ctid) ELSE '' END AS new_SEJ_NUMDOS FROM w_CJ_SEJOUR_select WHERE SEJ_NUMDOS = ANY (SELECT SEJ_NUMDOS FROM w_CJ_SEJOUR_select GROUP BY 1 HAVING count(*) > 1) ) subview WHERE w_CJ_SEJOUR_select.ctid = subview.ctid ; ]]> '' AND GHS_NUMERO <> '9999' GROUP BY 1; ALTER TABLE w_RSS ADD CONSTRAINT w_RSS_pkey PRIMARY KEY(NO_DOSSIER); INSERT INTO w_RSS SELECT w_OPERA_SEJ_select.NO_DOSSIER AS NO_DOSSIER, CODE_GHS AS GHS_NUMERO, '20991231'::date AS DT_ENV_ADM FROM w_OPERA_SEJ_select LEFT JOIN w_RSS ON w_RSS.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER WHERE w_RSS.NO_DOSSIER IS NULL AND CODE_GHS <> '' AND CODE_GHS <> '9999'; DROP TABLE IF EXISTS w_OPERA_OCC; CREATE TEMP TABLE w_OPERA_OCC AS SELECT w_OPERA_SEJ_select.NO_DOSSIER, w_OPERA_SEJ_select.TYPE_DOSSIER, w_OPERA_SEJ_select.MODE_ENTREE, DATE_HEURE_ENTREE_SEJOUR, DATE_HEURE_SORTIE_SEJOUR, CODE_SERVICE_ENTREE, CODE_SERVICE_TARIFAIRE_ENTREE, CODE_SERVICE_DISCIPLINE_ENTREE, MT_ENTREE, DMT_ENTREE, DATE_MOUVEMENT_ENTREE + date_part('hour',to_timestamp(to_char(HEURE_MOUVEMENT_ENTREE, 'FM0000'),'HH24MI')) * '1 HOUR'::interval + date_part('minute',to_timestamp(to_char(HEURE_MOUVEMENT_ENTREE, 'FM0000'),'HH24MI')) * '1 MINUTE'::interval AS DATE_HEURE_MOUVEMENT_ENTREE, DATE_MOUVEMENT_SORTIE + date_part('hour',to_timestamp(to_char(HEURE_MOUVEMENT_SORTIE, 'FM0000'),'HH24MI')) * '1 HOUR'::interval + date_part('minute',to_timestamp(to_char(HEURE_MOUVEMENT_SORTIE, 'FM0000'),'HH24MI')) * '1 MINUTE'::interval AS DATE_HEURE_MOUVEMENT_SORTIE, 'A'::text AS TYPE_MOUVEMENT, OPERA_OCC.CODE_LIT AS CODE_LIT_MOUVEMENT, OPERA_OCC.CODE_SERVICE_DISCIPLINE AS CODE_SERVICE_MOUVEMENT, OPERA_PSDISC.CODE_SERVICE_TARIFAIRE AS CODE_SERVICE_TARIFAIRE_MOUVEMENT, OPERA_OCC.CODE_SERVICE_DISCIPLINE AS CODE_SERVICE_DISCIPLINE_MOUVEMENT, MT AS MT_MOUVEMENT, DMT AS DMT_MOUVEMENT, ''::text AS CODE_UM_MOUVEMENT FROM w_OPERA_SEJ_select LEFT JOIN prod_cegiloghos.OPERA_OCC ON OPERA_OCC.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER AND OPERA_OCC.PERIODE_ANNEE = w_OPERA_SEJ_select.PERIODE_ANNEE LEFT JOIN prod_cegiloghos.OPERA_PSDISC ON OPERA_OCC.CODE_SERVICE_DISCIPLINE = OPERA_PSDISC.CODE_SERVICE_DISCIPLINE LEFT JOIN prod_cegiloghos.OPERA_PSTARF ON OPERA_PSDISC.CODE_SERVICE_TARIFAIRE = OPERA_PSTARF.CODE_SERVICE_TARIFAIRE; INSERT INTO w_OPERA_OCC SELECT w_OPERA_SEJ_select.NO_DOSSIER, w_OPERA_SEJ_select.TYPE_DOSSIER, w_OPERA_SEJ_select.MODE_ENTREE, DATE_HEURE_ENTREE_SEJOUR, DATE_HEURE_SORTIE_SEJOUR, CODE_SERVICE_ENTREE, CODE_SERVICE_TARIFAIRE_ENTREE, CODE_SERVICE_DISCIPLINE_ENTREE, MT_ENTREE, DMT_ENTREE, D_E + date_part('hour',hr_entree) * '1 HOUR'::interval + date_part('minute',hr_entree) * '1 MINUTE'::interval AS DATE_HEURE_MOUVEMENT_ENTREE, D_S + date_part('hour',hr_sortie) * '1 HOUR'::interval + date_part('minute',hr_sortie) * '1 MINUTE'::interval AS DATE_HEURE_MOUVEMENT_SORTIE, 'P'::text AS TYPE_MOUVEMENT, ''::text AS CODE_LIT_MOUVEMENT, ''::text AS CODE_SERVICE_MOUVEMENT, ''::text AS CODE_SERVICE_TARIFAIRE_MOUVEMENT, ''::text AS CODE_SERVICE_DISCIPLINE_MOUVEMENT, ''::text AS MT_MOUVEMENT, ''::text AS DMT_MOUVEMENT, C_UM AS CODE_UM_MOUVEMENT FROM prod_cegi.RUM JOIN prod_cegi.RSS ON RUM.N_PMSI = RSS.N_PMSI JOIN w_OPERA_SEJ_select ON to_char(N_DOSS, 'FM000000000') = w_OPERA_SEJ_select.NO_DOSSIER; CREATE INDEX w_OPERA_OCC_i1 ON w_OPERA_OCC USING btree (NO_DOSSIER); INSERT INTO w_OPERA_OCC SELECT w_OPERA_SEJ_select.NO_DOSSIER, w_OPERA_SEJ_select.TYPE_DOSSIER, w_OPERA_SEJ_select.MODE_ENTREE, w_OPERA_SEJ_select.DATE_HEURE_ENTREE_SEJOUR, w_OPERA_SEJ_select.DATE_HEURE_SORTIE_SEJOUR, w_OPERA_SEJ_select.CODE_SERVICE_ENTREE, w_OPERA_SEJ_select.CODE_SERVICE_TARIFAIRE_ENTREE, w_OPERA_SEJ_select.CODE_SERVICE_DISCIPLINE_ENTREE, w_OPERA_SEJ_select.MT_ENTREE, w_OPERA_SEJ_select.DMT_ENTREE, w_OPERA_SEJ_select.DATE_HEURE_ENTREE_SEJOUR + date_part('hour',to_timestamp(to_char(HEURE_ENTREE_SEJOUR, 'FM0000'),'HH24MI')) * '1 HOUR'::interval + date_part('minute',to_timestamp(to_char(HEURE_ENTREE_SEJOUR, 'FM0000'),'HH24MI')) * '1 MINUTE'::interval AS DATE_HEURE_MOUVEMENT_ENTREE, w_OPERA_SEJ_select.DATE_HEURE_SORTIE_SEJOUR + date_part('hour',to_timestamp(to_char(HEURE_SORTIE_SEJOUR, 'FM0000'),'HH24MI')) * '1 HOUR'::interval + date_part('minute',to_timestamp(to_char(HEURE_SORTIE_SEJOUR, 'FM0000'),'HH24MI')) * '1 MINUTE'::interval AS DATE_HEURE_MOUVEMENT_SORTIE, 'E'::text AS TYPE_MOUVEMENT, ''::text AS CODE_LIT_MOUVEMENT, w_OPERA_SEJ_select.CODE_SERVICE_ENTREE AS CODE_SERVICE_MOUVEMENT, w_OPERA_SEJ_select.CODE_SERVICE_TARIFAIRE_ENTREE AS CODE_SERVICE_TARIFAIRE_MOUVEMENT, w_OPERA_SEJ_select.CODE_SERVICE_DISCIPLINE_ENTREE AS CODE_SERVICE_DISCIPLINE_MOUVEMENT, w_OPERA_SEJ_select.MT_ENTREE AS MT_MOUVEMENT, w_OPERA_SEJ_select.DMT_ENTREE AS DMT_MOUVEMENT, ''::text AS CODE_UM_MOUVEMENT FROM w_OPERA_SEJ_select LEFT JOIN w_OPERA_OCC ON w_OPERA_SEJ_select.NO_DOSSIER = w_OPERA_OCC.NO_DOSSIER AND w_OPERA_SEJ_select.DATE_HEURE_ENTREE_SEJOUR = w_OPERA_OCC.DATE_HEURE_MOUVEMENT_ENTREE WHERE w_OPERA_OCC.NO_DOSSIER IS NULL; DROP SEQUENCE IF EXISTS w_OPERA_OCC_mouvement_seq; CREATE TEMP SEQUENCE w_OPERA_OCC_mouvement_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; DROP TABLE IF EXISTS w_OPERA_OCC_mouvement; CREATE TEMP TABLE w_OPERA_OCC_mouvement AS SELECT NO_DOSSIER, TYPE_DOSSIER, MODE_ENTREE, DATE_HEURE_ENTREE_SEJOUR, DATE_HEURE_SORTIE_SEJOUR, DATE_HEURE_MOUVEMENT_ENTREE, nextval('w_OPERA_OCC_mouvement_seq'::regclass) AS sequence , COALESCE(CODE_SERVICE,'') AS CODE_SERVICE, COALESCE(CODE_SERVICE_TARIFAIRE,'') AS CODE_SERVICE_TARIFAIRE, COALESCE(CODE_SERVICE_DISCIPLINE,'') AS CODE_SERVICE_DISCIPLINE, COALESCE(MT,'') AS MT, COALESCE(DMT,'') AS DMT, COALESCE(CODE_LIT,'') AS CODE_LIT, COALESCE(CODE_UM,'') AS CODE_UM FROM (SELECT NO_DOSSIER, TYPE_DOSSIER, MODE_ENTREE, DATE_HEURE_MOUVEMENT_ENTREE, DATE_HEURE_ENTREE_SEJOUR, DATE_HEURE_SORTIE_SEJOUR, (MAX(CASE WHEN TYPE_MOUVEMENT <> 'A' THEN NULL ELSE array[ CASE WHEN DATE_HEURE_MOUVEMENT_ENTREE IS NOT NULL THEN DATE_HEURE_MOUVEMENT_ENTREE::text ELSE DATE_HEURE_ENTREE_SEJOUR::text END, CASE WHEN DATE_HEURE_MOUVEMENT_ENTREE IS NOT NULL THEN CODE_SERVICE_MOUVEMENT ELSE CODE_SERVICE_ENTREE END ] END))[2] AS CODE_SERVICE, (MAX(CASE WHEN TYPE_MOUVEMENT <> 'A' THEN NULL ELSE array[ CASE WHEN DATE_HEURE_MOUVEMENT_ENTREE IS NOT NULL THEN DATE_HEURE_MOUVEMENT_ENTREE::text ELSE DATE_HEURE_ENTREE_SEJOUR::text END, CASE WHEN DATE_HEURE_MOUVEMENT_ENTREE IS NOT NULL THEN CODE_SERVICE_TARIFAIRE_MOUVEMENT ELSE CODE_SERVICE_TARIFAIRE_ENTREE END ] END))[2] AS CODE_SERVICE_TARIFAIRE, (MAX(CASE WHEN TYPE_MOUVEMENT <> 'A' THEN NULL ELSE array[ CASE WHEN DATE_HEURE_MOUVEMENT_ENTREE IS NOT NULL THEN DATE_HEURE_MOUVEMENT_ENTREE::text ELSE DATE_HEURE_ENTREE_SEJOUR::text END, CASE WHEN DATE_HEURE_MOUVEMENT_ENTREE IS NOT NULL THEN CODE_SERVICE_DISCIPLINE_MOUVEMENT ELSE CODE_SERVICE_DISCIPLINE_ENTREE END ] END))[2] AS CODE_SERVICE_DISCIPLINE, (MAX(CASE WHEN TYPE_MOUVEMENT <> 'A' THEN NULL ELSE array[ CASE WHEN DATE_HEURE_MOUVEMENT_ENTREE IS NOT NULL THEN DATE_HEURE_MOUVEMENT_ENTREE::text ELSE DATE_HEURE_ENTREE_SEJOUR::text END, CASE WHEN DATE_HEURE_MOUVEMENT_ENTREE IS NOT NULL THEN MT_MOUVEMENT ELSE MT_ENTREE END ] END))[2] AS MT, (MAX(CASE WHEN TYPE_MOUVEMENT <> 'A' THEN NULL ELSE array[ CASE WHEN DATE_HEURE_MOUVEMENT_ENTREE IS NOT NULL THEN DATE_HEURE_MOUVEMENT_ENTREE::text ELSE DATE_HEURE_ENTREE_SEJOUR::text END, CASE WHEN DATE_HEURE_MOUVEMENT_ENTREE IS NOT NULL THEN DMT_MOUVEMENT ELSE DMT_ENTREE END ] END))[2] AS DMT, (MAX(CASE WHEN TYPE_MOUVEMENT <> 'A' THEN NULL ELSE array[DATE_HEURE_MOUVEMENT_ENTREE::text,CODE_LIT_MOUVEMENT ] END))[2] AS CODE_LIT, (MAX(CASE WHEN TYPE_MOUVEMENT IN ('E', 'A') THEN NULL ELSE array[DATE_HEURE_MOUVEMENT_ENTREE::text,CODE_UM_MOUVEMENT ] END))[2] AS CODE_UM FROM w_OPERA_OCC GROUP BY 1,2,3,4,5,6 ORDER BY 1,4) subview; CREATE INDEX w_OPERA_OCC_mouvement_i1 ON w_OPERA_OCC_mouvement USING btree (NO_DOSSIER); SELECT base.cti_execute('UPDATE w_OPERA_OCC_mouvement SET CODE_UM = w_OPERA_OCC_mouvement_before.CODE_UM FROM w_OPERA_OCC_mouvement w_OPERA_OCC_mouvement_before WHERE w_OPERA_OCC_mouvement.NO_DOSSIER = w_OPERA_OCC_mouvement_before.NO_DOSSIER AND w_OPERA_OCC_mouvement.sequence = w_OPERA_OCC_mouvement_before.sequence + 1 AND (w_OPERA_OCC_mouvement.CODE_UM = '''') AND w_OPERA_OCC_mouvement_before.CODE_UM <> ''''',20); SELECT base.cti_execute('UPDATE w_OPERA_OCC_mouvement SET CODE_UM = w_OPERA_OCC_mouvement_next.CODE_UM FROM w_OPERA_OCC_mouvement w_OPERA_OCC_mouvement_next WHERE w_OPERA_OCC_mouvement.NO_DOSSIER = w_OPERA_OCC_mouvement_next.NO_DOSSIER AND w_OPERA_OCC_mouvement.sequence = w_OPERA_OCC_mouvement_next.sequence - 1 AND (w_OPERA_OCC_mouvement.CODE_UM = '''') AND w_OPERA_OCC_mouvement_next.CODE_UM <> ''''',20); SELECT base.cti_execute('UPDATE w_OPERA_OCC_mouvement SET CODE_SERVICE = w_OPERA_OCC_mouvement_before.CODE_SERVICE, CODE_SERVICE_TARIFAIRE = w_OPERA_OCC_mouvement_before.CODE_SERVICE_TARIFAIRE, CODE_SERVICE_DISCIPLINE = w_OPERA_OCC_mouvement_before.CODE_SERVICE_DISCIPLINE, MT = w_OPERA_OCC_mouvement_before.MT, DMT = w_OPERA_OCC_mouvement_before.DMT, CODE_LIT = w_OPERA_OCC_mouvement_before.CODE_LIT FROM w_OPERA_OCC_mouvement w_OPERA_OCC_mouvement_before WHERE w_OPERA_OCC_mouvement.NO_DOSSIER = w_OPERA_OCC_mouvement_before.NO_DOSSIER AND w_OPERA_OCC_mouvement.sequence = w_OPERA_OCC_mouvement_before.sequence + 1 AND (w_OPERA_OCC_mouvement.CODE_SERVICE = '''') AND w_OPERA_OCC_mouvement_before.CODE_SERVICE <> ''''',20); SELECT base.cti_execute('UPDATE w_OPERA_OCC_mouvement SET CODE_SERVICE = w_OPERA_OCC_mouvement_next.CODE_SERVICE, CODE_SERVICE_TARIFAIRE = w_OPERA_OCC_mouvement_next.CODE_SERVICE_TARIFAIRE, CODE_SERVICE_DISCIPLINE = w_OPERA_OCC_mouvement_next.CODE_SERVICE_DISCIPLINE, MT = w_OPERA_OCC_mouvement_next.MT, DMT = w_OPERA_OCC_mouvement_next.DMT, CODE_LIT = w_OPERA_OCC_mouvement_next.CODE_LIT FROM w_OPERA_OCC_mouvement w_OPERA_OCC_mouvement_next WHERE w_OPERA_OCC_mouvement.NO_DOSSIER = w_OPERA_OCC_mouvement_next.NO_DOSSIER AND w_OPERA_OCC_mouvement.sequence = w_OPERA_OCC_mouvement_next.sequence - 1 AND (w_OPERA_OCC_mouvement.CODE_SERVICE = '''') AND w_OPERA_OCC_mouvement_next.CODE_SERVICE <> ''''',20); SELECT base.cti_execute('UPDATE w_OPERA_OCC_mouvement SET CODE_LIT = w_OPERA_OCC_mouvement_before.CODE_LIT FROM w_OPERA_OCC_mouvement w_OPERA_OCC_mouvement_before WHERE w_OPERA_OCC_mouvement.NO_DOSSIER = w_OPERA_OCC_mouvement_before.NO_DOSSIER AND w_OPERA_OCC_mouvement.sequence = w_OPERA_OCC_mouvement_before.sequence + 1 AND (w_OPERA_OCC_mouvement.CODE_LIT = '''') AND w_OPERA_OCC_mouvement_before.CODE_LIT <> ''''',20); SELECT base.cti_execute('UPDATE w_OPERA_OCC_mouvement SET CODE_LIT = w_OPERA_OCC_mouvement_next.CODE_LIT FROM w_OPERA_OCC_mouvement w_OPERA_OCC_mouvement_next WHERE w_OPERA_OCC_mouvement.NO_DOSSIER = w_OPERA_OCC_mouvement_next.NO_DOSSIER AND w_OPERA_OCC_mouvement.sequence = w_OPERA_OCC_mouvement_next.sequence - 1 AND (w_OPERA_OCC_mouvement.CODE_LIT = '''') AND w_OPERA_OCC_mouvement_next.CODE_LIT <> ''''',20); DROP TABLE IF EXISTS w_OPERA_OCC_sortie; CREATE TEMP TABLE w_OPERA_OCC_sortie AS SELECT NO_DOSSIER, MIN(sequence) AS sequence_entree, MAX(sequence) AS sequence_sortie, (MAX(array[DATE_HEURE_MOUVEMENT_ENTREE::text, CODE_SERVICE]))[2] AS CODE_SERVICE_SORTIE, (MAX(array[DATE_HEURE_MOUVEMENT_ENTREE::text, CODE_SERVICE_TARIFAIRE]))[2] AS CODE_SERVICE_TARIFAIRE_SORTIE, (MAX(array[DATE_HEURE_MOUVEMENT_ENTREE::text, CODE_SERVICE_DISCIPLINE]))[2] AS CODE_SERVICE_DISCIPLINE_SORTIE, (MAX(array[DATE_HEURE_MOUVEMENT_ENTREE::text, MT]))[2] AS MT_SORTIE, (MAX(array[DATE_HEURE_MOUVEMENT_ENTREE::text, DMT]))[2] AS DMT_SORTIE, (MAX(array[DATE_HEURE_MOUVEMENT_ENTREE::text, CODE_LIT]))[2] AS CODE_LIT_SORTIE, (MAX(array[DATE_HEURE_MOUVEMENT_ENTREE::text, CODE_UM]))[2] AS CODE_UM_SORTIE FROM w_OPERA_OCC_mouvement GROUP BY 1; ALTER TABLE w_OPERA_OCC_sortie ADD CONSTRAINT w_OPERA_OCC_sortie_pkey PRIMARY KEY(NO_DOSSIER); DELETE FROM w_OPERA_OCC_mouvement WHERE DATE_HEURE_MOUVEMENT_ENTREE < DATE_HEURE_ENTREE_SEJOUR; DELETE FROM w_OPERA_OCC_mouvement WHERE DATE_HEURE_MOUVEMENT_ENTREE > DATE_HEURE_SORTIE_SEJOUR AND DATE_HEURE_SORTIE_SEJOUR IS NOT NULL; DROP TABLE IF EXISTS w_OPERA_FAC_tp; CREATE TEMP TABLE w_OPERA_FAC_tp AS SELECT w_OPERA_SEJ_select.NO_DOSSIER, (MAX(array[DATE_CALCUL_FACTURE::text,TIERS_FACT_AMO]))[2] AS TIERS_FACT_AMO, (MAX(array[DATE_CALCUL_FACTURE::text,TIERS_FACT_AMC]))[2] AS TIERS_FACT_AMC, (MAX(array[DATE_CALCUL_FACTURE::text,TIERS_FACT_IPP]))[2] AS TIERS_FACT_IPP FROM prod_cegiloghos.OPERA_FAC JOIN w_OPERA_SEJ_select ON OPERA_FAC.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER GROUP BY 1; ALTER TABLE w_OPERA_FAC_tp ADD CONSTRAINT w_OPERA_FAC_tp_pkey PRIMARY KEY(NO_DOSSIER); -- Plage d'actes pour externes DROP TABLE IF EXISTS w_OPERA_ACT_dureex; CREATE TEMP TABLE w_OPERA_ACT_dureex AS SELECT OPERA_ACT.NO_DOSSIER, date(MAX(DATE_ACTE_FIN)) - date(MIN(DATE_ACTE_DEBUT)) FROM prod_cegiloghos.OPERA_ACT JOIN w_OPERA_SEJ_select ON OPERA_ACT.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER GROUP BY 1 HAVING date(MAX(DATE_ACTE_FIN)) - date(MIN(DATE_ACTE_DEBUT)) <= 1 ; ALTER TABLE w_OPERA_ACT_dureex ADD CONSTRAINT w_OPERA_ACT_dureex_pkey PRIMARY KEY(NO_DOSSIER); DROP TABLE IF EXISTS w_OPERA_ACT_externes; CREATE TEMP TABLE w_OPERA_ACT_externes AS SELECT w_OPERA_SEJ_select.NO_DOSSIER, '07'::text AS MT, ''::text AS DMT FROM prod_cegiloghos.OPERA_ACT JOIN w_OPERA_SEJ_select ON OPERA_ACT.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER WHERE CODE_PRESTA IN ('SE1', 'SE2', 'SE3', 'SE4','SE5', 'SE6', 'SE7', 'ATU', 'FPU','FFM') AND w_OPERA_SEJ_select.NO_DOSSIER IN (SELECT NO_DOSSIER FROM w_OPERA_ACT_dureex) GROUP BY 1,2 HAVING SUM(CASE WHEN MONTANT_ACTE < 0 AND QTE_ACTE > 0 THEN 0 - QTE_ACTE ELSE QTE_ACTE END) > 0; ALTER TABLE w_OPERA_ACT_externes ADD CONSTRAINT w_OPERA_ACT_externes_pkey PRIMARY KEY(NO_DOSSIER); -- Seances selon GHS pmsi DROP TABLE IF EXISTS w_ghs_seances; CREATE TEMP TABLE w_ghs_seances AS SELECT to_char(t_ghs.code,'FM0000') AS code FROM activite[PX].p_sejours JOIN base.t_ghm ON p_sejours.ghm_id = t_ghm.oid AND t_ghm.code LIKE '28%' JOIN base.t_ghs ON p_sejours.ghs_id = t_ghs.oid AND t_ghs.code <> 9999 AND t_ghs.code > 0 WHERE ghs_id <> 0 GROUP BY 1; ALTER TABLE w_ghs_seances ADD CONSTRAINT w_ghs_seances_pkey PRIMARY KEY(code); DROP TABLE IF EXISTS w_OPERA_ACT_hospit; CREATE TEMP TABLE w_OPERA_ACT_hospit AS SELECT w_OPERA_SEJ_select.NO_DOSSIER, MAX(CASE WHEN OPERA_ACT.CODE_GHS IN (SELECT code FROM w_ghs_seances) THEN '19'::text ELSE '03'::text END) AS MT, MAX(CASE WHEN OPERA_ACT.CODE_GHS IN (SELECT code FROM w_ghs_seances) THEN '302'::text ELSE ''::text END) AS DMT FROM prod_cegiloghos.OPERA_ACT JOIN w_OPERA_SEJ_select ON OPERA_ACT.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER WHERE CODE_PRESTA IN ('GHS') GROUP BY 1 HAVING SUM(CASE WHEN MONTANT_ACTE < 0 AND QTE_ACTE > 0 THEN 0 - QTE_ACTE ELSE QTE_ACTE END) > 0; ALTER TABLE w_OPERA_ACT_hospit ADD CONSTRAINT w_OPERA_ACT_hospit_pkey PRIMARY KEY(NO_DOSSIER); DROP TABLE IF EXISTS w_OPERA_SEJ; CREATE TEMP TABLE w_OPERA_SEJ AS SELECT w_OPERA_SEJ_select.*, COALESCE(CODE_SERVICE_SORTIE,'') AS CODE_SERVICE_SORTIE, COALESCE(CODE_SERVICE_TARIFAIRE_SORTIE,'') AS CODE_SERVICE_TARIFAIRE_SORTIE, COALESCE(CODE_SERVICE_DISCIPLINE_SORTIE,'') AS CODE_SERVICE_DISCIPLINE_SORTIE, COALESCE(MT_SORTIE,'') AS MT_SORTIE, COALESCE(DMT_SORTIE,'') AS DMT_SORTIE, COALESCE(CODE_LIT_SORTIE,'') AS CODE_LIT_SORTIE, COALESCE(CODE_UM_SORTIE,'') AS CODE_UM_SORTIE, COALESCE(w_OPERA_ACT_externes.MT, w_OPERA_ACT_hospit.MT, '') AS ACT_MT, COALESCE(w_OPERA_ACT_externes.DMT, w_OPERA_ACT_hospit.DMT, '') AS ACT_DMT, COALESCE(TIERS_FACT_AMO,'') AS TIERS_FACT_AMO, COALESCE(TIERS_FACT_AMC,'') AS TIERS_FACT_AMC, COALESCE(DT_ENV_ADM,'20991231'::date) AS DATE_GROUPAGE, COALESCE(GHS_NUMERO,'') AS GHS, COALESCE(C_GHM_CCAM,'') AS C_GHM_CCAM, 0 AS GHS_BEBE1, CODE_MED_RESP_SEJOUR || '|' || COALESCE(CODE_SERVICE_SORTIE,'') || '|' || COALESCE(CODE_SERVICE_DISCIPLINE_SORTIE,'') || '|' || COALESCE(MT_SORTIE,'') || '|' || COALESCE(DMT_SORTIE,'') || '|' || COALESCE(CODE_LIT_SORTIE,'') || '|' || COALESCE(CODE_UM_SORTIE,'') || '|' || COALESCE(TIERS_FACT_AMO,'') || '|' || COALESCE(TIERS_FACT_AMC,'') || '|' || COALESCE(C_GHM_CCAM,'') || '|' || COALESCE(GHS_NUMERO,'') AS key FROM w_OPERA_SEJ_select LEFT JOIN w_OPERA_OCC_sortie ON w_OPERA_OCC_sortie.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER LEFT JOIN w_OPERA_FAC_tp ON w_OPERA_FAC_tp.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER LEFT JOIN w_OPERA_ACT_externes ON w_OPERA_ACT_externes.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER LEFT JOIN w_OPERA_ACT_hospit ON w_OPERA_ACT_hospit.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER LEFT JOIN w_RSS ON w_RSS.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER; DROP TABLE IF EXISTS w_OPERA_SEJ_key; CREATE TEMP TABLE w_OPERA_SEJ_key AS SELECT key, CODE_MED_RESP_SEJOUR, CODE_SERVICE_SORTIE, CODE_SERVICE_DISCIPLINE_SORTIE, MT_SORTIE, DMT_SORTIE, CODE_LIT_SORTIE, ''::text AS CODE_ETAGELIT_SORTIE, ''::text AS CODE_ETAGE_SORTIE, CODE_UM_SORTIE, TIERS_FACT_AMO, TIERS_FACT_AMC, GHS, C_GHM_CCAM, GHS_BEBE1, 0 AS mode_traitement_id, ''::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 FROM w_OPERA_SEJ GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15; UPDATE w_OPERA_SEJ_key SET mode_traitement_id = t_modes_traitement.oid, 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', '4', '5', '9') 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 = CODE_SERVICE_DISCIPLINE_SORTIE; UPDATE w_OPERA_SEJ_key SET CODE_ETAGELIT_SORTIE = CASE WHEN CODE_LIT_SORTIE <> '' THEN CASE WHEN CODE_ETAGE <> '' THEN CODE_ETAGE ELSE SUBSTR(CODE_LIT,1,1) END || '|' || CODE_LIT_SORTIE ELSE '' END, CODE_ETAGE_SORTIE = CASE WHEN CODE_LIT_SORTIE <> '' THEN CASE WHEN CODE_ETAGE <> '' THEN CODE_ETAGE ELSE SUBSTR(CODE_LIT,1,1) END ELSE '' END FROM prod_cegiloghos.OPERA_PLIT WHERE OPERA_PLIT.CODE_LIT = CODE_LIT_SORTIE; UPDATE w_OPERA_SEJ_key set medecin_sejour_id = t_medecins_administratifs.oid FROM activite[PX].t_medecins_administratifs WHERE CODE_MED_RESP_SEJOUR <> '' AND code_original = CODE_MED_RESP_SEJOUR; UPDATE w_OPERA_SEJ_key set tiers_payant_0_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE code_original = 'PATIENT'; UPDATE w_OPERA_SEJ_key set tiers_payant_1_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE TIERS_FACT_AMO <> '' AND code_original = TIERS_FACT_AMO; UPDATE w_OPERA_SEJ_key set tiers_payant_2_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE TIERS_FACT_AMC <> '' AND code_original = TIERS_FACT_AMC; UPDATE w_OPERA_SEJ_key set ghs_id = t_ghs.oid FROM base.t_ghs WHERE GHS <> '' AND t_ghs.code_text = GHS; UPDATE w_OPERA_SEJ_key set ghs_id = t_ghs.oid FROM base.t_ghs WHERE ghs_id = 0 AND GHS <> '' AND to_char(t_ghs.code,'FM0000') = GHS; UPDATE w_OPERA_SEJ_key set ghs_bebe1_id = t_ghs.oid FROM base.t_ghs WHERE GHS_BEBE1 <> 0 AND t_ghs.code = GHS_BEBE1; UPDATE w_OPERA_SEJ_key set ghm_id = t_ghm.oid FROM base.t_ghm WHERE 1=1 AND C_GHM_CCAM <> '' AND t_ghm.code = C_GHM_CCAM AND t_ghm.code NOT LIKE '90%' ; INSERT INTO activite[PX].t_lieux( code_original_1, code_original_2, code_original_3, code_original_4, code_original_5, code_original_6) SELECT CODE_SERVICE_DISCIPLINE_SORTIE, '', CODE_ETAGE_SORTIE, CODE_ETAGELIT_SORTIE, CODE_UM_SORTIE , CODE_SERVICE_SORTIE FROM w_OPERA_SEJ_key LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = CODE_SERVICE_DISCIPLINE_SORTIE AND code_original_2 = '' AND code_original_3 = CODE_ETAGE_SORTIE AND code_original_4 = CODE_ETAGELIT_SORTIE AND code_original_5 = CODE_UM_SORTIE AND code_original_6 = CODE_SERVICE_SORTIE ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4,5,6; UPDATE w_OPERA_SEJ_key set lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE code_original_1 = CODE_SERVICE_DISCIPLINE_SORTIE AND code_original_2 = '' AND code_original_3 = CODE_ETAGE_SORTIE AND code_original_4 = CODE_ETAGELIT_SORTIE AND code_original_5 = CODE_UM_SORTIE AND code_original_6 = CODE_SERVICE_SORTIE; 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 unite_fonctionnelle_id = COALESCE(t_unites_fonctionnelles.oid,0) FROM activite[PX].t_unites_fonctionnelles WHERE code_original_6 = t_unites_fonctionnelles.code_original AND unite_fonctionnelle_id <> COALESCE(t_unites_fonctionnelles.oid,0); UPDATE activite[PX].t_lieux SET unite_medicale_id = COALESCE(t_unites_medicales.oid,0) FROM activite[PX].t_unites_medicales WHERE code_original_5 = t_unites_medicales.code_original AND unite_medicale_id <> COALESCE(t_unites_medicales.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_sejours; CREATE TEMP TABLE w_sejours AS SELECT NO_DOSSIER as no_sejour, NO_DOSSIER as code_original, COALESCE(no_patient,'W' || NO_DOSSIER) as no_patient, date(DATE_HEURE_ENTREE_SEJOUR) as date_entree, HEURE_ENTREE_SEJOUR * 100 as heure_entree, date(DATE_HEURE_SORTIE_SEJOUR) as date_sortie, HEURE_SORTIE_SEJOUR * 100 as heure_sortie, CASE WHEN PAT_SEXE IN ('F', '2') THEN '2' ELSE '1' END as code_sexe, 0 AS age, CASE WHEN DATE_HEURE_SORTIE_SEJOUR IS NOT NULL AND DATE_HEURE_SORTIE_SEJOUR < '20991231' THEN 1 ELSE 0 END::numeric as code_sorti, 0::numeric AS code_prevu, CASE WHEN trim(t_divers_CEGILOGHOS_TDI.valeur) <> '' AND TYPE_DOSSIER <> '' AND TYPE_DOSSIER = ANY(string_to_array(replace(t_divers_CEGILOGHOS_TDI.valeur,' ',''),',')) THEN '9' WHEN type_sejour_force <> '0' THEN type_sejour_force WHEN ACT_MT IN ('03') AND date(DATE_HEURE_ENTREE_SEJOUR) = date(DATE_HEURE_SORTIE_SEJOUR) THEN '2' WHEN ACT_MT IN ('03') THEN '1' WHEN ACT_MT IN ('07') THEN '3' WHEN ACT_MT IN ('19') AND ACT_DMT IN ('302') THEN '5' WHEN mode_traitement_code IN ('07') OR dmt_code IN ('958') THEN '3' WHEN mode_traitement_code IN ('19', '23') THEN '2' WHEN mode_traitement_code IN ('04') AND date(DATE_HEURE_ENTREE_SEJOUR) = date(DATE_HEURE_SORTIE_SEJOUR) THEN '2' WHEN mode_traitement_code IN ('03') AND date(DATE_HEURE_ENTREE_SEJOUR) = date(DATE_HEURE_SORTIE_SEJOUR) THEN '2' WHEN mode_traitement_code IN ('03') THEN '1' WHEN date(DATE_HEURE_ENTREE_SEJOUR) = date(DATE_HEURE_SORTIE_SEJOUR) THEN '2' ELSE '1' END as type_sejour, lieu_id AS lieu_sortie_id, w_OPERA_SEJ_key.medecin_sejour_id AS medecin_sejour_id, w_OPERA_SEJ_key.ghs_id, w_OPERA_SEJ_key.ghm_id, w_OPERA_SEJ_key.ghs_bebe1_id, 0::numeric AS ghs_bebe2_id, 0::numeric AS ghs_bebe3_id, DATE_GROUPAGE, '0'::text AS code_cp_demandee, mode_traitement_id, CODE_PMSI_MODE_ENTREE as mode_entree, SUBSTR(CODE_PROVENANCE,1,1) AS provenance, CODE_PMSI_MODE_SORTIE as mode_sortie, SUBSTR(CODE_DESTINATION,1,1) as destination, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, 0 AS est_budget_global, w_OPERA_SEJ.code_postal_id FROM w_OPERA_SEJ JOIN w_OPERA_SEJ_key ON w_OPERA_SEJ.key = w_OPERA_SEJ_key.key JOIN activite.t_divers t_divers_CEGILOGHOS_TDI ON t_divers_CEGILOGHOS_TDI.code = 'CEGILOGHOS_TDI' LEFT JOIN w_CJ_PATIENT ON w_OPERA_SEJ.PAT_ID = w_CJ_PATIENT.PAT_ID AND w_OPERA_SEJ.NO_DOSSIER = w_CJ_PATIENT.SEJ_NUMDOS ; ALTER TABLE w_sejours ADD CONSTRAINT w_sejours_pkey PRIMARY KEY(no_sejour); -- 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'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_2'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_3'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_4'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_5'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_6'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_7'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_8'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_9'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_10'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_11'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_12'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_13'); UPDATE activite[PX].p_sejours SET provider_id = 2, code_original = w_sejours.code_original, 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 FROM w_sejours WHERE w_sejours.no_sejour = p_sejours.no_sejour AND ( p_sejours.provider_id IS DISTINCT FROM 2 OR w_sejours.code_original IS DISTINCT FROM p_sejours.code_original 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 ); INSERT INTO activite[PX].p_sejours ( no_sejour, provider_id, 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 ) SELECT w_sejours.no_sejour, 2::bigint AS provider_id, 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 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 no_sejour FROM w_sejours); -- 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 SELECT base.cti_enable_index('activite[PX]', 'i_sejours_2'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_3'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_4'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_5'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_6'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_7'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_8'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_9'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_10'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_11'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_12'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_13'); ]]> '' THEN CASE WHEN OPERA_PLIT.CODE_ETAGE <> '' THEN OPERA_PLIT.CODE_ETAGE ELSE SUBSTR(w_OPERA_OCC_mouvement_key.CODE_LIT,1,1) END || '|' || w_OPERA_OCC_mouvement_key.CODE_LIT ELSE '' END, CODE_ETAGE = CASE WHEN w_OPERA_OCC_mouvement_key.CODE_LIT <> '' THEN CASE WHEN OPERA_PLIT.CODE_ETAGE <> '' THEN OPERA_PLIT.CODE_ETAGE ELSE SUBSTR(w_OPERA_OCC_mouvement_key.CODE_LIT,1,1) END ELSE '' END FROM prod_cegiloghos.OPERA_PLIT WHERE OPERA_PLIT.CODE_LIT = w_OPERA_OCC_mouvement_key.CODE_LIT; UPDATE w_OPERA_OCC_mouvement_key SET chambre_particuliere = t_lits.chambre_particuliere FROM activite[PX].t_lits WHERE t_lits.code_original = CODE_ETAGELIT; INSERT INTO activite[PX].t_lieux( code_original_1, code_original_2, code_original_3, code_original_4, code_original_5, code_original_6) SELECT CODE_SERVICE_DISCIPLINE, '', CODE_ETAGE, CODE_ETAGELIT, CODE_UM , CODE_SERVICE FROM w_OPERA_OCC_mouvement_key LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = CODE_SERVICE_DISCIPLINE AND code_original_2 = '' AND code_original_3 = CODE_ETAGE AND code_original_4 = CODE_ETAGELIT AND code_original_5 = CODE_UM AND code_original_6 = CODE_SERVICE ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4,5,6; UPDATE w_OPERA_OCC_mouvement_key set lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE code_original_1 = CODE_SERVICE_DISCIPLINE AND code_original_2 = '' AND code_original_3 = CODE_ETAGE AND code_original_4 = CODE_ETAGELIT AND code_original_5 = CODE_UM AND code_original_6 = CODE_SERVICE; 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 unite_fonctionnelle_id = COALESCE(t_unites_fonctionnelles.oid,0) FROM activite[PX].t_unites_fonctionnelles WHERE code_original_6 = t_unites_fonctionnelles.code_original AND unite_fonctionnelle_id <> COALESCE(t_unites_fonctionnelles.oid,0); UPDATE activite[PX].t_lieux SET unite_medicale_id = COALESCE(t_unites_medicales.oid,0) FROM activite[PX].t_unites_medicales WHERE code_original_5 = t_unites_medicales.code_original AND unite_medicale_id <> COALESCE(t_unites_medicales.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) ; UPDATE w_OPERA_OCC_mouvement2 SET q_sortie = '0', DATE_HEURE_MOUVEMENT_SORTIE = w_OPERA_OCC_mouvement2_after.DATE_HEURE_MOUVEMENT_ENTREE - interval '1 SECOND' FROM w_OPERA_OCC_mouvement2 w_OPERA_OCC_mouvement2_after WHERE w_OPERA_OCC_mouvement2.NO_DOSSIER = w_OPERA_OCC_mouvement2_after.NO_DOSSIER AND w_OPERA_OCC_mouvement2.sequence = w_OPERA_OCC_mouvement2_after.sequence - 1; UPDATE w_OPERA_OCC_mouvement2 SET CODE_SERVICE_after = w_OPERA_OCC_mouvement2_after.CODE_SERVICE, CODE_SERVICE_DISCIPLINE_after = w_OPERA_OCC_mouvement2_after.CODE_SERVICE_DISCIPLINE, CODE_ETAGE_after = w_OPERA_OCC_mouvement_key_after.CODE_ETAGE, CODE_UM_after = w_OPERA_OCC_mouvement2_after.CODE_UM FROM w_OPERA_OCC_mouvement_key, w_OPERA_OCC_mouvement2 w_OPERA_OCC_mouvement2_after JOIN w_OPERA_OCC_mouvement_key w_OPERA_OCC_mouvement_key_after ON w_OPERA_OCC_mouvement2_after.key = w_OPERA_OCC_mouvement_key_after.key WHERE w_OPERA_OCC_mouvement2.key = w_OPERA_OCC_mouvement_key.key AND w_OPERA_OCC_mouvement2.NO_DOSSIER = w_OPERA_OCC_mouvement2_after.NO_DOSSIER AND w_OPERA_OCC_mouvement2.sequence = w_OPERA_OCC_mouvement2_after.sequence - 1; UPDATE w_OPERA_OCC_mouvement2 SET CODE_SERVICE_before = w_OPERA_OCC_mouvement2_before.CODE_SERVICE, CODE_SERVICE_DISCIPLINE_before = w_OPERA_OCC_mouvement2_before.CODE_SERVICE_DISCIPLINE, CODE_ETAGE_before = w_OPERA_OCC_mouvement_key_before.CODE_ETAGE, CODE_UM_before = w_OPERA_OCC_mouvement2_before.CODE_UM FROM w_OPERA_OCC_mouvement_key, w_OPERA_OCC_mouvement2 w_OPERA_OCC_mouvement2_before JOIN w_OPERA_OCC_mouvement_key w_OPERA_OCC_mouvement_key_before ON w_OPERA_OCC_mouvement2_before.key = w_OPERA_OCC_mouvement_key_before.key WHERE w_OPERA_OCC_mouvement2.key = w_OPERA_OCC_mouvement_key.key AND w_OPERA_OCC_mouvement2.NO_DOSSIER = w_OPERA_OCC_mouvement2_before.NO_DOSSIER AND w_OPERA_OCC_mouvement2.sequence = w_OPERA_OCC_mouvement2_before.sequence + 1; DROP TABLE IF EXISTS w_mouvements_sejour; CREATE TEMP TABLE w_mouvements_sejour AS SELECT NO_DOSSIER, NO_DOSSIER 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(DATE_HEURE_MOUVEMENT_ENTREE) THEN extract('hour' from DATE_HEURE_MOUVEMENT_ENTREE) * 10000 + extract('minute' from DATE_HEURE_MOUVEMENT_ENTREE) * 100 + extract('second' from DATE_HEURE_MOUVEMENT_ENTREE) ELSE 0 END AS heure_debut, CASE WHEN p_calendrier.date = date(DATE_HEURE_MOUVEMENT_SORTIE) THEN extract('hour' from DATE_HEURE_MOUVEMENT_SORTIE) * 10000 + extract('minute' from DATE_HEURE_MOUVEMENT_SORTIE) * 100 + extract('second' from DATE_HEURE_MOUVEMENT_SORTIE) ELSE 240000 END AS heure_fin, CASE WHEN q_entree = '1' AND p_calendrier.date = date(DATE_HEURE_ENTREE_SEJOUR) AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_entrees_directes, CASE WHEN q_sortie = '1' AND p_calendrier.date = date(DATE_HEURE_SORTIE_SEJOUR) AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_sorties_directes, CASE WHEN q_entree = '1' AND p_calendrier.date = date(DATE_HEURE_ENTREE_SEJOUR) AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_entree, CASE WHEN q_sortie = '1' AND p_calendrier.date = date(DATE_HEURE_SORTIE_SEJOUR) 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 q_entree = '1' AND p_calendrier.date = date(DATE_HEURE_ENTREE_SEJOUR) AND p_sejours.type_sejour = '2' THEN 1 ELSE 0 END AS nb_ambulatoires, CASE WHEN q_entree = '1' AND p_calendrier.date = date(DATE_HEURE_ENTREE_SEJOUR) AND p_sejours.type_sejour = '3' THEN 1 ELSE 0 END AS nb_externes, CASE WHEN code_urgence = '1' AND p_calendrier.date = date(DATE_HEURE_ENTREE_SEJOUR) AND q_entree = '1' THEN 1 ELSE 0 END AS nb_urgences, 0 as nb_seances, CASE WHEN p_calendrier.date = date(DATE_HEURE_MOUVEMENT_ENTREE) AND p_sejours.type_sejour = '1' AND q_entree <> '1' AND w_OPERA_OCC_mouvement2.CODE_SERVICE_DISCIPLINE <> CODE_SERVICE_DISCIPLINE_before THEN 1 ELSE 0 END AS nb_entrees_mutation_service, CASE WHEN p_calendrier.date = date(DATE_HEURE_MOUVEMENT_SORTIE) AND p_sejours.type_sejour = '1' AND q_sortie <> '1' AND w_OPERA_OCC_mouvement2.CODE_SERVICE_DISCIPLINE <> CODE_SERVICE_DISCIPLINE_after THEN 1 ELSE 0 END AS nb_sorties_mutation_service, CASE WHEN p_calendrier.date = date(DATE_HEURE_MOUVEMENT_ENTREE) AND p_sejours.type_sejour = '1' AND q_entree <> '1' AND w_OPERA_OCC_mouvement_key.CODE_ETAGE <> CODE_ETAGE_before THEN 1 ELSE 0 END AS nb_entrees_mutation_etage, CASE WHEN p_calendrier.date = date(DATE_HEURE_MOUVEMENT_SORTIE) AND p_sejours.type_sejour = '1' AND q_sortie <> '1' AND w_OPERA_OCC_mouvement_key.CODE_ETAGE <> CODE_ETAGE_after THEN 1 ELSE 0 END AS nb_sorties_mutation_etage, 0 AS nb_entrees_mutation_activite, 0 AS nb_sorties_mutation_activite, CASE WHEN p_calendrier.date = date(DATE_HEURE_MOUVEMENT_ENTREE) AND p_sejours.type_sejour = '1' AND q_entree <> '1' AND w_OPERA_OCC_mouvement2.CODE_UM <> CODE_UM_before THEN 1 ELSE 0 END AS nb_entrees_mutation_unite_medicale, CASE WHEN p_calendrier.date = date(DATE_HEURE_MOUVEMENT_SORTIE) AND p_sejours.type_sejour = '1' AND q_sortie <> '1' AND w_OPERA_OCC_mouvement2.CODE_UM <> CODE_UM_after THEN 1 ELSE 0 END 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(DATE_HEURE_SORTIE_SEJOUR) THEN 1 ELSE 0 END AS nb_jours_js_non_inclus, CASE WHEN p_sejours.type_sejour = '1' AND w_OPERA_OCC_mouvement_key.chambre_particuliere = 'O' THEN '1' ELSE '0' END AS est_chambre_particuliere, CASE WHEN p_sejours.type_sejour = '1' AND w_OPERA_OCC_mouvement_key.chambre_particuliere = 'O' THEN 1 ELSE 0 END AS nb_chambres_particulieres, 0 AS nb_bebes, w_OPERA_OCC_mouvement_key.lieu_id, p_sejours.medecin_sejour_id as medecin_sejour_id FROM w_OPERA_OCC_mouvement2 JOIN w_OPERA_OCC_mouvement_key ON w_OPERA_OCC_mouvement2.key = w_OPERA_OCC_mouvement_key.key JOIN activite[PX].p_sejours ON w_OPERA_OCC_mouvement2.NO_DOSSIER = p_sejours.code_original AND p_sejours.etat = '' JOIN base.p_calendrier ON (p_calendrier.date BETWEEN date(DATE_HEURE_MOUVEMENT_ENTREE) AND date(DATE_HEURE_MOUVEMENT_SORTIE) AND p_calendrier.date <= now() ) WHERE p_sejours.code_prevu <> 1 ORDER BY sequence, p_calendrier.date; -- bébés -- première salve, d'après les actes honoraires DROP TABLE IF EXISTS w_OPERA_ACT_bebes; CREATE TEMP TABLE w_OPERA_ACT_bebes AS SELECT prod_cegiloghos.OPERA_ACT.NO_DOSSIER, MAX(DATE_ACTE_DEBUT)::date as date_accouchement, MAX(CASE WHEN t_actes.texte ILIKE '%multiple%' THEN 2 ELSE 1 END) AS nb_bebes FROM prod_cegiloghos.OPERA_ACT JOIN w_OPERA_SEJ_select ON OPERA_ACT.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER JOIN base.t_actes ON t_actes.code = substring(CODE_CCAM, 1, 7) AND CODE_CCAM LIKE 'JQG%' AND t_actes.texte ILIKE 'accouchement%' WHERE CODE_PRESTA = 'ACO' GROUP BY 1; CREATE INDEX w_OPERA_ACT_bebes_i1 ON w_OPERA_ACT_bebes USING btree (NO_DOSSIER); -- on stocke dans w_deja_bebes les numéros de séjours pour lesquels on -- vient de trouver des bébés afin de ne pas leur coller des bébés supplémentaires DROP TABLE IF EXISTS w_deja_bebes; CREATE TEMP TABLE w_deja_bebes AS WITH w_updated AS ( UPDATE w_mouvements_sejour SET nb_bebes = w_OPERA_ACT_bebes.nb_bebes FROM w_OPERA_ACT_bebes WHERE w_OPERA_ACT_bebes.NO_DOSSIER = w_mouvements_sejour.no_sejour AND w_OPERA_ACT_bebes.date_accouchement = w_mouvements_sejour.date AND w_mouvements_sejour.nb_bebes = 0 AND (nb_entrees_directes = 1 OR nb_externes = 1 OR nb_ambulatoires = 1 OR heure_debut = 0) RETURNING w_mouvements_sejour.no_sejour ) SELECT no_sejour as deja_no_sejour FROM w_updated; -- deuxième salve, d'après le codage des actes CCAM du PMSI DROP TABLE IF EXISTS w_LSCCAM_bebes; CREATE TEMP TABLE w_LSCCAM_bebes AS SELECT SEJ_NUMDOS, MAX(CASE WHEN t_actes.texte ILIKE '%multiple%' THEN 2 ELSE 1 END) AS nb_bebes FROM prod_cegi.CJ_SEJOUR JOIN w_OPERA_SEJ_select ON CJ_SEJOUR.SEJ_NUMDOS = w_OPERA_SEJ_select.NO_DOSSIER JOIN prod_cegi.CJ_LSRGP ON CJ_LSRGP.SEJ_ID = CJ_SEJOUR.SEJ_ID AND LSR_ACTIF = 1 JOIN prod_cegi.CJ_LSCCAM ON CJ_LSCCAM.LSR_ID = CJ_LSRGP.LSR_ID AND LSCA_ACTIF = 1 JOIN prod_cegi.CJ_CCAM ON CJ_CCAM.CCAM_ID = CJ_LSCCAM.CCAM_ID AND CCAM_ACTV = '1' JOIN base.t_actes ON t_actes.code = substring(CCAM_CODE, 1, 7) AND CCAM_CODE LIKE 'JQG%' AND t_actes.texte ILIKE 'accouchement%' LEFT JOIN w_deja_bebes ON w_deja_bebes.deja_no_sejour = CJ_SEJOUR.SEJ_NUMDOS WHERE w_deja_bebes.deja_no_sejour IS NULL GROUP BY 1; CREATE INDEX w_LSCCAM_bebes_i1 ON w_LSCCAM_bebes USING btree (SEJ_NUMDOS); -- on ajoute à w_deja_bebes les nouveaux séjours impactés WITH w_encore_bebes AS ( UPDATE w_mouvements_sejour SET nb_bebes = w_LSCCAM_bebes.nb_bebes FROM w_LSCCAM_bebes WHERE SEJ_NUMDOS = w_mouvements_sejour.no_sejour AND w_mouvements_sejour.no_sejour != ALL (ARRAY(SELECT w_mouvements_sejour.no_sejour as w_no_sejour FROM w_mouvements_sejour WHERE nb_bebes = 1 GROUP BY 1)::text[]) AND (nb_entrees_directes = 1 OR nb_externes = 1 OR nb_ambulatoires = 1) RETURNING w_mouvements_sejour.no_sejour ) INSERT INTO w_deja_bebes SELECT no_sejour FROM w_encore_bebes; DROP TABLE IF EXISTS w_OPERA_ACT_bebes; CREATE TEMP TABLE w_OPERA_ACT_bebes AS SELECT prod_cegiloghos.OPERA_ACT.NO_DOSSIER, 1 AS nb_bebes, MAX(DATE_ACTE_DEBUT)::date as date_accouchement FROM prod_cegiloghos.OPERA_ACT JOIN w_OPERA_SEJ_select ON OPERA_ACT.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER LEFT JOIN w_deja_bebes ON w_deja_bebes.deja_no_sejour = OPERA_ACT.NO_DOSSIER WHERE CODE_PRESTA = 'GHS' AND OPERA_ACT.CODE_GHS IN (SELECT to_char(code, 'FM0000') FROM base.t_ghs WHERE texte ILIKE 'nouveau-n%') AND w_deja_bebes.deja_no_sejour IS NULL GROUP BY 1; CREATE INDEX w_OPERA_ACT_bebes_i1 ON w_OPERA_ACT_bebes USING btree (NO_DOSSIER); UPDATE w_mouvements_sejour SET nb_bebes = w_OPERA_ACT_bebes.nb_bebes FROM w_OPERA_ACT_bebes WHERE w_OPERA_ACT_bebes.NO_DOSSIER = w_mouvements_sejour.no_sejour AND w_mouvements_sejour.nb_bebes = 0 AND w_mouvements_sejour.date = date_accouchement AND (nb_entrees_directes = 1 OR nb_externes = 1 OR nb_ambulatoires = 1); -- dernière opération, on met un bébé supplémentaire là où on n'en a mis qu'un -- mais où le GHS contient le mot 'multiple' UPDATE w_mouvements_sejour SET nb_bebes = 2 FROM prod_cegiloghos.OPERA_ACT JOIN base.t_ghs ON to_char(t_ghs.code, 'FM0000') = OPERA_ACT.CODE_GHS WHERE 1=1 AND w_mouvements_sejour.nb_bebes = 1 AND OPERA_ACT.NO_DOSSIER = w_mouvements_sejour.no_sejour AND t_ghs.texte like '%multiple%'; -- Séances DROP TABLE IF EXISTS w_OPERA_ACT_seances; CREATE TEMP TABLE w_OPERA_ACT_seances AS SELECT OPERA_ACT.NO_DOSSIER, date(DATE_ACTE_DEBUT) AS date, SUM(CASE WHEN MONTANT_ACTE < 0 AND QTE_ACTE > 0 THEN 0 - QTE_ACTE ELSE QTE_ACTE END) AS nb_seances FROM prod_cegiloghos.OPERA_ACT JOIN w_OPERA_SEJ_select ON OPERA_ACT.NO_DOSSIER = w_OPERA_SEJ_select.NO_DOSSIER WHERE CODE_PRESTA = 'K' AND TYPE_PRESTA = 'H' AND (COEFF_ACTE IN (15) OR DMT_ACTE = '302') GROUP BY 1,2; CREATE INDEX w_OPERA_ACT_seances_i1 ON w_OPERA_ACT_seances USING btree (NO_DOSSIER); UPDATE w_mouvements_sejour SET nb_seances = w_OPERA_ACT_seances.nb_seances FROM w_OPERA_ACT_seances WHERE w_OPERA_ACT_seances.NO_DOSSIER = w_mouvements_sejour.no_sejour AND w_OPERA_ACT_seances.date = w_mouvements_sejour.date; -- Séjours sans séances trouvées dans les actes DROP TABLE IF EXISTS w_sejours_sans_seance; CREATE TEMP TABLE w_sejours_sans_seance AS SELECT p_sejours.no_sejour, date_entree, heure_entree FROM activite[PX].p_sejours LEFT JOIN w_mouvements_sejour ON p_sejours.no_sejour = w_mouvements_sejour.no_sejour and nb_seances > 0 WHERE p_sejours.type_sejour = 5 AND w_mouvements_sejour.no_sejour IS NULL; 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_entree; -- Génération 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; 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'); UPDATE activite[PX].p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.date = p_sejours.date_sortie AND (lieu_sortie_id IS DISTINCT FROM p_mouvements_sejour.lieu_id); UPDATE activite[PX].p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.date = p_sejours.date_sortie AND p_mouvements_sejour.nb_sorties_directes = 1 AND (lieu_sortie_id <> p_mouvements_sejour.lieu_id OR lieu_sortie_id IS NULL); UPDATE activite[PX].p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND (p_sejours.lieu_sortie_id = 0 OR lieu_sortie_id IS NULL); UPDATE activite[PX].p_sejours SET type_sejour = '5' WHERE type_sejour <> '5' AND type_sejour <> '1' 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 ); ]]> '' AND GHS_NUMERO <> '9999' GROUP BY 1,2; ALTER TABLE w_RSS ADD CONSTRAINT w_RSS_pkey PRIMARY KEY(SEJ_ID); INSERT INTO w_RSS SELECT w_CJ_SEJOUR_select.SEJ_ID, w_CJ_SEJOUR_select.SEJ_NUMDOS, (MAX(Array[COALESCE(SEJGHS_MODIF_DATE,SEJGHS_DATE)::text,SEJGHS_GHS]))[2] AS GHS_NUMERO, ''::text AS C_GHM_CCAM, MAX(COALESCE(SEJGHS_MODIF_DATE,SEJGHS_DATE)) AS DT_ENV_ADM, 0::bigint AS ghs_id, 0::bigint AS ghm_id, '8' AS C_MODE_E, '' AS C_PROV, '8' AS C_MODE_S, '' AS C_DEST FROM prod_cegi.CJ_SEJGHS JOIN w_CJ_SEJOUR_select ON CJ_SEJGHS.SEJ_ID = w_CJ_SEJOUR_select.SEJ_ID LEFT JOIN w_RSS ON w_RSS.SEJ_ID = CJ_SEJGHS.SEJ_ID WHERE w_RSS.SEJ_ID IS NULL AND SEJGHS_GHS <> '' AND SEJGHS_GHS <> '9999' GROUP BY 1,2; UPDATE w_RSS SET ghm_id = t_ghm.oid FROM base.t_ghm WHERE C_GHM_CCAM = t_ghm.code; UPDATE w_RSS SET ghs_id = t_ghs.oid FROM base.t_ghs WHERE GHS_NUMERO = t_ghs.code_text; UPDATE w_RSS SET ghs_id = t_ghs.oid FROM base.t_ghs WHERE ghs_id = 0 AND GHS_NUMERO <> '' AND GHS_NUMERO = to_char(t_ghs.code,'FM0000'); -- Modes entrée-sortie UPDATE w_CJ_SEJOUR_select SET mode_entree = MEN_PMSI FROM prod_cegi.CJ_MEN WHERE w_CJ_SEJOUR_select.MEN_ID = CJ_MEN.MEN_ID AND MEN_PMSI IN ('0','6','7') ; UPDATE w_CJ_SEJOUR_select SET mode_sortie = MSO_PMSI FROM prod_cegi.CJ_MSO WHERE w_CJ_SEJOUR_select.MSO_ID = CJ_MSO.MSO_ID AND MSO_PMSI IN ('0','6','7','9') ; DROP TABLE IF EXISTS w_CHGNVE_all; CREATE TEMP TABLE w_CHGNVE_all AS SELECT CJ_CHGNVE.SEJ_ID, w_CJ_SEJOUR_select.SEJ_NUMDOS, CJ_CHGNVE.CHGNVE_ID, CJ_NVE.NVE_TYPE, CJ_CHGNVE.NVE_ID, CJ_NVE.NVE_LIBC::text AS NVE_original, CHGNVE_DATE, CHGNVE_ACTIF, COALESCE((CHGNVE_HEURE - date_trunc('day',CHGNVE_HEURE)),'00:00:00') AS CHGNVE_HEURE, CJ_DMT.DMT_LIBC, CJ_MTR.MTR_LIBC FROM prod_cegi.CJ_CHGNVE JOIN w_CJ_SEJOUR_select ON w_CJ_SEJOUR_select.SEJ_ID = CJ_CHGNVE.SEJ_ID JOIN prod_cegi.CJ_NVE ON CJ_NVE.NVE_ID = CJ_CHGNVE.NVE_ID LEFT JOIN prod_cegi.CJ_DMT ON CJ_NVE.DMT_ID = CJ_DMT.DMT_ID LEFt JOIN prod_cegi.CJ_MTR ON CJ_NVE.MTR_ID = CJ_MTR.MTR_ID WHERE CHGNVE_ANNUL_DH IS NULL AND CHGNVE_ACTIF = 1; INSERT INTO w_CHGNVE_all SELECT RSS.SEJ_ID, w_CJ_SEJOUR_select.SEJ_NUMDOS, 0::numeric AS CHGNVE_ID, 'UM'::text AS NVE_TYPE, 0::numeric AS NVE_ID, RUM.C_UM AS NVE_original, RUM.D_E, 1::numeric AS CHGNVE_ACTIF, (HR_ENTREE - date_trunc('day',HR_ENTREE)) AS CHGNVE_HEURE, ''::text AS DMT_LIBC, ''::text AS MTR_LIBC FROM prod_cegi.RUM JOIN prod_cegi.RSS ON RUM.N_PMSI = RSS.N_PMSI JOIN w_CJ_SEJOUR_select ON RSS.SEJ_ID = w_CJ_SEJOUR_select.SEJ_ID; DROP SEQUENCE IF EXISTS w_CHGNVE_seq; CREATE TEMP SEQUENCE w_CHGNVE_seq; DROP TABLE IF EXISTS w_CHGNVE; CREATE TEMP TABLE w_CHGNVE AS SELECT nextval('w_CHGNVE_seq'::regclass) AS CHGNVE_seq, subview.*, CHGNVE_DATE + CHGNVE_HEURE AS CHGNVE_DATE_HEURE, NULL::date AS CHGNVE_DATE_FIN, NULL::interval AS CHGNVE_HEURE_FIN, NULL::timestamp without time zone AS CHGNVE_DATE_HEURE_FIN, 0::bigint AS lieu_id, '0'::text AS q_entree, '0'::text AS q_sortie, 'N'::text AS chambre_particuliere, ''::text AS NVE_SAD_avant, ''::text AS NVE_ETA_avant, ''::text AS NVE_UF_avant, ''::text AS NVE_UM_avant, ''::text AS NVE_SAD_apres, ''::text AS NVE_ETA_apres, ''::text AS NVE_UF_apres, ''::text AS NVE_UM_apres FROM ( SELECT SEJ_ID, SEJ_NUMDOS, date(CHGNVE_DATE) AS CHGNVE_DATE, (MAX(Array[to_char(CASE WHEN NVE_TYPE = 'SAD' THEN @CHGNVE_ID ELSE 0 END,'FM000000000000'),CASE WHEN NVE_TYPE = 'SAD' THEN NVE_original ELSE '' END]))[2] AS NVE_SAD, (MAX(Array[to_char(CASE WHEN NVE_TYPE = 'SAD' THEN @CHGNVE_ID ELSE 0 END,'FM000000000000'),CASE WHEN NVE_TYPE = 'SAD' THEN NVE_original ELSE '' END]))[2] AS NVE_UF, (MAX(Array[to_char(CASE WHEN NVE_TYPE = 'LIT' THEN @CHGNVE_ID ELSE 0 END,'FM000000000000'),CASE WHEN NVE_TYPE = 'LIT' THEN NVE_original ELSE '' END]))[2] AS NVE_LIT, (MAX(Array[to_char(CASE WHEN NVE_TYPE = 'UM' THEN @CHGNVE_ID ELSE 0 END,'FM000000000000'),CASE WHEN NVE_TYPE = 'UM' THEN NVE_original ELSE '' END]))[2] AS NVE_UM, ''::text AS NVE_ETA, (MAX(Array[to_char(CASE WHEN NVE_TYPE = 'SAD' THEN @CHGNVE_ID ELSE 0 END,'FM000000000000'),CASE WHEN NVE_TYPE = 'SAD' THEN DMT_LIBC ELSE '' END]))[2] AS NVE_DMT, (MAX(Array[to_char(CASE WHEN NVE_TYPE = 'SAD' THEN @CHGNVE_ID ELSE 0 END,'FM000000000000'),CASE WHEN NVE_TYPE = 'SAD' THEN MTR_LIBC ELSE '' END]))[2] AS NVE_MTR, (MAX(Array[CASE WHEN NVE_TYPE = 'SAD' THEN @CHGNVE_ID ELSE 0 END,CASE WHEN NVE_TYPE = 'SAD' THEN NVE_ID ELSE -1 END]))[2] AS NVE_ID_SAD, (MAX(Array[CASE WHEN NVE_TYPE = 'SAD' THEN @CHGNVE_ID ELSE 0 END,CASE WHEN NVE_TYPE = 'SAD' THEN NVE_ID ELSE -1 END]))[2] AS NVE_ID_UF, (MAX(Array[CASE WHEN NVE_TYPE = 'LIT' THEN @CHGNVE_ID ELSE 0 END,CASE WHEN NVE_TYPE = 'LIT' THEN NVE_ID ELSE -1 END]))[2] AS NVE_ID_LIT, 0::numeric AS NVE_ID_UM, 0::numeric AS NVE_ID_ETA, MAX(CHGNVE_HEURE) AS CHGNVE_HEURE FROM w_CHGNVE_all GROUP BY 1,2,3 ORDER BY 1,2,3 ) subview; SELECT base.cti_execute( 'UPDATE w_CHGNVE SET NVE_ID_SAD = CASE WHEN w_CHGNVE.NVE_ID_SAD >= 0 THEN w_CHGNVE.NVE_ID_SAD ELSE w_CHGNVE_avant.NVE_ID_SAD END, NVE_SAD = CASE WHEN w_CHGNVE.NVE_ID_SAD >= 0 THEN w_CHGNVE.NVE_SAD ELSE w_CHGNVE_avant.NVE_SAD END, NVE_MTR = CASE WHEN w_CHGNVE.NVE_ID_SAD >= 0 THEN w_CHGNVE.NVE_MTR ELSE w_CHGNVE_avant.NVE_MTR END, NVE_DMT = CASE WHEN w_CHGNVE.NVE_ID_SAD >= 0 THEN w_CHGNVE.NVE_DMT ELSE w_CHGNVE_avant.NVE_DMT END, NVE_ID_UF = CASE WHEN w_CHGNVE.NVE_ID_UF >= 0 THEN w_CHGNVE.NVE_ID_UF ELSE w_CHGNVE_avant.NVE_ID_UF END, NVE_UF = CASE WHEN w_CHGNVE.NVE_ID_UF >= 0 THEN w_CHGNVE.NVE_UF ELSE w_CHGNVE_avant.NVE_UF END, NVE_ID_LIT = CASE WHEN w_CHGNVE.NVE_ID_LIT >= 0 THEN w_CHGNVE.NVE_ID_LIT ELSE w_CHGNVE_avant.NVE_ID_LIT END, NVE_LIT = CASE WHEN w_CHGNVE.NVE_ID_LIT >= 0 THEN w_CHGNVE.NVE_LIT ELSE w_CHGNVE_avant.NVE_LIT END FROM w_CHGNVE w_CHGNVE_avant WHERE w_CHGNVE.SEJ_ID = w_CHGNVE_avant.SEJ_ID AND w_CHGNVE.CHGNVE_seq = w_CHGNVE_avant.CHGNVE_seq + 1 AND ( w_CHGNVE.NVE_ID_SAD < 0 AND w_CHGNVE_avant.NVE_ID_SAD >= 0 OR w_CHGNVE.NVE_ID_UF < 0 AND w_CHGNVE_avant.NVE_ID_UF >= 0 OR w_CHGNVE.NVE_ID_LIT < 0 AND w_CHGNVE_avant.NVE_ID_LIT >= 0 )',100); SELECT base.cti_execute( 'UPDATE w_CHGNVE SET NVE_ID_SAD = CASE WHEN w_CHGNVE.NVE_ID_SAD >= 0 THEN w_CHGNVE.NVE_ID_SAD ELSE w_CHGNVE_apres.NVE_ID_SAD END, NVE_SAD = CASE WHEN w_CHGNVE.NVE_ID_SAD >= 0 THEN w_CHGNVE.NVE_SAD ELSE w_CHGNVE_apres.NVE_SAD END, NVE_MTR = CASE WHEN w_CHGNVE.NVE_ID_SAD >= 0 THEN w_CHGNVE.NVE_MTR ELSE w_CHGNVE_apres.NVE_MTR END, NVE_DMT = CASE WHEN w_CHGNVE.NVE_ID_SAD >= 0 THEN w_CHGNVE.NVE_DMT ELSE w_CHGNVE_apres.NVE_DMT END, NVE_ID_UF = CASE WHEN w_CHGNVE.NVE_ID_UF >= 0 THEN w_CHGNVE.NVE_ID_UF ELSE w_CHGNVE_apres.NVE_ID_UF END, NVE_UF = CASE WHEN w_CHGNVE.NVE_ID_UF >= 0 THEN w_CHGNVE.NVE_UF ELSE w_CHGNVE_apres.NVE_UF END, NVE_ID_LIT = CASE WHEN w_CHGNVE.NVE_ID_LIT >= 0 THEN w_CHGNVE.NVE_ID_LIT ELSE w_CHGNVE_apres.NVE_ID_LIT END, NVE_LIT = CASE WHEN w_CHGNVE.NVE_ID_LIT >= 0 THEN w_CHGNVE.NVE_LIT ELSE w_CHGNVE_apres.NVE_LIT END FROM w_CHGNVE w_CHGNVE_apres WHERE w_CHGNVE.SEJ_ID = w_CHGNVE_apres.SEJ_ID AND w_CHGNVE.CHGNVE_seq = w_CHGNVE_apres.CHGNVE_seq - 1 AND ( w_CHGNVE.NVE_ID_SAD < 0 AND w_CHGNVE_apres.NVE_ID_SAD >= 0 OR w_CHGNVE.NVE_ID_UF < 0 AND w_CHGNVE_apres.NVE_ID_UF >= 0 OR w_CHGNVE.NVE_ID_LIT < 0 AND w_CHGNVE_apres.NVE_ID_LIT >= 0 )',100); UPDATE w_CHGNVE SET NVE_UM = CJ_SADUM.CODE FROM prod_cegi.CJ_SADUM WHERE NVE_ID_SAD = CJ_SADUM.NVE_ID AND NVE_UM = ''; UPDATE w_CHGNVE SET NVE_ETA = w_LITS.code_etage, NVE_LIT = w_LITS.code_etage || '|' || w_LITS.code_lit FROM w_LITS WHERE NVE_ID_LIT = w_LITS.NVE_ID; UPDATE w_CHGNVE SET CHGNVE_HEURE = COALESCE((SEJ_HR_ENTREE - date_trunc('day',SEJ_HR_ENTREE)),'00:00:00'), CHGNVE_DATE_HEURE = CHGNVE_DATE + COALESCE((SEJ_HR_ENTREE - date_trunc('day',SEJ_HR_ENTREE)),'00:00:00') FROM w_CJ_SEJOUR_select WHERE w_CJ_SEJOUR_select.SEJ_ID = w_CHGNVE.SEJ_ID AND date(CHGNVE_DATE) = date(SEJ_DT_ENTREE); UPDATE w_CHGNVE SET CHGNVE_HEURE = '10:00:00'::interval, CHGNVE_DATE_HEURE = CHGNVE_DATE + '10:00:00'::interval WHERE CHGNVE_HEURE = '00:00:00'::interval; UPDATE w_CHGNVE SET q_entree = '1' FROM w_CJ_SEJOUR_select JOIN ( SELECT SEJ_ID, MIN(CHGNVE_seq) AS CHGNVE_seq_entree FROM w_CHGNVE GROUP BY 1 ) subview ON w_CJ_SEJOUR_select.SEJ_ID = subview.SEJ_ID WHERE w_CJ_SEJOUR_select.SEJ_ID = w_CHGNVE.SEJ_ID AND w_CHGNVE.CHGNVE_seq = CHGNVE_seq_entree; UPDATE w_CHGNVE SET q_sortie = '1' FROM w_CJ_SEJOUR_select JOIN ( SELECT SEJ_ID, MAX(CHGNVE_seq) AS CHGNVE_seq_sortie FROM w_CHGNVE GROUP BY 1 ) subview ON w_CJ_SEJOUR_select.SEJ_ID = subview.SEJ_ID WHERE w_CJ_SEJOUR_select.SEJ_ID = w_CHGNVE.SEJ_ID AND w_CHGNVE.CHGNVE_seq = CHGNVE_seq_sortie; UPDATE w_CHGNVE SET CHGNVE_DATE_HEURE_FIN = w_CHGNVE_apres.CHGNVE_DATE_HEURE - interval '1 second', CHGNVE_DATE_FIN = date(w_CHGNVE_apres.CHGNVE_DATE_HEURE - interval '1 second'), CHGNVE_HEURE_FIN = w_CHGNVE_apres.CHGNVE_DATE_HEURE - interval '1 second'-date_trunc('day',w_CHGNVE_apres.CHGNVE_DATE_HEURE - interval '1 second') FROM w_CHGNVE w_CHGNVE_apres WHERE w_CHGNVE.SEJ_ID = w_CHGNVE_apres.SEJ_ID AND w_CHGNVE.CHGNVE_seq = w_CHGNVE_apres.CHGNVE_seq - 1; UPDATE w_CHGNVE SET CHGNVE_DATE_HEURE_FIN = SEJ_DTHR_SORTIE, CHGNVE_DATE_FIN = date(SEJ_DTHR_SORTIE), CHGNVE_HEURE_FIN = SEJ_DTHR_SORTIE-date_trunc('day',SEJ_DTHR_SORTIE) FROM w_CJ_SEJOUR_select JOIN ( SELECT SEJ_ID, MAX(CHGNVE_seq) AS CHGNVE_seq_sortie FROM w_CHGNVE GROUP BY 1 ) subview ON w_CJ_SEJOUR_select.SEJ_ID = subview.SEJ_ID WHERE w_CJ_SEJOUR_select.SEJ_ID = w_CHGNVE.SEJ_ID AND w_CHGNVE.CHGNVE_seq = CHGNVE_seq_sortie; UPDATE w_CHGNVE SET NVE_SAD_apres = w_CHGNVE_apres.NVE_SAD, NVE_ETA_apres = w_CHGNVE_apres.NVE_ETA, NVE_UF_apres = w_CHGNVE_apres.NVE_UF, NVE_UM_apres = w_CHGNVE_apres.NVE_UM FROM w_CHGNVE w_CHGNVE_apres WHERE w_CHGNVE.SEJ_ID = w_CHGNVE_apres.SEJ_ID AND w_CHGNVE.CHGNVE_seq = w_CHGNVE_apres.CHGNVE_seq - 1; UPDATE w_CHGNVE SET NVE_SAD_avant = w_CHGNVE_avant.NVE_SAD, NVE_ETA_avant = w_CHGNVE_avant.NVE_ETA, NVE_UF_avant = w_CHGNVE_avant.NVE_UF, NVE_UM_avant = w_CHGNVE_avant.NVE_UM FROM w_CHGNVE w_CHGNVE_avant WHERE w_CHGNVE.SEJ_ID = w_CHGNVE_avant.SEJ_ID AND w_CHGNVE.CHGNVE_seq = w_CHGNVE_avant.CHGNVE_seq + 1; INSERT INTO activite[PX].t_lieux( code_original_1, code_original_2, code_original_3, code_original_4, code_original_5, code_original_6) SELECT NVE_SAD, '', NVE_ETA, NVE_LIT, NVE_UM , NVE_UF FROM w_CHGNVE LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = NVE_SAD AND code_original_2 = '' AND code_original_3 = NVE_ETA AND code_original_4 = NVE_LIT AND code_original_5 = NVE_UM AND code_original_6 = NVE_UF ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4,5,6; UPDATE activite[PX].t_lieux SET service_facturation_id = COALESCE(w_CJ_NVE_service.service_facturation_id,0), mode_traitement_id = COALESCE(w_CJ_NVE_service.mode_traitement_id,0), unite_fonctionnelle_id = COALESCE(w_CJ_NVE_service.unite_fonctionnelle_id,0) FROM w_CJ_NVE_service WHERE code_original_1 = w_CJ_NVE_service.NVE_LIBC AND ( t_lieux.service_facturation_id <> COALESCE(w_CJ_NVE_service.service_facturation_id,0) OR t_lieux.mode_traitement_id <> COALESCE(w_CJ_NVE_service.mode_traitement_id,0) OR t_lieux.unite_fonctionnelle_id <> COALESCE(w_CJ_NVE_service.unite_fonctionnelle_id,0) ) ; UPDATE activite[PX].t_lieux SET unite_medicale_id = COALESCE(t_unites_medicales.oid,0) FROM activite[PX].t_unites_medicales WHERE code_original_5 = t_unites_medicales.code_original AND unite_medicale_id <> COALESCE(t_unites_medicales.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) ; UPDATE w_CHGNVE SET lieu_id = t_lieux.oid, chambre_particuliere = t_lits.chambre_particuliere FROM activite[PX].t_lieux JOIN activite[PX].t_lits ON lit_id = t_lits.oid WHERE code_original_1 = NVE_SAD AND code_original_2 = '' AND code_original_3 = NVE_ETA AND code_original_4 = NVE_LIT AND code_original_5 = NVE_UM AND code_original_6 = NVE_UF; DROP TABLE IF EXISTS w_CHGNVE_sortie; CREATE TEMP TABLE w_CHGNVE_sortie AS SELECT w_CJ_SEJOUR_select.SEJ_ID, COALESCE((MAX(Array[CHGNVE_seq,lieu_id]))[2],0) AS lieu_sortie_id, COALESCE((MAX(Array[to_char(CHGNVE_seq,'FM000000000000'),NVE_MTR]))[2],'') AS MTR_LIBC, COALESCE((MAX(Array[to_char(CHGNVE_seq,'FM000000000000'),NVE_DMT]))[2],'') AS DMT_LIBC, ''::text AS type_sejour_force FROM w_CJ_SEJOUR_select LEFT JOIN w_CHGNVE ON w_CJ_SEJOUR_select.SEJ_ID = w_CHGNVE.SEJ_ID GROUP BY 1; UPDATE w_CHGNVE_sortie SET type_sejour_force = CASE WHEN t_services_facturation.type_sejour IN ('1','2','3','5','6', '9', '31') THEN t_services_facturation.type_sejour ELSE '' END, MTR_LIBC = CASE WHEN t_modes_traitement.code <> MTR_LIBC AND t_services_facturation.mode_traitement_id <> 0 THEN t_modes_traitement.code ELSE MTR_LIBC END, DMT_LIBC = CASE WHEN t_dmt.code <> DMT_LIBC AND t_services_facturation.dmt_id <> 0 THEN t_dmt.code ELSE dmt_LIBC END FROM activite[PX].t_lieux JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid 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 lieu_sortie_id = t_lieux.oid AND ( t_services_facturation.type_sejour IN ('1','2','3','5','6','9','31') AND type_sejour_force = '' OR t_modes_traitement.code <> MTR_LIBC AND t_services_facturation.mode_traitement_id <> 0 OR t_dmt.code <> DMT_LIBC AND t_services_facturation.dmt_id <> 0 ) ; UPDATE w_CJ_SEJOUR_select SET medecin_sejour_id = subview.medecin_sejour_id FROM ( SELECT w_CJ_SEJOUR_select.SEJ_ID, (MAX(ARRAY[CASE WHEN SPE_LIBC = '02' THEN '0' ELSE '1' END || SEJPRA_DATE::text,w_CJ_PRA.medecin_administratif_id::text]))[2]::bigint AS medecin_sejour_id FROM w_CJ_SEJOUR_select JOIN prod_cegi.CJ_SEJPRA ON w_CJ_SEJOUR_select.SEJ_ID = CJ_SEJPRA.SEJ_ID AND SEJPRA_QUALITE = 'R' JOIN w_CJ_PRA ON CJ_SEJPRA.PRA_ID = w_CJ_PRA.PRA_ID GROUP BY 1 ORDER BY 1 ) subview WHERE w_CJ_SEJOUR_select.SEJ_ID = subview.SEJ_ID; DROP TABLE IF EXISTS w_sejours; CREATE TEMP TABLE w_sejours AS SELECT w_CJ_SEJOUR_select.SEJ_NUMDOS as no_sejour, w_CJ_SEJOUR_select.SEJ_NUMDOS as code_original, COALESCE(no_patient,'W' || w_CJ_SEJOUR_select.SEJ_NUMDOS) as no_patient, date(SEJ_DTHR_ENTREE) as date_entree, date_part('hour', SEJ_DTHR_ENTREE)*10000 + date_part('minute', SEJ_DTHR_ENTREE)*100 as heure_entree, date(SEJ_DTHR_SORTIE) as date_sortie, date_part('hour', SEJ_DTHR_SORTIE)*10000 + date_part('minute', SEJ_DTHR_SORTIE)*100 as heure_sortie, CASE WHEN PAT_SEXE IN ('F', '2') THEN '2' ELSE '1' END as code_sexe, 0 AS age, CASE WHEN SEJ_DTHR_SORTIE IS NOT NULL AND SEJ_DTHR_SORTIE < '20991231' AND SEJ_DTHR_SORTIE <= (SELECT MAX(SEJ_MODIF_DH) FROM prod_cegi.CJ_SEJOUR) THEN 1 ELSE 0 END::numeric as code_sorti, CASE WHEN SEJ_RESA = 1 OR w_CJ_SEJOUR_select.SEJ_NUMDOS LIKE 'R%' OR SEJ_DTHR_ENTREE > now() THEN 1::numeric ELSE 0::numeric END AS code_prevu, CASE WHEN SEJ_ACTIF <> 1 THEN '9' WHEN trim(t_divers_CEGIFIRST_TDI.valeur) <> '' AND TYD_LIBC <> '' AND TYD_LIBC = ANY(string_to_array(replace(t_divers_CEGIFIRST_TDI.valeur,' ',''),',')) THEN '9' WHEN type_sejour_force IN ('1','2','3','5','6','9') THEN type_sejour_force WHEN type_sejour_force = '31' AND date(SEJ_DTHR_SORTIE) - date(SEJ_DTHR_ENTREE) > 1 THEN '1' WHEN type_sejour_force = '31' THEN '3' WHEN w_CHGNVE_sortie.MTR_LIBC IN ('03') AND date(SEJ_DTHR_ENTREE) = date(SEJ_DTHR_SORTIE) THEN '2' WHEN w_CHGNVE_sortie.MTR_LIBC IN ('03') THEN '1' WHEN w_CHGNVE_sortie.MTR_LIBC IN ('07') THEN '3' WHEN w_CHGNVE_sortie.MTR_LIBC IN ('19') AND w_CHGNVE_sortie.DMT_LIBC IN ('302') THEN '5' WHEN w_CHGNVE_sortie.MTR_LIBC IN ('07') OR w_CHGNVE_sortie.DMT_LIBC IN ('958') THEN '3' WHEN w_CHGNVE_sortie.MTR_LIBC IN ('19', '23') AND date(SEJ_DTHR_ENTREE) = date(SEJ_DTHR_SORTIE) THEN '2' WHEN w_CHGNVE_sortie.MTR_LIBC IN ('04') AND date(SEJ_DTHR_ENTREE) = date(SEJ_DTHR_SORTIE) THEN '2' WHEN w_CHGNVE_sortie.MTR_LIBC IN ('03') AND date(SEJ_DTHR_ENTREE) = date(SEJ_DTHR_SORTIE) THEN '2' WHEN w_CHGNVE_sortie.MTR_LIBC IN ('03') THEN '1' WHEN date(SEJ_DTHR_ENTREE) = date(SEJ_DTHR_SORTIE) THEN '2' ELSE '1' END as type_sejour, w_CHGNVE_sortie.lieu_sortie_id AS lieu_sortie_id, w_CJ_SEJOUR_select.medecin_sejour_id AS medecin_sejour_id, COALESCE(w_RSS.ghs_id,0) AS ghs_id, COALESCE(w_RSS.ghm_id,0) AS ghm_id, 0::numeric AS ghs_bebe1_id, 0::numeric AS ghs_bebe2_id, 0::numeric AS ghs_bebe3_id, COALESCE(DT_ENV_ADM,'20991231') AS date_groupage, CASE WHEN SEJ_CP = '1' AND cegi_demande_cp = 1 THEN '1' ELSE '0' END::text AS code_cp_demandee, w_CJ_SEJOUR_select.mode_traitement_id, w_CJ_SEJOUR_select.mode_entree AS mode_entree, COALESCE(w_RSS.C_PROV, w_CJ_SEJOUR_select.provenance) AS provenance, w_CJ_SEJOUR_select.mode_sortie as mode_sortie, COALESCE(w_RSS.C_DEST, w_CJ_SEJOUR_select.destination ) as destination, w_CJ_SEJOUR_select.tiers_payant_0_id, w_CJ_SEJOUR_select.tiers_payant_1_id, w_CJ_SEJOUR_select.tiers_payant_2_id, 0::bigint AS tiers_payant_22_id, 0::bigint AS est_budget_global, w_CJ_SEJOUR_select.code_postal_id FROM w_CJ_SEJOUR_select JOIN activite.t_divers t_divers_CEGIFIRST_TDI ON t_divers_CEGIFIRST_TDI.code = 'CEGIFIRST_TDI' LEFT JOIN w_CHGNVE_sortie ON w_CJ_SEJOUR_select.SEJ_ID = w_CHGNVE_sortie.SEJ_ID LEFT JOIN w_RSS ON w_CJ_SEJOUR_select.SEJ_ID = w_RSS.SEJ_ID LEFT JOIN w_CJ_PATIENT ON w_CJ_SEJOUR_select.PAT_ID = w_CJ_PATIENT.PAT_ID AND w_CJ_SEJOUR_select.SEJ_NUMDOS = w_CJ_PATIENT.SEJ_NUMDOS LEFT JOIN (SELECT count(*) AS cegi_demande_cp FROM activite.t_divers WHERE t_divers.code = 'ENCOURSVALOCP' AND valeur = '1') sub ON 1=1; -- 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'); -- Code CP demandée selon CJ_GSH -- On ne peut préfixer t_rubriques_facturation car liste sur environnement fusionné uniquement UPDATE w_sejours p_sejours SET code_cp_demandee = '1' FROM prod_cegi.CJ_GSH JOIN prod_cegi.CJ_SEJOUR ON CJ_GSH.SEJ_ID = CJ_SEJOUR.SEJ_ID JOIN prod_cegi.CJ_PST ON CJ_GSH.PST_ID = CJ_PST.PST_ID JOIN activite.t_rubriques_facturation ON CJ_PST.PST_LIBC = t_rubriques_facturation.code_original OR 'CJ_'||CJ_PST.PST_LIBC ILIKE t_rubriques_facturation.code_original JOIN activite.t_listes_contenu ON t_rubriques_facturation.oid = to_id JOIN activite.t_listes ON liste_id = t_listes.oid WHERE SEJ_NUMDOS = p_sejours.no_sejour AND t_listes.code = 'CTI_SHO_R' AND p_sejours.code_cp_demandee <> '1' AND code_prevu <> '1' ; SELECT base.cti_disable_index('activite[PX]', 'i_sejours_2'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_3'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_4'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_5'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_6'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_7'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_8'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_9'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_10'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_11'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_12'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_13'); UPDATE activite[PX].p_sejours SET provider_id = 0, code_original = w_sejours.code_original, 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 FROM w_sejours WHERE w_sejours.no_sejour = p_sejours.no_sejour AND ( p_sejours.provider_id IS DISTINCT FROM 0 OR w_sejours.code_original IS DISTINCT FROM p_sejours.code_original 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 ); INSERT INTO activite[PX].p_sejours ( no_sejour, provider_id, 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 ) SELECT w_sejours.no_sejour, 0::bigint AS provider_id, 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 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; -- 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 '' = ''; 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 '' = ''; -- 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 '' = ''; -- recréation index SELECT base.cti_enable_index('activite[PX]', 'i_sejours_2'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_3'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_4'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_5'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_6'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_7'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_8'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_9'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_10'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_11'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_12'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_13'); -- transferts d'établissements INSERT INTO base.t_etablissements(code, texte, texte_court) SELECT FNS_FINESS, FNS_NOM, FNS_NOM FROM prod_cegi.CJ_FINESS WHERE FNS_FINESS NOT IN (SELECT code FROM base.t_etablissements) ; INSERT INTO activite[PX].p_sejours_transferts (sejour_id, provenance_id, destination_id) SELECT p_sejours.oid, MAX(COALESCE(provenance.oid,0)), MAX(COALESCE(destination.oid,0)) FROM activite[PX].p_sejours JOIN prod_cegi.CJ_SEJOUR ON SEJ_NUMDOS = no_sejour AND SEJ_UAGE <> '' LEFT JOIN prod_cegi.CJ_FINESS CJ_FINESS_ENT ON FNS_ID_ENT = CJ_FINESS_ENT.FNS_ID LEFT JOIN prod_cegi.CJ_FINESS CJ_FINESS_SOR ON FNS_ID_SOR = CJ_FINESS_SOR.FNS_ID LEFT JOIN base.t_etablissements provenance ON CJ_FINESS_ENT.FNS_FINESS = provenance.code LEFT JOIN base.t_etablissements destination ON CJ_FINESS_SOR.FNS_FINESS = destination.code WHERE 1!=1 OR FNS_ID_ENT NOT IN (0,10000) OR FNS_ID_SOR NOT IN (0,10000) GROUP BY p_sejours.oid ; -- Assurance SELECT base.cti_execute('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(PASS_NOM) AS nom_assure, MAX(PASS_PRENOM) prenom_assure, MAX(p_sejours.tiers_payant_0_id), MAX(p_sejours.tiers_payant_1_id), MAX(substr(PASS_NUMSS,1,13)) AS matricule_1, MAX(p_sejours.tiers_payant_2_id), MAX(CASE WHEN AMC_NUMERO <> '''' THEN AMC_NUMERO ELSE substr(PASS_NUMSS,1,13) END) AS matricule_2, MAX(p_sejours.tiers_payant_22_id), ''''::text AS matricule_22 FROM prod_cegi.PAMLF_SEJ JOIN w_CJ_SEJOUR_select ON w_CJ_SEJOUR_select.SEJ_ID = PAMLF_SEJ.SEJ_ID JOIN activite[PX].p_sejours ON code_original = w_CJ_SEJOUR_select.SEJ_NUMDOS GROUP BY 1 ',1) WHERE (SELECT count(*) FROM information_schema.tables WHERE table_name = 'PAMLF_SEJ' AND TABLE_SCHEMA = 'prod_cegi') > 0 ; 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(PER_NOM) AS nom_assure, MAX(PER_PRENOM) prenom_assure, MAX(p_sejours.tiers_payant_0_id), MAX(p_sejours.tiers_payant_1_id), MAX(substr(AFF_NUMERO,1,13)) AS matricule_1, MAX(p_sejours.tiers_payant_2_id), MAX(substr(AFF_NUMERO,1,13)) AS matricule_2, MAX(p_sejours.tiers_payant_22_id), ''::text AS matricule_22 FROM prod_cegi.CJ_AFF JOIN prod_cegi.CJ_PATIENT ON CJ_PATIENT.PAT_ID = CJ_AFF.PAT_ID JOIN w_CJ_SEJOUR_select ON w_CJ_SEJOUR_select.SEJ_ID = CJ_AFF.SEJ_ID JOIN activite[PX].p_sejours ON code_original = w_CJ_SEJOUR_select.SEJ_NUMDOS WHERE p_sejours.oid NOT IN (SELECT sejour_id FROM activite[PX].p_sejours_assurance) GROUP BY 1 ; ]]> '1' AND w_CHGNVE.NVE_SAD <> NVE_SAD_avant THEN 1 ELSE 0 END AS nb_entrees_mutation_service, CASE WHEN p_calendrier.date = date(CHGNVE_DATE_HEURE_FIN) AND p_sejours.type_sejour = '1' AND q_sortie <> '1' AND w_CHGNVE.NVE_SAD <> NVE_SAD_apres THEN 1 ELSE 0 END AS nb_sorties_mutation_service, CASE WHEN p_calendrier.date = date(CHGNVE_DATE_HEURE) AND p_sejours.type_sejour = '1' AND q_entree <> '1' AND w_CHGNVE.NVE_ETA <> NVE_ETA_avant THEN 1 ELSE 0 END AS nb_entrees_mutation_etage, CASE WHEN p_calendrier.date = date(CHGNVE_DATE_HEURE_FIN) AND p_sejours.type_sejour = '1' AND q_sortie <> '1' AND w_CHGNVE.NVE_ETA <> NVE_ETA_apres THEN 1 ELSE 0 END AS nb_sorties_mutation_etage, 0 AS nb_entrees_mutation_activite, 0 AS nb_sorties_mutation_activite, CASE WHEN p_calendrier.date = date(CHGNVE_DATE_HEURE) AND p_sejours.type_sejour = '1' AND q_entree <> '1' AND w_CHGNVE.NVE_UM <> NVE_UM_avant THEN 1 ELSE 0 END AS nb_entrees_mutation_unite_medicale, CASE WHEN p_calendrier.date = date(CHGNVE_DATE_HEURE_FIN) AND p_sejours.type_sejour = '1' AND q_sortie <> '1' AND w_CHGNVE.NVE_UM <> w_CHGNVE.NVE_UM_apres THEN 1 ELSE 0 END 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 <> p_sejours.date_sortie THEN 1 ELSE 0 END AS nb_jours_js_non_inclus, CASE WHEN p_sejours.type_sejour = '1' AND w_CHGNVE.chambre_particuliere = 'O' THEN '1' ELSE '0' END AS est_chambre_particuliere, CASE WHEN p_sejours.type_sejour = '1' AND w_CHGNVE.chambre_particuliere = 'O' THEN 1 ELSE 0 END AS nb_chambres_particulieres, 0 AS nb_bebes, w_CHGNVE.lieu_id, p_sejours.medecin_sejour_id as medecin_sejour_id FROM w_CHGNVE JOIN activite[PX].p_sejours ON w_CHGNVE.SEJ_NUMDOS = p_sejours.code_original AND p_sejours.etat = '' JOIN base.p_calendrier ON (p_calendrier.date BETWEEN date(CHGNVE_DATE_HEURE) AND date(CHGNVE_DATE_HEURE_FIN) AND p_calendrier.date <= now() ) WHERE p_sejours.code_prevu <> 1 ORDER BY CHGNVE_seq, p_calendrier.date; -- bébés DROP TABLE IF EXISTS w_LSCCAM_bebes; CREATE TEMP TABLE w_LSCCAM_bebes AS SELECT SEJ_NUMDOS, MAX(CASE WHEN t_actes.texte ILIKE '%multiple%' THEN 2 ELSE 1 END) AS nb_bebes FROM w_CJ_SEJOUR_select JOIN prod_cegi.CJ_LSRGP ON CJ_LSRGP.SEJ_ID = w_CJ_SEJOUR_select.SEJ_ID AND LSR_ACTIF = 1 JOIN prod_cegi.CJ_LSCCAM ON CJ_LSCCAM.LSR_ID = CJ_LSRGP.LSR_ID AND LSCA_ACTIF = 1 JOIN prod_cegi.CJ_CCAM ON CJ_CCAM.CCAM_ID = CJ_LSCCAM.CCAM_ID AND CCAM_ACTV = '1' JOIN base.t_actes ON t_actes.code = substring(CCAM_CODE, 1, 7) AND CCAM_CODE LIKE 'JQG%' AND t_actes.texte ILIKE 'accouchement%' GROUP BY 1; CREATE INDEX w_LSCCAM_bebes_i1 ON w_LSCCAM_bebes USING btree (SEJ_NUMDOS); UPDATE w_mouvements_sejour SET nb_bebes = w_LSCCAM_bebes.nb_bebes FROM w_LSCCAM_bebes WHERE SEJ_NUMDOS = w_mouvements_sejour.no_sejour AND (nb_entrees_directes = 1 OR nb_externes = 1 OR nb_ambulatoires = 1); -- Séances d'après les actes DROP TABLE IF EXISTS w_CJ_LCS_seances; CREATE TEMP TABLE w_CJ_LCS_seances AS SELECT p_sejours.no_sejour, date(LCS_DT_DEB) AS date, CASE WHEN SUM(CASE WHEN LCS_TTC < 0 AND LCS_QTE > 0 THEN 0 - LCS_QTE ELSE LCS_QTE END) > 0 THEN 1 ELSE 0 END AS nb_seances FROM prod_cegi.CJ_LCS JOIN prod_cegi.CJ_SEJOUR ON CJ_SEJOUR.SEJ_ID = CJ_LCS.SEJ_ID JOIN activite[PX].p_sejours ON SEJ_NUMDOS = p_sejours.code_original LEFT JOIN base.t_ghm ON p_sejours.ghm_id = t_ghm.oid WHERE LCS_SEJHON = 1 AND LCS_CODE = 'K' AND ( LCS_COEFF = 15 OR t_ghm.code LIKE '28%' ) GROUP BY 1,2 ; CREATE INDEX w_CJ_LCS_seances_i1 ON w_CJ_LCS_seances USING btree (no_sejour); UPDATE w_mouvements_sejour SET nb_seances = w_CJ_LCS_seances.nb_seances FROM w_CJ_LCS_seances WHERE w_CJ_LCS_seances.no_sejour = w_mouvements_sejour.no_sejour AND w_CJ_LCS_seances.date = w_mouvements_sejour.date AND w_mouvements_sejour.nb_seances <> w_CJ_LCS_seances.nb_seances; -- Séances d'après les ghs chimio DROP TABLE IF EXISTS w_CJ_LCS_seances; CREATE TEMP TABLE w_CJ_LCS_seances AS SELECT p_sejours.no_sejour, date(LCS_DT_DEB) AS date, CASE WHEN SUM(CASE WHEN LCS_TTC < 0 AND LCS_QTE > 0 THEN 0 - LCS_QTE ELSE LCS_QTE END) > 0 THEN 1 ELSE 0 END AS nb_seances FROM prod_cegi.CJ_LCS JOIN prod_cegi.CJ_SEJOUR ON CJ_SEJOUR.SEJ_ID = CJ_LCS.SEJ_ID JOIN activite[PX].p_sejours ON SEJ_NUMDOS = p_sejours.code_original WHERE LCS_SEJHON = 0 AND LCS_CODE = 'GHS' AND LCS_GHS = '9606' GROUP BY 1,2 HAVING SUM(CASE WHEN LCS_TTC < 0 AND LCS_QTE > 0 THEN 0 - LCS_QTE ELSE LCS_QTE END) > 0 ; CREATE INDEX w_CJ_LCS_seances_i1 ON w_CJ_LCS_seances USING btree (no_sejour); UPDATE w_mouvements_sejour SET nb_seances = w_CJ_LCS_seances.nb_seances FROM w_CJ_LCS_seances WHERE w_CJ_LCS_seances.no_sejour = w_mouvements_sejour.no_sejour AND w_CJ_LCS_seances.date = w_mouvements_sejour.date AND w_mouvements_sejour.nb_seances <> w_CJ_LCS_seances.nb_seances; -- Séjours sans séances trouvées dans les actes DROP TABLE IF EXISTS w_sejours_sans_seance; CREATE TEMP TABLE w_sejours_sans_seance AS SELECT p_sejours.no_sejour, date_entree, heure_entree FROM activite[PX].p_sejours LEFT JOIN w_mouvements_sejour ON p_sejours.no_sejour = w_mouvements_sejour.no_sejour and nb_seances > 0 WHERE p_sejours.type_sejour = 5 AND w_mouvements_sejour.no_sejour IS NULL; 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_entree; -- Génération 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; 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( 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 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, CHGNVE_seq; 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'); UPDATE activite[PX].p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.date = p_sejours.date_sortie AND (lieu_sortie_id IS DISTINCT FROM p_mouvements_sejour.lieu_id); UPDATE activite[PX].p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.date = p_sejours.date_sortie AND p_mouvements_sejour.nb_sorties_directes = 1 AND (lieu_sortie_id <> p_mouvements_sejour.lieu_id OR lieu_sortie_id IS NULL); UPDATE activite[PX].p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND (p_sejours.lieu_sortie_id = 0 OR lieu_sortie_id IS NULL); UPDATE activite[PX].p_sejours SET type_sejour = '5' WHERE type_sejour <> '5' AND type_sejour <> '1' 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 ); ]]> 'A' WHERE TYPE_REGLEMENT IN ('1', 'S'); ALTER TABLE w_OPERA_REG_complet ADD CONSTRAINT w_OPERA_REG_complet_pkey PRIMARY KEY(oid); -- Les affectations au tiers payant ont été resserrés dans la création du fichier -- Affectation du reste selon le type de séjour UPDATE w_OPERA_REG_complet SET MONTANT_REGLEMENT_IPP_C = MONTANT_REGLEMENT_C, DATE_REGLEMENT_IPP_C = DATE_REGLEMENT_C WHERE MONTANT_REGLEMENT_C <> 0 AND MONTANT_REGLEMENT_AMO_C = 0 AND MONTANT_REGLEMENT_AMC_C = 0 AND MONTANT_REGLEMENT_IPP_C = 0 AND TIERS_REGLEMENT = NO_DOSSIER ; UPDATE w_OPERA_REG_complet SET MONTANT_REGLEMENT_AMO_C = MONTANT_REGLEMENT_C, DATE_REGLEMENT_AMC_C = DATE_REGLEMENT_C WHERE MONTANT_REGLEMENT_C <> 0 AND MONTANT_REGLEMENT_AMO_C = 0 AND MONTANT_REGLEMENT_AMC_C = 0 AND MONTANT_REGLEMENT_IPP_C = 0 AND type_tiers_payant = '1' ; UPDATE w_OPERA_REG_complet SET MONTANT_REGLEMENT_AMC_C = MONTANT_REGLEMENT_C, DATE_REGLEMENT_AMC_C = DATE_REGLEMENT_C WHERE MONTANT_REGLEMENT_C <> 0 AND MONTANT_REGLEMENT_AMO_C = 0 AND MONTANT_REGLEMENT_AMC_C = 0 AND MONTANT_REGLEMENT_IPP_C = 0 AND type_tiers_payant = '2' ; UPDATE w_OPERA_REG_complet SET MONTANT_REGLEMENT_IPP_C = MONTANT_REGLEMENT_C, DATE_REGLEMENT_IPP_C = DATE_REGLEMENT_C WHERE MONTANT_REGLEMENT_C <> 0 AND MONTANT_REGLEMENT_AMO_C = 0 AND MONTANT_REGLEMENT_AMC_C = 0 AND MONTANT_REGLEMENT_IPP_C = 0 AND type_tiers_payant = '0' ; UPDATE w_OPERA_REG_complet SET MONTANT_REGLEMENT_IPP_H = MONTANT_REGLEMENT_H, DATE_REGLEMENT_IPP_H = DATE_REGLEMENT_H WHERE MONTANT_REGLEMENT_H <> 0 AND MONTANT_REGLEMENT_AMO_H = 0 AND MONTANT_REGLEMENT_AMC_H = 0 AND MONTANT_REGLEMENT_IPP_H = 0 AND TIERS_REGLEMENT = NO_DOSSIER ; UPDATE w_OPERA_REG_complet SET MONTANT_REGLEMENT_AMO_H = MONTANT_REGLEMENT_H, DATE_REGLEMENT_AMO_H = DATE_REGLEMENT_H WHERE MONTANT_REGLEMENT_H <> 0 AND MONTANT_REGLEMENT_AMO_H = 0 AND MONTANT_REGLEMENT_AMC_H = 0 AND MONTANT_REGLEMENT_IPP_H = 0 AND type_tiers_payant = '1' ; UPDATE w_OPERA_REG_complet SET MONTANT_REGLEMENT_AMC_H = MONTANT_REGLEMENT_H, DATE_REGLEMENT_AMC_H = DATE_REGLEMENT_H WHERE MONTANT_REGLEMENT_H <> 0 AND MONTANT_REGLEMENT_AMO_H = 0 AND MONTANT_REGLEMENT_AMC_H = 0 AND MONTANT_REGLEMENT_IPP_H = 0 AND type_tiers_payant = '2' ; UPDATE w_OPERA_REG_complet SET MONTANT_REGLEMENT_IPP_H = MONTANT_REGLEMENT_H, DATE_REGLEMENT_IPP_H = DATE_REGLEMENT_H WHERE MONTANT_REGLEMENT_H <> 0 AND MONTANT_REGLEMENT_AMO_H = 0 AND MONTANT_REGLEMENT_AMC_H = 0 AND MONTANT_REGLEMENT_IPP_H = 0 AND type_tiers_payant = '0' ; CREATE INDEX w_OPERA_REG_complet_i1 ON w_OPERA_REG_complet USING btree (NO_FACTURE); CREATE INDEX w_OPERA_REG_complet_i2 ON w_OPERA_REG_complet USING btree (NO_DOSSIER); UPDATE w_OPERA_REG_complet SET MONTANT_REGLEMENT = MONTANT_REGLEMENT * COEFTF, MONTANT_REGLEMENT_C = MONTANT_REGLEMENT_C * COEFTF, MONTANT_REGLEMENT_AMO_C = MONTANT_REGLEMENT_AMO_C * COEFTF, MONTANT_REGLEMENT_AMC_C = MONTANT_REGLEMENT_AMC_C * COEFTF, MONTANT_REGLEMENT_IPP_C = MONTANT_REGLEMENT_IPP_C * COEFTF, MONTANT_REGLEMENT_H = MONTANT_REGLEMENT_H * COEFTF, MONTANT_REGLEMENT_AMO_H = MONTANT_REGLEMENT_AMO_H * COEFTF, MONTANT_REGLEMENT_AMC_H = MONTANT_REGLEMENT_AMC_H * COEFTF, MONTANT_REGLEMENT_IPP_H = MONTANT_REGLEMENT_IPP_H * COEFTF WHERE MONTANT_REGLEMENT > 0 AND COEFTF < 0; DROP TABLE IF EXISTS w_OPERA_REG_total; CREATE TEMP TABLE w_OPERA_REG_total AS SELECT w_OPERA_FAC_complet.NO_DOSSIER, w_OPERA_FAC_complet.NO_FACTURE, COALESCE(MAX(date(DATE_REGLEMENT)),'00010101') AS DATE_REGLEMENT_MAX, COALESCE(MAX(DATE_REGLEMENT_c),'00010101') AS DATE_REGLEMENT_MAX_C, COALESCE(MAX(DATE_REGLEMENT_AMO_C),'00010101') AS DATE_REGLEMENT_MAX_AMO_C, COALESCE(MAX(DATE_REGLEMENT_AMC_C),'00010101') AS DATE_REGLEMENT_MAX_AMC_C, COALESCE(MAX(DATE_REGLEMENT_IPP_C),'00010101') AS DATE_REGLEMENT_MAX_IPP_C, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_c),0) AS MONTANT_REGLEMENT_C, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_AMO_C),0) AS MONTANT_REGLEMENT_AMO_C, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_AMC_C),0) AS MONTANT_REGLEMENT_AMC_C, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_IPP_C),0) AS MONTANT_REGLEMENT_IPP_C, COALESCE(MAX(DATE_REGLEMENT_h),'00010101') AS DATE_REGLEMENT_MAX_H, COALESCE(MAX(DATE_REGLEMENT_AMO_H),'00010101') AS DATE_REGLEMENT_MAX_AMO_H, COALESCE(MAX(DATE_REGLEMENT_AMC_H),'00010101') AS DATE_REGLEMENT_MAX_AMC_H, COALESCE(MAX(DATE_REGLEMENT_IPP_H),'00010101') AS DATE_REGLEMENT_MAX_IPP_H, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_h),0) AS MONTANT_REGLEMENT_H, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_AMO_H),0) AS MONTANT_REGLEMENT_AMO_H, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_AMC_H),0) AS MONTANT_REGLEMENT_AMC_H, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_IPP_H),0) AS MONTANT_REGLEMENT_IPP_H FROM w_OPERA_FAC_complet LEFT JOIN w_OPERA_REG_complet ON w_OPERA_FAC_complet.NO_FACTURE = w_OPERA_REG_complet.NO_FACTURE GROUP BY 1,2; ALTER TABLE w_OPERA_REG_total ADD CONSTRAINT w_OPERA_REG_total_pkey PRIMARY KEY(NO_FACTURE); UPDATE w_OPERA_FAC_complet SET MONTANT_REGLEMENT_C = w_OPERA_REG_total.MONTANT_REGLEMENT_C, MONTANT_REGLEMENT_H = w_OPERA_REG_total.MONTANT_REGLEMENT_H, MONTANT_REGLEMENT_AMO_C = w_OPERA_REG_total.MONTANT_REGLEMENT_AMO_C, MONTANT_REGLEMENT_AMO_H = w_OPERA_REG_total.MONTANT_REGLEMENT_AMO_H, MONTANT_REGLEMENT_AMC_C = w_OPERA_REG_total.MONTANT_REGLEMENT_AMC_C, MONTANT_REGLEMENT_AMC_H = w_OPERA_REG_total.MONTANT_REGLEMENT_AMC_H, MONTANT_REGLEMENT_IPP_C = w_OPERA_REG_total.MONTANT_REGLEMENT_IPP_C, MONTANT_REGLEMENT_IPP_H = w_OPERA_REG_total.MONTANT_REGLEMENT_IPP_H, DATE_REGLEMENT_MAX = w_OPERA_REG_total.DATE_REGLEMENT_MAX, DATE_REGLEMENT_MAX_C = w_OPERA_REG_total.DATE_REGLEMENT_MAX_C, DATE_REGLEMENT_MAX_AMO_C = w_OPERA_REG_total.DATE_REGLEMENT_MAX_AMO_C, DATE_REGLEMENT_MAX_AMC_C = w_OPERA_REG_total.DATE_REGLEMENT_MAX_AMC_C, DATE_REGLEMENT_MAX_IPP_C = w_OPERA_REG_total.DATE_REGLEMENT_MAX_IPP_C, DATE_REGLEMENT_MAX_H = w_OPERA_REG_total.DATE_REGLEMENT_MAX_H, DATE_REGLEMENT_MAX_AMO_H = w_OPERA_REG_total.DATE_REGLEMENT_MAX_AMO_H, DATE_REGLEMENT_MAX_AMC_H = w_OPERA_REG_total.DATE_REGLEMENT_MAX_AMC_H, DATE_REGLEMENT_MAX_IPP_H = w_OPERA_REG_total.DATE_REGLEMENT_MAX_IPP_H FROM w_OPERA_REG_total WHERE w_OPERA_FAC_complet.NO_FACTURE = w_OPERA_REG_total.NO_FACTURE; DROP TABLE IF EXISTS w_OPERA_REG_total; CREATE TEMP TABLE w_OPERA_REG_total AS SELECT w_OPERA_FAC_complet.NO_DOSSIER, w_OPERA_FAC_complet.NO_FACTURE, COALESCE(MAX(date(DATE_REGLEMENT)),'00010101') AS DATE_REGLEMENT_MAX, COALESCE(MAX(DATE_REGLEMENT_c),'00010101') AS DATE_REGLEMENT_MAX_C, COALESCE(MAX(DATE_REGLEMENT_AMO_C),'00010101') AS DATE_REGLEMENT_MAX_AMO_C, COALESCE(MAX(DATE_REGLEMENT_AMC_C),'00010101') AS DATE_REGLEMENT_MAX_AMC_C, COALESCE(MAX(DATE_REGLEMENT_IPP_C),'00010101') AS DATE_REGLEMENT_MAX_IPP_C, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_c),0) AS MONTANT_REGLEMENT_C, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_AMO_C),0) AS MONTANT_REGLEMENT_AMO_C, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_AMC_C),0) AS MONTANT_REGLEMENT_AMC_C, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_IPP_C),0) AS MONTANT_REGLEMENT_IPP_C, COALESCE(MAX(DATE_REGLEMENT_h),'00010101') AS DATE_REGLEMENT_MAX_H, COALESCE(MAX(DATE_REGLEMENT_AMO_H),'00010101') AS DATE_REGLEMENT_MAX_AMO_H, COALESCE(MAX(DATE_REGLEMENT_AMC_H),'00010101') AS DATE_REGLEMENT_MAX_AMC_H, COALESCE(MAX(DATE_REGLEMENT_IPP_H),'00010101') AS DATE_REGLEMENT_MAX_IPP_H, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_h),0) AS MONTANT_REGLEMENT_H, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_AMO_H),0) AS MONTANT_REGLEMENT_AMO_H, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_AMC_H),0) AS MONTANT_REGLEMENT_AMC_H, COALESCE(SUM(w_OPERA_REG_complet.MONTANT_REGLEMENT_IPP_H),0) AS MONTANT_REGLEMENT_IPP_H FROM w_OPERA_FAC_complet LEFT JOIN w_OPERA_REG_complet ON w_OPERA_FAC_complet.NO_FACTURE = w_OPERA_REG_complet.NO_FACTURE GROUP BY 1,2; UPDATE w_OPERA_FAC_complet SET MONTANT_REGLEMENT_C = w_OPERA_REG_total.MONTANT_REGLEMENT_C, MONTANT_REGLEMENT_H = w_OPERA_REG_total.MONTANT_REGLEMENT_H, MONTANT_REGLEMENT_AMO_C = w_OPERA_REG_total.MONTANT_REGLEMENT_AMO_C, MONTANT_REGLEMENT_AMO_H = w_OPERA_REG_total.MONTANT_REGLEMENT_AMO_H, MONTANT_REGLEMENT_AMC_C = w_OPERA_REG_total.MONTANT_REGLEMENT_AMC_C, MONTANT_REGLEMENT_AMC_H = w_OPERA_REG_total.MONTANT_REGLEMENT_AMC_H, MONTANT_REGLEMENT_IPP_C = w_OPERA_REG_total.MONTANT_REGLEMENT_IPP_C, MONTANT_REGLEMENT_IPP_H = w_OPERA_REG_total.MONTANT_REGLEMENT_IPP_H, DATE_REGLEMENT_MAX = w_OPERA_REG_total.DATE_REGLEMENT_MAX, DATE_REGLEMENT_MAX_C = w_OPERA_REG_total.DATE_REGLEMENT_MAX_C, DATE_REGLEMENT_MAX_AMO_C = w_OPERA_REG_total.DATE_REGLEMENT_MAX_AMO_C, DATE_REGLEMENT_MAX_AMC_C = w_OPERA_REG_total.DATE_REGLEMENT_MAX_AMC_C, DATE_REGLEMENT_MAX_IPP_C = w_OPERA_REG_total.DATE_REGLEMENT_MAX_IPP_C, DATE_REGLEMENT_MAX_H = w_OPERA_REG_total.DATE_REGLEMENT_MAX_H, DATE_REGLEMENT_MAX_AMO_H = w_OPERA_REG_total.DATE_REGLEMENT_MAX_AMO_H, DATE_REGLEMENT_MAX_AMC_H = w_OPERA_REG_total.DATE_REGLEMENT_MAX_AMC_H, DATE_REGLEMENT_MAX_IPP_H = w_OPERA_REG_total.DATE_REGLEMENT_MAX_IPP_H FROM w_OPERA_REG_total WHERE w_OPERA_FAC_complet.NO_FACTURE = w_OPERA_REG_total.NO_FACTURE; UPDATE w_OPERA_FAC_complet SET PERIODE_ANNEE_ACT = w_OPERA_ACT_annee.PERIODE_ANNEE, NO_FACTURE_ACT = w_OPERA_ACT_annee.NO_FACTURE FROM w_OPERA_ACT_annee WHERE w_OPERA_ACT_annee.NO_DOSSIER = w_OPERA_FAC_complet.NO_DOSSIER AND PERIODE_ANNEE_ACT IS NULL AND w_OPERA_FAC_complet.NO_FACTURE = w_OPERA_FAC_complet.NO_FACTURE_REFERENCE AND w_OPERA_FAC_complet.MONTANT_TOTAL_FACTURE <> 0; DROP SEQUENCE IF EXISTS w_RSF_3_sequence; CREATE TEMP SEQUENCE w_RSF_3_sequence; DROP TABLE IF EXISTS w_RSF_3; CREATE TEMP TABLE w_RSF_3 AS SELECT nextval('w_RSF_3_sequence'::regclass) AS oid, NO_DOSSIER, FACTURE, base.cti_to_date(D_DEBUT) AS D_DEBUT, base.cti_to_date(D_FIN) AS D_FIN, CASE WHEN ACTE LIKE 'FJ%' THEN 'FJ' ELSE ACTE END AS ACTE, to_number('0' || QTE, '0000000000') AS QTE, round(COEFF::numeric,2) AS COEFF, PEC_FJ, MODUL, PU, BASE, to_number('0' || TX, '0000000000') AS TX, round(DEPENSE::numeric,2) AS DEPENSE, round(MT_CAISSE::numeric,2) AS MT_CAISSE, round(MROC::numeric,2) AS MROC, NULL::bigint AS ACT_sequence FROM prod_cegi.RSF_3 JOIN w_OPERA_FAC_complet ON w_OPERA_FAC_complet.NO_FACTURE = RSF_3.FACTURE; ALTER TABLE w_RSF_3 ADD CONSTRAINT w_RSF_3_pkey PRIMARY KEY(oid); CREATE INDEX w_RSF_3_i1 ON w_RSF_3 USING btree (FACTURE); CREATE INDEX w_RSF_3_i2 ON w_RSF_3 USING btree (NO_DOSSIER); UPDATE w_RSF_3 SET DEPENSE = MROC + MT_CAISSE WHERE MROC + MT_CAISSE > DEPENSE; DROP TABLE IF EXISTS w_RUBRIQUES_3; CREATE TEMP TABLE w_RUBRIQUES_3 AS SELECT CODE_PRESTA AS CODE_RUBRIQUE, (MAX(array[to_char(count,'FM0000000000'),ACTE]))[2] AS CODE_PRESTA FROM ( SELECT CODE_PRESTA, ACTE, count(*) AS count FROM prod_cegiloghos.OPERA_ACT JOIN w_OPERA_FAC_complet ON OPERA_ACT.NO_FACTURE = w_OPERA_FAC_complet.NO_FACTURE AND OPERA_ACT.PERIODE_ANNEE = w_OPERA_FAC_complet.PERIODE_ANNEE_ACT JOIN w_RSF_3 ON OPERA_ACT.NO_FACTURE = w_RSF_3.facture AND OPERA_ACT.MONTANT_ACTE = w_RSF_3.DEPENSE AND TYPE_PRESTA <> 'H' AND CODE_PRESTA NOT IN ('GHS', 'FJ', 'PAT') AND ACTE NOT IN ('GHS', 'FJ', 'PAT') AND ACTE NOT LIKE 'FJ%' AND CODE_PRESTA NOT LIKE 'FJ%' GROUP BY 1,2) subview GROUP BY 1; ALTER TABLE w_RUBRIQUES_3 ADD CONSTRAINT w_RUBRIQUES_3_pkey PRIMARY KEY(CODE_RUBRIQUE); DROP SEQUENCE IF EXISTS w_RSF_4_sequence; CREATE TEMP SEQUENCE w_RSF_4_sequence; DROP TABLE IF EXISTS w_RSF_4; CREATE TEMP TABLE w_RSF_4 AS SELECT nextval('w_RSF_4_sequence'::regclass) AS oid, NO_DOSSIER, RSF_4.FACTURE, base.cti_to_date(D_SOINS) AS D_SOINS, ACTE, to_number('0' || QTE, '0000000000') AS QTE, round(COEFF::numeric,2) AS COEFF, round(PU::numeric,2) AS PU, round(BASE::numeric,2) AS BASE, to_number('0' || TX, '0000000000') AS TX, round(MT_HONOR::numeric,2) AS MT_HONOR, round(MT_CAISSE::numeric,2) AS MT_CAISSE, round(MROC::numeric,2) AS MROC, DEPASS, COALESCE(RSF_4M.CODE_ACTE,'') AS CODE_CCAM, COALESCE(RSF_4M.EXTDOC,'') AS EXTDOC, COALESCE(RSF_4M.ACTV,'') AS ACTV, COALESCE(RSF_4M.PHS,'') AS PHS, COALESCE(RSF_4M.MOD1,'') AS MOD1, COALESCE(RSF_4M.MOD2,'') AS MOD2, COALESCE(RSF_4M.MOD3,'') AS MOD3, COALESCE(RSF_4M.MOD4,'') AS MOD4, COALESCE(RSF_4M.ANP,'') AS ANP, COALESCE(RSF_4M.RMBEX,'') AS RMBEX FROM prod_cegi.RSF_4 JOIN w_OPERA_FAC_complet ON w_OPERA_FAC_complet.NO_FACTURE = RSF_4.FACTURE LEFT JOIN prod_cegi.RSF_4M ON RSF_4.FACTURE = RSF_4M.FACTURE AND RSF_4.I = RSF_4M.I; CREATE INDEX w_RSF_4_i1 ON w_RSF_4 USING btree (FACTURE); CREATE INDEX w_RSF_4_i2 ON w_RSF_4 USING btree (NO_DOSSIER); DROP TABLE IF EXISTS w_RUBRIQUES_4; CREATE TEMP TABLE w_RUBRIQUES_4 AS SELECT CODE_PRESTA AS CODE_RUBRIQUE, (MAX(array[to_char(count,'FM0000000000'),ACTE]))[2] AS CODE_PRESTA FROM ( SELECT trim(substr(CODE_PRESTA,1,4)) AS CODE_PRESTA, trim(substr(ACTE,1,4)) AS ACTE, count(*) AS count FROM prod_cegiloghos.OPERA_ACT JOIN w_OPERA_FAC_complet ON OPERA_ACT.NO_FACTURE = w_OPERA_FAC_complet.NO_FACTURE AND OPERA_ACT.PERIODE_ANNEE = w_OPERA_FAC_complet.PERIODE_ANNEE_ACT JOIN w_RSF_4 ON OPERA_ACT.NO_FACTURE = w_RSF_4.facture AND OPERA_ACT.MONTANT_ACTE = w_RSF_4.MT_HONOR AND (TYPE_PRESTA = 'H' OR CODE_PRESTA LIKE 'FSD%' ) GROUP BY 1,2) subview GROUP BY 1; INSERT INTO w_RUBRIQUES_4 SELECT substr(CODE_RUBRIQUE || ' ',1,4) || 'F', substr(CODE_PRESTA || ' ',1,4) || 'F' FROM w_RUBRIQUES_4 GROUP BY 1,2 UNION SELECT substr(CODE_RUBRIQUE || ' ',1,4) || 'N', substr(CODE_PRESTA || ' ',1,4) || 'N' FROM w_RUBRIQUES_4 GROUP BY 1,2; ALTER TABLE w_RUBRIQUES_4 ADD CONSTRAINT w_RUBRIQUES_4_pkey PRIMARY KEY(CODE_RUBRIQUE); DROP TABLE IF EXISTS w_PPRS; CREATE TEMP TABLE W_PPRS AS SELECT OPERA_ACT.CODE_SERVICE_DISCIPLINE, OPERA_ACT.CODE_PRESTA , MAX(COALESCE(OPERA_PPRS.COMPTE_COMPTABLE, OPERA_PPRS_D.COMPTE_COMPTABLE, '')) AS COMPTE_COMPTABLE, 0::bigint AS compte_produit_id from prod_cegiloghos.OPERA_ACT LEFT JOIN prod_cegiloghos.OPERA_PSDISC ON OPERA_ACT.CODE_SERVICE_DISCIPLINE = OPERA_PSDISC.CODE_SERVICE_DISCIPLINE LEFT JOIN prod_cegiloghos.OPERA_PPRS ON OPERA_PSDISC.CODE_SERVICE_TARIFAIRE = OPERA_PPRS.CODE_SERVICE_TARIFAIRE AND OPERA_ACT.CODE_PRESTA = OPERA_PPRS.CODE_PRESTA LEFT JOIN prod_cegiloghos.OPERA_PPRS OPERA_PPRS_D ON OPERA_ACT.CODE_PRESTA = OPERA_PPRS_D.CODE_PRESTA AND OPERA_PPRS_D.CODE_SERVICE_TARIFAIRE = '' GROUP BY 1,2 ORDER BY 1,2; UPDATE w_PPRS SET compte_produit_id = t_compte.oid FROM activite[PX].t_compte WHERE t_compte.code = COMPTE_COMPTABLE AND COMPTE_COMPTABLE <> '' ; DROP SEQUENCE IF EXISTS w_OPERA_ACT_sequence; CREATE TEMP SEQUENCE w_OPERA_ACT_sequence; DROP TABLE IF EXISTS w_OPERA_ACT_complet CASCADE; CREATE TEMP TABLE w_OPERA_ACT_complet AS SELECT nextval('w_OPERA_ACT_sequence'::regclass) AS oid, DATE_ACTE_DEBUT, DATE_ACTE_FIN, HEURE_ACTE_DEBUT, HEURE_ACTE_FIN, w_OPERA_FAC_complet.NO_DOSSIER, w_OPERA_FAC_complet.NO_FACTURE, OPERA_ACT.CODE_SERVICE_DISCIPLINE, TYPE_PRESTA, OPERA_ACT.CODE_PRESTA AS CODE_RUBRIQUE, COALESCE(w_RUBRIQUES_3.CODE_PRESTA, w_RUBRIQUES_4.CODE_PRESTA, OPERA_ACT.CODE_PRESTA) AS CODE_PRESTA, w_PPRS.compte_produit_id, CODE_STAT3, OPERA_ACT.CODE_GHS, MT_ACTE, DMT_ACTE, CASE WHEN OPERA_ACT.MONTANT_ACTE < 0 AND OPERA_ACT.QTE_ACTE > 0 THEN (0 - OPERA_ACT.QTE_ACTE) * CASE WHEN TYPE_PRESTA IN ('S', 's', 'P') THEN COEFF_ACTE ELSE 1 END ELSE OPERA_ACT.QTE_ACTE* CASE WHEN TYPE_PRESTA IN ('S', 's', 'P') THEN COEFF_ACTE ELSE 1 END END AS QTE_ACTE, CASE WHEN TYPE_PRESTA IN ('S', 's', 'P') THEN 1 ELSE COEFF_ACTE END AS COEFF_ACTE, 0::numeric AS ACTE_PU, OPERA_ACT.PRIX_UNITAIRE, OPERA_ACT.MONTANT_ACTE, CODE_LPP, CODE_UCD, CASE WHEN TYPE_PRESTA IN ('s','H') THEN CODE_CCAM ELSE '' END AS CODE_CCAM, CODE_ACTIVITE_CCAM, CODE_PHASE_CCAM, CODE_MODIFICATEUR_1_CCAM, CODE_MODIFICATEUR_2_CCAM, CODE_MODIFICATEUR_3_CCAM, CODE_MODIFICATEUR_4_CCAM, CODE_ANP_CCAM, ''::text AS CODE_EXTDOC_CCAM, CODE_MED_PRESCRIPTEUR, CASE WHEN TYPE_PRESTA IN ('s','H') THEN CODE_MED_EXECUTANT ELSE '' END AS CODE_MED_EXECUTANT, OPERA_ACT.MONTANT_DP, '0'::text AS DEP_OK, 0::int AS act_OK, NULL::bigint AS RSF_sequence, TAUX_AMO, TAUX_AMC, TAUX_IPP, CASE WHEN TYPE_PRESTA NOT IN ('s','H') THEN MONTANT_AMO ELSE 0 END AS MONTANT_ACTE_AMO_C, CASE WHEN TYPE_PRESTA IN ('s','H') THEN MONTANT_AMO ELSE 0 END AS MONTANT_ACTE_AMO_H, CASE WHEN TYPE_PRESTA NOT IN ('s','H') THEN MONTANT_AMC ELSE 0 END AS MONTANT_ACTE_AMC_C, CASE WHEN TYPE_PRESTA IN ('s','H') THEN MONTANT_AMC ELSE 0 END AS MONTANT_ACTE_AMC_H, CASE WHEN TYPE_PRESTA NOT IN ('s','H') THEN MONTANT_IPP ELSE 0 END AS MONTANT_ACTE_IPP_C, CASE WHEN TYPE_PRESTA IN ('s','H') THEN MONTANT_IPP ELSE 0 END AS MONTANT_ACTE_IPP_H, CASE WHEN TYPE_PRESTA NOT IN ('H') THEN MONTANT_AMO ELSE 0 END AS CPT_MONTANT_ACTE_AMO_C, CASE WHEN TYPE_PRESTA IN ('H') THEN MONTANT_AMO ELSE 0 END AS CPT_MONTANT_ACTE_AMO_H, CASE WHEN TYPE_PRESTA NOT IN ('H') THEN MONTANT_AMC ELSE 0 END AS CPT_MONTANT_ACTE_AMC_C, CASE WHEN TYPE_PRESTA IN ('H') THEN MONTANT_AMC ELSE 0 END AS CPT_MONTANT_ACTE_AMC_H, CASE WHEN TYPE_PRESTA NOT IN ('H') THEN MONTANT_IPP ELSE 0 END AS CPT_MONTANT_ACTE_IPP_C, CASE WHEN TYPE_PRESTA IN ('H') THEN MONTANT_IPP ELSE 0 END AS CPT_MONTANT_ACTE_IPP_H, NULL::bigint AS oid_PAT, 0::numeric AS MONTANT_ACTE_PAT, NULL::bigint AS oid_FJ, 0::numeric AS MONTANT_ACTE_FJ, NULL::bigint AS oid_ACTP, 0::numeric AS MONTANT_ACTE_ACTP, 0::numeric AS MONTANT_DP_ACTP, ( OPERA_ACT.CODE_PRESTA::text || '|'::text || OPERA_ACT.CODE_LPP::text || '|'::text || OPERA_ACT.CODE_UCD::text || '|'::text || COALESCE(w_RUBRIQUES_3.CODE_PRESTA, w_RUBRIQUES_4.CODE_PRESTA, OPERA_ACT.CODE_PRESTA) || '|'::text || CASE WHEN TYPE_PRESTA IN ('s','H') THEN CODE_MED_EXECUTANT ELSE '' END || '|'::text || CASE WHEN TYPE_PRESTA IN ('s','H') THEN CODE_CCAM ELSE ''::text END ) AS key FROM w_OPERA_FAC_complet JOIN prod_cegiloghos.OPERA_ACT ON OPERA_ACT.NO_FACTURE = w_OPERA_FAC_complet.NO_FACTURE_ACT AND OPERA_ACT.PERIODE_ANNEE = w_OPERA_FAC_complet.PERIODE_ANNEE_ACT LEFT JOIN w_RUBRIQUES_3 ON OPERA_ACT.CODE_PRESTA = w_RUBRIQUES_3.CODE_RUBRIQUE LEFT JOIN w_RUBRIQUES_4 ON OPERA_ACT.CODE_PRESTA = w_RUBRIQUES_4.CODE_RUBRIQUE LEFT JOIN w_PPRS ON OPERA_ACT.CODE_SERVICE_DISCIPLINE = w_PPRS.CODE_SERVICE_DISCIPLINE AND OPERA_ACT.CODE_PRESTA = w_PPRS.CODE_PRESTA WHERE OPERA_ACT.NO_FACTURE <> '000000000'; UPDATE w_OPERA_ACT_complet SET MONTANT_DP = MONTANT_DP * -1 WHERE (CPT_MONTANT_ACTE_AMO_H < 0 OR CPT_MONTANT_ACTE_AMC_H < 0 OR CPT_MONTANT_ACTE_IPP_H < 0) AND MONTANT_DP > 0; UPDATE w_OPERA_ACT_complet SET DEP_OK = '1', CPT_MONTANT_ACTE_AMC_H = CASE WHEN MONTANT_DP = CPT_MONTANT_ACTE_IPP_H + CPT_MONTANT_ACTE_AMC_H THEN 0 WHEN NOT MONTANT_DP <= CPT_MONTANT_ACTE_IPP_H AND MONTANT_DP <= CPT_MONTANT_ACTE_AMC_H THEN CPT_MONTANT_ACTE_AMC_H - MONTANT_DP ELSE CPT_MONTANT_ACTE_AMC_H END, CPT_MONTANT_ACTE_IPP_H = CASE WHEN MONTANT_DP = CPT_MONTANT_ACTE_IPP_H + CPT_MONTANT_ACTE_AMC_H THEN 0 WHEN MONTANT_DP <= CPT_MONTANT_ACTE_IPP_H THEN CPT_MONTANT_ACTE_IPP_H - MONTANT_DP ELSE CPT_MONTANT_ACTE_IPP_H END FROM activite.t_divers WHERE t_divers.code = 'CEGICPTDEP' AND t_divers.valeur = '0' AND MONTANT_DP <> 0 AND (CPT_MONTANT_ACTE_AMC_H > 0 OR CPT_MONTANT_ACTE_IPP_H > 0) AND MONTANT_DP <= CPT_MONTANT_ACTE_AMC_H + CPT_MONTANT_ACTE_IPP_H ; UPDATE w_OPERA_ACT_complet SET DEP_OK = '1', CPT_MONTANT_ACTE_AMC_H = CASE WHEN MONTANT_DP = CPT_MONTANT_ACTE_IPP_H + CPT_MONTANT_ACTE_AMC_H THEN 0 WHEN NOT MONTANT_DP >= CPT_MONTANT_ACTE_IPP_H AND MONTANT_DP >= CPT_MONTANT_ACTE_AMC_H THEN CPT_MONTANT_ACTE_AMC_H - MONTANT_DP ELSE CPT_MONTANT_ACTE_AMC_H END, CPT_MONTANT_ACTE_IPP_H = CASE WHEN MONTANT_DP = CPT_MONTANT_ACTE_IPP_H + CPT_MONTANT_ACTE_AMC_H THEN 0 WHEN MONTANT_DP >= CPT_MONTANT_ACTE_IPP_H THEN CPT_MONTANT_ACTE_IPP_H - MONTANT_DP ELSE CPT_MONTANT_ACTE_IPP_H END FROM activite.t_divers WHERE t_divers.code = 'CEGICPTDEP' AND t_divers.valeur = '0' AND MONTANT_DP <> 0 AND (CPT_MONTANT_ACTE_AMC_H < 0 OR CPT_MONTANT_ACTE_IPP_H < 0) AND MONTANT_DP >= CPT_MONTANT_ACTE_AMC_H + CPT_MONTANT_ACTE_IPP_H ; CREATE INDEX w_OPERA_ACT_complet_i1 ON w_OPERA_ACT_complet USING btree (NO_FACTURE); CREATE INDEX w_OPERA_ACT_complet_i2 ON w_OPERA_ACT_complet USING btree (NO_DOSSIER); DROP TABLE IF EXISTS w_OPERA_ACT_total; CREATE TEMP TABLE w_OPERA_ACT_total AS SELECT NO_FACTURE, MAX(COALESCE(DATE_ACTE_FIN,DATE_ACTE_DEBUT)) AS DATE_ACTE_FIN, MAX(CODE_GHS) AS CODE_GHS, SUM(MONTANT_ACTE_AMO_C) AS MONTANT_ACTE_AMO_C, SUM(MONTANT_ACTE_AMO_H) AS MONTANT_ACTE_AMO_H, SUM(MONTANT_ACTE_AMC_C) AS MONTANT_ACTE_AMC_C, SUM(MONTANT_ACTE_AMC_H) AS MONTANT_ACTE_AMC_H, SUM(MONTANT_ACTE_IPP_C) AS MONTANT_ACTE_IPP_C, SUM(MONTANT_ACTE_IPP_H) AS MONTANT_ACTE_IPP_H, SUM(CPT_MONTANT_ACTE_AMO_C) AS CPT_MONTANT_ACTE_AMO_C, SUM(CPT_MONTANT_ACTE_AMO_H) AS CPT_MONTANT_ACTE_AMO_H, SUM(CPT_MONTANT_ACTE_AMC_C) AS CPT_MONTANT_ACTE_AMC_C, SUM(CPT_MONTANT_ACTE_AMC_H) AS CPT_MONTANT_ACTE_AMC_H, SUM(CPT_MONTANT_ACTE_IPP_C) AS CPT_MONTANT_ACTE_IPP_C, SUM(CPT_MONTANT_ACTE_IPP_H) AS CPT_MONTANT_ACTE_IPP_H FROM w_OPERA_ACT_complet GROUP BY 1; INSERT INTO w_OPERA_ACT_complet SELECT nextval('w_OPERA_ACT_sequence'::regclass) AS oid, DATE_FACT_DEBUT AS DATE_ACTE_DEBUT, w_OPERA_FAC_complet.DATE_FACT_FIN AS DATE_ACTE_FIN, 0 AS HEURE_ACTE_DEBUT, 0 AS HEURE_ACTE_FIN, w_OPERA_FAC_complet.NO_DOSSIER, w_OPERA_FAC_complet.NO_FACTURE, ''::text AS CODE_SERVICE_DISCIPLINE, 'S'::text AS TYPE_PRESTA, '*ECARTCTI'::text AS CODE_RUBRIQUE, '*ECARTCTI'::text AS CODE_PRESTA, 0::bigint AS compte_produit_id, ''::text AS CODE_STAT3, ''::text AS CODE_GHS, ''::text AS MT_ACTE, ''::text AS DMT_ACTE, 0::numeric AS QTE_ACTE, 0::numeric AS COEFF_ACTE, 0::numeric AS ACTE_PU, 0::numeric AS PRIX_UNITAIRE, (COALESCE(MONTANT_FACT_AMO_C,0) - COALESCE(MONTANT_ACTE_AMO_C,0)) + (COALESCE(MONTANT_FACT_AMC_C,0) - COALESCE(MONTANT_ACTE_AMC_C,0)) + (COALESCE(MONTANT_FACT_IPP_C,0) - COALESCE(MONTANT_ACTE_IPP_C,0)) AS MONTANT_ACTE, ''::text AS CODE_LPP, ''::text AS CODE_UCD, ''::text AS CODE_CCAM, ''::text AS CODE_ACTIVITE_CCAM, ''::text AS CODE_PHASE_CCAM, ''::text AS CODE_MODIFICATEUR_1_CCAM, ''::text AS CODE_MODIFICATEUR_2_CCAM, ''::text AS CODE_MODIFICATEUR_3_CCAM, ''::text AS CODE_MODIFICATEUR_4_CCAM, ''::text AS CODE_ANP_CCAM, ''::text AS CODE_EXTDOC_CCAM, ''::text AS CODE_MED_PRESCRIPTEUR, ''::text AS CODE_MED_EXECUTANT, 0::numeric AS MONTANT_DP, '0'::text AS DEP_OK, 1::int AS act_OK, NULL::bigint AS RSF_sequence, 0::numeric AS TAUX_AMO, 0::numeric AS TAUX_AMC, 0::numeric AS TAUX_IPP, (COALESCE(MONTANT_FACT_AMO_C,0) - COALESCE(MONTANT_ACTE_AMO_C,0)) AS MONTANT_ACTE_AMO_C, 0 AS MONTANT_ACTE_AMO_H, (COALESCE(MONTANT_FACT_AMC_C,0) - COALESCE(MONTANT_ACTE_AMC_C,0)) AS MONTANT_ACTE_AMC_C, 0 AS MONTANT_ACTE_AMC_H, (COALESCE(MONTANT_FACT_IPP_C,0) - COALESCE(MONTANT_ACTE_IPP_C,0)) AS MONTANT_ACTE_IPP_C, 0 AS MONTANT_ACTE_IPP_H, (COALESCE(MONTANT_FACT_AMO_C,0) - COALESCE(MONTANT_ACTE_AMO_C,0)) AS CPT_MONTANT_ACTE_AMO_C, 0 AS CPT_MONTANT_ACTE_AMO_H, (COALESCE(MONTANT_FACT_AMC_C,0) - COALESCE(MONTANT_ACTE_AMC_C,0)) AS CPT_MONTANT_ACTE_AMC_C, 0 AS CPT_MONTANT_ACTE_AMC_H, (COALESCE(MONTANT_FACT_IPP_C,0) - COALESCE(MONTANT_ACTE_IPP_C,0)) AS CPT_MONTANT_ACTE_IPP_C, 0 AS CPT_MONTANT_ACTE_IPP_H, NULL::bigint AS oid_PAT, NULL::numeric AS MONTANT_ACTE_PAT, NULL::bigint AS oid_FJ, NULL::numeric AS MONTANT_ACTE_FJ, NULL::bigint AS oid_ACTP, NULL::numeric AS MONTANT_ACTE_ACTP, NULL::numeric AS MONTANT_DP_ACTP, ( '*ECARTCTI' || '|' || '*ECARTCTI' || '|' || '' || '|' || '' ) AS key FROM w_OPERA_FAC_complet LEFT JOIN w_OPERA_ACT_total ON w_OPERA_FAC_complet.NO_FACTURE = w_OPERA_ACT_total.NO_FACTURE WHERE (COALESCE(MONTANT_FACT_AMO_C,0) - COALESCE(MONTANT_ACTE_AMO_C,0)) <> 0 OR (COALESCE(MONTANT_FACT_AMC_C,0) - COALESCE(MONTANT_ACTE_AMC_C,0)) <> 0 OR (COALESCE(MONTANT_FACT_IPP_C,0) - COALESCE(MONTANT_ACTE_IPP_C,0)) <> 0; -- Ajout des écarts HON INSERT INTO w_OPERA_ACT_complet SELECT nextval('w_OPERA_ACT_sequence'::regclass) AS oid, DATE_FACT_DEBUT AS DATE_ACTE_DEBUT, w_OPERA_FAC_complet.DATE_FACT_FIN AS DATE_ACTE_FIN, 0 AS HEURE_ACTE_DEBUT, 0 AS HEURE_ACTE_FIN, w_OPERA_FAC_complet.NO_DOSSIER, w_OPERA_FAC_complet.NO_FACTURE, ''::text AS CODE_SERVICE_DISCIPLINE, 'H'::text AS TYPE_PRESTA, '*ECARTCTI'::text AS CODE_RUBRIQUE, '*ECARTCTI'::text AS CODE_PRESTA, 0::bigint AS compte_produit_id, ''::text AS CODE_STAT3, ''::text AS CODE_GHS, ''::text AS MT_ACTE, ''::text AS DMT_ACTE, 0::numeric AS QTE_ACTE, 0::numeric AS COEFF_ACTE, 0::numeric AS ACTE_PU, 0::numeric AS PRIX_UNITAIRE, (COALESCE(MONTANT_FACT_AMO_H,0) - COALESCE(MONTANT_ACTE_AMO_H,0)) + (COALESCE(MONTANT_FACT_AMC_H,0) - COALESCE(MONTANT_ACTE_AMC_H,0)) + (COALESCE(MONTANT_FACT_IPP_H,0) - COALESCE(MONTANT_ACTE_IPP_H,0)) AS MONTANT_ACTE, ''::text AS CODE_LPP, ''::text AS CODE_UCD, ''::text AS CODE_CCAM, ''::text AS CODE_ACTIVITE_CCAM, ''::text AS CODE_PHASE_CCAM, ''::text AS CODE_MODIFICATEUR_1_CCAM, ''::text AS CODE_MODIFICATEUR_2_CCAM, ''::text AS CODE_MODIFICATEUR_3_CCAM, ''::text AS CODE_MODIFICATEUR_4_CCAM, ''::text AS CODE_ANP_CCAM, ''::text AS CODE_EXTDOC_CCAM, ''::text AS CODE_MED_PRESCRIPTEUR, ''::text AS CODE_MED_EXECUTANT, 0::numeric AS MONTANT_DP, '0'::text AS DEP_OK, 1::int AS act_OK, NULL::bigint AS RSF_sequence, 0::numeric AS TAUX_AMO, 0::numeric AS TAUX_AMC, 0::numeric AS TAUX_IPP, 0::numeric AS MONTANT_ACTE_AMO_C, (COALESCE(MONTANT_FACT_AMO_H,0) - COALESCE(MONTANT_ACTE_AMO_H,0)) AS MONTANT_ACTE_AMO_H, 0::numeric AS MONTANT_ACTE_AMC_C, (COALESCE(MONTANT_FACT_AMC_H,0) - COALESCE(MONTANT_ACTE_AMC_H,0)) AS MONTANT_ACTE_AMC_H, 0::numeric AS MONTANT_ACTE_IPP_C, (COALESCE(MONTANT_FACT_IPP_H,0) - COALESCE(MONTANT_ACTE_IPP_H,0)) AS MONTANT_ACTE_IPP_H, 0::numeric AS MONTANT_ACTE_AMO_C, (COALESCE(MONTANT_FACT_AMO_H,0) - COALESCE(MONTANT_ACTE_AMO_H,0)) AS CPT_MONTANT_ACTE_AMO_H, 0::numeric AS MONTANT_ACTE_AMC_C, (COALESCE(MONTANT_FACT_AMC_H,0) - COALESCE(MONTANT_ACTE_AMC_H,0)) AS CPT_MONTANT_ACTE_AMC_H, 0::numeric AS MONTANT_ACTE_IPP_C, (COALESCE(MONTANT_FACT_IPP_H,0) - COALESCE(MONTANT_ACTE_IPP_H,0)) AS CPT_MONTANT_ACTE_IPP_H, NULL::bigint AS oid_PAT, NULL::numeric AS MONTANT_ACTE_PAT, NULL::bigint AS oid_FJ, NULL::numeric AS MONTANT_ACTE_FJ, NULL::bigint AS oid_ACTP, NULL::numeric AS MONTANT_ACTE_ACTP, NULL::numeric AS MONTANT_DP_ACTP, ( '*ECARTCTI' || '|' || '*ECARTCTI' || '|' || '' || '|' || '' ) AS key FROM w_OPERA_FAC_complet LEFT JOIN w_OPERA_ACT_total ON w_OPERA_FAC_complet.NO_FACTURE = w_OPERA_ACT_total.NO_FACTURE WHERE (COALESCE(MONTANT_FACT_AMO_H,0) - COALESCE(MONTANT_ACTE_AMO_H,0)) <> 0 OR (COALESCE(MONTANT_FACT_AMC_H,0) - COALESCE(MONTANT_ACTE_AMC_H,0)) <> 0 OR (COALESCE(MONTANT_FACT_IPP_H,0) - COALESCE(MONTANT_ACTE_IPP_H,0)) <> 0; ]]> w_OPERA_FAC_complet.DATE_FACT_FIN); UPDATE w_OPERA_FAC_complet SET GHS = w_OPERA_ACT_total.CODE_GHS, key = TIERS_FACT_AMO || '|' || TIERS_FACT_AMC || '|' || w_OPERA_ACT_total.CODE_GHS FROM w_OPERA_ACT_total WHERE w_OPERA_ACT_total.NO_FACTURE = w_OPERA_FAC_complet.NO_FACTURE AND w_OPERA_ACT_total.CODE_GHS IS DISTINCT FROM w_OPERA_FAC_complet.GHS; DROP TABLE IF EXISTS w_OPERA_FAC_complet_key; CREATE TEMP TABLE w_OPERA_FAC_complet_key AS SELECT key, TIERS_FACT_AMO, TIERS_FACT_AMC, GHS, GHS_BEBE1, 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, NULL::bigint AS ghs_id, NULL::bigint AS ghs_bebe1_id, NULL::bigint AS ghs_bebe2_id, NULL::bigint AS ghs_bebe3_id FROM w_OPERA_FAC_complet GROUP BY 1,2,3,4,5; ALTER TABLE w_OPERA_FAC_complet_key ADD CONSTRAINT w_OPERA_FAC_complet_key_pkey PRIMARY KEY(KEY); UPDATE w_OPERA_FAC_complet_key set tiers_payant_0_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE code_original = 'PATIENT'; UPDATE w_OPERA_FAC_complet_key set tiers_payant_1_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE TIERS_FACT_AMO <> '' AND code_original = TIERS_FACT_AMO; UPDATE w_OPERA_FAC_complet_key set tiers_payant_2_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE TIERS_FACT_AMC <> '' AND code_original = TIERS_FACT_AMC; UPDATE w_OPERA_FAC_complet_key set ghs_id = t_ghs.oid FROM base.t_ghs WHERE GHS <> '' AND t_ghs.code_text = GHS; UPDATE w_OPERA_FAC_complet_key set ghs_id = t_ghs.oid FROM base.t_ghs WHERE ghs_id = 0 AND GHS <> '' AND to_char(t_ghs.code,'FM0000') = GHS; DROP TABLE IF EXISTS w_OPERA_FAC_avoirs; CREATE TEMP TABLE w_OPERA_FAC_avoirs AS SELECT w_OPERA_FAC_avoirs.NO_DOSSIER, w_OPERA_FAC_avoirs.NO_FACTURE AS NO_FACTURE_AVOIR, w_OPERA_FAC_avoirs.DATE_CALCUL_FACTURE AS DATE_CALCUL_FACTURE_AVOIR, w_OPERA_FAC_avoirs.MONTANT_TOTAL_FACTURE AS MONTANT_TOTAL_FACTURE_AVOIR, w_OPERA_FAC_avoirs.MONTANT_FACT_AMO AS MONTANT_FACT_AMO_AVOIR, w_OPERA_FAC_avoirs.MONTANT_FACT_AMC AS MONTANT_FACT_AMC_AVOIR, w_OPERA_FAC_avoirs.MONTANT_FACT_IPP AS MONTANT_FACT_IPP_AVOIR, MAX(w_OPERA_FAC_complet.NO_FACTURE) AS NO_FACTURE_ANNULEE FROM w_OPERA_FAC_complet w_OPERA_FAC_avoirs LEFT JOIN w_OPERA_FAC_complet ON w_OPERA_FAC_complet.NO_DOSSIER = w_OPERA_FAC_avoirs.NO_DOSSIER AND w_OPERA_FAC_complet.TYPE_FACTURE IN ('D','F') AND w_OPERA_FAC_complet.NO_FACTURE < w_OPERA_FAC_avoirs.NO_FACTURE AND 0 - w_OPERA_FAC_complet.MONTANT_FACT_AMO = w_OPERA_FAC_avoirs.MONTANT_FACT_AMO AND 0 - w_OPERA_FAC_complet.MONTANT_FACT_AMC = w_OPERA_FAC_avoirs.MONTANT_FACT_AMC AND 0 - w_OPERA_FAC_complet.MONTANT_FACT_IPP = w_OPERA_FAC_avoirs.MONTANT_FACT_IPP WHERE w_OPERA_FAC_avoirs.TYPE_FACTURE = 'A' GROUP BY 1,2,3,4,5,6,7; CREATE INDEX w_OPERA_FAC_avoirs_i1 ON w_OPERA_FAC_avoirs USING btree (NO_FACTURE_AVOIR); CREATE INDEX w_OPERA_FAC_avoirs_i2 ON w_OPERA_FAC_avoirs USING btree (NO_FACTURE_ANNULEE); UPDATE w_OPERA_FAC_complet SET NO_FACTURE_OD_AVOIR = NO_FACTURE_ANNULEE FROM w_OPERA_FAC_avoirs WHERE w_OPERA_FAC_avoirs.NO_DOSSIER = w_OPERA_FAC_complet.NO_DOSSIER AND w_OPERA_FAC_avoirs.NO_FACTURE_AVOIR = w_OPERA_FAC_complet.NO_FACTURE; UPDATE w_OPERA_FAC_complet SET TYPE_FACTURE = 'X', NO_FACTURE_OD_AVOIR = NO_FACTURE_AVOIR FROM w_OPERA_FAC_avoirs WHERE w_OPERA_FAC_avoirs.NO_DOSSIER = w_OPERA_FAC_complet.NO_DOSSIER AND w_OPERA_FAC_avoirs.NO_FACTURE_ANNULEE = w_OPERA_FAC_complet.NO_FACTURE; DROP TABLE IF EXISTS w_OPERA_FAC_reference; CREATE TEMP TABLE w_OPERA_FAC_reference AS SELECT NO_FACTURE_REFERENCE, MAX(DATE_REGLEMENT_MAX) AS reference_DATE_REGLEMENT_MAX, MAX(DATE_REGLEMENT_MAX_C) AS reference_DATE_REGLEMENT_MAX_C, MAX(DATE_REGLEMENT_MAX_H) AS reference_DATE_REGLEMENT_MAX_H, MAX(DATE_REGLEMENT_MAX_IPP_C) AS reference_DATE_REGLEMENT_MAX_IPP_C, MAX(DATE_REGLEMENT_MAX_IPP_H) AS reference_DATE_REGLEMENT_MAX_IPP_H, MAX(DATE_REGLEMENT_MAX_AMO_C) AS reference_DATE_REGLEMENT_MAX_AMO_C, MAX(DATE_REGLEMENT_MAX_AMO_H) AS reference_DATE_REGLEMENT_MAX_AMO_H, MAX(DATE_REGLEMENT_MAX_AMC_C) AS reference_DATE_REGLEMENT_MAX_AMC_C, MAX(DATE_REGLEMENT_MAX_AMC_H) AS reference_DATE_REGLEMENT_MAX_AMC_H FROM w_OPERA_FAC_complet GROUP BY NO_FACTURE_REFERENCE; ALTER TABLE w_OPERA_FAC_reference ADD CONSTRAINT w_OPERA_FAC_reference_pkey PRIMARY KEY(NO_FACTURE_REFERENCE); ALTER SEQUENCE activite[PX].s_factures RESTART WITH 1; DROP TABLE IF EXISTS w_factures; CREATE TEMP TABLE w_factures AS SELECT nextval('activite[PX].s_factures'::regclass) AS oid, w_OPERA_FAC_complet.NO_DOSSIER AS no_sejour, p_sejours.oid AS sejour_id, w_OPERA_FAC_complet.NO_FACTURE AS no_facture, date(w_OPERA_FAC_complet.DATE_FACT_DEBUT) AS date_debut, date(w_OPERA_FAC_complet.DATE_FACT_FIN) AS date_fin, CASE WHEN TYPE_FACTURE IN ('X') THEN 'X' WHEN TYPE_FACTURE IN ('F','X') AND w_OPERA_FAC_complet.NO_FACTURE <> w_OPERA_FAC_complet.NO_FACTURE_REFERENCE THEN '2' WHEN TYPE_FACTURE IN ('A') THEN '1' WHEN TYPE_FACTURE IN ('D') THEN '2' ELSE '0' END AS type_facture, p_sejours.code_cp_demandee, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN '1' ELSE '0' END AS code_facture, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN date(DATE_CALCUL_FACTURE) ELSE '20991231' END AS date_facture, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN '1' ELSE '0' END AS code_vente, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN date(DATE_CALCUL_FACTURE) ELSE '20991231'::date END AS date_vente, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN extract('year' FROM DATE_CALCUL_FACTURE) * 100 + extract('month' FROM DATE_CALCUL_FACTURE) ELSE extract('year' FROM '20991231'::date) * 100 + extract('month' FROM '20991231'::date) END AS mois_vente, '0'::text AS code_cloture, CASE WHEN TYPE_FACTURE IN ('A') THEN 1 ELSE 0 END AS nb_rejets, w_OPERA_FAC_complet.NO_FACTURE_REFERENCE AS no_facture_reference, 0::bigint AS facture_reference_id, NO_FACTURE_OD_AVOIR AS no_facture_od_avoir, 0::bigint AS facture_od_avoir_id, COALESCE(w_OPERA_FAC_complet_key.ghs_id, p_sejours.ghs_id) AS ghs_id, COALESCE(w_OPERA_FAC_complet_key.ghs_bebe1_id, p_sejours.ghs_bebe1_id) AS ghs_bebe1_id, 0::bigint AS ghs_bebe2_id, 0::bigint AS ghs_bebe3_id, ''::text AS particularite_t2a, w_OPERA_FAC_complet_key.tiers_payant_1_id, w_OPERA_FAC_complet_key.tiers_payant_2_id, w_OPERA_FAC_complet_key.tiers_payant_22_id, w_OPERA_FAC_complet_key.tiers_payant_0_id, CASE WHEN DATE_ENVOI_CETELIC_FACT_AMO between '1980-01-01' AND '2050-01-01' AND DATE_ENVOI_CETELIC_FACT_AMC between '1980-01-01' AND '2050-01-01' THEN LEAST(DATE_ENVOI_CETELIC_FACT_AMO, DATE_ENVOI_CETELIC_FACT_AMC) WHEN DATE_ENVOI_CETELIC_FACT_AMO between '1980-01-01' AND '2050-01-01' THEN DATE_ENVOI_CETELIC_FACT_AMO WHEN DATE_ENVOI_CETELIC_FACT_AMC between '1980-01-01' AND '2050-01-01' THEN DATE_ENVOI_CETELIC_FACT_AMC ELSE LEAST(DATE_ENVOI_CETELIC_FACT_AMO, DATE_ENVOI_CETELIC_FACT_AMC) END AS date_expedition, '00010101'::date AS date_expedition_0, date(DATE_ENVOI_CETELIC_FACT_AMO) AS date_expedition_1, date(DATE_ENVOI_CETELIC_FACT_AMC) AS date_expedition_2, '00010101'::date AS date_expedition_22, '0'::text AS code_expedie_0, CASE WHEN DATE_ENVOI_CETELIC_FACT_AMO IS NOT NULL THEN '1' ELSE '0' END AS code_expedie_1, CASE WHEN DATE_ENVOI_CETELIC_FACT_AMC IS NOT NULL THEN '1' ELSE '0' END AS code_expedie_2, '0'::text AS code_expedie_22, ''::text AS no_bordereau_0, COALESCE(NO_LOT_CETELIC_FACT_AMO,'') AS no_bordereau_1, COALESCE(NO_LOT_CETELIC_FACT_AMC,'') AS no_bordereau_2, ''::text AS no_bordereau_22, DATE_REGLEMENT_MAX AS date_solde, DATE_REGLEMENT_MAX_c AS date_solde_c, DATE_REGLEMENT_MAX_h AS date_solde_h, DATE_REGLEMENT_MAX_IPP_C AS date_solde_0_c, DATE_REGLEMENT_MAX_IPP_H AS date_solde_0_h, DATE_REGLEMENT_MAX_AMO_C AS date_solde_1_c, DATE_REGLEMENT_MAX_AMO_H AS date_solde_1_h, DATE_REGLEMENT_MAX_AMC_C AS date_solde_2_c, DATE_REGLEMENT_MAX_AMC_H AS date_solde_2_h, '00010101'::date AS date_solde_22_c, '00010101'::date AS date_solde_22_h, COALESCE(MONTANT_FACT_AMO_C + MONTANT_FACT_AMC_C + MONTANT_FACT_IPP_C,0) AS montant_facture_c, COALESCE(MONTANT_FACT_AMO_H + MONTANT_FACT_AMC_H + MONTANT_FACT_IPP_H,0) AS montant_facture_h, COALESCE(MONTANT_FACT_IPP_C,0) AS montant_facture_0_c, COALESCE(MONTANT_FACT_IPP_H,0) AS montant_facture_0_h, COALESCE(MONTANT_FACT_AMO_C,0) AS montant_facture_1_c, COALESCE(MONTANT_FACT_AMO_H,0) AS montant_facture_1_h, COALESCE(MONTANT_FACT_AMC_C,0) AS montant_facture_2_c, COALESCE(MONTANT_FACT_AMC_H,0) AS montant_facture_2_h, 0::numeric AS montant_facture_22_c, 0::numeric AS montant_facture_22_h, 0::numeric AS montant_facture_c_actes_inclus_dans_sejour, 0::numeric AS montant_facture_h_actes_inclus_dans_sejour, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN COALESCE(MONTANT_FACT_AMO_C + MONTANT_FACT_AMC_C + MONTANT_FACT_IPP_C,0) ELSE 0 END AS montant_comptabilise_c, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN COALESCE(MONTANT_FACT_AMO_H + MONTANT_FACT_AMC_H + MONTANT_FACT_IPP_H,0) ELSE 0 END AS montant_comptabilise_h, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN COALESCE(MONTANT_FACT_IPP_C,0) ELSE 0 END AS montant_comptabilise_0_c, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN COALESCE(MONTANT_FACT_IPP_H,0) ELSE 0 END AS montant_comptabilise_0_h, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN COALESCE(MONTANT_FACT_AMO_C,0) ELSE 0 END AS montant_comptabilise_1_c, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN COALESCE(MONTANT_FACT_AMO_H,0) ELSE 0 END AS montant_comptabilise_1_h, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN COALESCE(MONTANT_FACT_AMC_C,0) ELSE 0 END AS montant_comptabilise_2_c, CASE WHEN DATE_CALCUL_FACTURE IS NOT NULL THEN COALESCE(MONTANT_FACT_AMC_H,0) ELSE 0 END AS montant_comptabilise_2_h, 0::numeric AS montant_comptabilise_22_c, 0::numeric AS montant_comptabilise_22_h, 0::numeric AS montant_comptabilise_budget_global_c, w_OPERA_FAC_complet.MONTANT_REGLEMENT_C AS montant_regle_c, w_OPERA_FAC_complet.MONTANT_REGLEMENT_H AS montant_regle_h, w_OPERA_FAC_complet.MONTANT_REGLEMENT_IPP_C AS montant_regle_0_c, w_OPERA_FAC_complet.MONTANT_REGLEMENT_IPP_H AS montant_regle_0_h, w_OPERA_FAC_complet.MONTANT_REGLEMENT_AMO_C AS montant_regle_1_c, w_OPERA_FAC_complet.MONTANT_REGLEMENT_AMO_H AS montant_regle_1_h, w_OPERA_FAC_complet.MONTANT_REGLEMENT_AMC_C AS montant_regle_2_c, w_OPERA_FAC_complet.MONTANT_REGLEMENT_AMC_H AS montant_regle_2_h, CASE WHEN reference_DATE_REGLEMENT_MAX > '00010101' THEN reference_DATE_REGLEMENT_MAX ELSE '20991231' END AS date_solde_reference, CASE WHEN reference_DATE_REGLEMENT_MAX_C > '00010101' THEN reference_DATE_REGLEMENT_MAX_C ELSE '20991231' END AS date_solde_reference_c, CASE WHEN reference_DATE_REGLEMENT_MAX_H > '00010101' THEN reference_DATE_REGLEMENT_MAX_H ELSE '20991231' END AS date_solde_reference_h, CASE WHEN reference_DATE_REGLEMENT_MAX_IPP_C > '00010101' THEN reference_DATE_REGLEMENT_MAX_IPP_C ELSE '20991231' END AS date_solde_reference_0_c, CASE WHEN reference_DATE_REGLEMENT_MAX_IPP_H > '00010101' THEN reference_DATE_REGLEMENT_MAX_IPP_H ELSE '20991231' END AS date_solde_reference_0_h, CASE WHEN reference_DATE_REGLEMENT_MAX_AMO_C > '00010101' THEN reference_DATE_REGLEMENT_MAX_AMO_C ELSE '20991231' END AS date_solde_reference_1_c, CASE WHEN reference_DATE_REGLEMENT_MAX_AMO_H > '00010101' THEN reference_DATE_REGLEMENT_MAX_AMO_H ELSE '20991231' END AS date_solde_reference_1_h, CASE WHEN reference_DATE_REGLEMENT_MAX_AMC_C > '00010101' THEN reference_DATE_REGLEMENT_MAX_AMC_C ELSE '20991231' END AS date_solde_reference_2_c, CASE WHEN reference_DATE_REGLEMENT_MAX_AMC_H > '00010101' THEN reference_DATE_REGLEMENT_MAX_AMC_H ELSE '20991231' END AS date_solde_reference_2_h FROM w_OPERA_FAC_complet JOIN activite[PX].p_sejours ON w_OPERA_FAC_complet.NO_DOSSIER = p_sejours.code_original AND p_sejours.etat = '' JOIN w_OPERA_FAC_complet_key ON w_OPERA_FAC_complet.key = w_OPERA_FAC_complet_key.key JOIN w_OPERA_FAC_reference ON w_OPERA_FAC_reference.NO_FACTURE_REFERENCE = w_OPERA_FAC_complet.NO_FACTURE_REFERENCE LEFT JOIN w_OPERA_ACT_total ON w_OPERA_FAC_complet.NO_FACTURE = w_OPERA_ACT_total.NO_FACTURE ORDER BY 1,2; -- Ajout des factures 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'); INSERT INTO activite[PX].p_factures ( oid, no_sejour, provider_id, sejour_id, no_facture, date_debut, date_fin, type_facture, code_cp_demandee, code_facture, date_facture, code_vente, date_vente, mois_vente, code_cloture, nb_rejets, no_facture_reference, facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, particularite_t2a, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, tiers_payant_0_id, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, date_expedition_22, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_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_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_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, 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_comptabilise_budget_global_c, 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, delai_facture, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, delai_expedition_22, delai_solde, 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_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 ) SELECT oid, no_sejour, 2::bigint AS provider_id, sejour_id, no_facture, date_debut, date_fin, type_facture, code_cp_demandee, code_facture, date_facture, code_vente, date_vente, mois_vente, code_cloture, nb_rejets, no_facture_reference, CASE WHEN no_facture = no_facture_reference THEN oid ELSE 0 END AS facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, particularite_t2a, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, tiers_payant_0_id, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, date_expedition_22, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_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_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_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, 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_comptabilise_budget_global_c, 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, 0::numeric AS montant_regle_22_c, 0::numeric AS montant_regle_22_h, 0::numeric AS delai_facture, 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::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, 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, '20991231'::date AS date_solde_reference_22_c, date_solde_reference_0_h, date_solde_reference_1_h, date_solde_reference_2_h, '20991231'::date AS date_solde_reference_22_h FROM w_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'); UPDATE activite[PX].p_factures SET facture_od_avoir_id = p_factures_od_avoir.oid FROM activite[PX].p_factures p_factures_od_avoir WHERE p_factures.no_facture_od_avoir = p_factures_od_avoir.no_facture AND p_factures.no_facture_od_avoir <> ''; UPDATE activite[PX].p_sejours SET est_sans_facturation = '1' WHERE lieu_sortie_id IN (SELECT oid FROM activite[PX].t_lieux WHERE service_facturation_id IN (SELECT oid FROM activite[PX].t_services_facturation WHERE est_sans_facturation = '1') OR unite_fonctionnelle_id IN (SELECT oid FROM activite[PX].t_unites_fonctionnelles WHERE est_sans_facturation = '1') ); -- Séjours sans facture DROP TABLE IF EXISTS w_factures_trous; CREATE TEMP TABLE w_factures_trous AS SELECT p_sejours.finess, p_sejours.no_sejour, p_sejours.date_entree, p_sejours.tiers_payant_0_id, p_sejours.tiers_payant_1_id, p_sejours.tiers_payant_2_id, p_sejours.tiers_payant_22_id, p_sejours.code_cp_demandee, COALESCE(t_services_facturation.avec_facturation_intermediaire,'') AS avec_facturation_intermediaire, p_sejours.code_sorti, CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_sortie, MAX(CASE WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN date_sortie ELSE p_factures.date_fin END) AS date_fin_facture, date(MAX(COALESCE(CASE WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN date_sortie ELSE p_factures.date_fin END + interval '1 day', p_sejours.date_entree))) AS date_debut_encours, CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_fin_encours FROM activite[PX].p_sejours LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND no_facture NOT LIKE 'E%' AND (type_facture NOT IN ('1','X') OR p_factures.date_fin < date(now() - interval '6 month')) JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid WHERE p_sejours.etat = '' AND p_sejours.est_sans_facturation IS DISTINCT FROM '1' AND p_sejours.type_sejour IS DISTINCT FROM '9' AND p_sejours.provider_id = 2 AND p_sejours.code_prevu = '0' AND date_entree <= now() GROUP BY 1,2,3,4,5,6,7,8,9,10,11; INSERT INTO activite[PX].p_factures( finess, no_sejour, provider_id, no_facture, no_facture_reference, type_facture, code_facture, date_facture, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee, date_debut, date_fin) SELECT finess, no_sejour, 2::bigint AS provider_id, 'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END, 'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END, 'E', '0', '20991231'::date, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee , MIN(GREATEST(date_debut_encours, p_calendrier.date)), MAX(LEAST(date_fin_encours, p_calendrier.date)) FROM w_factures_trous JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_debut_encours AND date_fin_encours WHERE (date_debut_encours <= date_fin_encours or date_fin_facture is null) GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13; UPDATE activite[PX].p_factures SET facture_reference_id = p_factures_references.oid FROM activite[PX].p_factures p_factures_references WHERE p_factures.no_facture_reference = p_factures_references.no_facture AND p_factures.facture_reference_id IS DISTINCT FROM p_factures_references.oid; ]]> = date(now() - interval '1 year') AND TYPE_PRESTA IN ('S', 'P') AND CODE_PRESTA IN ( SELECT CODE_PRESTA FROM prod_cegiloghos.OPERA_ACT WHERE NO_FACTURE NOT IN (SELECT no_facture FROM prod_cegiloghos.OPERA_FAC) AND TYPE_PRESTA IN ('S', 'P') AND PRIX_UNITAIRE = 0 ) GROUP BY 1,2 HAVING COUNT(DISTINCT FLOOR(PRIX_UNITAIRE)) <= 2 ; -- Génération INSERT INTO activite[PX].p_factures_lignes_non_facturees_c( no_facture, date_debut, date_fin, nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, prix_unitaire, lieu_id, ucd_id, lpp_id) SELECT p_factures.no_facture, date(DATE_ACTE_DEBUT) AS date_debut, date(COALESCE(DATE_ACTE_FIN, DATE_ACTE_DEBUT)) AS date_fin, GREATEST(0,QTE_ACTE*COEFF_ACTE) AS nb_rubrique, 1::numeric AS coefficient, t_rubriques_facturation.oid AS rubrique_facturation_id, t_prestations.oid AS prestation_id, PRIX_UNITAIRE AS prix_unitaire, p_sejours.lieu_sortie_id AS lieu_id, COALESCE(t_ucd.oid,0), COALESCE(t_lpp.oid,0) FROM prod_cegiloghos.OPERA_ACT JOIN activite[PX].p_sejours ON no_dossier = p_sejours.code_original AND p_sejours.etat = '' JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND type_facture = 'E' JOIN activite.t_prestations ON CODE_PRESTA = t_prestations.code JOIN activite[PX].t_rubriques_facturation ON CODE_PRESTA = t_rubriques_facturation.code_original LEFT JOIN base.t_ucd ON CODE_UCD = t_ucd.code AND CODE_UCD <> '' LEFT JOIN base.t_lpp ON CODE_LPP = t_lpp.code AND CODE_LPP <> '' WHERE date(DATE_ACTE_DEBUT) BETWEEN p_factures.date_debut AND p_factures.date_fin AND TYPE_PRESTA IN ('S', 'P') AND CODE_PRESTA NOT IN ('STF', 'REA', 'SRC', 'GHS', 'EXH') AND PRIX_UNITAIRE <> 0 AND MONTANT_ACTE <> 0 ; ]]> '4' THEN t_ccam_regroupements.code ELSE 'ADA' END AS code_prestation_1 FROM prod_cegi.CJ_SEJOUR JOIN w_OPERA_SEJ_select ON CJ_SEJOUR.SEJ_NUMDOS = w_OPERA_SEJ_select.NO_DOSSIER JOIN prod_cegi.CJ_LSRGP ON CJ_LSRGP.SEJ_ID = CJ_SEJOUR.SEJ_ID AND LSR_ACTIF = 1 JOIN prod_cegi.CJ_LSCCAM ON CJ_LSCCAM.LSR_ID = CJ_LSRGP.LSR_ID AND LSCA_ACTIF = 1 JOIN prod_cegi.CJ_CCAM ON CJ_CCAM.CCAM_ID = CJ_LSCCAM.CCAM_ID JOIN prod_cegi.CJ_PRA ON CJ_PRA.TER_ID = CJ_LSCCAM.TER_ID JOIN base.t_actes ON t_actes.code = substring(CCAM_CODE, 1, 7) JOIN base.t_ccam_regroupements ON ccam_regroupement_id_1 = t_ccam_regroupements.oid; ALTER TABLE w_LSCCAM ADD CONSTRAINT w_LSCCAM_pkey PRIMARY KEY(oid); CREATE INDEX w_LSCCAM_i1 ON w_LSCCAM USING btree (SEJ_NUMDOS); SELECT base.cti_execute(' UPDATE w_LSCCAM SET act_id = subview.act_id FROM ( SELECT NO_DOSSIER, date(DATE_ACTE_DEBUT) AS DATE_ACTE_DEBUT, CODE_MED_EXECUTANT, MIN(w_OPERA_ACT_complet.oid) AS ACT_id, MIN(w_LSCCAM.oid) AS LSCCAM_id FROM w_OPERA_ACT_complet JOIN w_LSCCAM ON SEJ_NUMDOS = NO_DOSSIER AND LSR_DDEB = date(DATE_ACTE_DEBUT) AND PRA_LIBC = CODE_MED_EXECUTANT AND CODE_PRESTA = code_prestation_1 AND act_id = 0 WHERE TYPE_PRESTA = ''H'' AND CODE_PRESTA IN (''ACO'', ''ADA'', ''ADC'', ''ADE'', ''ADI'', ''ATM'', ''DEN'') AND CODE_CCAM = '''' GROUP BY 1,2,3 ) subview WHERE oid = subview.LSCCAM_id ., UPDATE w_OPERA_ACT_complet SET CODE_CCAM = CCAM_CODE, CODE_ACTIVITE_CCAM = CCAM_ACTV, CODE_PHASE_CCAM = CCAM_PHS, CODE_MODIFICATEUR_1_CCAM = LSCA_MOD1, CODE_MODIFICATEUR_2_CCAM = LSCA_MOD2, CODE_MODIFICATEUR_3_CCAM = LSCA_MOD3, CODE_MODIFICATEUR_4_CCAM = LSCA_MOD4, CODE_ANP_CCAM = LSCA_ASSNP, CODE_EXTDOC_CCAM = LSCA_EXTDOC, key = CODE_RUBRIQUE || ''|''::text || CODE_PRESTA || ''|''::text || CODE_LPP || ''|''::text || CODE_UCD || ''|''::text || w_OPERA_ACT_complet.CODE_MED_EXECUTANT || ''|''::text || CCAM_CODE FROM w_LSCCAM WHERE w_OPERA_ACT_complet.oid = ACT_id AND CODE_CCAM = '''' ', 20); -- Attribution OID aux codes CREATE INDEX w_OPERA_ACT_complet_i3 ON w_OPERA_ACT_complet USING btree (KEY); DROP TABLE IF EXISTS w_OPERA_ACT_complet_key; CREATE TEMP TABLE w_OPERA_ACT_complet_key AS SELECT key, CODE_PRESTA, CODE_LPP, CODE_UCD, CODE_RUBRIQUE, CODE_MED_EXECUTANT, CODE_CCAM, 0::bigint AS rubrique_facturation_id, 0::bigint AS prestation_id, 0::bigint AS ucd_id, 0::bigint AS lpp_id, 0::bigint AS medecin_administratif_id, 0::bigint AS acte_id FROM w_OPERA_ACT_complet GROUP BY 1,2,3,4,5,6,7; ALTER TABLE w_OPERA_ACT_complet_key ADD CONSTRAINT w_OPERA_ACT_complet_key_pkey PRIMARY KEY(KEY); UPDATE w_OPERA_ACT_complet_key SET CODE_PRESTA = trim(substr(CODE_PRESTA,1,4)) WHERE substr(CODE_PRESTA,5,1) IN ('F', 'N'); UPDATE w_OPERA_ACT_complet_key SET CODE_CCAM = CODE_PRESTA WHERE CODE_CCAM = '' AND CODE_MED_EXECUTANT <> ''; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT CODE_RUBRIQUE, CODE_RUBRIQUE, CODE_RUBRIQUE, CODE_RUBRIQUE FROM w_OPERA_ACT_complet_key WHERE CODE_RUBRIQUE <> '' AND CODE_RUBRIQUE NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code_original IS NOT NULL) AND CODE_RUBRIQUE != '' GROUP BY 1,2,3,4; INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT CODE_PRESTA, CODE_PRESTA, CODE_PRESTA, CODE_PRESTA FROM w_OPERA_ACT_complet_key WHERE CODE_PRESTA <> '' AND CODE_PRESTA NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL ) AND CODE_PRESTA != '' GROUP BY 1,2,3,4; UPDATE w_OPERA_ACT_complet_key set rubrique_facturation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation WHERE code_original = CODE_RUBRIQUE; UPDATE w_OPERA_ACT_complet_key set prestation_id = t_prestations.oid FROM activite.t_prestations WHERE code = CODE_PRESTA; UPDATE w_OPERA_ACT_complet_key set medecin_administratif_id = t_medecins_administratifs.oid FROM activite[PX].t_medecins_administratifs WHERE code_original = CODE_MED_EXECUTANT; INSERT INTO base.t_actes(code, texte, texte_court, nomenclature) SELECT substring(CODE_CCAM, 1, 7), substring(CODE_CCAM, 1, 7), substring(CODE_CCAM, 1, 7), 'NGAP' FROM w_OPERA_ACT_complet_key WHERE substring(CODE_CCAM, 1, 7) <> '' AND substring(CODE_CCAM, 1, 7) = CODE_PRESTA AND substring(CODE_CCAM, 1, 7) NOT IN (SELECT code FROM base.t_actes WHERE code IS NOT NULL) GROUP BY 1,2,3; INSERT INTO base.t_actes(code, texte, texte_court, nomenclature) SELECT substring(CODE_CCAM, 1, 7), substring(CODE_CCAM, 1, 7), substring(CODE_CCAM, 1, 7), 'CCAM' FROM w_OPERA_ACT_complet_key WHERE substring(CODE_CCAM, 1, 7) <> '' AND substring(CODE_CCAM, 1, 7) <> CODE_PRESTA AND substring(CODE_CCAM, 1, 7) NOT IN (SELECT code FROM base.t_actes WHERE code IS NOT NULL) GROUP BY 1,2,3; UPDATE w_OPERA_ACT_complet_key set acte_id = t_actes.oid FROM base.t_actes WHERE code = substring(CODE_CCAM, 1, 7); INSERT INTO base.t_ucd (code, texte, texte_court) SELECT CODE_UCD, CODE_UCD, CODE_UCD FROM w_OPERA_ACT_complet_key WHERE CODE_UCD NOT IN (SELECT code FROM base.t_ucd WHERE code IS NOT NULL) GROUP BY 1 ORDER BY 1 ; UPDATE w_OPERA_ACT_complet_key SET ucd_id = t_ucd.oid FROM base.t_ucd WHERE t_ucd.code = CODE_UCD AND CODE_UCD <> ''; INSERT INTO base.t_lpp (code, texte, texte_court) SELECT CODE_LPP, CODE_LPP, CODE_LPP FROM w_OPERA_ACT_complet_key WHERE CODE_LPP NOT IN (SELECT code FROM base.t_lpp WHERE code IS NOT NULL) GROUP BY 1 ORDER BY 1 ; UPDATE w_OPERA_ACT_complet_key SET lpp_id = t_lpp.oid FROM base.t_lpp WHERE t_lpp.code = CODE_LPP AND CODE_LPP <> ''; -- Génération lignes C DROP TABLE IF EXISTS w_factures_lignes_c; CREATE TEMP TABLE w_factures_lignes_c AS SELECT p_factures.no_sejour, p_factures.oid AS facture_id, w_OPERA_ACT_complet.NO_FACTURE AS no_facture, p_factures.date_vente, COEFF_ACTE AS coefficient, 1::numeric AS coefficient_mco, w_OPERA_ACT_complet_key.rubrique_facturation_id AS rubrique_facturation_id, w_OPERA_ACT_complet_key.rubrique_facturation_id AS rubrique_comptabilisation_id, w_OPERA_ACT_complet_key.prestation_id AS prestation_id, w_OPERA_ACT_complet_key.ucd_id AS ucd_id, w_OPERA_ACT_complet_key.lpp_id AS lpp_id, w_OPERA_ACT_complet.compte_produit_id, p_sejours.lieu_sortie_id AS lieu_id, 1::bigint AS origine_facturation_id, CASE WHEN w_OPERA_ACT_complet.prix_unitaire <> 0 THEN w_OPERA_ACT_complet.prix_unitaire ELSE ROUND(base.cti_division((MONTANT_ACTE_AMO_C + MONTANT_ACTE_AMC_C + MONTANT_ACTE_IPP_C) , (QTE_ACTE * COEFF_ACTE)),2) END AS prix_unitaire, coalesce(TAUX_IPP,0) AS taux_0, coalesce(TAUX_AMO,0) AS taux_1, coalesce(TAUX_AMC,0) AS taux_2, 0::numeric AS taux_22, date(DATE_ACTE_DEBUT) AS date_debut, date(COALESCE(DATE_ACTE_FIN,DATE_ACTE_DEBUT)) AS date_fin, QTE_ACTE AS nb_rubrique, QTE_ACTE AS nb_prestation, MONTANT_ACTE_AMO_C + MONTANT_ACTE_AMC_C + MONTANT_ACTE_IPP_C AS montant_facture, MONTANT_ACTE_IPP_C AS montant_facture_0, MONTANT_ACTE_AMO_C AS montant_facture_1, MONTANT_ACTE_AMC_C AS montant_facture_2, 0::numeric AS montant_facture_22, CPT_MONTANT_ACTE_AMO_C + CPT_MONTANT_ACTE_AMC_C + CPT_MONTANT_ACTE_IPP_C AS montant_comptabilise, CPT_MONTANT_ACTE_IPP_C AS montant_comptabilise_0, CPT_MONTANT_ACTE_AMO_C AS montant_comptabilise_1, CPT_MONTANT_ACTE_AMC_C AS montant_comptabilise_2, 0::numeric 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::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_OPERA_ACT_complet JOIN activite[PX].p_factures ON w_OPERA_ACT_complet.NO_FACTURE = p_factures.no_facture JOIN activite[PX].p_sejours ON w_OPERA_ACT_complet.NO_DOSSIER = p_sejours.code_original AND p_sejours.etat = '' JOIN w_OPERA_ACT_complet_key ON w_OPERA_ACT_complet.key = w_OPERA_ACT_complet_key.key WHERE p_factures.code_facture = '1' AND TYPE_PRESTA IN ('S', 's', 'P') ; CREATE INDEX w_factures_lignes_c_i1 ON w_factures_lignes_c USING btree (no_sejour); UPDATE w_factures_lignes_c SET lieu_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE w_factures_lignes_c.no_sejour = p_mouvements_sejour.no_sejour AND w_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 w_factures_lignes_c.lieu_id <> p_mouvements_sejour.lieu_id; -- Coefficient mco paramétré dans base DROP TABLE IF EXISTS w_finess; CREATE TEMP TABLE w_finess AS SELECT * FROM base.t_finess LIMIT 1 ; UPDATE w_factures_lignes_c SET coefficient_mco = CASE WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_9 THEN w_finess.coefficient_mco_9 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_8 THEN w_finess.coefficient_mco_8 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_7 THEN w_finess.coefficient_mco_7 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_6 THEN w_finess.coefficient_mco_6 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_5 THEN w_finess.coefficient_mco_5 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_4 THEN w_finess.coefficient_mco_4 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_3 THEN w_finess.coefficient_mco_3 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_2 THEN w_finess.coefficient_mco_2 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_1 THEN w_finess.coefficient_mco_1 ELSE 1::numeric END FROM w_finess, activite.t_prestations WHERE prestation_id = t_prestations.oid AND t_prestations.code IN ('GHS', 'EXH') AND (CASE WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_9 THEN w_finess.coefficient_mco_9 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_8 THEN w_finess.coefficient_mco_8 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_7 THEN w_finess.coefficient_mco_7 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_6 THEN w_finess.coefficient_mco_6 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_5 THEN w_finess.coefficient_mco_5 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_4 THEN w_finess.coefficient_mco_4 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_3 THEN w_finess.coefficient_mco_3 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_2 THEN w_finess.coefficient_mco_2 WHEN date(date_fin) >= w_finess.date_debut_coefficient_mco_1 THEN w_finess.coefficient_mco_1 ELSE 1::numeric END) <> 1 ; -- Rubriques internes cti SELECT activite[PX].cti_reorganize_rubrique_facture_c('w_factures_lignes_c'); 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'); 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, prestation_id, ucd_id, lpp_id, compte_produit_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, prestation_id, ucd_id, lpp_id, compte_produit_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; 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'); -- Forcage date debut = date entree pour prestations à ventiler UPDATE activite[PX].p_factures_lignes_c SET date_debut = p_factures.date_debut FROM activite[PX].t_rubriques_facturation, activite.t_prestations, activite[PX].p_factures JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND prestation_id = t_prestations.oid AND t_prestations.type_ventilation_jour = '1' AND ABS(nb_rubrique) > 1 AND p_factures_lignes_c.date_debut = p_factures_lignes_c.date_fin AND p_sejours.date_sortie <> p_sejours.date_entree ; -- Eclatement des supplements par jour DROP TABLE IF EXISTS w_factures_lignes_sup_c; CREATE TEMP TABLE w_factures_lignes_sup_c AS SELECT p_factures_lignes_c.CTID AS from_CTID, t_prestations.code AS prestation_code, date(p_sejours.date_entree) AS date_debut_ghs, date(p_sejours.date_sortie - interval '1 day') AS date_fin_ghs, (date(date_sortie) - date(date_entree)) * CASE WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation_ghs, CASE WHEN t_prestations.code = 'GHS' THEN date(date_entree + interval '1 day') ELSE date(p_factures_lignes_c.date_debut + interval '1 day') END AS date_debut_det, CASE WHEN t_prestations.code = 'GHS' THEN date(p_sejours.date_sortie - interval '1 day') ELSE date(p_factures_lignes_c.date_debut + ((ABS(nb_prestation)-1) || ' day')::interval) END AS date_fin_det, ABS(CASE WHEN t_prestations.code = 'GHS' THEN date(date_sortie) - date(date_entree) ELSE nb_prestation END) AS nb_det, p_factures_lignes_c.* FROM activite[PX].p_factures_lignes_c JOIN activite[PX].p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour AND p_sejours.etat = '' JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND ( code IN ('PJ', 'FJ', 'SSM', 'GHS', 'EXH', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO') OR t_prestations.type_ventilation_jour = '1' ) WHERE (nb_prestation > 1 or nb_prestation < -1 OR (t_prestations.code = 'GHS' AND p_sejours.type_sejour != '5' AND date(date_sortie) - date(date_entree) > 1)) ; UPDATE w_factures_lignes_sup_c SET date_fin_ghs = date(date_debut_exh - interval '1 day'), date_fin_det = date(date_debut_exh - interval '1 day'), nb_prestation_ghs = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1, nb_det = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1 FROM ( SELECT no_facture, date(MIN(date_debut)) AS date_debut_exh FROM activite[PX].p_factures_lignes_c JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code = 'EXH' GROUP BY 1) subview WHERE w_factures_lignes_sup_c.no_facture = subview.no_facture AND w_factures_lignes_sup_c.prestation_code = 'GHS'; CREATE INDEX w_factures_lignes_sup_c_i1 ON w_factures_lignes_sup_c USING btree (date_debut); 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 prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_rubrique, CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation, coefficient, coefficient_mco, rubrique_facturation_id, prestation_id, ucd_id, lpp_id, compte_produit_id, round(montant_facture / ABS(nb_det),2) AS montant_facture, round(montant_facture_0 / ABS(nb_det),2) AS montant_facture_0, round(montant_facture_1 / ABS(nb_det),2) AS montant_facture_1, round(montant_facture_2 / ABS(nb_det),2) AS montant_facture_2, round(montant_facture_22 / ABS(nb_det),2) AS montant_facture_22, taux_0, taux_1, taux_2, taux_22, finess, prix_unitaire, lieu_id, round(montant_comptabilise / ABS(nb_det),2) AS montant_comptabilise, round(montant_comptabilise_0 / ABS(nb_det),2) AS montant_comptabilise_0, round(montant_comptabilise_1 / ABS(nb_det),2) AS montant_comptabilise_1, round(montant_comptabilise_2 / ABS(nb_det),2) AS montant_comptabilise_2, round(montant_comptabilise_22 / ABS(nb_det),2) AS montant_comptabilise_22, rubrique_comptabilisation_id, round(montant_encours / ABS(nb_det),2) AS montant_encours, round(montant_encours_0 / ABS(nb_det),2) AS montant_encours_0, round(montant_encours_1 / ABS(nb_det),2) AS montant_encours_1, round(montant_encours_2 / ABS(nb_det),2) AS montant_encours_2, round(montant_encours_22 / ABS(nb_det),2) AS montant_encours_22, round(montant_facture_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_actes_inclus_dans_sejour, round(montant_facture_0_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_0_actes_inclus_dans_sejour, round(montant_facture_1_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_1_actes_inclus_dans_sejour, round(montant_facture_2_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_2_actes_inclus_dans_sejour, round(montant_facture_22_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_22_actes_inclus_dans_sejour, origine_facturation_id, round(montant_comptabilise_budget_global_1 / ABS(nb_det),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_det)::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(nb_rubrique) AS nb_rubrique, SUM(nb_prestation) AS nb_prestation, 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 = p_factures_lignes_c.nb_rubrique - w_factures_lignes_sup_c_sup_tot.nb_rubrique, nb_prestation = p_factures_lignes_c.nb_prestation - w_factures_lignes_sup_c_sup_tot.nb_prestation, 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, prestation_id, ucd_id, lpp_id, compte_produit_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, rubrique_comptabilisation_id, 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, prestation_id, ucd_id, lpp_id, compte_produit_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, rubrique_comptabilisation_id, 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 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; ]]> 0; UPDATE activite[PX].p_factures SET montant_comptabilise_c = montant_comptabilise_c + ecart, montant_comptabilise_1_c = montant_comptabilise_1_c + ecart_1, montant_comptabilise_2_c = montant_comptabilise_2_c + ecart_2, montant_comptabilise_22_c = montant_comptabilise_22_c + ecart_22, montant_comptabilise_0_c = montant_comptabilise_0_c + ecart_0 FROM w_correction_compta WHERE w_correction_compta.no_facture = p_factures.no_facture; -- Ventes DROP TABLE IF EXISTS w_factures_soldes_c; CREATE TEMP TABLE w_factures_soldes_c AS SELECT facture_id, no_facture, date_trunc('month',date_vente) + interval '1 month' - interval '1 day' AS date_comptable, rubrique_comptabilisation_id, prestation_id, 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, 0::numeric 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 FROM w_factures_lignes_c WHERE date_vente IS NOT NULL AND (montant_comptabilise <> 0 OR montant_comptabilise_0 <> 0 OR montant_comptabilise_1 <> 0 OR montant_comptabilise_2 <> 0 OR montant_comptabilise_22 <> 0 ) GROUP BY 1,2,3,4,5; -- Reglements complets AMO INSERT INTO w_factures_soldes_c SELECT facture_id, w_factures_lignes_c.no_facture, date_trunc('month',date_solde_1_c) + interval '1 month' - interval '1 day' AS date_comptable, rubrique_comptabilisation_id, 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(montant_comptabilise_1) AS montant_regle, 0 AS montant_regle_0, SUM(montant_comptabilise_1) AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_factures_lignes_c JOIN activite[PX].p_factures ON w_factures_lignes_c.no_facture = p_factures.NO_FACTURE WHERE montant_comptabilise_1_c = montant_regle_1_c AND montant_comptabilise_1_c <> 0 GROUP BY 1,2,3,4,5 HAVING SUM(montant_comptabilise_1) <> 0; -- Reglements partiels AMO INSERT INTO w_factures_soldes_c SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',DATE_REGLEMENT_AMO_C) + interval '1 month' - interval '1 day' AS date_comptable, t_rubriques_facturation.oid AS rubrique_comptabilisation_id, t_prestations.oid 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(MONTANT_REGLEMENT_AMO_C) AS montant_regle, 0 AS montant_regle_0, SUM(MONTANT_REGLEMENT_AMO_C) AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite.t_prestations ON t_prestations.code_original = '*ATTNSCTI' JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_AMO_C IS NOT NULL AND MONTANT_REGLEMENT_AMO_C <> 0 AND (montant_comptabilise_1_c <> montant_regle_1_c OR DATE_REGLEMENT_AMO_C < date_solde_1_c) GROUP BY 1,2,3,4,5 HAVING SUM(MONTANT_REGLEMENT_AMO_C) <> 0; -- contrepartie reglements partiels sur dossiers soldes AMO INSERT INTO w_factures_soldes_c SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',date_solde_1_c) + interval '1 month' - interval '1 day' AS date_comptable, t_rubriques_facturation.oid AS rubrique_comptabilisation_id, t_prestations.oid 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(0-MONTANT_REGLEMENT_AMO_C) AS montant_regle, 0 AS montant_regle_0, SUM(0-MONTANT_REGLEMENT_AMO_C) AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite.t_prestations ON t_prestations.code_original = '*ATTNSCTI' JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_AMO_C IS NOT NULL AND MONTANT_REGLEMENT_AMO_C <> 0 AND (montant_comptabilise_1_c = montant_regle_1_c AND DATE_REGLEMENT_AMO_C < date_solde_1_c) GROUP BY 1,2,3,4,5 HAVING SUM(MONTANT_REGLEMENT_AMO_C) <> 0; -- Reglements complets AMC INSERT INTO w_factures_soldes_c SELECT facture_id, w_factures_lignes_c.no_facture, date_trunc('month',date_solde_2_c) + interval '1 month' - interval '1 day' AS date_comptable, rubrique_comptabilisation_id, 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(montant_comptabilise_2) AS montant_regle, 0 AS montant_regle_0, 0 AS montant_regle_1, SUM(montant_comptabilise_2) AS montant_regle_2, 0 AS montant_regle_22 FROM w_factures_lignes_c JOIN activite[PX].p_factures ON w_factures_lignes_c.no_facture = p_factures.NO_FACTURE WHERE montant_comptabilise_2_c = montant_regle_2_c AND montant_comptabilise_2_c <> 0 GROUP BY 1,2,3,4,5 HAVING SUM(montant_comptabilise_2) <> 0; -- Reglements partiels AMC INSERT INTO w_factures_soldes_c SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',DATE_REGLEMENT_AMC_C) + interval '1 month' - interval '1 day' AS date_comptable, t_rubriques_facturation.oid AS rubrique_comptabilisation_id, t_prestations.oid 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(MONTANT_REGLEMENT_AMC_C) AS montant_regle, 0 AS montant_regle_0, 0 AS montant_regle_1, SUM(MONTANT_REGLEMENT_AMC_C) AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite.t_prestations ON t_prestations.code_original = '*ATTNSCTI' JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_AMC_C IS NOT NULL AND MONTANT_REGLEMENT_AMC_C <> 0 AND (montant_comptabilise_2_c <> montant_regle_2_c OR DATE_REGLEMENT_AMC_C < date_solde_2_c) GROUP BY 1,2,3,4,5 HAVING SUM(MONTANT_REGLEMENT_AMC_C) <> 0; -- contrepartie reglements partiels sur dossiers soldes AMC INSERT INTO w_factures_soldes_c SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',date_solde_2_c) + interval '1 month' - interval '1 day' AS date_comptable, t_rubriques_facturation.oid AS rubrique_comptabilisation_id, t_prestations.oid 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(0-MONTANT_REGLEMENT_AMC_C) AS montant_regle, 0 AS montant_regle_0, 0 AS montant_regle_1, SUM(0-MONTANT_REGLEMENT_AMC_C) AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite.t_prestations ON t_prestations.code_original = '*ATTNSCTI' JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_AMC_C IS NOT NULL AND MONTANT_REGLEMENT_AMC_C <> 0 AND (montant_comptabilise_2_c = montant_regle_2_c AND DATE_REGLEMENT_AMC_C < date_solde_2_c) GROUP BY 1,2,3,4,5 HAVING SUM(MONTANT_REGLEMENT_AMC_C) <> 0; -- Reglements complets IPP INSERT INTO w_factures_soldes_c SELECT facture_id, w_factures_lignes_c.no_facture, date_trunc('month',date_solde_0_c) + interval '1 month' - interval '1 day' AS date_comptable, rubrique_comptabilisation_id, 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(montant_comptabilise_0) AS montant_regle, SUM(montant_comptabilise_0) AS montant_regle_0, 0 AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_factures_lignes_c JOIN activite[PX].p_factures ON w_factures_lignes_c.no_facture = p_factures.NO_FACTURE WHERE montant_comptabilise_0_c = montant_regle_0_c AND montant_comptabilise_0_c <> 0 GROUP BY 1,2,3,4,5 HAVING SUM(montant_comptabilise_0) <> 0; -- Reglements partiels IPP INSERT INTO w_factures_soldes_c SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',DATE_REGLEMENT_IPP_C) + interval '1 month' - interval '1 day' AS date_comptable, t_rubriques_facturation.oid AS rubrique_comptabilisation_id, t_prestations.oid 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(MONTANT_REGLEMENT_IPP_C) AS montant_regle, SUM(MONTANT_REGLEMENT_IPP_C) AS montant_regle_0, 0 AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite.t_prestations ON t_prestations.code_original = '*ATTNSCTI' JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_IPP_C IS NOT NULL AND MONTANT_REGLEMENT_IPP_C <> 0 AND (montant_comptabilise_0_c <> montant_regle_0_c OR DATE_REGLEMENT_IPP_C < date_solde_0_c) GROUP BY 1,2,3,4,5 HAVING SUM(MONTANT_REGLEMENT_IPP_C) <> 0; -- contrepartie reglements partiels sur dossiers soldes IPP INSERT INTO w_factures_soldes_c SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',date_solde_0_c) + interval '1 month' - interval '1 day' AS date_comptable, t_rubriques_facturation.oid AS rubrique_comptabilisation_id, t_prestations.oid 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(0-MONTANT_REGLEMENT_IPP_C) AS montant_regle, SUM(0-MONTANT_REGLEMENT_IPP_C) AS montant_regle_0, 0 AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite.t_prestations ON t_prestations.code_original = '*ATTNSCTI' JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_IPP_C IS NOT NULL AND MONTANT_REGLEMENT_IPP_C <> 0 AND (montant_comptabilise_0_c = montant_regle_0_c AND DATE_REGLEMENT_IPP_C < date_solde_0_c) GROUP BY 1,2,3,4,5 HAVING SUM(MONTANT_REGLEMENT_IPP_C) <> 0; -- Validation 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'); INSERT INTO activite[PX].p_factures_soldes_c( facture_id, no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, 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_comptabilisation_id, prestation_id, 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; 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'); ]]> '1' AND p_factures.provider_id = 2 JOIN prod_cegi.CJ_LSRGP ON CJ_LSRGP.SEJ_ID = CJ_SEJOUR.SEJ_ID AND LSR_ACTIF = 1 JOIN prod_cegi.CJ_LSCCAM ON CJ_LSCCAM.LSR_ID = CJ_LSRGP.LSR_ID AND LSCA_ACTIF = 1 JOIN prod_cegi.CJ_CCAM ON CJ_CCAM.CCAM_ID = CJ_LSCCAM.CCAM_ID JOIN prod_cegi.CJ_PRA ON CJ_PRA.TER_ID = CJ_LSCCAM.TER_ID JOIN base.t_actes ON t_actes.code = substring(CCAM_CODE, 1, 7) JOIN base.t_ccam_regroupements ON ccam_regroupement_id_1 = t_ccam_regroupements.oid JOIN activite.t_prestations ON t_prestations.code = CASE WHEN CCAM_ACTV = '1' THEN t_ccam_regroupements.code ELSE 'ADA' END JOIN activite[PX].t_medecins_administratifs ON PRA_LIBC = t_medecins_administratifs.code_original; ]]> 0; CREATE INDEX w_factures_lignes_h_i1 ON w_factures_lignes_h USING btree (no_sejour); UPDATE w_factures_lignes_h SET lieu_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE w_factures_lignes_h.no_sejour = p_mouvements_sejour.no_sejour AND w_factures_lignes_h.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 w_factures_lignes_h.lieu_id <> p_mouvements_sejour.lieu_id; 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'); 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 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 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'); -- Lieu exécution UPDATE activite[PX].p_factures_lignes_h SET lieu_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_factures, activite[PX].p_mouvements_sejour WHERE p_factures_lignes_h.no_facture = p_factures.no_facture AND p_factures.no_sejour = p_mouvements_sejour.no_sejour AND p_factures_lignes_h.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_h.lieu_id <> p_mouvements_sejour.lieu_id; ]]> 0; UPDATE activite[PX].p_factures SET montant_comptabilise_h = montant_comptabilise_h + ecart, montant_comptabilise_1_h = montant_comptabilise_1_h + ecart_1, montant_comptabilise_2_h = montant_comptabilise_2_h + ecart_2, montant_comptabilise_22_h = montant_comptabilise_22_h + ecart_22, montant_comptabilise_0_h = montant_comptabilise_0_h + ecart_0 FROM w_correction_compta WHERE w_correction_compta.no_facture = p_factures.no_facture; -- Ventes DROP TABLE IF EXISTS w_factures_soldes_h; CREATE TEMP TABLE w_factures_soldes_h AS SELECT facture_id, no_facture, date_trunc('month',date_vente) + interval '1 month' - interval '1 day' AS date_comptable, medecin_comptabilise_id, 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, 0::numeric 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 FROM w_factures_lignes_h WHERE date_vente IS NOT NULL AND (montant_comptabilise <> 0 OR montant_comptabilise_0 <> 0 OR montant_comptabilise_1 <> 0 OR montant_comptabilise_2 <> 0 OR montant_comptabilise_22 <> 0 ) GROUP BY 1,2,3,4; -- Reglements complets AMO INSERT INTO w_factures_soldes_h SELECT facture_id, w_factures_lignes_h.no_facture, date_trunc('month',date_solde_1_h) + interval '1 month' - interval '1 day' AS date_comptable, medecin_comptabilise_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(montant_comptabilise_1) AS montant_regle, 0 AS montant_regle_0, SUM(montant_comptabilise_1) AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_factures_lignes_h JOIN activite[PX].p_factures ON w_factures_lignes_h.no_facture = p_factures.NO_FACTURE WHERE montant_comptabilise_1_h = montant_regle_1_h AND montant_comptabilise_1_h <> 0 GROUP BY 1,2,3,4 HAVING SUM(montant_comptabilise_1) <> 0; -- Reglements partiels AMO INSERT INTO w_factures_soldes_h SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',DATE_REGLEMENT_AMO_H) + interval '1 month' - interval '1 day' AS date_comptable, t_medecins_administratifs.oid AS medecin_comptabilise_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(MONTANT_REGLEMENT_AMO_H) AS montant_regle, 0 AS montant_regle_0, SUM(MONTANT_REGLEMENT_AMO_H) AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_AMO_H IS NOT NULL AND MONTANT_REGLEMENT_AMO_H <> 0 AND (montant_comptabilise_1_h <> montant_regle_1_h OR DATE_REGLEMENT_AMO_H < date_solde_1_h) GROUP BY 1,2,3,4 HAVING SUM(MONTANT_REGLEMENT_AMO_H) <> 0; -- contrepartie reglements partiels sur dossiers soldes AMO INSERT INTO w_factures_soldes_h SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',date_solde_1_h) + interval '1 month' - interval '1 day' AS date_comptable, t_medecins_administratifs.oid AS medecin_comptabilise_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(0-MONTANT_REGLEMENT_AMO_H) AS montant_regle, 0 AS montant_regle_0, SUM(0-MONTANT_REGLEMENT_AMO_H) AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_AMO_H IS NOT NULL AND MONTANT_REGLEMENT_AMO_H <> 0 AND (montant_comptabilise_1_h = montant_regle_1_h AND DATE_REGLEMENT_AMO_H < date_solde_1_h) GROUP BY 1,2,3,4 HAVING SUM(MONTANT_REGLEMENT_AMO_H) <> 0; -- Reglements complets AMC INSERT INTO w_factures_soldes_h SELECT facture_id, w_factures_lignes_h.no_facture, date_trunc('month',date_solde_2_h) + interval '1 month' - interval '1 day' AS date_comptable, medecin_comptabilise_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(montant_comptabilise_2) AS montant_regle, 0 AS montant_regle_0, 0 AS montant_regle_1, SUM(montant_comptabilise_2) AS montant_regle_2, 0 AS montant_regle_22 FROM w_factures_lignes_h JOIN activite[PX].p_factures ON w_factures_lignes_h.no_facture = p_factures.NO_FACTURE WHERE montant_comptabilise_2_h = montant_regle_2_h AND montant_comptabilise_2_h <> 0 GROUP BY 1,2,3,4 HAVING SUM(montant_comptabilise_2) <> 0; -- Reglements partiels AMC INSERT INTO w_factures_soldes_h SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',DATE_REGLEMENT_AMC_H) + interval '1 month' - interval '1 day' AS date_comptable, t_medecins_administratifs.oid AS medecin_comptabilise_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(MONTANT_REGLEMENT_AMC_H) AS montant_regle, 0 AS montant_regle_0, 0 AS montant_regle_1, SUM(MONTANT_REGLEMENT_AMC_H) AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_AMC_H IS NOT NULL AND MONTANT_REGLEMENT_AMC_H <> 0 AND (montant_comptabilise_2_h <> montant_regle_2_h OR DATE_REGLEMENT_AMC_H < date_solde_2_h) GROUP BY 1,2,3,4 HAVING SUM(MONTANT_REGLEMENT_AMC_H) <> 0; -- contrepartie reglements partiels sur dossiers soldes AMC INSERT INTO w_factures_soldes_h SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',date_solde_2_h) + interval '1 month' - interval '1 day' AS date_comptable, t_medecins_administratifs.oid AS medecin_comptabilise_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(0-MONTANT_REGLEMENT_AMC_H) AS montant_regle, 0 AS montant_regle_0, 0 AS montant_regle_1, SUM(0-MONTANT_REGLEMENT_AMC_H) AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_AMC_H IS NOT NULL AND MONTANT_REGLEMENT_AMC_H <> 0 AND (montant_comptabilise_2_h = montant_regle_2_h AND DATE_REGLEMENT_AMC_H < date_solde_2_h) GROUP BY 1,2,3,4 HAVING SUM(MONTANT_REGLEMENT_AMC_H) <> 0; -- Reglements complets IPP INSERT INTO w_factures_soldes_h SELECT facture_id, w_factures_lignes_h.no_facture, date_trunc('month',date_solde_0_h) + interval '1 month' - interval '1 day' AS date_comptable, medecin_comptabilise_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(montant_comptabilise_0) AS montant_regle, SUM(montant_comptabilise_0) AS montant_regle_0, 0 AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_factures_lignes_h JOIN activite[PX].p_factures ON w_factures_lignes_h.no_facture = p_factures.NO_FACTURE WHERE montant_comptabilise_0_h = montant_regle_0_h AND montant_comptabilise_0_h <> 0 GROUP BY 1,2,3,4 HAVING SUM(montant_comptabilise_0) <> 0; -- Reglements partiels IPP INSERT INTO w_factures_soldes_h SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',DATE_REGLEMENT_IPP_H) + interval '1 month' - interval '1 day' AS date_comptable, t_medecins_administratifs.oid AS medecin_comptabilise_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(MONTANT_REGLEMENT_IPP_H) AS montant_regle, SUM(MONTANT_REGLEMENT_IPP_H) AS montant_regle_0, 0 AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_IPP_H IS NOT NULL AND MONTANT_REGLEMENT_IPP_H <> 0 AND (montant_comptabilise_0_h <> montant_regle_0_h OR DATE_REGLEMENT_IPP_H < date_solde_0_h) GROUP BY 1,2,3,4 HAVING SUM(MONTANT_REGLEMENT_IPP_H) <> 0; -- contrepartie reglements partiels sur dossiers soldes IPP INSERT INTO w_factures_soldes_h SELECT p_factures.oid AS facture_id, p_factures.no_facture, date_trunc('month',date_solde_0_h) + interval '1 month' - interval '1 day' AS date_comptable, t_medecins_administratifs.oid AS medecin_comptabilise_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(0-MONTANT_REGLEMENT_IPP_H) AS montant_regle, SUM(0-MONTANT_REGLEMENT_IPP_H) AS montant_regle_0, 0 AS montant_regle_1, 0 AS montant_regle_2, 0 AS montant_regle_22 FROM w_OPERA_REG_complet JOIN activite[PX].p_factures ON w_OPERA_REG_complet.no_facture = p_factures.NO_FACTURE JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = '*ATTNSCTI' WHERE MONTANT_REGLEMENT_IPP_H IS NOT NULL AND MONTANT_REGLEMENT_IPP_H <> 0 AND (montant_comptabilise_0_h = montant_regle_0_h AND DATE_REGLEMENT_IPP_H < date_solde_0_h) GROUP BY 1,2,3,4 HAVING SUM(MONTANT_REGLEMENT_IPP_H) <> 0; SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_1'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_3'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_4'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_8'); INSERT INTO activite[PX].p_factures_soldes_h( facture_id, no_facture, date_comptable, medecin_comptabilise_id, 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, medecin_comptabilise_id, 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_h GROUP BY 1,2,3,4; SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_8'); ]]> 0 AND XECF_TYPE > 0 AND CJ_XECE.JNL_CODE <> ALL(SELECT JNL_CODE FROM prod_cegi.CJ_JNLNUMFAC) GROUP BY 1 ORDER BY 1; DROP TABLE IF EXISTS w_CJ_EFS; CREATE TEMP TABLE w_CJ_EFS AS SELECT nextval('activite[PX].s_factures'::regclass) AS oid, subview.* FROM ( SELECT CJ_EFS.EFS_ID, MAX(CJ_EFS.SEJ_ID) AS SEJ_ID, MAX(SEJ_NUMDOS) AS SEJ_NUMDOS, MAX(EFTB2_NUMFAC) AS EFTB2_NUMFAC, MAX(date(EFS_DT_DEB)) AS EFS_DT_DEB, MAX(date(EFS_DT_FIN)) AS EFS_DT_FIN, MAX(date(EFS_DT_FAC)) AS EFS_DT_FAC, MAX(date(EFS_DT_ANNUL)) AS EFS_DT_ANNUL, MAX(EFS_INACTIF) AS EFS_INACTIF, MAX(EFS_TTC) AS EFS_TTC, MAX(EFS_CPTA_TTC) AS EFS_CPTA_TTC, MAX(EFS_HON_TTC) AS EFS_HON_TTC, MAX(EFS_CPTA_HON_TTC) AS EFS_CPTA_HON_TTC, MAX(EFS_DEP) AS EFS_DEP, MAX(EFS_CPTA_HON_DEP) AS EFS_CPTA_HON_DEP, SUM(CASE WHEN EFT_TER_TYPE = 'DBT' AND EFT_SEJHON IN (0) THEN EFT_TTC ELSE 0 END) AS EFT_TTC_0, SUM(CASE WHEN EFT_TER_TYPE = 'DBT' AND EFT_SEJHON IN (0,2) THEN EFT_CPTA_TTC ELSE 0 END) AS EFT_CPTA_TTC_0, SUM(CASE WHEN EFT_TER_TYPE = 'DBT' AND EFT_SEJHON IN (1,2) THEN EFT_TTC ELSE 0 END) AS EFT_HON_TTC_0, SUM(CASE WHEN EFT_TER_TYPE = 'DBT' AND EFT_SEJHON IN (1) THEN EFT_CPTA_TTC ELSE 0 END) AS EFT_CPTA_HON_TTC_0, SUM(CASE WHEN EFT_TER_TYPE = 'DBT' AND EFT_SEJHON IN (1,2) THEN EFT_DEP ELSE 0 END) AS EFT_DEP_0, SUM(CASE WHEN EFT_TER_TYPE = 'DBT' AND EFT_SEJHON IN (1) THEN EFT_CPTA_DEP ELSE 0 END) AS EFT_CPTA_DEP_0, SUM(CASE WHEN EFT_TER_TYPE = 'CAI' AND EFT_SEJHON IN (0) THEN EFT_TTC ELSE 0 END) AS EFT_TTC_1, SUM(CASE WHEN EFT_TER_TYPE = 'CAI' AND EFT_SEJHON IN (0,2) THEN EFT_CPTA_TTC ELSE 0 END) AS EFT_CPTA_TTC_1, SUM(CASE WHEN EFT_TER_TYPE = 'CAI' AND EFT_SEJHON IN (1,2) THEN EFT_TTC ELSE 0 END) AS EFT_HON_TTC_1, SUM(CASE WHEN EFT_TER_TYPE = 'CAI' AND EFT_SEJHON IN (1) THEN EFT_CPTA_TTC ELSE 0 END) AS EFT_CPTA_HON_TTC_1, SUM(CASE WHEN EFT_TER_TYPE = 'CAI' AND EFT_SEJHON IN (1,2) THEN EFT_DEP ELSE 0 END) AS EFT_DEP_1, SUM(CASE WHEN EFT_TER_TYPE = 'CAI' AND EFT_SEJHON IN (1) THEN EFT_CPTA_DEP ELSE 0 END) AS EFT_CPTA_DEP_1, SUM(CASE WHEN EFT_TER_TYPE = 'MUT' AND EFT_SEJHON IN (0) THEN EFT_TTC ELSE 0 END) AS EFT_TTC_2, SUM(CASE WHEN EFT_TER_TYPE = 'MUT' AND EFT_SEJHON IN (0,2) THEN EFT_CPTA_TTC ELSE 0 END) AS EFT_CPTA_TTC_2, SUM(CASE WHEN EFT_TER_TYPE = 'MUT' AND EFT_SEJHON IN (1,2) THEN EFT_TTC ELSE 0 END) AS EFT_HON_TTC_2, SUM(CASE WHEN EFT_TER_TYPE = 'MUT' AND EFT_SEJHON IN (1) THEN EFT_CPTA_TTC ELSE 0 END) AS EFT_CPTA_HON_TTC_2, SUM(CASE WHEN EFT_TER_TYPE = 'MUT' AND EFT_SEJHON IN (1,2) THEN EFT_DEP ELSE 0 END) AS EFT_DEP_2, SUM(CASE WHEN EFT_TER_TYPE = 'MUT' AND EFT_SEJHON IN (1) THEN EFT_CPTA_DEP ELSE 0 END) AS EFT_CPTA_DEP_2, MAX(COALESCE(XECF_MONT,0)) AS XECF_MONT, MAX(COALESCE(XECF_HON_MONT,0)) AS XECF_HON_MONT, MAX(COALESCE(XECF_MONT_0,0)) AS XECF_MONT_0, MAX(COALESCE(XECF_HON_MONT_0,0)) AS XECF_HON_MONT_0, MAX(COALESCE(XECF_MONT_1,0)) AS XECF_MONT_1, MAX(COALESCE(XECF_HON_MONT_1,0)) AS XECF_HON_MONT_1, MAX(COALESCE(XECF_MONT_2,0)) AS XECF_MONT_2, MAX(COALESCE(XECF_HON_MONT_2,0)) AS XECF_HON_MONT_2, MAX(COALESCE(XECF_DATE_0,'00010101')) AS XECF_DATE_0, MAX(COALESCE(XECF_HON_DATE_0,'00010101')) AS XECF_HON_DATE_0, MAX(COALESCE(XECF_DATE_1,'00010101')) AS XECF_DATE_1, MAX(COALESCE(XECF_HON_DATE_1,'00010101')) AS XECF_HON_DATE_1, MAX(COALESCE(XECF_DATE_2,'00010101')) AS XECF_DATE_2, MAX(COALESCE(XECF_HON_DATE_2,'00010101')) AS XECF_HON_DATE_2, MAX(EFS_ETAT) AS EFS_ETAT, MAX(EFS_ID_AVOIR) AS EFS_ID_AVOIR, MAX(EFS_ID_RCAL) AS EFS_ID_RCAL, MAX(CASE WHEN EFT_TER_TYPE = 'DBT' THEN TER_ID ELSE 0 END) AS TER_ID_0, MAX(CASE WHEN EFT_TER_TYPE = 'CAI' THEN TER_ID ELSE 0 END) AS TER_ID_1, MAX(CASE WHEN EFT_TER_TYPE = 'MUT' THEN TER_ID ELSE 0 END) AS TER_ID_2, COALESCE(MAX(HTR_CREATION),'20991231') AS HTR_CREATION, COALESCE(MAX(HTR_LOT),'') AS HTR_LOT, COALESCE(MAX(ECR_DATCPTA),'20991231') AS ECR_DATCPTA, MAX(SEJ_CP) AS code_cp_demandee FROM prod_cegi.CJ_EFS JOIN w_CJ_SEJOUR_select ON CJ_EFS.SEJ_ID = w_CJ_SEJOUR_select.SEJ_ID JOIN prod_cegi.CJ_EFTB2 ON CJ_EFS.EFTB2_ID = CJ_EFTB2.EFTB2_ID JOIN prod_cegi.CJ_EFT ON CJ_EFS.EFS_ID = CJ_EFT.EFS_ID LEFT JOIN w_CJ_EFT_exp ON CJ_EFT.EFT_ID = w_CJ_EFT_exp.EFT_ID LEFT JOIN w_CJ_EFS_ventes ON CJ_EFS.EFS_ID = w_CJ_EFS_ventes.EFS_ID LEFT JOIN w_CJ_EFS_reg ON CJ_EFS.EFS_ID = w_CJ_EFS_reg.EFS_ID GROUP BY 1 ORDER BY 1 ) subview; 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'); INSERT INTO activite[PX].p_factures ( oid, no_sejour, provider_id, sejour_id, no_facture, date_debut, date_fin, type_facture, code_cp_demandee, code_facture, date_facture, code_vente, date_vente, mois_vente, code_cloture, nb_rejets, no_facture_reference, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, particularite_t2a, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, tiers_payant_0_id, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, date_expedition_22, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_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_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 ) SELECT w_CJ_EFS.oid, SEJ_NUMDOS AS no_sejour, 0::bigint AS provider_id, p_sejours.oid AS sejour_id, EFTB2_NUMFAC AS no_facture, EFS_DT_DEB AS date_debut, EFS_DT_FIN AS date_fin, CASE WHEN EFS_ID_AVOIR = 0 AND EFS_ID_RCAL = 0 THEN '0' WHEN EFS_ETAT IN ('A') THEN '1' WHEN EFS_ETAT IN ('F') AND EFS_ID_AVOIR <> 0 THEN 'X' ELSE '0' END AS type_facture, p_sejours.code_cp_demandee, '1' AS code_facture, EFS_DT_FAC AS date_facture, CASE WHEN ECR_DATCPTA <> '20991231' THEN '1' ELSE '0' END AS code_vente, ECR_DATCPTA AS date_vente, extract('year' FROM ECR_DATCPTA) * 100 + extract('month' FROM ECR_DATCPTA) AS mois_vente, '0'::text AS code_cloture, CASE WHEN EFS_ETAT IN ('A') THEN 1 ELSE 0 END AS nb_rejets, EFTB2_NUMFAC AS no_facture_reference, p_sejours.ghs_id, p_sejours.ghs_bebe1_id, p_sejours.ghs_bebe2_id, p_sejours.ghs_bebe3_id, ''::text AS particularite_t2a, COALESCE(w_CJ_ORG_1.tiers_payant_id, p_sejours.tiers_payant_1_id) AS tiers_payant_1_id, COALESCE(w_CJ_ORG_2.tiers_payant_id, p_sejours.tiers_payant_2_id) AS tiers_payant_2_id, 0::bigint AS tiers_payant_22_id, COALESCE(t_tiers_payant_0.oid, p_sejours.tiers_payant_0_id) AS tiers_payant_0_id, HTR_CREATION AS date_expedition, HTR_CREATION AS date_expedition_0, HTR_CREATION AS date_expedition_1, HTR_CREATION AS date_expedition_2, HTR_CREATION AS date_expedition_22, '1'::text AS code_expedie_0, CASE WHEN HTR_CREATION <> '20991231' THEN '1' ELSE '0' END::text AS code_expedie_1, CASE WHEN HTR_CREATION <> '20991231' THEN '1' ELSE '0' END::text AS code_expedie_2, CASE WHEN HTR_CREATION <> '20991231' THEN '1' ELSE '0' END::text AS code_expedie_22, ''::text AS no_bordereau_0, HTR_LOT AS no_bordereau_1, ''::text AS no_bordereau_2, ''::text AS no_bordereau_22, GREATEST(XECF_DATE_0,XECF_DATE_1,XECF_DATE_2,XECF_HON_DATE_0,XECF_HON_DATE_1,XECF_HON_DATE_2) AS date_solde, GREATEST(XECF_DATE_0,XECF_DATE_1,XECF_DATE_2) AS date_solde_c, GREATEST(XECF_HON_DATE_0,XECF_HON_DATE_1,XECF_HON_DATE_2) AS date_solde_h, XECF_DATE_0 AS date_solde_0_c, XECF_HON_DATE_0 AS date_solde_0_h, XECF_DATE_1 AS date_solde_1_c, XECF_HON_DATE_1 AS date_solde_1_h, XECF_DATE_2 AS date_solde_2_c, XECF_HON_DATE_2 AS date_solde_2_h, '00010101'::date AS date_solde_22_c, '00010101'::date AS date_solde_22_h, EFS_TTC AS montant_facture_c, EFS_HON_TTC AS montant_facture_h, EFT_TTC_0 AS montant_facture_0_c, EFT_HON_TTC_0 AS montant_facture_0_h, EFT_TTC_1 AS montant_facture_1_c, EFT_HON_TTC_1 AS montant_facture_1_h, EFT_TTC_2 AS montant_facture_2_c, EFT_HON_TTC_2 AS montant_facture_2_h, 0::numeric AS montant_facture_22_c, 0::numeric AS montant_facture_22_h, EFS_CPTA_TTC AS montant_comptabilise_c, EFS_CPTA_HON_TTC AS montant_comptabilise_h, EFT_CPTA_TTC_0 AS montant_comptabilise_0_c, EFT_CPTA_HON_TTC_0 AS montant_comptabilise_0_h, EFT_CPTA_TTC_1 AS montant_comptabilise_1_c, EFT_CPTA_HON_TTC_1 AS montant_comptabilise_1_h, EFT_CPTA_TTC_2 AS montant_comptabilise_2_c, EFT_CPTA_HON_TTC_2 AS montant_comptabilise_2_h, 0::numeric AS montant_comptabilise_22_c, 0::numeric AS montant_comptabilise_22_h, XECF_MONT AS montant_regle_c, XECF_HON_MONT AS montant_regle_h, XECF_MONT_0 AS montant_regle_0_c, XECF_HON_MONT_0 AS montant_regle_0_h, XECF_MONT_1 AS montant_regle_1_c, XECF_HON_MONT_1 AS montant_regle_1_h, XECF_MONT_2 AS montant_regle_2_c, XECF_HON_MONT_2 AS montant_regle_2_h, 0::numeric AS montant_regle_22_c, 0::numeric AS montant_regle_22_h FROM w_CJ_EFS JOIN activite[PX].p_sejours ON p_sejours.code_original = SEJ_NUMDOS LEFT JOIN w_CJ_ORG w_CJ_ORG_1 ON TER_ID_1 = w_CJ_ORG_1.TER_ID LEFT JOIN w_CJ_ORG w_CJ_ORG_2 ON TER_ID_2 = w_CJ_ORG_2.TER_ID LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_0 ON t_tiers_payant_0.code_original = 'PATIENT'; 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'); -- Factures terminées sans facturation -> Ajouter facture à 0 INSERT INTO activite[PX].p_factures ( no_sejour, provider_id, sejour_id, no_facture, date_debut, date_fin, type_facture, code_cp_demandee, code_facture, date_facture, code_vente, date_vente, mois_vente, code_cloture, nb_rejets, no_facture_reference, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, particularite_t2a, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, tiers_payant_0_id, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, date_expedition_22, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_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_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 ) SELECT SEJ_NUMDOS AS no_sejour, 0::bigint AS provider_id, MAX(p_sejours.oid) AS sejour_id, MAX(SEJ_NUMDOS||'-FT') AS no_facture, MAX(p_sejours.date_entree) AS date_debut, MAX(p_sejours.date_sortie) AS date_fin, '0'::text AS type_facture, MAX(p_sejours.code_cp_demandee), '1'::text AS code_facture, MAX(p_sejours.date_sortie) AS date_facture, '0' AS code_vente, '20991231' AS date_vente, 209912 AS mois_vente, '0'::text AS code_cloture, 0 AS nb_rejets, MAX(SEJ_NUMDOS||'-FT') AS no_facture_reference, MAX(p_sejours.ghs_id), MAX(p_sejours.ghs_bebe1_id), MAX(p_sejours.ghs_bebe2_id), MAX(p_sejours.ghs_bebe3_id), ''::text AS particularite_t2a, MAX(p_sejours.tiers_payant_1_id) AS tiers_payant_1_id, MAX(p_sejours.tiers_payant_2_id) AS tiers_payant_2_id, 0::bigint AS tiers_payant_22_id, MAX(p_sejours.tiers_payant_0_id) AS tiers_payant_0_id, '20991231' AS date_expedition, '20991231' AS date_expedition_0, '20991231' AS date_expedition_1, '20991231' AS date_expedition_2, '20991231' AS date_expedition_22, '1'::text AS code_expedie_0, '1' AS code_expedie_1, '1' AS code_expedie_2, '1' AS code_expedie_22, ''::text AS no_bordereau_0, ''::text AS no_bordereau_1, ''::text AS no_bordereau_2, ''::text AS no_bordereau_22, MAX(p_sejours.date_sortie) AS date_solde, MAX(p_sejours.date_sortie) AS date_solde_c, MAX(p_sejours.date_sortie) AS date_solde_h, MAX(p_sejours.date_sortie) AS date_solde_0_c, MAX(p_sejours.date_sortie) AS date_solde_0_h, MAX(p_sejours.date_sortie) AS date_solde_1_c, MAX(p_sejours.date_sortie) AS date_solde_1_h, MAX(p_sejours.date_sortie) AS date_solde_2_c, MAX(p_sejours.date_sortie) AS date_solde_2_h, '00010101'::date AS date_solde_22_c, '00010101'::date AS date_solde_22_h, 0::numeric AS montant_facture_c, 0::numeric AS montant_facture_h, 0::numeric AS montant_facture_0_c, 0::numeric AS montant_facture_0_h, 0::numeric AS montant_facture_1_c, 0::numeric AS montant_facture_1_h, 0::numeric AS montant_facture_2_c, 0::numeric AS montant_facture_2_h, 0::numeric AS montant_facture_22_c, 0::numeric AS montant_facture_22_h, 0::numeric AS montant_comptabilise_c, 0::numeric AS montant_comptabilise_h, 0::numeric AS montant_comptabilise_0_c, 0::numeric AS montant_comptabilise_0_h, 0::numeric AS montant_comptabilise_1_c, 0::numeric AS montant_comptabilise_1_h, 0::numeric AS montant_comptabilise_2_c, 0::numeric AS montant_comptabilise_2_h, 0::numeric AS montant_comptabilise_22_c, 0::numeric AS montant_comptabilise_22_h, 0::numeric AS montant_regle_c, 0::numeric AS montant_regle_h, 0::numeric AS montant_regle_0_c, 0::numeric AS montant_regle_0_h, 0::numeric AS montant_regle_1_c, 0::numeric AS montant_regle_1_h, 0::numeric AS montant_regle_2_c, 0::numeric AS montant_regle_2_h, 0::numeric AS montant_regle_22_c, 0::numeric AS montant_regle_22_h FROM prod_cegi.CJ_ATF JOIN prod_cegi.CJ_SEJOUR ON CJ_ATF.SEJ_ID = CJ_SEJOUR.SEJ_ID JOIN activite[PX].p_sejours ON p_sejours.code_original = SEJ_NUMDOS AND provider_id = 0 LEFT JOIN activite[PX].p_factures ON p_factures.no_sejour = p_sejours.no_sejour WHERE ATF_TERMINE = 1 AND code_sorti = '1' AND p_factures.no_facture IS NULL GROUP BY 1 ; UPDATE activite[PX].p_factures SET facture_od_avoir_id = p_factures_od_avoir.oid FROM activite[PX].p_factures p_factures_od_avoir WHERE p_factures.no_facture_od_avoir = p_factures_od_avoir.no_facture AND p_factures.no_facture_od_avoir <> ''; UPDATE activite[PX].p_sejours SET est_sans_facturation = '1' WHERE lieu_sortie_id IN (SELECT oid FROM activite[PX].t_lieux WHERE service_facturation_id IN (SELECT oid FROM activite[PX].t_services_facturation WHERE est_sans_facturation = '1') OR unite_fonctionnelle_id IN (SELECT oid FROM activite[PX].t_unites_fonctionnelles WHERE est_sans_facturation = '1') ); -- Séjours sans facture DROP TABLE IF EXISTS w_factures_trous; CREATE TEMP TABLE w_factures_trous AS SELECT p_sejours.finess, p_sejours.no_sejour, p_sejours.date_entree, p_sejours.tiers_payant_0_id, p_sejours.tiers_payant_1_id, p_sejours.tiers_payant_2_id, p_sejours.tiers_payant_22_id, p_sejours.code_cp_demandee, COALESCE(t_services_facturation.avec_facturation_intermediaire,'') AS avec_facturation_intermediaire, p_sejours.code_sorti, CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_sortie, MAX(CASE WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN date_sortie ELSE p_factures.date_fin END) AS date_fin_facture, date(MAX(COALESCE(CASE WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN date_sortie ELSE p_factures.date_fin END + interval '1 day', p_sejours.date_entree))) AS date_debut_encours, CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_fin_encours FROM activite[PX].p_sejours JOIN w_CJ_SEJOUR_select ON p_sejours.code_original = SEJ_NUMDOS LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND no_facture NOT LIKE 'E%' JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid WHERE p_sejours.etat = '' AND p_sejours.est_sans_facturation IS DISTINCT FROM '1' AND p_sejours.provider_id = 0 AND p_sejours.code_prevu = '0' AND p_sejours.type_sejour <> '6' AND p_sejours.type_sejour <> '9' AND date_entree <= now() GROUP BY 1,2,3,4,5,6,7,8,9,10,11; INSERT INTO activite[PX].p_factures( finess, no_sejour, provider_id, no_facture, no_facture_reference, type_facture, code_facture, date_facture, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee, date_debut, date_fin) SELECT finess, no_sejour, 0::bigint AS provider_id, 'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END, 'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END, 'E', '0', '20991231'::date, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee , MIN(GREATEST(date_debut_encours, p_calendrier.date)), MAX(LEAST(date_fin_encours, p_calendrier.date)) FROM w_factures_trous JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_debut_encours AND date_fin_encours WHERE (date_debut_encours <= date_fin_encours or date_fin_facture is null) GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13; UPDATE activite[PX].p_factures SET facture_reference_id = p_factures_references.oid FROM activite[PX].p_factures p_factures_references WHERE p_factures.no_facture_reference = p_factures_references.no_facture AND p_factures.facture_reference_id IS DISTINCT FROM p_factures_references.oid; ]]> 99999 THEN 99999 ELSE GREATEST(0,LSPST_QTE*LSPST_COEFF) END AS nb_rubrique, 1::numeric AS coefficient, w_PST_rub_pre.rubrique_facturation_id, w_PST_rub_pre.prestation_id, LSPST_PU AS prix_unitaire, p_sejours.lieu_sortie_id AS lieu_id, COALESCE(w_CJ_LSLPP.lpp_id,0) AS lpp_id, COALESCE(w_CJ_LSUCD.ucd_id,0) AS ucd_id FROM prod_cegi.CJ_LSPST JOIN prod_cegi.CJ_LSRGP ON CJ_LSPST.LSR_ID = CJ_LSRGP.LSR_ID JOIN prod_cegi.CJ_SEJOUR ON CJ_SEJOUR.SEJ_ID = CJ_LSRGP.SEJ_ID JOIN activite[PX].p_sejours ON SEJ_NUMDOS = p_sejours.no_sejour JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND type_facture = 'E' AND p_factures.provider_id = 0 LEFT JOIN w_PST_rub_pre ON CJ_LSPST.PST_ID = w_PST_rub_pre.PST_ID LEFT JOIN w_CJ_LSLPP ON w_CJ_LSLPP.LSPST_ID = CJ_LSPST.LSPST_ID LEFT JOIN w_CJ_LSUCD ON w_CJ_LSUCD.LSPST_ID = CJ_LSPST.LSPST_ID WHERE date(LSPST_DT_DEB) BETWEEN p_factures.date_debut AND p_factures.date_fin AND LSR_TYPE IN ('SEJ', 'HOT', 'LPP', 'UCD', 'UC2') AND LSPST_TYPE NOT IN ('GHS','PJ','CS') AND code_facture <> '1' AND LSPST_PU <> 0 AND abs(LSPST_QTE*LSPST_COEFF*LSPST_PU) < 100000 AND ((p_factures.code_cp_demandee = 1 OR (SELECT valeur from activite.t_divers WHERE code = 'ENCOURSVALOCP') = 1) OR is_cp !=1) ; -- Indication des CP dans dossier (si une seule ligne de CP saisie) INSERT INTO activite[PX].p_factures_lignes_non_facturees_c( no_facture, facture_id, date_debut, date_fin, nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, prix_unitaire, lieu_id ) SELECT p_factures.no_facture, p_factures.oid AS facture_id, MIN(date(GREATEST(SNMA_DT_DEB, p_factures.date_debut))) AS date_debut, MAX(date(LEAST(CASE WHEN SNMA_DT_FIN > SNMA_DT_DEB THEN SNMA_DT_FIN ELSE NULL END,p_factures.date_fin))) AS date_fin, GREATEST(MAX(date(LEAST(CASE WHEN SNMA_DT_FIN > SNMA_DT_DEB THEN SNMA_DT_FIN ELSE NULL END,p_factures.date_fin))) - MIN(date(GREATEST(SNMA_DT_DEB, p_factures.date_debut))),1) AS nb_rubrique, 1::numeric AS coefficient, MAX(w_PST_rub_pre.rubrique_facturation_id), MAX(w_PST_rub_pre.prestation_id) AS prestation_id, MAX(w_PST_rub_pre.LCS_PRIX) AS prix_unitaire, MAX(p_sejours.lieu_sortie_id) AS lieu_id FROM prod_cegi.CJ_SEJNMA JOIN prod_cegi.CJ_CHGNVE ON CJ_SEJNMA.CHGNVE_ID = CJ_CHGNVE.CHGNVE_ID JOIN prod_cegi.CJ_SEJOUR ON CJ_SEJOUR.SEJ_ID = CJ_CHGNVE.SEJ_ID JOIN activite[PX].p_sejours ON code_original = SEJ_NUMDOS AND type_sejour IN ('1','2') JOIN activite[PX].p_factures ON p_factures.no_sejour = p_sejours.no_sejour AND type_facture = 'E' AND p_factures.provider_id = 0 JOIN w_PST_rub_pre ON CJ_SEJNMA.PST_ID = w_PST_rub_pre.PST_ID AND is_cp = '1' LEFT JOIN activite[PX].p_factures_lignes_non_facturees_c ON p_factures_lignes_non_facturees_c.no_facture = p_factures.no_facture AND p_factures_lignes_non_facturees_c.prestation_id = w_PST_rub_pre.prestation_id WHERE CHGNVE_ACTIF = '1' AND p_factures_lignes_non_facturees_c.no_facture IS NULL AND (p_factures.code_cp_demandee = 1 OR (SELECT valeur from activite.t_divers WHERE code = 'ENCOURSVALOCP') = 1) GROUP BY 1,2 HAVING count(distinct w_PST_rub_pre.rubrique_facturation_id) = 1 ORDER BY 1 ; -- Suppléments provenant du PMSI SELECT base.cti_execute( ' DROP TABLE IF EXISTS w_SUPPLEMENT_tarif ., CREATE TEMP TABLE w_SUPPLEMENT_tarif AS SELECT t_prestations.code AS prestation_code, (MAX(Array[date_debut::text,prix_unitaire::text]))[2]::numeric AS prix_unitaire FROM activite[PX].p_factures_lignes_c JOIN activite[PX].t_prestations ON prestation_id = t_prestations.oid WHERE t_prestations.code = ''SRC'' AND montant_facture > 0 AND prix_unitaire > 0 GROUP BY 1 ., INSERT INTO activite[PX].p_factures_lignes_non_facturees_c( no_facture, facture_id, date_debut, date_fin, nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, prix_unitaire, lieu_id, lpp_id, ucd_id) SELECT p_factures.no_facture, p_factures.oid AS facture_id, date(D_ACTE) AS date_debut, date(D_ACTE) AS date_fin, 1::numeric AS nb_rubrique, 1::numeric AS coefficient, t_rubriques_facturation.oid AS rubrique_facturation_id, t_prestations.oid AS prestation_id, w_SUPPLEMENT_TARIF.prix_unitaire AS prix_unitaire, p_sejours.lieu_sortie_id AS lieu_id, 0::bigint AS lpp_id, 0::bigint AS ucd_id FROM prod_cegi.SUPPLEMENT JOIN prod_cegi.RSS ON SUPPLEMENT.N_PMSI = RSS.N_PMSI JOIN activite[PX].p_sejours ON N_DOSS = p_sejours.no_sejour JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND type_facture = ''E'' AND p_factures.provider_id = 0 JOIN activite.t_prestations ON SUPPLEMENT.ACTE = t_prestations.code JOIN activite.t_rubriques_facturation ON SUPPLEMENT.ACTE = t_rubriques_facturation.code_original JOIN w_SUPPLEMENT_tarif ON SUPPLEMENT.ACTE = prestation_code LEFT JOIN activite[PX].p_factures_lignes_non_facturees_c ON p_factures.no_facture = p_factures_lignes_non_facturees_c.no_facture AND t_prestations.oid = p_factures_lignes_non_facturees_c.prestation_id WHERE date(D_ACTE) BETWEEN p_factures.date_debut AND p_factures.date_fin AND SUPPLEMENT.ACTE IN (''SRC'') AND code_facture <> ''1'' AND p_factures_lignes_non_facturees_c.no_facture IS NULL ',1) FROM pg_tables WHERE tablename = 'supplement' AND schemaname = 'prod_cegi' ; ]]> 0 THEN LCS_MCO ELSE 1 END) AS LCS_MCO, MAX(LCS_PRIX) AS LCS_PRIX, MAX(CASE WHEN LCS_SEJHON = 0 THEN LCS_TTC ELSE 0 END) AS LCS_TTC, MAX(LCS_CPTA_TTC) AS LCS_CPTA_TTC, MAX(CASE WHEN LCT_TER_TYPE = 'DBT' AND LCS_SEJHON IN (0,2) THEN LCT_TX ELSE 0 END) AS LCT_TX_0, MAX(CASE WHEN LCT_TER_TYPE = 'CAI' AND LCS_SEJHON IN (0,2) THEN LCT_TX ELSE 0 END) AS LCT_TX_1, MAX(CASE WHEN LCT_TER_TYPE = 'MUT' AND LCS_SEJHON IN (0,2) THEN LCT_TX ELSE 0 END) AS LCT_TX_2, SUM(CASE WHEN LCT_TER_TYPE = 'DBT' AND LCS_SEJHON IN (0) THEN LCT_TTC ELSE 0 END) AS LCT_TTC_0, SUM(CASE WHEN LCT_TER_TYPE = 'DBT' AND LCS_SEJHON IN (0,2) THEN LCT_CPTA_TTC ELSE 0 END) AS LCT_CPTA_TTC_0, SUM(CASE WHEN LCT_TER_TYPE = 'CAI' AND LCS_SEJHON IN (0) THEN LCT_TTC ELSE 0 END) AS LCT_TTC_1, SUM(CASE WHEN LCT_TER_TYPE = 'CAI' AND LCS_SEJHON IN (0,2) THEN LCT_CPTA_TTC ELSE 0 END) AS LCT_CPTA_TTC_1, SUM(CASE WHEN LCT_TER_TYPE = 'MUT' AND LCS_SEJHON IN (0) THEN LCT_TTC ELSE 0 END) AS LCT_TTC_2, SUM(CASE WHEN LCT_TER_TYPE = 'MUT' AND LCS_SEJHON IN (0,2) THEN LCT_CPTA_TTC ELSE 0 END) AS LCT_CPTA_TTC_2, 0::bigint AS ucd_id, 0::bigint AS lpp_id FROM prod_cegi.CJ_LCS JOIN w_CJ_SEJOUR_select ON CJ_LCS.SEJ_ID = w_CJ_SEJOUR_select.SEJ_ID JOIN w_CJ_EFS ON CJ_LCS.EFS_ID = w_CJ_EFS.EFS_ID JOIN prod_cegi.CJ_LCT ON CJ_LCS.LCS_ID = CJ_LCT.LCS_ID JOIN w_RUBRIQUES ON CJ_LCS.PST_ID = w_RUBRIQUES.PST_ID JOIN activite[PX].p_factures ON w_CJ_EFS.oid = p_factures.oid WHERE LCS_SEJHON IN (0,2) GROUP BY 1; UPDATE w_CJ_LCS SET ucd_id = w_CJ_LSUCD.ucd_id FROM w_CJ_LSUCD WHERE LCS_IDLS = LSPST_ID ; UPDATE w_CJ_LCS SET lpp_id = w_CJ_LSLPP.lpp_id FROM w_CJ_LSLPP WHERE LCS_IDLS = LSPST_ID ; DROP TABLE IF EXISTS w_factures_lignes_c; CREATE TEMP TABLE w_factures_lignes_c AS SELECT w_CJ_LCS.no_sejour, w_CJ_LCS.facture_id, w_CJ_LCS.no_facture, w_CJ_LCS.date_vente, w_CJ_LCS.LCS_COEFF AS coefficient, w_CJ_LCS.LCS_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, lpp_id, ucd_id, COALESCE(t_compte.oid,0) AS compte_produit_id, p_sejours.lieu_sortie_id AS lieu_id, 1::bigint AS origine_facturation_id, LCS_PRIX AS prix_unitaire, LEAST(LCT_TX_0,100) AS taux_0, LEAST(LCT_TX_1,100) AS taux_1, LEAST(LCT_TX_2,100) AS taux_2, 0::numeric AS taux_22, LCS_DT_DEB AS date_debut, LCS_DT_FIN AS date_fin, LCS_QTE AS nb_rubrique, LCS_QTE AS nb_prestation, LCS_TTC AS montant_facture, LCT_TTC_0 AS montant_facture_0, LCT_TTC_1 AS montant_facture_1, LCT_TTC_2 AS montant_facture_2, 0::numeric AS montant_facture_22, LCS_CPTA_TTC AS montant_comptabilise, LCT_CPTA_TTC_0 AS montant_comptabilise_0, LCT_CPTA_TTC_1 AS montant_comptabilise_1, LCT_CPTA_TTC_2 AS montant_comptabilise_2, 0::numeric AS montant_comptabilise_22, 0::numeric AS rubrique_facture_id FROM w_CJ_LCS JOIN activite[PX].p_sejours ON w_CJ_LCS.sejour_id = p_sejours.oid LEFT JOIN activite[PX].t_rubriques_facturation ON PST_LIBC = t_rubriques_facturation.code_original LEFT JOIN activite.t_prestations ON LCS_CODE = t_prestations.code LEFT JOIN activite[PX].t_compte ON LCT_PST_CPT = t_compte.code_original AND LCT_PST_CPT <> '' ; CREATE INDEX w_factures_lignes_c_i1 ON w_factures_lignes_c USING btree (no_sejour); UPDATE w_factures_lignes_c SET lieu_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE w_factures_lignes_c.no_sejour = p_mouvements_sejour.no_sejour AND w_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 w_factures_lignes_c.lieu_id <> p_mouvements_sejour.lieu_id; -- Rubriques internes cti SELECT activite[PX].cti_reorganize_rubrique_facture_c('w_factures_lignes_c'); 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'); 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, prestation_id, lpp_id, ucd_id, compte_produit_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, 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, prestation_id, lpp_id, ucd_id, compte_produit_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, origine_facturation_id FROM w_factures_lignes_c; 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'); -- Forcage date debut = date entree pour prestations à ventiler UPDATE activite[PX].p_factures_lignes_c SET date_debut = p_factures.date_debut FROM activite[PX].t_rubriques_facturation, activite.t_prestations, activite[PX].p_factures JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour WHERE p_factures.provider_id = 0 AND p_factures_lignes_c.no_facture = p_factures.no_facture AND prestation_id = t_prestations.oid AND t_prestations.type_ventilation_jour = '1' AND ABS(nb_rubrique) > 1 AND p_factures_lignes_c.date_debut = p_factures_lignes_c.date_fin AND p_sejours.date_sortie <> p_sejours.date_entree ; -- Eclatement des supplements par jour DROP TABLE IF EXISTS w_factures_lignes_sup_c; CREATE TEMP TABLE w_factures_lignes_sup_c AS SELECT p_factures_lignes_c.CTID AS from_CTID, t_prestations.code AS prestation_code, date(p_sejours.date_entree) AS date_debut_ghs, date(p_sejours.date_sortie - interval '1 day') AS date_fin_ghs, (date(date_sortie) - date(date_entree)) * CASE WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation_ghs, CASE WHEN t_prestations.code = 'GHS' THEN date(date_entree + interval '1 day') ELSE date(p_factures_lignes_c.date_debut + interval '1 day') END AS date_debut_det, CASE WHEN t_prestations.code = 'GHS' THEN date(p_sejours.date_sortie - interval '1 day') ELSE date(p_factures_lignes_c.date_debut + ((ABS(nb_prestation)-1) || ' day')::interval) END AS date_fin_det, ABS(CASE WHEN t_prestations.code = 'GHS' THEN date(date_sortie) - date(date_entree) ELSE nb_prestation END) AS nb_det, p_factures_lignes_c.* FROM activite[PX].p_factures_lignes_c JOIN activite[PX].p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour AND p_sejours.etat = '' JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND ( code IN ('PJ', 'FJ', 'SSM', 'GHS', 'EXH', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO') OR t_prestations.type_ventilation_jour = '1' ) WHERE p_factures.provider_id = 0 AND (nb_prestation > 1 or nb_prestation < -1 OR (t_prestations.code = 'GHS' AND p_sejours.type_sejour != '5' AND date(date_sortie) - date(date_entree) > 1)) ; UPDATE w_factures_lignes_sup_c SET date_fin_ghs = date(date_debut_exh - interval '1 day'), date_fin_det = date(date_debut_exh - interval '1 day'), nb_prestation_ghs = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1, nb_det = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1 FROM ( SELECT no_facture, date(MIN(date_debut)) AS date_debut_exh FROM activite[PX].p_factures_lignes_c JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code = 'EXH' GROUP BY 1) subview WHERE w_factures_lignes_sup_c.no_facture = subview.no_facture AND w_factures_lignes_sup_c.prestation_code = 'GHS'; CREATE INDEX w_factures_lignes_sup_c_i1 ON w_factures_lignes_sup_c USING btree (date_debut); 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 prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_rubrique, CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation, coefficient, coefficient_mco, rubrique_facturation_id, prestation_id, lpp_id, ucd_id, compte_produit_id, round(montant_facture / ABS(nb_det),2) AS montant_facture, round(montant_facture_0 / ABS(nb_det),2) AS montant_facture_0, round(montant_facture_1 / ABS(nb_det),2) AS montant_facture_1, round(montant_facture_2 / ABS(nb_det),2) AS montant_facture_2, round(montant_facture_22 / ABS(nb_det),2) AS montant_facture_22, taux_0, taux_1, taux_2, taux_22, finess, prix_unitaire, lieu_id, round(montant_comptabilise / ABS(nb_det),2) AS montant_comptabilise, round(montant_comptabilise_0 / ABS(nb_det),2) AS montant_comptabilise_0, round(montant_comptabilise_1 / ABS(nb_det),2) AS montant_comptabilise_1, round(montant_comptabilise_2 / ABS(nb_det),2) AS montant_comptabilise_2, round(montant_comptabilise_22 / ABS(nb_det),2) AS montant_comptabilise_22, rubrique_comptabilisation_id, round(montant_encours / ABS(nb_det),2) AS montant_encours, round(montant_encours_0 / ABS(nb_det),2) AS montant_encours_0, round(montant_encours_1 / ABS(nb_det),2) AS montant_encours_1, round(montant_encours_2 / ABS(nb_det),2) AS montant_encours_2, round(montant_encours_22 / ABS(nb_det),2) AS montant_encours_22, round(montant_facture_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_actes_inclus_dans_sejour, round(montant_facture_0_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_0_actes_inclus_dans_sejour, round(montant_facture_1_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_1_actes_inclus_dans_sejour, round(montant_facture_2_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_2_actes_inclus_dans_sejour, round(montant_facture_22_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_22_actes_inclus_dans_sejour, origine_facturation_id, round(montant_comptabilise_budget_global_1 / ABS(nb_det),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_det)::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(nb_rubrique) AS nb_rubrique, SUM(nb_prestation) AS nb_prestation, 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 = p_factures_lignes_c.nb_rubrique - w_factures_lignes_sup_c_sup_tot.nb_rubrique, nb_prestation = p_factures_lignes_c.nb_prestation - w_factures_lignes_sup_c_sup_tot.nb_prestation, 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, prestation_id, lpp_id, ucd_id, compte_produit_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, rubrique_comptabilisation_id, 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, prestation_id, lpp_id, ucd_id, compte_produit_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, rubrique_comptabilisation_id, 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 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; ]]> '20991231' AND (montant_comptabilise <> 0 OR montant_comptabilise_0 <> 0 OR montant_comptabilise_1 <> 0 OR montant_comptabilise_2 <> 0 OR montant_comptabilise_22 <> 0 ) GROUP BY 1,2,3,4,5; INSERT INTO w_factures_soldes_c SELECT w_CJ_EFS.oid AS facture_id, w_CJ_EFS.EFTB2_NUMFAC AS no_facture, date_trunc('month',XECE_DATE) + interval '1 month' - interval '1 day' AS date_comptable, COALESCE(t_rubriques_facturation.oid,t_rubriques_att.oid) AS rubrique_comptabilisation_id, COALESCE(t_prestations.oid,t_prestations_att.oid) 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(COALESCE(CJ_XECL.XECL_MONT,CJ_XECF.XECF_MONT))::numeric AS XECF_MONT, SUM(CASE WHEN EFT_TER_TYPE = 'DBT' THEN COALESCE(CJ_XECL.XECL_MONT,CJ_XECF.XECF_MONT) ELSE 0 END)::numeric AS XECF_MONT_0, SUM(CASE WHEN EFT_TER_TYPE = 'CAI' THEN COALESCE(CJ_XECL.XECL_MONT,CJ_XECF.XECF_MONT) ELSE 0 END)::numeric AS XECF_MONT_1, SUM(CASE WHEN EFT_TER_TYPE = 'MUT' THEN COALESCE(CJ_XECL.XECL_MONT,CJ_XECF.XECF_MONT) ELSE 0 END)::numeric AS XECF_MONT_2, 0::numeric AS montant_regle_22 FROM prod_cegi.CJ_XECF JOIN prod_cegi.CJ_XECE ON CJ_XECF.XECE_ID = CJ_XECE.XECE_ID LEFT JOIN prod_cegi.CJ_XECL ON CJ_XECL.XECF_ID = CJ_XECF.XECF_ID LEFT JOIN prod_cegi.CJ_LCT ON CJ_XECL.LCT_ID = CJ_LCT.LCT_ID LEFT JOIN prod_cegi.CJ_PST ON CJ_LCT.PST_ID = CJ_PST.PST_ID LEFT JOIN activite.t_prestations ON LCT_CODE = t_prestations.code LEFT JOIN activite[PX].t_rubriques_facturation ON PST_LIBC = t_rubriques_facturation.code_original JOIN prod_cegi.CJ_EFT ON CJ_EFT.EFT_ID = CJ_XECF.EFT_ID JOIN w_CJ_EFS ON CJ_EFT.EFS_ID = w_CJ_EFS.EFS_ID JOIN activite.t_prestations t_prestations_att ON t_prestations_att.code_original = '*ATTNSCTI' JOIN activite[PX].t_rubriques_facturation t_rubriques_att ON t_rubriques_att.code_original = '*ATTNSCTI' WHERE CJ_XECF.EFT_ID <> 0 AND EFT_SEJHON IN (0,2) AND XECF_TYPE >= 0 AND CJ_XECE.JNL_CODE <> ALL(SELECT JNL_CODE FROM prod_cegi.CJ_JNLNUMFAC) GROUP BY 1,2,3,4,5 ORDER BY 1 ; DROP TABLE IF EXISTS w_factures_soldes_soldes; CREATE TEMP TABLE w_factures_soldes_soldes AS SELECT facture_id, MAX(CASE WHEN montant_regle <> 0 THEN date_comptable ELSE NULL END) AS date_comptable, SUM(montant_comptabilise) AS montant_comptabilise, SUM(montant_regle) AS montant_regle FROM w_factures_soldes_c GROUP BY 1 HAVING SUM(montant_comptabilise) = SUM(montant_regle) AND SUM(montant_regle) <> 0 ; INSERT INTO w_factures_soldes_c SELECT w_factures_soldes_c.facture_id, w_factures_soldes_c.no_facture, w_factures_soldes_soldes.date_comptable, w_factures_soldes_c.rubrique_comptabilisation_id, w_factures_soldes_c.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(0-w_factures_soldes_c.montant_regle)::numeric AS montant_regle, SUM(0-w_factures_soldes_c.montant_regle_0)::numeric AS montant_regle_0, SUM(0-w_factures_soldes_c.montant_regle_1)::numeric AS montant_regle_1, SUM(0-w_factures_soldes_c.montant_regle_2)::numeric AS montant_regle_2, 0::numeric AS montant_regle_22 FROM w_factures_soldes_c JOIN w_factures_soldes_soldes ON w_factures_soldes_c.facture_id = w_factures_soldes_soldes.facture_id GROUP BY 1,2,3,4,5 ; INSERT INTO w_factures_soldes_c SELECT w_factures_soldes_c.facture_id, w_factures_soldes_c.no_facture, w_factures_soldes_soldes.date_comptable, w_factures_soldes_c.rubrique_comptabilisation_id, w_factures_soldes_c.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(w_factures_soldes_c.montant_comptabilise)::numeric AS montant_regle, SUM(w_factures_soldes_c.montant_comptabilise_0)::numeric AS montant_regle_0, SUM(w_factures_soldes_c.montant_comptabilise_1)::numeric AS montant_regle_1, SUM(w_factures_soldes_c.montant_comptabilise_2)::numeric AS montant_regle_2, 0::numeric AS montant_regle_22 FROM w_factures_soldes_c JOIN w_factures_soldes_soldes ON w_factures_soldes_c.facture_id = w_factures_soldes_soldes.facture_id WHERE w_factures_soldes_c.montant_comptabilise <> 0 GROUP BY 1,2,3,4,5; ; 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'); INSERT INTO activite[PX].p_factures_soldes_c( facture_id, no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, 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_comptabilisation_id, prestation_id, 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 HAVING ( SUM(montant_comptabilise) <> 0 OR SUM(montant_comptabilise_0) <> 0 OR SUM(montant_comptabilise_1) <> 0 OR SUM(montant_comptabilise_2) <> 0 OR SUM(montant_comptabilise_22) <> 0 OR SUM(montant_regle) <> 0 OR SUM(montant_regle_0) <> 0 OR SUM(montant_regle_1) <> 0 OR SUM(montant_regle_2) <> 0 OR SUM(montant_regle_22) <> 0 ); 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'); ]]> 0 THEN LCS_COEFF ELSE 1.00 END::numeric,2) AS coefficient, COALESCE(w_CJ_PRA_EXE.medecin_administratif_id,0) AS medecin_facture_id, COALESCE(t_prestations.oid,0) AS prestation_id, LCS_PRIX AS prix_unitaire, LCS_DEP AS montant_depassement, p_sejours.lieu_sortie_id AS lieu_id, COALESCE(t_actes_ccam.oid, t_actes_ngap.oid,0) AS acte_id, COALESCE(CJ_CCAM.CCAM_PHS,0)::text AS phase_ccam, COALESCE(CJ_CCAM.CCAM_ACTV,'') AS activite_ccam, COALESCE(CJ_LSCCAM.LSCA_EXTDOC,'') AS extension_ccam, COALESCE(CJ_LSCCAM.LSCA_MOD1,'') AS modificateur_ccam_1, COALESCE(CJ_LSCCAM.LSCA_MOD2,'') AS modificateur_ccam_2, COALESCE(CJ_LSCCAM.LSCA_MOD3,'') AS modificateur_ccam_3, COALESCE(CJ_LSCCAM.LSCA_MOD4,'') AS modificateur_ccam_4 FROM prod_cegi.CJ_LCS LEFT JOIN prod_cegi.CJ_LSCCAM ON CJ_LSCCAM.LSCA_ID = CJ_LCS.LCS_IDLS AND CJ_LCS.LCS_CODE IN ('ACO','ADA','ADC','ADE','ADI','ATM','DEN') LEFT JOIN prod_cegi.CJ_CCAM ON CJ_CCAM.CCAM_ID = CJ_LSCCAM.CCAM_ID JOIN activite.t_prestations ON LCS_CODE = t_prestations.code LEFT JOIN base.t_actes t_actes_ccam ON CCAM_CODE = t_actes_ccam.code LEFT JOIN base.t_actes t_actes_ngap ON LCS_CODE = t_actes_ngap.code LEFT JOIN w_CJ_PRA w_CJ_PRA_EXE ON w_CJ_PRA_EXE.TER_ID = LCS_TER_EXE JOIN prod_cegi.CJ_SEJOUR ON CJ_SEJOUR.SEJ_ID = CJ_LCS.SEJ_ID JOIN activite[PX].p_sejours ON SEJ_NUMDOS = p_sejours.no_sejour JOIN activite[PX].p_factures ON SEJ_NUMDOS = p_factures.no_sejour AND date(LCS_DT_DEB) BETWEEN p_factures.date_debut AND p_factures.date_fin AND p_factures.provider_id = 0 AND code_facture = '0' AND LCS_SEJHON IN (1,2) ; INSERT INTO activite[PX].p_factures_lignes_non_facturees_h( no_facture, facture_id, date_debut, date_fin, heure_debut, nb_rubrique, coefficient, medecin_facture_id, prestation_id, prix_unitaire, montant_depassement, lieu_id, acte_id, phase_ccam, activite_ccam, extension_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4 ) SELECT p_factures.no_facture, p_factures.oid AS facture_id, date(LSR_DDEB) AS date_debut, date(LSR_DDEB) AS date_fin, 100000 AS heure_debut, 1::numeric AS nb_rubrique, 1 AS coefficient, COALESCE(w_CJ_PRA_EXE.medecin_administratif_id,0) AS medecin_facture_id, COALESCE(t_prestations.oid,0) AS prestation_id, 0 AS prix_unitaire, 0 AS montant_depassement, p_sejours.lieu_sortie_id AS lieu_id, t_actes.oid AS acte_id, COALESCE(CJ_CCAM.CCAM_PHS,0)::text AS phase_ccam, COALESCE(CJ_CCAM.CCAM_ACTV,'') AS activite_ccam, COALESCE(CJ_LSCCAM.LSCA_EXTDOC,'') AS extension_ccam, COALESCE(CJ_LSCCAM.LSCA_MOD1,'') AS modificateur_ccam_1, COALESCE(CJ_LSCCAM.LSCA_MOD2,'') AS modificateur_ccam_2, COALESCE(CJ_LSCCAM.LSCA_MOD3,'') AS modificateur_ccam_3, COALESCE(CJ_LSCCAM.LSCA_MOD4,'') AS modificateur_ccam_4 FROM prod_cegi.CJ_LSRGP JOIN prod_cegi.CJ_LSCCAM ON CJ_LSRGP.lsr_id = CJ_LSCCAM.lsr_id JOIN prod_cegi.CJ_SEJOUR ON (CJ_LSRGP.sej_id = CJ_SEJOUR.sej_id ) JOIN prod_cegi.CJ_CCAM ON (CJ_LSCCAM.ccam_id = CJ_CCAM.ccam_id) LEFT JOIN w_CJ_PRA w_CJ_PRA_EXE ON w_CJ_PRA_EXE.TER_ID = CJ_LSCCAM.TER_ID JOIN base.t_actes ON (substring(CJ_CCAM.ccam_code, 1, 7) = t_actes.code) JOIN base.t_ccam_regroupements ON ( CCAM_ACTV <> '4' AND ccam_regroupement_id_1 = t_ccam_regroupements.oid OR CCAM_ACTV = '4' AND ccam_regroupement_id_4 = t_ccam_regroupements.oid ) JOIN activite.t_prestations ON t_ccam_regroupements.code = t_prestations.Code JOIN activite[PX].p_sejours ON SEJ_NUMDOS = p_sejours.no_sejour JOIN activite[PX].p_factures ON SEJ_NUMDOS = p_factures.no_sejour AND date(LSR_DDEB) BETWEEN p_factures.date_debut AND p_factures.date_fin AND p_factures.provider_id = 0 AND code_facture = '0' LEFT JOIN prod_cegi.CJ_LCS ON CJ_LSCCAM.LSCA_ID = CJ_LCS.LCS_IDLS AND LCS_CODE IN ('ACO','ADA','ADC','ADE','ADI','ATM','DEN') WHERE LSR_ACTIF = 1 AND LSCA_ACTIF = 1 AND LCS_IDLS IS NULL ; ]]> '' AND LCS_SEJHON IN (1,2) AND length(LCS_CODE) < 7 AND t_actes.oid IS NULL GROUP BY 1,2,3 ; DROP TABLE IF EXISTS w_CJ_LCS; CREATE TEMP TABLE w_CJ_LCS AS SELECT CJ_LCS.LCS_ID, MAX(CJ_LCS.EFS_ID) AS EFS_ID, MAX(p_factures.sejour_id) AS sejour_id, MAX(p_factures.oid) AS facture_id, MAX(p_factures.no_sejour) AS no_sejour, MAX(p_factures.no_facture) AS no_facture, MAX(p_factures.date_vente) AS date_vente, date(MAX(LCS_DT_DEB)) AS LCS_DT_DEB, date(MAX(LCS_DT_FIN)) AS LCS_DT_FIN, MAX(CJ_LCS.LCS_CODE) AS LCS_CODE, MAX(PST_LIBC) AS PST_LIBC, MAX(LCS_TER_EXE) AS LCS_TER_EXE, MAX(LCT_TER_EXE) AS LCT_TER_EXE, MAX(COALESCE(CJ_CCAM.CCAM_CODE,CJ_LCS.LCS_CODE,'')) AS CCAM_CODE, MAX(COALESCE(CJ_CCAM.CCAM_ACTV,'')) AS CCAM_ACTV, MAX(COALESCE(CJ_CCAM.CCAM_PHS,0)) AS CCAM_PHS, MAX(COALESCE(CJ_LSCCAM.LSCA_EXTDOC,'')) AS LSCA_EXTDOC, MAX(COALESCE(CJ_LSCCAM.LSCA_MOD1,'')) AS LSCA_MOD1, MAX(COALESCE(CJ_LSCCAM.LSCA_MOD2,'')) AS LSCA_MOD2, MAX(COALESCE(CJ_LSCCAM.LSCA_MOD3,'')) AS LSCA_MOD3, MAX(COALESCE(CJ_LSCCAM.LSCA_MOD4,'')) AS LSCA_MOD4, MAX(LCS_GHS) AS LCS_GHS, MAX(LCS_QTE) AS LCS_QTE, MAX(LCS_COEFF) AS LCS_COEFF, MAX(CASE WHEN LCS_MCO <> 0 THEN LCS_MCO ELSE 1 END) AS LCS_MCO, MAX(LCS_PRIX) AS LCS_PRIX, MAX(CASE WHEN LCS_SEJHON IN (1,2) THEN LCS_TTC ELSE 0 END) AS LCS_TTC, MAX(CASE WHEN LCS_SEJHON IN (1) THEN LCS_CPTA_TTC ELSE 0 END) AS LCS_CPTA_TTC, MAX(CASE WHEN LCS_SEJHON IN (1,2) THEN LCS_DEP ELSE 0 END) AS LCS_DEP, MAX(CASE WHEN LCS_SEJHON IN (1) THEN LCS_CPTA_DEP ELSE 0 END) AS LCS_CPTA_DEP, MAX(CASE WHEN LCT_TER_TYPE = 'DBT' AND LCS_SEJHON IN (1,2) THEN LCT_TX ELSE 0 END) AS LCT_TX_0, MAX(CASE WHEN LCT_TER_TYPE = 'CAI' AND LCS_SEJHON IN (1,2) THEN LCT_TX ELSE 0 END) AS LCT_TX_1, MAX(CASE WHEN LCT_TER_TYPE = 'MUT' AND LCS_SEJHON IN (1,2) THEN LCT_TX ELSE 0 END) AS LCT_TX_2, SUM(CASE WHEN LCT_TER_TYPE = 'DBT' AND LCS_SEJHON IN (1,2) THEN LCT_TTC ELSE 0 END) AS LCT_TTC_0, SUM(CASE WHEN LCT_TER_TYPE = 'DBT' AND LCS_SEJHON IN (1) THEN LCT_CPTA_TTC ELSE 0 END) AS LCT_CPTA_TTC_0, SUM(CASE WHEN LCT_TER_TYPE = 'CAI' AND LCS_SEJHON IN (1,2) THEN LCT_TTC ELSE 0 END) AS LCT_TTC_1, SUM(CASE WHEN LCT_TER_TYPE = 'CAI' AND LCS_SEJHON IN (1) THEN LCT_CPTA_TTC ELSE 0 END) AS LCT_CPTA_TTC_1, SUM(CASE WHEN LCT_TER_TYPE = 'MUT' AND LCS_SEJHON IN (1,2) THEN LCT_TTC ELSE 0 END) AS LCT_TTC_2, SUM(CASE WHEN LCT_TER_TYPE = 'MUT' AND LCS_SEJHON IN (1) THEN LCT_CPTA_TTC ELSE 0 END) AS LCT_CPTA_TTC_2, SUM(CASE WHEN LCS_SEJHON IN (1,2) THEN LCT_DEP ELSE 0 END) AS LCT_DEP, SUM(CASE WHEN LCS_SEJHON IN (1) THEN LCT_CPTA_DEP ELSE 0 END) AS LCT_CPTA_DEP FROM prod_cegi.CJ_LCS JOIN w_CJ_SEJOUR_select ON CJ_LCS.SEJ_ID = w_CJ_SEJOUR_select.SEJ_ID JOIN w_CJ_EFS ON CJ_LCS.EFS_ID = w_CJ_EFS.EFS_ID JOIN prod_cegi.CJ_LCT ON CJ_LCS.LCS_ID = CJ_LCT.LCS_ID LEFT JOIN prod_cegi.CJ_LSCCAM ON CJ_LSCCAM.LSCA_ID = CJ_LCS.LCS_IDLS AND CJ_LCS.LCS_CODE IN ('ACO','ADA','ADC','ADE','ADI','ATM','DEN') LEFT JOIN prod_cegi.CJ_CCAM ON CJ_CCAM.CCAM_ID = CJ_LSCCAM.CCAM_ID JOIN w_RUBRIQUES ON CJ_LCS.PST_ID = w_RUBRIQUES.PST_ID JOIN activite[PX].p_factures ON w_CJ_EFS.oid = p_factures.oid WHERE LCS_SEJHON IN (1,2) GROUP BY 1; UPDATE w_CJ_LCS SET LCS_CODE = PST_LIBC WHERE LCS_CODE = ''; UPDATE w_CJ_LCS SET LCS_CPTA_TTC = (LCT_CPTA_TTC_0+LCT_CPTA_TTC_1+LCT_CPTA_TTC_2) WHERE LCS_CPTA_TTC = 0 AND (LCT_CPTA_TTC_0+LCT_CPTA_TTC_1+LCT_CPTA_TTC_2) <> 0; DROP TABLE IF EXISTS w_factures_lignes_h; CREATE TEMP TABLE w_factures_lignes_h AS SELECT w_CJ_LCS.facture_id, w_CJ_LCS.no_facture, w_CJ_LCS.date_vente, LCS_DT_DEB AS date_debut, LCS_DT_FIN AS date_fin, LCS_QTE AS nb_rubrique, LCS_QTE AS nb_prestation, LCS_COEFF AS coefficient, LCS_MCO AS coefficient_mco, COALESCE(w_CJ_PRA_EXE.medecin_administratif_id,0) AS medecin_facture_id, COALESCE(w_CJ_PRA_CPT.medecin_administratif_id,0) AS medecin_comptabilise_id, COALESCE(t_prestations.oid,0) AS prestation_id, COALESCE(t_rubriques_facturation.oid,0) AS rubrique_facturation_id, COALESCE(t_actes.oid,0) AS acte_id, CCAM_ACTV AS activite_ccam, LSCA_EXTDOC AS extension_ccam, CCAM_PHS AS phase_ccam, LSCA_MOD1 AS modificateur_ccam_1, LSCA_MOD1 AS modificateur_ccam_2, LSCA_MOD1 AS modificateur_ccam_3, LSCA_MOD1 AS modificateur_ccam_4, LCS_TTC AS montant_facture, LCT_TTC_0 AS montant_facture_0, LCT_TTC_1 AS montant_facture_1, LCT_TTC_2 AS montant_facture_2, 0::numeric AS montant_facture_22, LCS_DEP AS montant_depassement, LEAST(LCT_TX_0,100) AS taux_0, LEAST(LCT_TX_1,100) AS taux_1, LEAST(LCT_TX_2,100) AS taux_2, 0::numeric AS taux_22, LCS_PRIX AS prix_unitaire, p_sejours.lieu_sortie_id AS lieu_id, LCS_CPTA_TTC AS montant_comptabilise, LCT_CPTA_TTC_0 AS montant_comptabilise_0, LCT_CPTA_TTC_1 AS montant_comptabilise_1, LCT_CPTA_TTC_2 AS montant_comptabilise_2, 0::numeric AS montant_comptabilise_22 FROM w_CJ_LCS JOIN activite[PX].p_sejours ON w_CJ_LCS.sejour_id = p_sejours.oid LEFT JOIN activite[PX].t_rubriques_facturation ON PST_LIBC = t_rubriques_facturation.code_original LEFT JOIN activite.t_prestations ON LCS_CODE = t_prestations.code LEFT JOIN w_CJ_PRA w_CJ_PRA_EXE ON w_CJ_PRA_EXE.TER_ID = LCS_TER_EXE LEFT JOIN w_CJ_PRA w_CJ_PRA_CPT ON w_CJ_PRA_CPT.TER_ID = LCT_TER_EXE LEFT JOIN base.t_actes ON CCAM_CODE = t_actes.code ; 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'); 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, rubrique_facturation_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 ) SELECT facture_id, no_facture, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, medecin_facture_id, medecin_comptabilise_id, prestation_id, rubrique_facturation_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 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'); ]]> '20991231' AND (montant_comptabilise <> 0 OR montant_comptabilise_0 <> 0 OR montant_comptabilise_1 <> 0 OR montant_comptabilise_2 <> 0 ) GROUP BY 1,2,3,4,5,6; INSERT INTO w_factures_soldes_h SELECT w_CJ_EFS.oid AS facture_id, w_CJ_EFS.EFTB2_NUMFAC AS no_facture, date_trunc('month',XECE_DATE) + interval '1 month' - interval '1 day' AS date_comptable, t_rubriques_facturation.oid AS rubrique_comptabilisation_id, t_prestations.oid AS prestation_id, t_medecins_administratifs.oid AS medecin_comptabilise_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(CJ_XECF.XECF_MONT)::numeric AS XECF_MONT, SUM(CASE WHEN EFT_TER_TYPE = 'DBT' THEN CJ_XECF.XECF_MONT ELSE 0 END)::numeric AS XECF_MONT_0, SUM(CASE WHEN EFT_TER_TYPE = 'CAI' THEN CJ_XECF.XECF_MONT ELSE 0 END)::numeric AS XECF_MONT_1, SUM(CASE WHEN EFT_TER_TYPE = 'MUT' THEN CJ_XECF.XECF_MONT ELSE 0 END)::numeric AS XECF_MONT_2, 0::numeric AS montant_regle_22 FROM prod_cegi.CJ_XECF JOIN prod_cegi.CJ_XECE ON CJ_XECF.XECE_ID = CJ_XECE.XECE_ID JOIN prod_cegi.CJ_EFT ON CJ_EFT.EFT_ID = CJ_XECF.EFT_ID JOIN w_CJ_EFS ON CJ_EFT.EFS_ID = w_CJ_EFS.EFS_ID JOIN activite.t_prestations ON t_prestations.code_original = '*ATTNSCTI' JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = '*ATTNSCTI' JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = '*ATTNSCTI' WHERE CJ_XECF.EFT_ID <> 0 AND EFT_SEJHON IN (1) AND XECF_TYPE > 0 AND CJ_XECE.JNL_CODE <> ALL(SELECT JNL_CODE FROM prod_cegi.CJ_JNLNUMFAC) GROUP BY 1,2,3,4,5,6 ORDER BY 1 ; DROP TABLE IF EXISTS w_factures_soldes_soldes; CREATE TEMP TABLE w_factures_soldes_soldes AS SELECT facture_id, MAX(CASE WHEN montant_regle <> 0 THEN date_comptable ELSE NULL END) AS date_comptable, SUM(montant_comptabilise) AS montant_comptabilise, SUM(montant_regle) AS montant_regle FROM w_factures_soldes_h GROUP BY 1 HAVING SUM(montant_comptabilise) = SUM(montant_regle) AND SUM(montant_regle) <> 0 ; INSERT INTO w_factures_soldes_h SELECT w_factures_soldes_h.facture_id, w_factures_soldes_h.no_facture, w_factures_soldes_soldes.date_comptable, w_factures_soldes_h.rubrique_comptabilisation_id, w_factures_soldes_h.prestation_id, w_factures_soldes_h.medecin_comptabilise_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(0-w_factures_soldes_h.montant_regle)::numeric AS montant_regle, SUM(0-w_factures_soldes_h.montant_regle_0)::numeric AS montant_regle_0, SUM(0-w_factures_soldes_h.montant_regle_1)::numeric AS montant_regle_1, SUM(0-w_factures_soldes_h.montant_regle_2)::numeric AS montant_regle_2, 0::numeric AS montant_regle_22 FROM w_factures_soldes_h JOIN w_factures_soldes_soldes ON w_factures_soldes_h.facture_id = w_factures_soldes_soldes.facture_id WHERE ( w_factures_soldes_h.montant_regle <> 0 OR w_factures_soldes_h.montant_regle_0 <> 0 OR w_factures_soldes_h.montant_regle_1 <> 0 OR w_factures_soldes_h.montant_regle_2 <> 0 ) GROUP BY 1,2,3,4,5,6 ; INSERT INTO w_factures_soldes_h SELECT w_factures_soldes_h.facture_id, w_factures_soldes_h.no_facture, w_factures_soldes_soldes.date_comptable, w_factures_soldes_h.rubrique_comptabilisation_id, w_factures_soldes_h.prestation_id, w_factures_soldes_h.medecin_comptabilise_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(w_factures_soldes_h.montant_comptabilise)::numeric AS montant_regle, SUM(w_factures_soldes_h.montant_comptabilise_0)::numeric AS montant_regle_0, SUM(w_factures_soldes_h.montant_comptabilise_1)::numeric AS montant_regle_1, SUM(w_factures_soldes_h.montant_comptabilise_2)::numeric AS montant_regle_2, 0::numeric AS montant_regle_22 FROM w_factures_soldes_h JOIN w_factures_soldes_soldes ON w_factures_soldes_h.facture_id = w_factures_soldes_soldes.facture_id WHERE w_factures_soldes_h.montant_comptabilise <> 0 GROUP BY 1,2,3,4,5,6; ; SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_1'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_3'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_4'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_8'); INSERT INTO activite[PX].p_factures_soldes_h( facture_id, no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, medecin_comptabilise_id, 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_comptabilisation_id, prestation_id, medecin_comptabilise_id, 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_h GROUP BY 1,2,3,4,5,6 HAVING ( SUM(montant_comptabilise) <> 0 OR SUM(montant_comptabilise_0) <> 0 OR SUM(montant_comptabilise_1) <> 0 OR SUM(montant_comptabilise_2) <> 0 OR SUM(montant_comptabilise_22) <> 0 OR SUM(montant_regle) <> 0 OR SUM(montant_regle_0) <> 0 OR SUM(montant_regle_1) <> 0 OR SUM(montant_regle_2) <> 0 OR SUM(montant_regle_22) <> 0 ); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_8'); ]]> '' AND PLC_COMPTE NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code IS NOT NULL) GROUP BY 1 ORDER BY 1; INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court) SELECT PLC_COMPTE, PLC_COMPTE, MAX(PLC_COMPTE), MAX(PLC_COMPTE) FROM prod_cegi.CMECRITURES WHERE PLC_COMPTE <> '' AND PLC_COMPTE NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code IS NOT NULL) GROUP BY 1 ORDER BY 1 ; UPDATE activite[PX].t_compte SET texte = PLC_LIBELLE, texte_court = PLC_LIBELLE FROM prod_cegi.CMPLANCPT WHERE code = PLC_COMPTE AND ( texte IS DISTINCT FROM PLC_LIBELLE OR texte_court IS DISTINCT FROM PLC_LIBELLE ) ; SELECT base.cti_execute(' UPDATE activite[PX].t_journal SET type_journal = ''VE'' WHERE type_journal = '''' AND code_original IN (SELECT JNL_CODE FROM prod_cegi.CJ_JNLNUMFAC) ',1) WHERE 'cj_jnlnumfac' IN (SELECT tablename FROM pg_tables WHERE schemaname = 'prod_cegi') ; DROP TABLE IF EXISTS w_DOS_CH; CREATE TEMP TABLE w_DOS_CH AS SELECT base.cti_to_number(unnest(string_to_array(valeur,','))) AS DOS_ID, CASE WHEN code LIKE '%HON' THEN 'H' ELSE 'C' END::text AS clinique_honoraire FROM activite.t_divers WHERE code LIKE 'CEGI\_DOS%' ; INSERT INTO w_DOS_CH SELECT DOS_ID, ''::text FROM prod_cegi.CMECRITURES WHERE (SELECT count(*) FROM w_DOS_CH) = 0 GROUP BY 1 ; SELECT base.cti_execute(' UPDATE w_DOS_CH SET clinique_honoraire = subview.clinique_honoraire FROM ( SELECT DOS_ID, MIN(CASE WHEN PNF_LITERAL IN (''M'',''H'') THEN ''H'' ELSE ''C'' END) AS clinique_honoraire FROM prod_cegi.CJ_JNLNUMFAC GROUP BY 1 ) subview WHERE w_DOS_CH.DOS_ID = subview.DOS_ID ',1) WHERE 'cj_jnlnumfac' IN (SELECT tablename FROM pg_tables WHERE schemaname = 'prod_cegi') ; UPDATE w_DOS_CH SET clinique_honoraire = 'C' WHERE clinique_honoraire = '' ; ANALYSE w_DOS_CH ; DROP TABLE IF EXISTS w_CMECRITURES; CREATE TEMP TABLE w_CMECRITURES AS SELECT CMECRITURES.*, ''::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, COALESCE(clinique_honoraire,'C') AS clinique_honoraire, date_part('year',ECR_DATCPTA) || '-' || ECR_NUMECR AS piece FROM prod_cegi.CMECRITURES JOIN w_DOS_CH ON CMECRITURES.DOS_ID = w_DOS_CH.DOS_ID WHERE ECR_DATCPTA >= '20200101'::date ; SELECT base.cti_execute(' UPDATE w_CMECRITURES SET no_facture = ECR_NUMFACT, no_sejour = p_factures.no_sejour, facture_id = p_factures.oid, sejour_id = p_factures.sejour_id FROM prod_cegi.CJ_EFT JOIN prod_cegi.CJ_EFS ON CJ_EFS.EFS_ID = CJ_EFT.EFS_ID JOIN prod_cegi.CJ_EFTB2 ON CJ_EFS.EFTB2_ID = CJ_EFTB2.EFTB2_ID JOIN activite[PX].p_factures ON EFTB2_NUMFAC = no_facture WHERE ECR_NUMFACT = EFT_NUMFAC ',1) WHERE 'cj_eft' IN (SELECT tablename FROM pg_tables WHERE schemaname = 'prod_cegi') ; SELECT base.cti_execute(' UPDATE w_CMECRITURES SET no_facture = ECR_NUMFACT, no_sejour = p_factures.no_sejour, facture_id = p_factures.oid, sejour_id = p_factures.sejour_id FROM prod_cegi.CJ_EFT JOIN prod_cegi.CJ_EFS ON CJ_EFS.EFS_ID = CJ_EFT.EFS_ID JOIN prod_cegi.CJ_EFTB2 ON CJ_EFS.EFTB2_ID = CJ_EFTB2.EFTB2_ID JOIN activite[PX].p_factures ON EFTB2_NUMFAC = no_facture WHERE ECR_NUMFACT = EFTB2_NUMFAC AND w_CMECRITURES.facture_id = 0',1) WHERE 'cj_eft' IN (SELECT tablename FROM pg_tables WHERE schemaname = 'prod_cegi') ; UPDATE w_CMECRITURES SET no_sejour = p_sejours.no_sejour, sejour_id = p_sejours.oid FROM activite[PX].p_sejours, activite[PX].t_journal WHERE ECR_NUMPIECE = p_sejours.no_sejour AND JNL_CODE = t_journal.code_original AND t_journal.type_journal = 'VE' AND w_CMECRITURES.sejour_id = 0 ; TRUNCATE activite[PX].p_ecriture_comptable; 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 ECR_ID::text AS code_original, ECR_DATCPTA AS date_comptable, CASE WHEN t_journal.type_journal = 'VE' AND PLC_COMPTE LIKE '411%' THEN 'VCLI' WHEN t_journal.type_journal = 'VE' AND PLC_COMPTE LIKE '412%' THEN 'VCLI' WHEN t_journal.type_journal = 'VE' AND PLC_COMPTE LIKE '445%' THEN 'VTVA' WHEN t_journal.type_journal = 'VE' AND w_CMECRITURES.clinique_honoraire = 'C' THEN 'VPRD' WHEN t_journal.type_journal = 'VE' AND w_CMECRITURES.clinique_honoraire = 'H' THEN 'VHON' WHEN PLC_COMPTE LIKE '758%' THEN 'PEPR' WHEN PLC_COMPTE LIKE '658%' THEN 'PEPR' WHEN t_journal.type_journal <> 'VE' AND PLC_COMPTE LIKE '468%' THEN 'ATT' WHEN t_journal.type_journal <> 'VE' AND PLC_COMPTE LIKE '471%' THEN 'ATT' WHEN t_journal.type_journal <> 'VE' AND PLC_COMPTE LIKE '411%' THEN 'RCLI' WHEN t_journal.type_journal <> 'VE' AND PLC_COMPTE LIKE '412%' THEN 'RCLI' WHEN t_journal.type_journal <> 'VE' AND PLC_COMPTE LIKE '419%' THEN 'ACPT' WHEN t_journal.type_journal <> 'VE' AND PLC_COMPTE LIKE '51%' THEN 'BANQ' WHEN t_journal.type_journal <> 'VE' AND PLC_COMPTE LIKE '531%' THEN 'BANQ' WHEN t_journal.type_journal <> 'VE' AND PLC_COMPTE LIKE '466%' THEN 'PHON' WHEN t_journal.type_journal <> 'VE' AND PLC_COMPTE LIKE '7%' THEN 'XPRD' WHEN t_journal.type_journal <> 'VE' AND PLC_COMPTE LIKE '445%' THEN 'XTVA' ELSE '?'||JNL_CODE END AS type_ecriture, CASE WHEN t_journal.type_journal = 'VE' THEN 'VENTE' ELSE t_journal.type_journal END AS type_piece, w_CMECRITURES.piece, w_CMECRITURES.mode_reglement_code, w_CMECRITURES.clinique_honoraire, COALESCE(t_compte.oid,0) AS compte_id, COALESCE(t_journal.oid,0) AS journal_id, w_CMECRITURES.sejour_id, w_CMECRITURES.no_sejour, w_CMECRITURES.facture_id, w_CMECRITURES.no_facture, w_CMECRITURES.medecin_administratif_id, w_CMECRITURES.tiers_payant_id, ECR_LIBELLE AS texte, round(CASE WHEN ECR_SIGNED <> 1 THEN ECR_MONTANT ELSE 0 END::numeric,2) AS montant_credit, round(CASE WHEN ECR_SIGNED = 1 THEN ECR_MONTANT ELSE 0 END::numeric,2) AS montant_debit, '1'::text AS est_comptabilise, COALESCE(t_compte.taux_tva,0) AS taux_tva FROM w_CMECRITURES LEFT JOIN activite[PX].t_compte ON PLC_COMPTE = t_compte.code AND PLC_COMPTE <> '' LEFT JOIN activite[PX].t_journal ON w_CMECRITURES.JNL_CODE = t_journal.code_original WHERE t_journal.type_journal IS DISTINCT FROM 'IGNORE' ; ]]> = '[ENV_ADM_ANNEEDEBUT]0101' GROUP BY 1 ORDER BY 1; ]]> = '[ENV_ADM_ANNEEDEBUT]0101' AND ( t_divers.valeur = '' AND PLC_COMPTE LIKE '41%' OR t_divers.valeur <> '' AND PLC_COMPTE = ANY(string_to_array(t_divers.valeur,',')) ) AND ECR_ORIGINE = '615' AND ( CJ_JNLNUMFAC.ETB_ID::text = ANY (string_to_array('[ID_ETAB]'::text,',')) OR '[ID_ETAB]' = '' OR '[ID_ETAB]' = '-1' ) GROUP BY 1 ORDER BY 1; ]]> 0 THEN 'OUI' ELSE 'NON' END FROM information_schema.tables WHERE table_schema = 'prod_cora' AND table_name = 'tb_sejour' ; CTISELECT_PROPERTY_READ 'CJFIRST_PRESENT', CASE WHEN count(*) > 0 THEN 'OUI' ELSE 'NON' END FROM information_schema.tables WHERE table_schema = 'prod_cegi' AND table_name = 'cj_efs' ; CTISELECT_PROPERTY_READ 'CEGILOGHOS_PRESENT', CASE WHEN count(*) > 0 THEN 'OUI' ELSE 'NON' END FROM information_schema.tables WHERE table_schema = 'prod_cegiloghos' AND table_name = 'opera_sej' ; echo CORA : [CORA_PRESENT]; echo CJFIRST : [CJFIRST_PRESENT]; echo LOGHOS : [CEGILOGHOS_PRESENT]; ]]> '' THEN LIBELLE_ORGANISME ELSE CODE_ORGANISME END, CASE WHEN LIBELLE_ORGANISME <> '' THEN LIBELLE_ORGANISME ELSE CODE_ORGANISME END FROM prod_cegiloghos.OPERA_PAMOC WHERE CODE_ORGANISME NOT IN (SELECT code_original FROM activite[PX].t_tiers_payant WHERE code_original IS NOT NULL); UPDATE activite[PX].t_tiers_payant SET code = CODE_ORGANISME, texte = CASE WHEN LIBELLE_ORGANISME <> '' THEN LIBELLE_ORGANISME ELSE CODE_ORGANISME END, texte_court = CASE WHEN LIBELLE_ORGANISME <> '' THEN LIBELLE_ORGANISME ELSE CODE_ORGANISME END FROM prod_cegiloghos.OPERA_PAMOC WHERE t_tiers_payant.code_original = OPERA_PAMOC.CODE_ORGANISME AND ( code IS DISTINCT FROM CODE_ORGANISME OR texte IS DISTINCT FROM CASE WHEN LIBELLE_ORGANISME <> '' THEN LIBELLE_ORGANISME ELSE CODE_ORGANISME END OR texte_court IS DISTINCT FROM CASE WHEN LIBELLE_ORGANISME <> '' THEN LIBELLE_ORGANISME ELSE CODE_ORGANISME END ) ; UPDATE activite[PX].t_tiers_payant SET grand_regime_id = t_grands_regimes.oid FROM prod_cegiloghos.OPERA_PAMOC JOIN base.t_grands_regimes ON OPERA_PAMOC.CODE_REGIME = t_grands_regimes.code WHERE t_tiers_payant.code_original = OPERA_PAMOC.CODE_ORGANISME AND COALESCE(t_tiers_payant.grand_regime_id,0) = 0 AND t_grands_regimes.oid <> 0; ]]> '' THEN MAX(LIBELLE_SPECIALITE) ELSE CODE_SPECIALITE END, CASE WHEN MAX(LIBELLE_SPECIALITE) <> '' THEN MAX(LIBELLE_SPECIALITE) ELSE CODE_SPECIALITE END FROM prod_cegiloghos.OPERA_PMED LEFT JOIN base.t_specialites_medecin ON CODE_SPECIALITE = t_specialites_medecin.code WHERE to_number('0' || code_specialite,'000') > 0 AND t_specialites_medecin.code IS NULL GROUP BY 1,2 ORDER BY 1; 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_specialites_medecin(oid, code, code_original, texte, texte_court) SELECT 0, '', '0', 'Non saisie', 'Non saisie' WHERE 0 NOT IN (SELECT oid FROM base.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); INSERT INTO activite[PX].t_medecins_administratifs(code_original, code, nom, prenom, specialite_id, medecin_id) SELECT '*ECARTCTI', chr(127) || 'ECART', 'Ecarts de répartition', '', 0, 0 WHERE '*ECARTCTI' NOT IN (SELECT code_original FROM activite[PX].t_medecins_administratifs); INSERT INTO activite[PX].t_medecins_administratifs(code_original, code, nom, prenom, specialite_id, medecin_id) SELECT '*ATTNSCTI', chr(127) || 'ATTNS', 'Attente (non soldé)', '', 0, 0 WHERE '*ATTNSCTI' NOT IN (SELECT code_original FROM activite[PX].t_medecins_administratifs); DROP TABLE IF EXISTS w_OPERA_PMED; CREATE TEMP TABLE w_OPERA_PMED AS SELECT *, split_part(LIBELLE_MEDECIN,' ',1) AS NOM_MEDECIN, split_part(LIBELLE_MEDECIN,' ',2) || ' ' || split_part(LIBELLE_MEDECIN,' ',3) || ' ' || split_part(LIBELLE_MEDECIN,' ',4) || ' ' || split_part(LIBELLE_MEDECIN,' ',5) || ' ' || split_part(LIBELLE_MEDECIN,' ',6) || ' ' || split_part(LIBELLE_MEDECIN,' ',7) AS PRENOM_MEDECIN FROM prod_cegiloghos.OPERA_PMED; DROP TABLE IF EXISTS w_medecins; CREATE TEMP TABLE w_medecins AS SELECT CODE_MEDECIN AS CODE_MEDECIN, base.cti_soundex_nom(NOM_MEDECIN) AS NOM_MEDECIN_SOUNDEX, base.cti_soundex_nom(PRENOM_MEDECIN) AS PRENOM_MEDECIN_SOUNDEX, NOM_MEDECIN, PRENOM_MEDECIN AS PRENOM_MEDECIN, SUBSTR(COALESCE(CODE_ADELI,''),1,9) AS CODE_ADELI, CODE_SPECIALITE AS CODE_SPECIALITE, COALESCE(t_medecins_administratifs.medecin_id,0) as medecin_id FROM w_OPERA_PMED LEFT JOIN activite[PX].t_medecins_administratifs ON CODE_MEDECIN = t_medecins_administratifs.code_original; INSERT INTO base.t_medecins(nom, prenom, numero_ordre, specialite_id) SELECT w_medecins.NOM_MEDECIN, w_medecins.PRENOM_MEDECIN, w_medecins.CODE_ADELI, 0 FROM (SELECT SUBSTR(NOM_MEDECIN_SOUNDEX, 1, 8) AS NOM_MEDECIN_SOUNDEX, SUBSTR(PRENOM_MEDECIN_SOUNDEX, 1, 8) AS PRENOM_MEDECIN_SOUNDEX, CODE_ADELI, MIN(CODE_MEDECIN) AS CODE_MEDECIN FROM w_medecins GROUP BY 1,2,3) subview, w_medecins WHERE w_medecins.CODE_MEDECIN = subview.CODE_MEDECIN AND subview.NOM_MEDECIN_SOUNDEX || ',' || subview.PRENOM_MEDECIN_SOUNDEX || ',' || subview.CODE_ADELI 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.NOM_MEDECIN, w_medecins.PRENOM_MEDECIN, w_medecins.CODE_ADELI, 0 FROM (SELECT NOM_MEDECIN_SOUNDEX, PRENOM_MEDECIN_SOUNDEX, MIN(CODE_MEDECIN) AS CODE_MEDECIN FROM w_medecins GROUP BY 1,2) subview, w_medecins WHERE w_medecins.CODE_MEDECIN = subview.CODE_MEDECIN AND subview.NOM_MEDECIN_SOUNDEX || ',' || subview.PRENOM_MEDECIN_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(NOM_MEDECIN_SOUNDEX, 1, 8) = subview.nom AND SUBSTR(PRENOM_MEDECIN_SOUNDEX, 1, 8) = subview.prenom AND CODE_ADELI = 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(NOM_MEDECIN_SOUNDEX, 1, 8) = subview.nom AND SUBSTR(PRENOM_MEDECIN_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 CODE_MEDECIN, CODE_MEDECIN, NOM_MEDECIN, PRENOM_MEDECIN, COALESCE(t_specialites_medecin.oid,0), medecin_id FROM w_medecins LEFT JOIN base.t_specialites_medecin ON CODE_SPECIALITE = t_specialites_medecin.code WHERE CODE_MEDECIN NOT IN (SELECT code_original FROM activite[PX].t_medecins_administratifs); UPDATE activite[PX].t_medecins_administratifs SET nom = NOM_MEDECIN, prenom = PRENOM_MEDECIN, specialite_id = COALESCE(t_specialites_medecin.oid,0), medecin_id = w_medecins.medecin_id, no_adeli = code_adeli FROM w_medecins LEFT JOIN base.t_specialites_medecin ON CODE_SPECIALITE = t_specialites_medecin.code_original WHERE w_medecins.CODE_MEDECIN = t_medecins_administratifs.code_original AND ( t_medecins_administratifs.nom <> NOM_MEDECIN OR t_medecins_administratifs.prenom <> PRENOM_MEDECIN OR t_medecins_administratifs.specialite_id <> COALESCE(t_specialites_medecin.oid,0) OR t_medecins_administratifs.medecin_id <> w_medecins.medecin_id OR t_medecins_administratifs.no_adeli <> w_medecins.code_adeli ); 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 CJ_PRC.PRC_RPPS), MAX(CJ_PRC.PRC_RPPS) AS RPPS FROM activite[PX].t_medecins_administratifs JOIN base.t_medecins ON t_medecins_administratifs.medecin_id = t_medecins.oid JOIN prod_cegi.cj_pra ON code_original = PRA_LIBC JOIN prod_cegi.cj_prc ON cj_prc.pra_id = cj_pra.pra_id WHERE PRA_LIBC <> '' AND CJ_PRC.PRC_RPPS <> '' AND t_medecins.code_rpps = '' AND medecin_id <> 0 GROUP BY 1 HAVING count(DISTINCT CJ_PRC.PRC_RPPS) = 1 ) subview WHERE t_medecins.oid = subview.medecin_id ; -- Adresse et coordonnées INSERT INTO base.t_codes_postaux(code, texte, texte_court, departement_id) SELECT PRC_CPS, MAX(PRC_VILLE), MAX(PRC_VILLE), MAX(t_departements.oid) FROM prod_CEGI.CJ_PRC LEFT JOIN base.t_codes_postaux ON PRC_CPS = t_codes_postaux.code JOIN base.t_departements ON PRC_CPS NOT LIKE '97%' AND substr(PRC_CPS,1,2) = t_departements.code OR PRC_CPS LIKE '97%' AND substr(PRC_CPS,1,3) = t_departements.code WHERE PRC_CPS <> '' AND length(PRC_CPS) = 5 AND t_codes_postaux.code IS NULL GROUP BY 1 ; UPDATE activite[PX].t_medecins_administratifs SET adresse = PRC_ADRx, code_postal_id = subview.code_postal_id, ville = PRC_VILLE, telephone = PRC_TELx, fax = PRC_FAX, email = PRC_EMAIL FROM ( SELECT t_medecins_administratifs.oid, (MAX(ARRAY[PRC_DEPUIS::text, trim(PRC_ADR1 || ' ' || PRC_ADR2)]))[2] AS PRC_ADRx, (MAX(ARRAY[PRC_DEPUIS::text, trim(PRC_VILLE)]))[2] AS PRC_VILLE, (MAX(ARRAY[PRC_DEPUIS::text, trim(PRC_CPS)]))[2] AS PRC_CPS, (MAX(ARRAY[PRC_DEPUIS::text, COALESCE(t_codes_postaux.oid,0)::text]))[2]::bigint AS code_postal_id, (MAX(ARRAY[PRC_DEPUIS::text, trim(PRC_TEL1 || ' ' || PRC_TEL2 || ' ' || PRC_TEL3)]))[2] AS PRC_TELx, (MAX(ARRAY[PRC_DEPUIS::text, trim(PRC_FAX)]))[2] AS PRC_FAX, (MAX(ARRAY[PRC_DEPUIS::text, trim(PRC_EMAIL)]))[2] AS PRC_EMAIL FROM activite[PX].t_medecins_administratifs JOIN prod_cegi.CJ_PRA ON code_original = PRA_LIBC JOIN prod_cegi.CJ_PRC ON cj_prc.pra_id = cj_pra.pra_id LEFT JOIN base.t_codes_postaux ON PRC_CPS = t_codes_postaux.code WHERE PRA_LIBC <> '' GROUP BY 1 ) subview WHERE t_medecins_administratifs.oid = subview.oid AND ( t_medecins_administratifs.adresse IS DISTINCT FROM PRC_ADRx OR t_medecins_administratifs.code_postal_id IS DISTINCT FROM subview.code_postal_id OR t_medecins_administratifs.ville IS DISTINCT FROM PRC_VILLE OR t_medecins_administratifs.telephone IS DISTINCT FROM PRC_TELx OR t_medecins_administratifs.fax IS DISTINCT FROM PRC_FAX OR t_medecins_administratifs.email IS DISTINCT FROM PRC_EMAIL ) ; ]]> '' THEN '0' ELSE '1' END AS type_t2a FROM prod_cegiloghos.OPERA_PSDISC LEFT JOIN prod_cegiloghos.OPERA_PSTARF ON OPERA_PSDISC.CODE_SERVICE_TARIFAIRE = OPERA_PSTARF.CODE_SERVICE_TARIFAIRE WHERE CODE_SERVICE_DISCIPLINE <> '' AND CODE_SERVICE_DISCIPLINE NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) ORDER BY 1; UPDATE activite[PX].t_services_facturation SET code = CODE_SERVICE_DISCIPLINE, texte = LIBELLE_SERVICE_DISCIPLINE, texte_court = LIBELLE_SERVICE_DISCIPLINE FROM prod_cegiloghos.OPERA_PSDISC WHERE t_services_facturation.code_original = CODE_SERVICE_DISCIPLINE AND ( t_services_facturation.code IS DISTINCT FROM CODE_SERVICE_DISCIPLINE OR t_services_facturation.texte IS DISTINCT FROM LIBELLE_SERVICE_DISCIPLINE OR t_services_facturation.texte_court IS DISTINCT FROM LIBELLE_SERVICE_DISCIPLINE ) ; UPDATE activite[PX].t_services_facturation SET mode_traitement_id = COALESCE(t_modes_traitement.oid,0) FROM prod_cegiloghos.OPERA_PSDISC JOIN prod_cegiloghos.OPERA_PSTARF ON OPERA_PSDISC.CODE_SERVICE_TARIFAIRE = OPERA_PSTARF.CODE_SERVICE_TARIFAIRE LEFT JOIN base.t_modes_traitement ON MT = t_modes_traitement.code WHERE t_services_facturation.code_original = CODE_SERVICE_DISCIPLINE 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_cegiloghos.OPERA_PSDISC JOIN prod_cegiloghos.OPERA_PSTARF ON OPERA_PSDISC.CODE_SERVICE_TARIFAIRE = OPERA_PSTARF.CODE_SERVICE_TARIFAIRE LEFT JOIN base.t_dmt ON DMT = t_dmt.code WHERE t_services_facturation.code_original = CODE_SERVICE_DISCIPLINE AND COALESCE(dmt_id,0) = 0 AND COALESCE(dmt_id,0) <> COALESCE(t_dmt.oid,0); -- Unités fonctionnelles INSERT INTO activite[PX].t_unites_fonctionnelles(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_fonctionnelles); INSERT INTO activite[PX].t_unites_fonctionnelles(code_original, code, texte, texte_court) SELECT CODE_SERVICE_DISCIPLINE, CODE_SERVICE_DISCIPLINE, LIBELLE_SERVICE_DISCIPLINE, LIBELLE_SERVICE_DISCIPLINE FROM prod_cegiloghos.OPERA_PSDISC WHERE CODE_SERVICE_DISCIPLINE NOT IN (SELECT code_original FROM activite[PX].t_unites_fonctionnelles); UPDATE activite[PX].t_unites_fonctionnelles SET code = CODE_SERVICE_DISCIPLINE, texte = LIBELLE_SERVICE_DISCIPLINE, texte_court = LIBELLE_SERVICE_DISCIPLINE FROM prod_cegiloghos.OPERA_PSDISC WHERE t_unites_fonctionnelles.code_original = CODE_SERVICE_DISCIPLINE AND ( t_unites_fonctionnelles.code IS DISTINCT FROM CODE_SERVICE_DISCIPLINE OR t_unites_fonctionnelles.texte IS DISTINCT FROM LIBELLE_SERVICE_DISCIPLINE OR t_unites_fonctionnelles.texte_court IS DISTINCT FROM LIBELLE_SERVICE_DISCIPLINE ) ; -- 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); SELECT base.cti_execute(' INSERT INTO activite[PX].t_unites_medicales(code_original, code, texte, texte_court) SELECT CODE, CODE, LIB, LIB FROM prod_cegi.UM WHERE CODE NOT IN (SELECT code_original FROM activite[PX].t_unites_medicales) ORDER BY CODE',1) WHERE (SELECT count(*) FROM information_schema.tables WHERE table_name = 'um' AND table_schema='prod_cegi') > 0 ; SELECT base.cti_execute(' UPDATE activite[PX].t_unites_medicales SET code = UM.CODE, texte = UM.LIB, texte_court = UM.LIB FROM prod_cegi.UM WHERE UM.CODE = t_unites_medicales.code_original AND ( t_unites_medicales.code IS DISTINCT FROM UM.CODE OR t_unites_medicales.texte IS DISTINCT FROM UM.LIB OR t_unites_medicales.texte_court IS DISTINCT FROM UM.LIB )',1) WHERE (SELECT count(*) FROM information_schema.tables WHERE table_name = 'um' AND table_schema='prod_cegi') > 0 ; -- 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); -- Etages et lits DROP TABLE IF EXISTS w_OPERA_PLIT; CREATE TEMP TABLE w_OPERA_PLIT AS SELECT CODE_LIT, LIBELLE_LIT, CASE WHEN CODE_ETAGE <> '' THEN CODE_ETAGE ELSE SUBSTR(CODE_LIT,1,1) END AS CODE_ETAGE, CASE WHEN CODE_ETAGE <> '' THEN LIBELLE_ETAGE ELSE 'Etage ' || SUBSTR(CODE_LIT,1,1) END AS LIBELLE_ETAGE FROM prod_cegiloghos.OPERA_PLIT; 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 CODE_ETAGE, CODE_ETAGE, MAX(LIBELLE_ETAGE), MAX(LIBELLE_ETAGE), 0 AS nb_lits FROM w_OPERA_PLIT WHERE CODE_ETAGE <> '' AND CODE_ETAGE NOT IN (SELECT code_original FROM activite[PX].t_etages WHERE code_original IS NOT NULL) GROUP BY 1,2 ORDER BY 1; UPDATE activite[PX].t_etages SET code = CODE_ETAGE, texte = LIBELLE_ETAGE, texte_court = LIBELLE_ETAGE FROM ( SELECT CODE_ETAGE, MAX(LIBELLE_ETAGE) AS LIBELLE_ETAGE FROM w_OPERA_PLIT WHERE CODE_ETAGE <> '' GROUP BY 1 ) subview WHERE t_etages.code_original = CODE_ETAGE AND ( t_etages.code IS DISTINCT FROM CODE_ETAGE OR t_etages.texte IS DISTINCT FROM LIBELLE_ETAGE OR t_etages.texte_court IS DISTINCT FROM LIBELLE_ETAGE ) ; 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_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT CODE_ETAGE || '|' || CODE_LIT, CODE_LIT, MAX(LIBELLE_LIT), MAX(LIBELLE_LIT), t_etages.oid, 'N' FROM w_OPERA_PLIT JOIN activite[PX].t_etages ON CODE_ETAGE = t_etages.code_original WHERE CODE_LIT <> '' AND CODE_ETAGE || '|' || CODE_LIT NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL) GROUP BY 1,2,5 ORDER BY 1; UPDATE activite[PX].t_lits SET code = CODE_LIT, texte = LIBELLE_LIT, texte_court = LIBELLE_LIT FROM ( SELECT CODE_ETAGE, CODE_LIT, MAX(LIBELLE_LIT) AS LIBELLE_LIT FROM w_OPERA_PLIT WHERE CODE_ETAGE <> '' AND CODE_LIT <> '' GROUP BY 1,2 ) subview WHERE t_lits.code_original = (CODE_ETAGE || '|' || CODE_LIT) AND ( t_lits.code IS DISTINCT FROM CODE_LIT OR t_lits.texte IS DISTINCT FROM LIBELLE_LIT OR t_lits.texte_court IS DISTINCT FROM LIBELLE_LIT ) ; ]]> '' AND COMPTE_COMPTABLE NOT IN (SELECT code FROM activite[PX].t_compte WHERE code IS NOt NULL) GROUP BY 1 ORDER BY 1; -- Rubriques et prestations INSERT INTO activite[PX].t_rubriques_facturation(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_rubriques_facturation); INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT '*ECARTCTI', chr(127) || 'ECART', 'Ecarts de répartition', 'Ecarts de répartition' WHERE '*ECARTCTI' NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation); INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT '*ATTNSCTI', chr(127) || 'ATTNS', 'Attente (non soldé)', 'Attente (non soldé)' WHERE '*ATTNSCTI' NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation); INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT CODE_PRESTA, CODE_PRESTA, LIBELLE_PRESTA, LIBELLE_PRESTA FROM ( SELECT CODE_PRESTA, (MAX(ARRAY[CASE WHEN CODE_SERVICE_TARIFAIRE = '' THEN '1' ELSE '0' END::text, LIBELLE_PRESTA]))[2] AS LIBELLE_PRESTA FROM prod_cegiloghos.OPERA_PPRS GROUP BY 1 ) subview WHERE CODE_PRESTA NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation) ; UPDATE activite[PX].t_rubriques_facturation SET code = CODE_PRESTA, texte = LIBELLE_PRESTA, texte_court = LIBELLE_PRESTA FROM ( SELECT CODE_PRESTA, (MAX(ARRAY[CASE WHEN CODE_SERVICE_TARIFAIRE = '' THEN '1' ELSE '0' END::text, LIBELLE_PRESTA]))[2] AS LIBELLE_PRESTA FROM prod_cegiloghos.OPERA_PPRS GROUP BY 1 ) subview WHERE CODE_PRESTA = code_original AND ( code IS DISTINCT FROM CODE_PRESTA OR texte IS DISTINCT FROM LIBELLE_PRESTA OR texte_court IS DISTINCT FROM LIBELLE_PRESTA ) ; -- Prestations INSERT INTO activite.t_prestations(oid, code_original, code, texte, texte_court, clinique_honoraire) SELECT 0, 0, '', 'Non renseignée', 'Non renseignée', '' WHERE 0 NOT IN (SELECT oid FROM activite.t_prestations); INSERT INTO activite.t_prestations(code_original, code, texte, texte_court, clinique_honoraire) SELECT '*ECARTCTI', chr(127) || 'ECART', 'Ecarts de répartition', 'Ecarts de répartition', '' WHERE '*ECARTCTI' NOT IN (SELECT code_original FROM activite.t_prestations WHERE code_original IS NOT NULL); INSERT INTO activite.t_prestations(code_original, code, texte, texte_court, clinique_honoraire) SELECT '*ATTNSCTI', chr(127) || 'ATTNS', 'Attente (non soldé)', 'Attente (non soldé)', '' WHERE '*ATTNSCTI' NOT IN (SELECT code_original FROM activite.t_prestations WHERE code_original IS NOT NULL); INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT CODE_PRESTA, CODE_PRESTA, LIBELLE_PRESTA, LIBELLE_PRESTA FROM ( SELECT CODE_PRESTA, (MAX(ARRAY[CASE WHEN CODE_SERVICE_TARIFAIRE = '' THEN '1' ELSE '0' END::text, LIBELLE_PRESTA]))[2] AS LIBELLE_PRESTA FROM prod_cegiloghos.OPERA_PPRS GROUP BY 1 ) subview WHERE CODE_PRESTA NOT IN (SELECT code_original FROM activite.t_prestations) ; ]]> '' THEN ORG_LIBELLE ELSE ORG_LIBC END AS ORG_LIBELLE, 0::bigint AS tiers_payant_id, MAX(COALESCE(trim(TIES_ADR1 || ' ' || TIES_ADR2),'')) AS TIES_ADRx, MAX(COALESCE(t_codes_postaux.oid,0)) AS code_postal_id, MAX(COALESCE(TIES_CODEP,'')) AS TIES_CODEP, MAX(COALESCE(TIES_VILLE,'')) AS TIES_VILLE, MAX(COALESCE(TIES_TEL,'')) AS TIES_TEL, MAX(COALESCE(TIES_FAX,'')) AS TIES_FAX, MAX(COALESCE(TIES_EMAIL,'')) AS TIES_EMAIL FROM prod_cegi.CJ_ORG JOIN prod_cegi.CJ_AFF on CJ_AFF.TER_ID = CJ_ORG.TER_ID AND AFF_TYPE = ANY (Array['M', 'C']) LEFT JOIN prod_cegi.CMTIERS ON CJ_ORG.ORG_LIBC = CMTIERS.TIE_nomc LEFT JOIN prod_cegi.CMTIESERV ON CMTIERS.TIE_ID = CMTIESERV.TIE_ID AND CMTIESERV.TIES_SERV = 0 LEFT JOIN base.t_codes_postaux ON TIES_CODEP = t_codes_postaux.code AND TIES_CODEP <> '' WHERE CJ_ORG.TER_ID <> 0 GROUP BY 1,2,3,4,5 ; ANALYSE w_CJ_ORG ; INSERT INTO activite[PX].t_tiers_payant(code_original, code, type_tiers_payant, texte, texte_court) SELECT ORG_LIBC, ORG_LIBC, MAX(type_tiers_payant), MAX(ORG_LIBELLE), MAX(ORG_LIBELLE) FROM w_CJ_ORG WHERE ORG_LIBC NOT IN (SELECT code_original FROM activite[PX].t_tiers_payant WHERE code_original IS NOT NULL) GROUP BY 1,2 ORDER BY 1 ; UPDATE activite[PX].t_tiers_payant SET texte = ORG_LIBELLE, texte_court = ORG_LIBELLE, adresse = TIES_ADRx, code_postal_id = w_CJ_ORG.code_postal_id, ville = TIES_VILLE, telephone = TIES_TEL, fax = TIES_FAX, email = TIES_EMAIL FROM w_CJ_ORG WHERE t_tiers_payant.code_original = ORG_LIBC AND ( t_tiers_payant.texte IS DISTINCT FROM ORG_LIBELLE OR t_tiers_payant.texte_court IS DISTINCT FROM ORG_LIBELLE OR t_tiers_payant.adresse IS DISTINCT FROM TIES_ADRx OR t_tiers_payant.code_postal_id IS DISTINCT FROM w_CJ_ORG.code_postal_id OR t_tiers_payant.ville IS DISTINCT FROM TIES_VILLE OR t_tiers_payant.telephone IS DISTINCT FROM TIES_TEL OR t_tiers_payant.fax IS DISTINCT FROM TIES_FAX OR t_tiers_payant.email IS DISTINCT FROM TIES_EMAIL ) ; UPDATE activite[PX].t_tiers_payant SET grand_regime_id = t_grands_regimes.oid FROM prod_cegi.CJ_ORG JOIN prod_cegi.CJ_RGM ON CJ_RGM.RGM_ID = CJ_ORG.RGM_ID JOIN base.t_grands_regimes ON CJ_RGM.RGM_LIBC = t_grands_regimes.code WHERE t_tiers_payant.code_original = CJ_ORG.TER_ID AND CJ_ORG.TER_ID <> 0 AND COALESCE(t_tiers_payant.grand_regime_id,0) = 0 AND t_grands_regimes.oid <> 0; UPDATE w_CJ_ORG SET tiers_payant_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE ORG_LIBC = code_original; ]]> '' THEN MAX(SPE_LIBELLE) ELSE SPE_LIBC END, CASE WHEN MAX(SPE_LIBELLE) <> '' THEN MAX(SPE_LIBELLE) ELSE SPE_LIBC END FROM prod_cegi.CJ_SPE WHERE SPE_LIBC NOT IN (SELECT code FROM base.t_specialites_medecin WHERE code is NOT null) AND SPE_LIBC <> '?' AND SPE_LIBELLE <> '?' AND SPE_ID IN (SELECT SPE_ID FROM prod_cegi.CJ_PRA) GROUP BY 1,2 ORDER BY 1; SELECT base.cti_execute( 'INSERT INTO base.t_specialites_medecin(code_original, code, texte, texte_court) SELECT code || ''..'', code || ''..'', texte, texte FROM pmsi.t_specialites_medecin WHERE length(code) = 2 AND (code || ''..'') NOT IN (SELECT code FROM base.t_specialites_medecin WHERE code is NOT null) ',1) WHERE 't_specialites_medecin' IN (SELECT tablename FROM pg_tables WHERE schemaname = 'pmsi' AND tablename = 't_specialites_medecin') ; DROP TABLE IF EXISTS w_CJ_PRA; CREATE TEMP TABLE w_CJ_PRA AS SELECT CJ_PRA.*, COALESCE(SPE_LIBC,'') AS SPE_LIBC, COALESCE(PRC_IDENTIFICATION,'') AS PRC_IDENTIFICATION, 0::bigint AS medecin_administratif_id FROM prod_cegi.CJ_PRA LEFT JOIN prod_cegi.CJ_SPE ON CJ_PRA.SPE_ID = CJ_SPE.SPE_ID LEFT JOIN ( SELECT PRA_ID, (MAX(ARRAY[PRC_DEPUIS::text,SUBSTR(COALESCE(PRC_IDENTIFICATION,''),1,9)]))[2] AS PRC_IDENTIFICATION FROM prod_cegi.CJ_PRC GROUP BY 1 ) subview ON CJ_PRA.PRA_ID = subview.PRA_ID WHERE PER_NOM <> '?'; DROP TABLE IF EXISTS w_medecins; CREATE TEMP TABLE w_medecins AS SELECT PRA_LIBC, w_CJ_PRA.PRA_ID, base.cti_soundex_nom(PER_NOM) AS PER_NOM_SOUNDEX, base.cti_soundex_nom(PER_PRENOM) AS PER_PRENOM_SOUNDEX, PER_NOM, PER_PRENOM AS PER_PRENOM, PRC_IDENTIFICATION AS CODE_ADELI, SPE_LIBC AS SPE_LIBC, COALESCE(t_medecins_administratifs.medecin_id,0) as medecin_id FROM w_CJ_PRA LEFT JOIN activite[PX].t_medecins_administratifs ON w_CJ_PRA.PRA_LIBC = t_medecins_administratifs.code_original; INSERT INTO base.t_medecins(nom, prenom, numero_ordre, specialite_id) SELECT w_medecins.PER_NOM, w_medecins.PER_PRENOM, w_medecins.CODE_ADELI, 0 FROM (SELECT SUBSTR(PER_NOM_SOUNDEX, 1, 8) AS PER_NOM_SOUNDEX, SUBSTR(PER_PRENOM_SOUNDEX, 1, 8) AS PER_PRENOM_SOUNDEX, CODE_ADELI, MIN(PRA_LIBC) AS PRA_LIBC FROM w_medecins GROUP BY 1,2,3) subview, w_medecins WHERE w_medecins.PRA_LIBC = subview.PRA_LIBC AND subview.PER_NOM_SOUNDEX || ',' || subview.PER_PRENOM_SOUNDEX || ',' || subview.CODE_ADELI 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.PER_NOM, w_medecins.PER_PRENOM, w_medecins.CODE_ADELI, 0 FROM (SELECT PER_NOM_SOUNDEX, PER_PRENOM_SOUNDEX, MIN(PRA_LIBC) AS PRA_LIBC FROM w_medecins GROUP BY 1,2) subview, w_medecins WHERE w_medecins.PRA_LIBC = subview.PRA_LIBC AND subview.PER_NOM_SOUNDEX || ',' || subview.PER_PRENOM_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(PER_NOM_SOUNDEX, 1, 8) = substr(subview.nom,1,8) AND SUBSTR(PER_PRENOM_SOUNDEX, 1, 8) = substr(subview.prenom,1,8) AND CODE_ADELI = 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 PER_NOM_SOUNDEX = subview.nom AND PER_PRENOM_SOUNDEX = 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 PRA_LIBC, PRA_LIBC, PER_NOM, PER_PRENOM, COALESCE(t_specialites_medecin.oid,0), medecin_id FROM w_medecins LEFT JOIN base.t_specialites_medecin ON SPE_LIBC = t_specialites_medecin.code WHERE PRA_LIBC NOT IN (SELECT code_original FROM activite[PX].t_medecins_administratifs WHERE code_original IS NOT NULL); UPDATE activite[PX].t_medecins_administratifs SET nom = PER_NOM, prenom = PER_PRENOM, specialite_id = COALESCE(t_specialites_medecin.oid,0), medecin_id = w_medecins.medecin_id, no_adeli = code_adeli FROM w_medecins LEFT JOIN base.t_specialites_medecin ON SPE_LIBC = t_specialites_medecin.code_original WHERE w_medecins.PRA_LIBC = t_medecins_administratifs.code_original AND ( t_medecins_administratifs.nom <> PER_NOM OR t_medecins_administratifs.prenom <> PER_PRENOM OR t_medecins_administratifs.specialite_id <> COALESCE(t_specialites_medecin.oid,0) OR t_medecins_administratifs.medecin_id <> w_medecins.medecin_id OR t_medecins_administratifs.no_adeli <> w_medecins.code_adeli ); 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; UPDATE w_CJ_PRA SET medecin_administratif_id = t_medecins_administratifs.oid FROM activite[PX].t_medecins_administratifs WHERE activite[PX].t_medecins_administratifs.code_original = PRA_LIBC; ]]> '' AND NVE_LIBC NOT IN (SELECT code_original FROM activite[PX].t_services_facturation WHERE code_original IS NOT NULL) ORDER BY 1; UPDATE activite[PX].t_services_facturation SET code = NVE_LIBC, texte = NVE_LIBELLE, texte_court = NVE_LIBELLE FROM w_CJ_NVE_service WHERE NVE_LIBC = code_original AND ( code IS DISTINCT FROM NVE_LIBC OR texte IS DISTINCT FROM NVE_LIBELLE OR texte_court IS DISTINCT FROM NVE_LIBELLE ) ; INSERT INTO base.t_modes_traitement(code, texte, texte_court) SELECT MTR_LIBC, MTR_LIBELLE, MTR_LIBELLE FROM prod_cegi.CJ_MTR WHERE MTR_LIBC NOT IN (SELECT code FROM base.t_modes_traitement) ORDER BY MTR_LIBC; INSERT INTO base.t_dmt(code, texte, texte_court) SELECT DMT_LIBC, DMT_LIBELLE, DMT_LIBELLE FROM prod_cegi.CJ_DMT WHERE DMT_LIBC NOT IN (SELECT code FROM base.t_dmt) ORDER BY DMT_LIBC; UPDATE activite[PX].t_services_facturation SET mode_traitement_id = COALESCE(t_modes_traitement.oid,0) FROM prod_cegi.CJ_NVE JOIN prod_cegi.CJ_MTR ON CJ_NVE.MTR_ID = CJ_MTR.MTR_ID LEFT JOIN base.t_modes_traitement ON MTR_LIBC = t_modes_traitement.code WHERE t_services_facturation.code = NVE_LIBC AND COALESCE(t_services_facturation.mode_traitement_id,0) = 0 AND COALESCE(t_services_facturation.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_cegi.CJ_NVE JOIN prod_cegi.CJ_DMT ON CJ_NVE.DMT_ID = CJ_DMT.DMT_ID LEFT JOIN base.t_dmt ON DMT_LIBC = t_dmt.code WHERE t_services_facturation.code_original = NVE_LIBC AND COALESCE(t_services_facturation.dmt_id,0) = 0 AND COALESCE(t_services_facturation.dmt_id,0) <> COALESCE(t_dmt.oid,0); UPDATE w_CJ_NVE_service SET service_facturation_id = t_services_facturation.oid FROM activite[PX].t_services_facturation WHERE NVE_LIBC = t_services_facturation.code_original AND service_facturation_id = 0; UPDATE w_CJ_NVE_service SET mode_traitement_id = t_services_facturation.mode_traitement_id FROM activite[PX].t_services_facturation WHERE NVE_LIBC = t_services_facturation.code_original AND w_CJ_NVE_service.mode_traitement_id = 0 AND t_services_facturation.mode_traitement_id <> 0; -- Unités fonctionnelles INSERT INTO activite[PX].t_unites_fonctionnelles(code_original, code, texte, texte_court) SELECT NVE_LIBC, NVE_LIBC, NVE_LIBELLE, NVE_LIBELLE FROM w_CJ_NVE_service WHERE NVE_LIBC NOT IN (SELECT code_original FROM activite[PX].t_unites_fonctionnelles WHERE code_original IS NOT NULL) ORDER BY 1; UPDATE activite[PX].t_unites_fonctionnelles SET code = NVE_LIBC, texte = NVE_LIBELLE, texte_court = NVE_LIBELLE FROM w_CJ_NVE_service WHERE NVE_LIBC = code_original AND ( code IS DISTINCT FROM NVE_LIBC OR texte IS DISTINCT FROM NVE_LIBELLE OR texte_court IS DISTINCT FROM NVE_LIBELLE ) ; UPDATE w_CJ_NVE_service SET unite_fonctionnelle_id = t_unites_fonctionnelles.oid FROM activite[PX].t_unites_fonctionnelles WHERE NVE_LIBC = t_unites_fonctionnelles.code_original AND unite_fonctionnelle_id = 0; -- Unités médicales SELECT base.cti_execute(' INSERT INTO activite[PX].t_unites_medicales(code_original, code, texte, texte_court) SELECT CODE, CODE, LIB, LIB FROM prod_cegi.UM WHERE CODE NOT IN (SELECT code_original FROM activite[PX].t_unites_medicales) ORDER BY CODE',1) WHERE (SELECT count(*) FROM information_schema.tables WHERE table_name = 'um' AND table_schema='prod_cegi') > 0; SELECT base.cti_execute(' UPDATE activite[PX].t_unites_medicales SET code = UM.CODE, texte = UM.LIB, texte_court = UM.LIB FROM prod_cegi.UM WHERE UM.CODE = t_unites_medicales.code_original AND ( t_unites_medicales.code IS DISTINCT FROM UM.CODE OR t_unites_medicales.texte IS DISTINCT FROM UM.LIB OR t_unites_medicales.texte_court IS DISTINCT FROM UM.LIB )',1) WHERE (SELECT count(*) FROM information_schema.tables WHERE table_name = 'um' AND table_schema='prod_cegi') > 0 ; -- Activités -- Etages et lits DROP TABLE IF EXISTS w_LITS; CREATE TEMP TABLE w_LITS AS SELECT 0::bigint AS cti_lit_id, CJ_NVE.NVE_ID, CJ_NVE.NVE_LIBC AS CODE_LIT, CJ_NVE.NVE_LIBELLE AS LIBELLE_LIT, 0::bigint AS cti_etage_id, COALESCE(CJ_NVE_ETAGE.NVE_LIBC,'')::text AS CODE_ETAGE, COALESCE(CJ_NVE_ETAGE.NVE_LIBELLE,'')::text AS LIBELLE_ETAGE, CJ_NVE.ETB_ID FROM prod_cegi.CJ_NVE LEFT JOIN prod_cegi.LITS ON CJ_NVE.NVE_ID = LITS.NVE_ID LEFT JOIN prod_cegi.CHAMBRE ON LITS.NVE_ID_ANC = CHAMBRE.NVE_ID LEFT JOIN prod_cegi.CJ_NVE CJ_NVE_ETAGE ON CHAMBRE.NVE_ID_ANC = CJ_NVE_ETAGE.NVE_ID WHERE CJ_NVE.NVE_TYPE = 'LIT' AND CJ_NVE.NVE_LIBC <> '' AND ( CJ_NVE.ETB_ID::text = ANY (string_to_array('[ID_ETAB]'::text,',')) OR '[ID_ETAB]' = '' OR '[ID_ETAB]' = '-1' ); -- Etage selon import LOGHOS UPDATE w_LITS SET cti_lit_id = t_lits.oid, cti_etage_id = t_lits.etage_id, CODE_ETAGE = t_etages.code, LIBELLE_ETAGE = t_etages.texte FROM activite[PX].t_lits JOIN activite[PX].t_etages ON etage_id = t_etages.oid WHERE CODE_LIT = t_lits.code AND w_LITS.CODE_ETAGE = '' AND t_etages.code_original NOT LIKE '*N%'; -- Etage selon codification UPDATE w_LITS SET cti_etage_id = subview.cti_etage_id, CODE_ETAGE = subview.CODE_ETAGE, LIBELLE_ETAGE = subview.LIBELLE_ETAGE FROM ( SELECT substr(CODE_LIT,1,2) AS prefix, length(CODE_LIT) AS l, MAX(cti_etage_id) AS cti_etage_id, MAX(CODE_ETAGE) AS CODE_ETAGE, MAX(LIBELLE_ETAGE) AS LIBELLE_ETAGE, count(DISTINCT cti_etage_id) AS nb FROM w_LITS WHERE cti_etage_id <> 0 GROUP BY 1,2 HAVING count(DISTINCT cti_etage_id) = 1 ORDER BY 1,2 ) subview WHERE w_LITS.cti_etage_id = 0 AND substr(w_LITS.CODE_LIT,1,2) = subview.prefix AND length(w_LITS.CODE_LIT) = subview.l AND w_LITS.CODE_ETAGE = ''; UPDATE w_LITS SET cti_etage_id = subview.cti_etage_id, CODE_ETAGE = subview.CODE_ETAGE, LIBELLE_ETAGE = subview.LIBELLE_ETAGE FROM ( SELECT substr(CODE_LIT,1,1) AS prefix, MAX(cti_etage_id) AS cti_etage_id, MAX(CODE_ETAGE) AS CODE_ETAGE, MAX(LIBELLE_ETAGE) AS LIBELLE_ETAGE, count(DISTINCT cti_etage_id) AS nb FROM w_LITS WHERE cti_etage_id <> 0 GROUP BY 1 HAVING count(DISTINCT cti_etage_id) = 1 ORDER BY 1 ) subview WHERE w_LITS.cti_etage_id = 0 AND substr(w_LITS.CODE_LIT,1,1) = subview.prefix AND w_LITS.CODE_ETAGE = '' ; UPDATE w_LITS SET CODE_ETAGE = '*N', LIBELLE_ETAGE = 'Non trouvé' WHERE CODE_ETAGE = '' AND CODE_LIT <> '' AND (SELECT COUNT(DISTINCT ETB_ID) FROM w_LITS) <= 1 ; UPDATE w_LITS SET CODE_ETAGE = '*N-'||ETB_ID, LIBELLE_ETAGE = 'Non trouvé' WHERE CODE_ETAGE = '' AND CODE_LIT <> '' AND (SELECT COUNT(DISTINCT ETB_ID) FROM w_LITS) > 1 ; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT CODE_ETAGE, CODE_ETAGE, MAX(LIBELLE_ETAGE), MAX(LIBELLE_ETAGE), 0 AS nb_lits FROM w_LITS WHERE cti_etage_id = 0 AND CODE_ETAGE <> '' AND CODE_ETAGE NOT IN (SELECT code_original FROM activite[PX].t_etages WHERE code_original IS NOT NULL) GROUP BY 1,2 ORDER BY 1; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT CODE_ETAGE || '|' || CODE_LIT, CODE_LIT, MAX(LIBELLE_LIT), MAX(LIBELLE_LIT), MAX(t_etages.oid), 'N' FROM w_LITS JOIN activite[PX].t_etages ON CODE_ETAGE = t_etages.code_original WHERE cti_lit_id = 0 AND CODE_LIT <> '' AND CODE_ETAGE || '|' || CODE_LIT NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL) GROUP BY 1,2 ORDER BY 1; UPDATE activite[PX].t_etages SET code = CODE_ETAGE, texte = LIBELLE_ETAGE, texte_court = LIBELLE_ETAGE FROM ( SELECT CODE_ETAGE, MAX(LIBELLE_ETAGE) AS LIBELLE_ETAGE FROM w_LITS WHERE CODE_ETAGE <> '' GROUP BY 1 ) subview WHERE t_etages.code_original = CODE_ETAGE AND ( t_etages.code IS DISTINCT FROM CODE_ETAGE OR t_etages.texte IS DISTINCT FROM LIBELLE_ETAGE OR t_etages.texte_court IS DISTINCT FROM LIBELLE_ETAGE ) ; UPDATE w_LITS SET cti_lit_id = t_lits.oid, cti_etage_id = t_lits.etage_id, CODE_ETAGE = t_etages.code_original, LIBELLE_ETAGE = t_etages.texte FROM activite[PX].t_lits JOIN activite[PX].t_etages ON etage_id = t_etages.oid WHERE CODE_LIT = t_lits.code AND cti_lit_id = 0; UPDATE activite[PX].t_lits SET texte = NVE_LIBELLE, texte_court = NVE_LIBELLE FROM ( SELECT NVE_LIBC, MAX(NVE_LIBELLE) AS NVE_LIBELLE FROM prod_cegi.CJ_NVE WHERE NVE_TYPE = 'LIT' AND ( CJ_NVE.ETB_ID::text = ANY (string_to_array('[ID_ETAB]'::text,',')) OR '[ID_ETAB]' = '' OR '[ID_ETAB]' = '-1' ) GROUP BY 1 ) subview WHERE t_lits.code = NVE_LIBC AND ( texte IS DISTINCT FROM NVE_LIBELLE OR texte_court IS DISTINCT FROM NVE_LIBELLE ) ; ]]> '' AND PLC_COMPTE NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code IS NOT NULL) GROUP BY 1 ORDER BY 1; INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court) SELECT PLC_COMPTE, PLC_COMPTE, MAX(PLC_COMPTE), MAX(PLC_COMPTE) FROM prod_cegi.CMECRITURES WHERE PLC_COMPTE <> '' AND PLC_COMPTE NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code IS NOT NULL) GROUP BY 1 ORDER BY 1 ; -- Rubriques DROP TABLE IF EXISTS w_RUBRIQUES_PRESTATIONS; CREATE TEMP TABLE w_RUBRIQUES_PRESTATIONS AS SELECT CJ_LCS.PST_ID, PST_LIBC, PST_LIBELLE, LCS_CODE, PST_NOMTAB, PST_LIBELLE AS LCS_LIBELLE FROM prod_cegi.CJ_LCS JOIN prod_cegi.CJ_PST ON CJ_LCS.PST_ID = CJ_PST.PST_ID GROUP BY 1,2,3,4,5 ; INSERT INTO w_RUBRIQUES_PRESTATIONS SELECT CJ_LSPST.PST_ID, PST_LIBC, PST_LIBELLE, PST_LIBC, PST_NOMTAB, PST_LIBELLE AS LCS_LIBELLE FROM prod_cegi.CJ_LSPST JOIN prod_cegi.CJ_PST ON CJ_LSPST.PST_ID = CJ_PST.PST_ID WHERE CJ_LSPST.PST_ID NOT IN (SELECT PST_ID FROM w_RUBRIQUES_PRESTATIONS) GROUP BY 1,2,3,4,5 ; UPDATE w_RUBRIQUES_PRESTATIONS SET LCS_CODE = PST_LIBC WHERE LCS_CODE = ''; UPDATE w_RUBRIQUES_PRESTATIONS SET PST_LIBC = LCS_CODE, PST_LIBELLE = t_prestations.texte, LCS_LIBELLE = t_prestations.texte FROM activite.t_prestations WHERE LCS_CODE = t_prestations.code AND PST_NOMTAB <> 0 AND PST_LIBC <> LCS_CODE; DROP TABLE IF EXISTS w_RUBRIQUES; CREATE TEMP TABLE w_RUBRIQUES AS SELECT PST_ID, MAX(PST_LIBC) AS PST_LIBC, MAX(LCS_LIBELLE) AS LCS_LIBELLE FROM w_RUBRIQUES_PRESTATIONS GROUP BY 1 ORDER BY 1 ; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT PST_LIBC, PST_LIBC, MAX(PST_LIBELLE), MAX(PST_LIBELLE) FROM w_RUBRIQUES_PRESTATIONS WHERE PST_LIBC NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code_original IS NOT NULL ) GROUP BY 1,2; UPDATE activite[PX].t_rubriques_facturation SET code = PST_LIBC, texte = PST_LIBELLE, texte_court = PST_LIBELLE FROM ( SELECT PST_LIBC, MAX(PST_LIBELLE) AS PST_LIBELLE FROM w_RUBRIQUES_PRESTATIONS WHERE PST_LIBC <> '' GROUP BY 1 ) subview WHERE t_rubriques_facturation.code_original = PST_LIBC AND ( t_rubriques_facturation.code IS DISTINCT FROM PST_LIBC OR t_rubriques_facturation.texte IS DISTINCT FROM PST_LIBELLE OR t_rubriques_facturation.texte_court IS DISTINCT FROM PST_LIBELLE ) ; -- Prestations INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT LCS_CODE, LCS_CODE, MAX(LCS_LIBELLE), MAX(LCS_LIBELLE) FROM w_RUBRIQUES_PRESTATIONS WHERE LCS_CODE NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL) AND LCS_CODE <> '' GROUP BY 1,2; UPDATE activite.t_prestations SET code = LCS_CODE, texte = LCS_LIBELLE, texte_court = LCS_LIBELLE FROM ( SELECT LCS_CODE, MAX(LCS_LIBELLE) AS LCS_LIBELLE FROM w_RUBRIQUES_PRESTATIONS WHERE LCS_CODE <> '' GROUP BY 1 ) subview WHERE t_prestations.code_original = LCS_CODE AND ( t_prestations.code IS DISTINCT FROM LCS_CODE OR t_prestations.texte IS DISTINCT FROM LCS_LIBELLE OR t_prestations.texte_court IS DISTINCT FROM LCS_LIBELLE ) ; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT '*ATTNSCTI', chr(127) || 'ATTNS', 'Attente (non soldé)', 'Attente (non soldé)' WHERE '*ATTNSCTI' NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation); INSERT INTO activite[PX].t_prestations(code_original, code, texte, texte_court, clinique_honoraire) SELECT '*ECARTCTI', chr(127) || 'ECART', 'Ecarts de répartition', 'Ecarts de répartition', '' WHERE '*ECARTCTI' NOT IN (SELECT code_original FROM activite[PX].t_prestations WHERE code_original IS NOT NULL); INSERT INTO activite[PX].t_prestations(code_original, code, texte, texte_court, clinique_honoraire) SELECT '*ATTNSCTI', chr(127) || 'ATTNS', 'Attente (non soldé)', 'Attente (non soldé)', '' WHERE '*ATTNSCTI' NOT IN (SELECT code_original FROM activite[PX].t_prestations WHERE code_original IS NOT NULL); ]]> '' 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_CJ_PATIENT_CP WHERE w_CJ_PATIENT_CP.CODE_POSTAL = t_codes_postaux.code AND p_sejours.no_patient = w_CJ_PATIENT_CP.no_patient AND p_sejours.no_patient IS NOT NULL and p_sejours.no_patient <> 0 AND w_CJ_PATIENT_CP.CODE_POSTAL IS NOT NULL AND w_CJ_PATIENT_CP.CODE_POSTAL <> '' 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 des coordonnées par séjour INSERT INTO activite[PX].p_coordonnees_patient ( sejour_id, adresse, code_postal_id, commune, telephone_fixe, telephone_portable, email ) SELECT p_sejours.oid, PER_NOMVOIE, COALESCE(t_codes_postaux.oid,0), PER_VILLE, PAT_TEL_FIXE, PAT_TEL_PORT, PAT_EMAIL FROM w_CJ_PATIENT JOIN activite[PX].p_sejours ON no_sejour = SEJ_NUMDOS LEFT JOIN base.t_codes_postaux on PER_CP = t_codes_postaux.code ; ]]> = '20120101' OR DATE_SORTIE_SEJOUR IS NULL OR DATE_SORTIE_SEJOUR <= '00010101' GROUP BY 1; CREATE INDEX w_OPERA_SEJ_i1 ON w_OPERA_SEJ USING btree (no_dossier); UPDATE w_OPERA_SEJ SET code_med_traitant = '-' || code_med_traitant WHERE code_med_traitant = '0' ; -- 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 code_med_traitant, code_med_traitant, nom_med_traitant, prenom_med_traitant, 0, '' FROM w_OPERA_SEJ WHERE code_med_traitant NOT IN (SELECT code FROM activite[PX].t_medecins_traitants_administratifs) AND code_med_traitant <> '' AND code_med_traitant IS NOT NULL; -- maj code rpps UPDATE activite[PX].t_medecins_traitants_administratifs SET no_rpps = cj_prc.prc_rpps FROM prod_cegi.cj_prc, prod_cegi.cj_pra WHERE cj_prc.pra_id = cj_pra.pra_id AND cj_pra.pra_libc = t_medecins_traitants_administratifs.code AND (t_medecins_traitants_administratifs.no_rpps IS NULL OR t_medecins_traitants_administratifs.no_rpps = '') AND cj_prc.prc_rpps IS not NULL AND cj_prc.prc_rpps <>'' ; -- maj id médecin_traitant dans séjours UPDATE activite[PX].p_sejours SET medecin_traitant_id = t_medecins_traitants_administratifs.oid FROM w_OPERA_SEJ, activite[PX].t_medecins_traitants_administratifs WHERE w_OPERA_SEJ.no_dossier = p_sejours.no_sejour AND w_OPERA_SEJ.code_med_traitant = t_medecins_traitants_administratifs.code AND w_OPERA_SEJ.code_med_traitant IS NOT NULL AND w_OPERA_SEJ.code_med_traitant <> '' AND medecin_traitant_id IS DISTINCT FROM t_medecins_traitants_administratifs.oid; ]]> 0 FROM information_schema.tables WHERE table_name = 'pamlf_sej' AND table_schema='prod_cegi'; ]]> = '20120101' OR SEJ_DT_SORTIE IS NULL OR SEJ_DT_SORTIE <= '00010101' GROUP BY 1,2 ; CREATE INDEX w_FIRST_SEJ_i1 ON w_FIRST_SEJ USING btree (no_dossier); -- 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 code_med_traitant, code_med_traitant, nom_med_traitant, prenom_med_traitant, 0, '' FROM w_FIRST_SEJ WHERE code_med_traitant NOT IN (SELECT code FROM activite[PX].t_medecins_traitants_administratifs) AND code_med_traitant <> '' AND code_med_traitant IS NOT NULL ; -- maj id médecin_traitant dans séjours UPDATE activite[PX].p_sejours SET medecin_traitant_id = t_medecins_traitants_administratifs.oid FROM w_FIRST_SEJ, activite[PX].t_medecins_traitants_administratifs WHERE w_FIRST_SEJ.no_dossier = p_sejours.no_sejour AND w_FIRST_SEJ.code_med_traitant = t_medecins_traitants_administratifs.code AND w_FIRST_SEJ.code_med_traitant IS NOT NULL AND w_FIRST_SEJ.code_med_traitant <> '' AND medecin_traitant_id IS DISTINCT FROM t_medecins_traitants_administratifs.oid ; -- maj code rpps UPDATE activite[PX].t_medecins_traitants_administratifs SET no_rpps = cj_prc.prc_rpps FROM prod_cegi.cj_prc, prod_cegi.cj_pra WHERE cj_prc.pra_id = cj_pra.pra_id AND cj_pra.pra_libc = t_medecins_traitants_administratifs.code AND (t_medecins_traitants_administratifs.no_rpps IS NULL OR t_medecins_traitants_administratifs.no_rpps = '') AND cj_prc.prc_rpps IS not NULL AND cj_prc.prc_rpps <>'' ; -- D après table CJ_PATPRA DROP TABLE IF EXISTS w_CJ_PATPRA; CREATE TEMP TABLE w_CJ_PATPRA AS SELECT PAT_ID, CJ_PATPRA.PRA_ID, date(PATPRA_DT_DEB) AS PATPRA_DT_DEB, '20991231'::date AS PATPRA_DT_FIN, CJ_PRA.PRA_LIBC, CJ_PRA.PER_NOM, CJ_PRA.PER_PRENOM, row_number() OVER (PARTITION BY PAT_ID ORDER BY PATPRA_DT_DEB, PATPRA_ID) AS seq FROM prod_cegi.CJ_PATPRA JOIN prod_cegi.CJ_PRA ON CJ_PATPRA.PRA_ID = CJ_PRA.PRA_ID WHERE PATPRA_TRAIT = 1 AND CJ_PATPRA.PRA_ID <> 0 AND CJ_PATPRA.PAT_ID <> 0 ; UPDATE w_CJ_PATPRA SET PATPRA_DT_DEB = '00010101' WHERE seq = 1 ; ANALYSE w_CJ_PATPRA ; UPDATE w_CJ_PATPRA SET PATPRA_DT_FIN = date(w_CJ_PATPRA2.PATPRA_DT_DEB - interval '1 day') FROM w_CJ_PATPRA w_CJ_PATPRA2 WHERE w_CJ_PATPRA.PAT_ID = w_CJ_PATPRA2.PAT_ID AND w_CJ_PATPRA.seq = w_CJ_PATPRA2.seq-1 ; DROP TABLE IF EXISTS w_CJ_PATPRA_sej; CREATE TEMP TABLE w_CJ_PATPRA_sej AS SELECT SEJ_NUMDOS as no_dossier, PRA_LIBC as code_med_traitant, PER_NOM as nom_med_traitant, PER_PRENOM as prenom_med_traitant , PRA_ID FROM w_CJ_PATPRA JOIN prod_cegi.CJ_SEJOUR ON CJ_SEJOUR.PAT_ID = w_CJ_PATPRA.PAT_ID AND date(SEJ_DT_ENTREE) BETWEEN PATPRA_DT_DEB AND PATPRA_DT_FIN WHERE PRA_LIBC <> '' AND PRA_LIBC IS NOT NULL ; CREATE INDEX w_CJ_PATPRA_sej_i1 ON w_CJ_PATPRA_sej USING btree (no_dossier); ANALYSE w_CJ_PATPRA_sej ; -- 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 code_med_traitant, code_med_traitant, MAX(nom_med_traitant), MAX(prenom_med_traitant), 0, '' FROM w_CJ_PATPRA_sej WHERE code_med_traitant NOT IN (SELECT code FROM activite[PX].t_medecins_traitants_administratifs) GROUP BY 1 ORDER BY 1; UPDATE activite[PX].t_medecins_traitants_administratifs SET nom = w_CJ_PATPRA_sej.nom_med_traitant, prenom = w_CJ_PATPRA_sej.prenom_med_traitant FROM w_CJ_PATPRA_sej WHERE code_med_traitant = t_medecins_traitants_administratifs.code AND (nom IS DISTINCT FROM w_CJ_PATPRA_sej.nom_med_traitant OR prenom IS DISTINCT FROM w_CJ_PATPRA_sej.prenom_med_traitant); ANALYSE activite[PX].t_medecins_traitants_administratifs ; -- maj code rpps UPDATE activite[PX].t_medecins_traitants_administratifs SET no_rpps = CJ_PRC.PRC_RPPS FROM prod_cegi.CJ_PRC JOIN prod_cegi.CJ_PRA ON CJ_PRC.PRA_ID = CJ_PRA.PRA_ID WHERE CJ_PRA.PRA_LIBC = t_medecins_traitants_administratifs.code AND (t_medecins_traitants_administratifs.no_rpps IS NULL OR t_medecins_traitants_administratifs.no_rpps = '') AND CJ_PRC.PRC_RPPS IS NOT NULL AND CJ_PRC.PRC_RPPS <> '' ; -- maj id médecin_traitant dans séjours UPDATE activite[PX].p_sejours SET medecin_traitant_id = t_medecins_traitants_administratifs.oid FROM w_cj_patpra_sej, activite[PX].t_medecins_traitants_administratifs WHERE w_cj_patpra_sej.no_dossier = p_sejours.no_sejour AND medecin_traitant_id = 0 AND w_cj_patpra_sej.code_med_traitant = t_medecins_traitants_administratifs.code AND w_cj_patpra_sej.code_med_traitant IS NOT NULL AND w_cj_patpra_sej.code_med_traitant <> '' ; ]]> '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' OR type_valorisation_non_facture = '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' OR type_valorisation_non_facture = '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; ALTER TABLE w_moins10 DROP COLUMN type_valorisation_non_facture; 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') ; -- Prestation des lignes non facturées selon usage en facturation UPDATE activite[PX].p_factures_lignes_non_facturees_c SET prestation_id = subview.prestation_id FROM ( SELECT rubrique_facturation_id, (MAX(Array[nb, prestation_id]))[2] AS prestation_id FROM ( SELECT rubrique_facturation_id, prestation_id, count(*) AS nb FROM activite[PX].p_factures_lignes_c WHERE montant_facture <> 0 GROUP BY 1,2 ORDER BY 1 ) subview GROUP BY 1 ) subview WHERE p_factures_lignes_non_facturees_c.rubrique_facturation_id = subview.rubrique_facturation_id AND p_factures_lignes_non_facturees_c.prestation_id IS DISTINCT FROM subview.prestation_id; -- Comptes LOGHOS abrégés DROP TABLE IF EXISTS w_compte_translation; CREATE TEMP TABLE w_compte_translation AS SELECT t_compte_loghos.oid AS from_id, t_compte.oid AS to_id FROM activite[PX].t_compte JOIN activite[PX].t_compte t_compte_loghos ON rpad(t_compte_loghos.code,8,'0') = t_compte.code and t_compte_loghos.code <> t_compte.code AND t_compte_loghos.oid <> t_compte.oid AND ( t_compte_loghos.code = t_compte_loghos.texte OR t_compte_loghos.texte = t_compte.texte ); UPDATE activite[PX].p_factures_lignes_c SET compte_produit_id = to_id FROM w_compte_translation WHERE compte_produit_id = from_id; UPDATE activite[PX].p_factures_encours_lignes_c SET compte_produit_id = to_id FROM w_compte_translation WHERE compte_produit_id = from_id; -- factures de reference DROP TABLE IF EXISTS w_sejours_facture_reference; CREATE TEMP TABLE w_sejours_facture_reference AS SELECT no_sejour, MAX(p_factures.no_facture) AS no_facture_last, MAX(CASE WHEN type_facture <> '1' AND type_facture <> 'X' THEN p_factures.no_facture ELSE null END) AS no_facture_reference_last, MAX(CASE WHEN type_facture <> '1' AND type_facture <> 'X' AND t_prestations.code = 'GHS' THEN p_factures.no_facture ELSE null END) AS no_facture_reference_ghs_last FROM activite[PX].p_factures LEFT JOIN activite[PX].p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture LEFT JOIN activite.t_prestations ON p_factures_lignes_c.prestation_id = t_prestations.oid AND t_prestations.code = 'GHS' GROUP BY no_sejour; CREATE INDEX w_sejours_facture_reference_i1 ON w_sejours_facture_reference USING btree (no_sejour); UPDATE activite[PX].p_factures SET no_facture_reference = COALESCE(no_facture_reference_ghs_last, no_facture_reference_last, no_facture_last) FROM w_sejours_facture_reference WHERE p_factures.no_sejour = w_sejours_facture_reference.no_sejour AND p_factures.no_facture_reference <> COALESCE(no_facture_reference_ghs_last, no_facture_reference_last, no_facture_last); UPDATE activite[PX].p_factures SET facture_reference_id = p_factures_references.oid FROM activite[PX].p_factures p_factures_references WHERE p_factures.no_facture_reference = p_factures_references.no_facture AND p_factures.facture_reference_id <> p_factures_references.oid; UPDATE activite[PX].p_factures SET date_expedition_0 = date_facture WHERE date_expedition_0 < date_facture AND date_facture <> '2099-12-31'; -- Incohérence total réglé facture et soldes clients (déphasage XECE, XECF) UPDATE activite[PX].p_factures SET montant_regle_1_c = subview.montant_regle_1, montant_regle_2_c = subview.montant_regle_2, montant_regle_0_c = subview.montant_regle_0 FROM ( SELECT p_factures.no_facture, SUM(p_factures_soldes_c.montant_regle_1) AS montant_regle_1, SUM(p_factures_soldes_c.montant_regle_2) AS montant_regle_2, SUM(p_factures_soldes_c.montant_regle_0) AS montant_regle_0, MAX(montant_regle_1_c) AS montant_regle_1_c, MAX(montant_regle_2_c) AS montant_regle_2_c, MAX(montant_regle_0_c) AS montant_regle_0_c FROM activite[PX].p_factures JOIN activite[PX].p_factures_soldes_c ON p_factures.no_facture = p_factures_soldes_c.no_facture GROUP BY 1 HAVING SUM(p_factures_soldes_c.montant_regle_1) <> MAX(montant_regle_1_c) OR SUM(p_factures_soldes_c.montant_regle_2) <> MAX(montant_regle_2_c) OR SUM(p_factures_soldes_c.montant_regle_0) <> MAX(montant_regle_0_c) ) subview WHERE p_factures.no_facture = subview.no_facture ; ]]> '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 ghm_id = t_ghs.ghm_id::bigint FROM base.t_ghs WHERE p_sejours.ghs_id = t_ghs.oid AND p_sejours.ghm_id = 0 AND p_sejours.ghs_id > 0; 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; ]]> = '1' GROUP BY 1,2; CREATE INDEX w_factures_references_i1 ON w_factures_references USING btree (no_sejour); DROP TABLE IF EXISTS w_EFS_DT_FAC; CREATE TEMP TABLE w_EFS_DT_FAC AS SELECT date(date_trunc('month', EFS_DT_FAC) + interval '1 month' - interval '1 day') AS date_encours, MAX(date(EFS_DT_FAC)) AS EFS_DT_FAC FROM prod_cegi.CJ_ENC_EFS WHERE date(EFS_DT_FAC) >= '[ENV_ADM_ANNEEDEBUT]0101' GROUP BY 1 ORDER BY 1; CREATE INDEX w_EFS_DT_FAC_i1 ON w_EFS_DT_FAC USING btree (date_encours); DROP TABLE IF EXISTS w_factures_encours; CREATE TEMP TABLE w_factures_encours AS SELECT 0 AS oid, CJ_ENC_EFS.EFS_ID, p_sejours.finess, p_sejours.no_sejour, p_sejours.date_entree, p_sejours.date_sortie, p_sejours.oid AS sejour_id, p_sejours.lieu_sortie_id, COALESCE(w_factures_references.no_facture,'ID' || CJ_ENC_EFS.EFS_ID) || '.EP' || substr(to_char(date_part('year', CJ_ENC_EFS.EFS_DT_FAC),'FM0000'),3,2) || to_char(date_part('month', CJ_ENC_EFS.EFS_DT_FAC),'FM00') AS no_facture, w_factures_references.no_facture AS no_facture_reference, date(EFS_DT_DEB) AS date_debut, date(EFS_DT_FIN) AS date_fin, date_encours, 'P'::text AS code_origine, CASE WHEN date(EFS_DT_FIN) > date_encours OR p_sejours.date_sortie > date_encours THEN '0' ELSE '1' END AS code_sorti, p_sejours.tiers_payant_1_id, p_sejours.tiers_payant_2_id, p_sejours.tiers_payant_22_id, p_sejours.tiers_payant_0_id, p_sejours.ghs_id, p_sejours.ghs_bebe1_id, p_sejours.ghs_bebe2_id, p_sejours.ghs_bebe3_id, p_sejours.code_cp_demandee, SUM(CASE WHEN EFT_TER_TYPE = 'DBT' AND EFT_SEJHON IN (0) THEN EFT_TTC ELSE 0 END) + SUM(CASE WHEN EFT_TER_TYPE = 'CAI' AND EFT_SEJHON IN (0) THEN EFT_TTC ELSE 0 END) + SUM(CASE WHEN EFT_TER_TYPE = 'MUT' AND EFT_SEJHON IN (0) THEN EFT_TTC ELSE 0 END) AS montant_encours_c, SUM(CASE WHEN EFT_TER_TYPE = 'DBT' AND EFT_SEJHON IN (0) THEN EFT_TTC ELSE 0 END) AS montant_encours_0_c, SUM(CASE WHEN EFT_TER_TYPE = 'CAI' AND EFT_SEJHON IN (0) THEN EFT_TTC ELSE 0 END) AS montant_encours_1_c, SUM(CASE WHEN EFT_TER_TYPE = 'MUT' AND EFT_SEJHON IN (0) THEN EFT_TTC ELSE 0 END) 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 FROM prod_cegi.CJ_ENC_EFS JOIN prod_cegi.CJ_SEJOUR w_CJ_SEJOUR_select ON CJ_ENC_EFS.SEJ_ID = w_CJ_SEJOUR_select.SEJ_ID JOIN prod_cegi.CJ_ENC_EFT ON CJ_ENC_EFS.EFS_ID = CJ_ENC_EFT.EFS_ID JOIN w_EFS_DT_FAC ON date(CJ_ENC_EFS.EFS_DT_FAC) = w_EFS_DT_FAC.EFS_DT_FAC AND date(date_trunc('month',CJ_ENC_EFS.EFS_DT_FAC) + interval '1 month' - interval '1 day') = date_encours JOIN activite[PX].p_sejours ON code_original = w_CJ_SEJOUR_select.SEJ_NUMDOS LEFT JOIN w_factures_references ON p_sejours.no_sejour = w_factures_references.no_sejour AND date(EFS_DT_FIN) BETWEEN w_factures_references.date_debut AND w_factures_references.date_fin GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 ; CREATE INDEX w_factures_encours_i1 ON w_factures_encours USING btree (EFS_ID); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_2'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_4'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_5'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_6'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_7'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_8'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_9'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_10'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_11'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_lignes_c_2'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_lignes_c_3'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_lignes_c_4'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_lignes_c_5'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_lignes_c_6'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_lignes_c_7'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_lignes_c_8'); DELETE FROM activite[PX].p_factures_encours WHERE code_origine = 'P'; DELETE FROM activite[PX].p_factures_encours_lignes_c WHERE no_facture NOT IN (SELECT no_facture FROM activite[PX].p_factures_encours); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_1'); SELECT base.cti_disable_index('activite[PX].', 'i_factures_encours_lignes_c_1'); INSERT INTO activite[PX].p_factures_encours( sejour_id, no_sejour, no_facture, no_facture_reference, date_debut, date_fin, date_encours, code_origine, code_sorti, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, tiers_payant_0_id, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, code_cp_demandee, 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 ) SELECT sejour_id, no_sejour, no_facture, no_facture_reference, date_debut, date_fin, date_encours, code_origine, code_sorti, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, tiers_payant_0_id, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, code_cp_demandee, 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 FROM w_factures_encours; UPDATE w_factures_encours SET oid = p_factures_encours.oid FROM activite[PX].p_factures_encours WHERE w_factures_encours.no_facture = p_factures_encours.no_facture; SELECT base.cti_enable_index('activite[PX].', 'i_factures_encours_1'); DROP SEQUENCE IF EXISTS w_factures_encours_lignes_c_sequence; CREATE TEMP SEQUENCE w_factures_encours_lignes_c_sequence; DROP TABLE IF EXISTS w_factures_encours_lignes_c; CREATE TEMP TABLE w_factures_encours_lignes_c AS SELECT nextval('w_factures_encours_lignes_c_sequence'::regclass) AS oid, w_factures_encours.no_sejour, CJ_ENC_LCS.LCS_ID, w_factures_encours.oid AS facture_id, w_factures_encours.no_facture, w_factures_encours.date_entree, w_factures_encours.date_sortie, date(MAX(LCS_DT_DEB)) AS date_debut, date(MAX(LCS_DT_FIN)) AS date_fin, MAX(LCS_QTE*LCS_COEFF) AS nb_rubrique, 1::numeric AS coefficient, MAX(CASE WHEN LCS_MCO <> 0 THEN LCS_MCO ELSE 1 END) AS coefficient_mco, COALESCE(t_rubriques_facturation.oid, 0) AS rubrique_facturation_id, COALESCE(t_rubriques_facturation.oid, 0) AS rubrique_comptabilisation_id, MAX(COALESCE(t_compte.oid::bigint, 0)) AS compte_produit_id, COALESCE(t_prestations.oid::bigint, 0) AS prestation_id, 0::numeric AS taux_22, MAX(LCS_PRIX) AS prix_unitaire, w_factures_encours.lieu_sortie_id AS lieu_id, MAX(LCS_QTE*LCS_COEFF) AS nb_prestation, LEAST(MAX(CASE WHEN LCT_TER_TYPE = 'DBT' AND LCS_SEJHON IN (0,2) THEN LCT_TX ELSE 0 END),100) AS taux_0, LEAST(MAX(CASE WHEN LCT_TER_TYPE = 'CAI' AND LCS_SEJHON IN (0,2) THEN LCT_TX ELSE 0 END),100) AS taux_1, LEAST(MAX(CASE WHEN LCT_TER_TYPE = 'MUT' AND LCS_SEJHON IN (0,2) THEN LCT_TX ELSE 0 END),100) AS taux_2, MAX(CASE WHEN LCS_SEJHON = 0 THEN LCS_TTC ELSE 0 END) AS montant_encours, SUM(CASE WHEN LCT_TER_TYPE = 'DBT' AND LCS_SEJHON IN (0) THEN LCT_TTC ELSE 0 END) AS montant_encours_0, SUM(CASE WHEN LCT_TER_TYPE = 'CAI' AND LCS_SEJHON IN (0) THEN LCT_TTC ELSE 0 END) AS montant_encours_1, SUM(CASE WHEN LCT_TER_TYPE = 'MUT' AND LCS_SEJHON IN (0) THEN LCT_TTC ELSE 0 END) AS montant_encours_2, 0::numeric AS montant_encours_22 FROM prod_cegi.CJ_ENC_LCS JOIN w_factures_encours ON CJ_ENC_LCS.EFS_ID = w_factures_encours.EFS_ID JOIN prod_cegi.CJ_ENC_LCT ON CJ_ENC_LCS.LCS_ID = CJ_ENC_LCT.LCS_ID JOIN w_RUBRIQUES ON CJ_ENC_LCS.PST_ID = w_RUBRIQUES.PST_ID LEFT JOIN activite[PX].t_rubriques_facturation ON PST_LIBC = t_rubriques_facturation.code_original LEFT JOIN activite.t_prestations ON LCS_CODE = t_prestations.code LEFT JOIN activite[PX].t_compte ON LCT_PST_CPT = t_compte.code_original AND LCT_PST_CPT <> '' JOIN activite[PX].p_factures_encours ON w_factures_encours.oid = p_factures_encours.oid WHERE LCS_SEJHON IN (0,2) GROUP BY 1,2,3,4,5,6,7,13,14,16,19; DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c; CREATE TEMP TABLE w_factures_encours_lignes_sup_c AS SELECT w_factures_encours_lignes_c.oid AS from_oid, t_prestations.code AS prestation_code, date(date_debut) AS date_debut_ghs, date(date_fin - interval '1 day') AS date_fin_ghs, (date(date_fin) - date(date_debut)) * CASE WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation_ghs, CASE WHEN t_prestations.code = 'GHS' THEN date(w_factures_encours_lignes_c.date_entree + interval '1 day') ELSE date(w_factures_encours_lignes_c.date_debut + interval '1 day') END AS date_debut_det, CASE WHEN t_prestations.code = 'GHS' THEN date(w_factures_encours_lignes_c.date_sortie - interval '1 day') ELSE date(w_factures_encours_lignes_c.date_debut + ((ABS(nb_prestation)-1) || ' day')::interval) END AS date_fin_det, ABS(CASE WHEN t_prestations.code = 'GHS' THEN date(w_factures_encours_lignes_c.date_sortie) - date(w_factures_encours_lignes_c.date_entree) ELSE nb_prestation END) AS nb_det, w_factures_encours_lignes_c.* FROM w_factures_encours_lignes_c JOIN activite[PX].p_sejours ON w_factures_encours_lignes_c.no_sejour = p_sejours.no_sejour JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND ( code IN ('PJ', 'PJ1', 'PJ2', 'FJ', 'SSM', 'GHS', 'EXH', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO') OR t_prestations.type_ventilation_jour = '1' ) WHERE (nb_prestation > 1 or nb_prestation < -1 OR (t_prestations.code = 'GHS' AND date(date_fin) - date(date_debut) > 1)) ; UPDATE w_factures_encours_lignes_sup_c SET date_fin_ghs = date(date_debut_exh - interval '1 day'), date_fin_det = date(date_debut_exh - interval '1 day'), nb_prestation_ghs = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1, nb_det = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1 FROM ( SELECT no_facture, date(MIN(date_debut)) AS date_debut_exh FROM w_factures_encours_lignes_c JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code = 'EXH' GROUP BY 1) subview WHERE w_factures_encours_lignes_sup_c.no_facture = subview.no_facture; CREATE INDEX w_factures_encours_lignes_sup_c_i1 ON w_factures_encours_lignes_sup_c USING btree (date_debut); DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c_gen; CREATE TEMP TABLE w_factures_encours_lignes_sup_c_gen AS SELECT from_oid, ''::text AS finess, no_sejour, no_facture, facture_id, date AS date_debut, date AS date_fin, lieu_id, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_rubrique, CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation, coefficient, coefficient_mco, prix_unitaire, oid, taux_0, taux_1, taux_2, taux_22, round((montant_encours / ABS(nb_det))::numeric,2) AS montant_encours, round((montant_encours_0 / ABS(nb_det))::numeric,2) AS montant_encours_0, round((montant_encours_1 / ABS(nb_det))::numeric,2) AS montant_encours_1, round((montant_encours_2 / ABS(nb_det))::numeric,2) AS montant_encours_2, round((montant_encours_22 / ABS(nb_det))::numeric,2) AS montant_encours_22 FROM w_factures_encours_lignes_sup_c JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_debut_det AND date_fin_det ; DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c_gen_tot; CREATE TEMP TABLE w_factures_encours_lignes_sup_c_gen_tot AS SELECT from_oid, SUM(nb_rubrique) AS nb_rubrique, SUM(nb_prestation) AS nb_prestation, 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 FROM w_factures_encours_lignes_sup_c_gen GROUP BY 1; UPDATE w_factures_encours_lignes_c SET date_fin = w_factures_encours_lignes_c.date_debut, nb_rubrique = w_factures_encours_lignes_c.nb_rubrique - w_factures_encours_lignes_sup_c_gen_tot.nb_rubrique, nb_prestation = w_factures_encours_lignes_c.nb_prestation - w_factures_encours_lignes_sup_c_gen_tot.nb_prestation, montant_encours = w_factures_encours_lignes_c.montant_encours - w_factures_encours_lignes_sup_c_gen_tot.montant_encours, montant_encours_0 = w_factures_encours_lignes_c.montant_encours_0 - w_factures_encours_lignes_sup_c_gen_tot.montant_encours_0, montant_encours_1 = w_factures_encours_lignes_c.montant_encours_1 - w_factures_encours_lignes_sup_c_gen_tot.montant_encours_1, montant_encours_2 = w_factures_encours_lignes_c.montant_encours_2 - w_factures_encours_lignes_sup_c_gen_tot.montant_encours_2, montant_encours_22 = w_factures_encours_lignes_c.montant_encours_22 - w_factures_encours_lignes_sup_c_gen_tot.montant_encours_22 FROM w_factures_encours_lignes_sup_c_gen_tot WHERE w_factures_encours_lignes_c.oid = from_oid; INSERT INTO w_factures_encours_lignes_c( oid, no_sejour, facture_id, no_facture, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, nb_prestation, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22) SELECT nextval('w_factures_encours_lignes_c_sequence'::regclass) AS oid, no_sejour, facture_id, no_facture, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, nb_prestation, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22 FROM w_factures_encours_lignes_sup_c_gen; UPDATE w_factures_encours_lignes_c SET lieu_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE w_factures_encours_lignes_c.no_sejour = p_mouvements_sejour.no_sejour AND w_factures_encours_lignes_c.date_debut = p_mouvements_sejour.date AND (p_mouvements_sejour.heure_fin = 240000 OR p_mouvements_sejour.nb_sorties_directes = 1) AND w_factures_encours_lignes_c.lieu_id IS DISTINCT FROM p_mouvements_sejour.lieu_id; INSERT INTO activite[PX].p_factures_encours_lignes_c( facture_id, no_facture, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, nb_prestation, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22 ) SELECT facture_id, no_facture, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, compte_produit_id, prestation_id, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, nb_prestation, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22 FROM w_factures_encours_lignes_c; SELECT base.cti_vacuum_table('activite[PX]','p_factures_encours'); SELECT base.cti_vacuum_table('activite[PX]','p_factures_encours_lignes_c'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_2'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_5'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_6'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_7'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_8'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_2'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_5'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_6'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_7'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_8'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_9'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_10'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_11'); -- Suppression des tables de travail non utilisées après DROP TABLE IF EXISTS w_factures_references CASCADE; DROP TABLE IF EXISTS w_factures_encours CASCADE; DROP TABLE IF EXISTS w_factures_encours_lignes_c CASCADE; DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c CASCADE; DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c_gen CASCADE; DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c_gen_tot CASCADE; ]]>