SEA_UFCODE_REA OR SEA_HEURE_FIN <> ACTE_HEURE_FIN ) ; ANALYSE w_PASSAGE; DROP TABLE IF EXISTS w_HOSPITALISATION_SELECT; CREATE TEMP TABLE w_HOSPITALISATION_SELECT AS SELECT HO_NUM, HO_MANUMDOS, MA_SEXE, ''::text AS HO_VNCODE, HO_RECODE, date(COALESCE(SEA_DATE,HO_DDEB)) AS HO_DDEB, date(COALESCE(SEA_DATE,HO_DFIN)) AS HO_DFIN, RE_TYPE, CASE WHEN RE_TYPE IN ('H') AND HO_DDEB >= '[ENV_ADM_ANNEEDEBUT]0101' THEN '1' WHEN RE_TYPE IN ('H') AND HO_DFIN >= '[ENV_ADM_ANNEEDEBUT]0101' THEN '1' WHEN RE_TYPE IN ('H') AND HO_DFIN IS NULL THEN '1' WHEN RE_TYPE NOT IN ('H') AND SEA_DATE >= '[ENV_ADM_ANNEEDEBUT]0101' THEN '1' ELSE '0' END AS HO_OK, COALESCE(trim(SEA_SEANCE),'') AS HO_SEANCE, date(CASE WHEN RE_TYPE IN ('H') THEN HO_DDEB ELSE COALESCE(SEA_DATE,HO_DDEB) END) AS HO_DDEBS, (SEA_HEURE - date(SEA_HEURE))::time without time zone AS HO_HDEBS, date(CASE WHEN RE_TYPE IN ('H') THEN HO_DFIN ELSE COALESCE(SEA_DATE,HO_DFIN) END) AS HO_DFINS, (SEA_HEURE - date(SEA_HEURE))::time without time zone AS HO_HFINS, HO_NUM::text AS HO_NUMSEJ, '1'::text AS sejour_a_creer, HO_PREENT, '8'::text AS mode_entree, ''::text AS provenance, '0'::text AS urgence, '8'::text AS mode_sortie, ''::text AS destination, COALESCE(SEA_INCODE,'') AS HO_INCODE, COALESCE(SEA_UFCODE_REA,'') AS HO_UFCODE_REA, COALESCE(SEA_UFCODE,'') AS HO_UFCODE, COALESCE(SEA_UMCODE,'') AS HO_UMCODE, ''::text AS HO_UFHEBER, ''::text AS HO_SACODE, ''::text AS HO_LICODE, ''::text AS HO_ETCODE_CTI, ''::text AS HO_LICODE_CTI, ''::text AS HO_ELCODE_CTI, ''::text AS mode_traitement_code, ''::text AS dmt_code, 0::bigint AS mode_traitement_id, 0::bigint AS tiers_payant_1_id, w_DEFAULT.tiers_payant_2_id, 0::bigint AS tiers_payant_22_id, w_DEFAULT.tiers_payant_0_id, 0::bigint AS code_postal_id, 0::bigint AS medecin_sejour_id, 0::bigint AS lieu_sortie_id, CASE WHEN HO_VALID IS DISTINCT FROM 'X' AND HO_VALID IS DISTINCT FROM 'U' THEN '0' ELSE '9' END::text AS type_sejour_force, 0::bigint AS sejour_id, '0'::text AS sans_sejour FROM prod_cerner.HOSPITALISATION JOIN prod_cerner.MALADE ON HO_MANUMDOS = MA_NUMDOS JOIN prod_cerner.REGROUPEMENT ON HO_RECODE = RE_CODE LEFT JOIN w_PASSAGE ON SEA_HONUM = HO_NUM AND RE_TYPE NOT IN ('H') JOIN w_DEFAULT ON 1=1 WHERE (RE_TYPE IN ('H') OR SEA_HONUM IS NOT NULL) AND COALESCE(HO_PREENT,'') = '' ; UPDATE w_HOSPITALISATION_SELECT SET HO_DFIN = HO_DDEB, HO_DFINS = HO_DDEBS, HO_HFINS = HO_HDEBS WHERE RE_TYPE NOT IN ('H') AND HO_DFIN IS NULL; CREATE INDEX w_HOSPITALISATION_SELECT_i1 ON w_HOSPITALISATION_SELECT USING btree (HO_NUM); CREATE INDEX w_HOSPITALISATION_SELECT_i2 ON w_HOSPITALISATION_SELECT USING btree (HO_MANUMDOS); CREATE INDEX w_HOSPITALISATION_SELECT_i_HO_NUMSEJ ON w_HOSPITALISATION_SELECT USING btree (HO_NUMSEJ); UPDATE w_HOSPITALISATION_SELECT SET HO_OK = '0' WHERE HO_OK = '1' AND HO_DDEB > (SELECT now_cerner FROM w_PERIODE) ; UPDATE w_HOSPITALISATION_SELECT SET HO_OK = '0' WHERE HO_OK = '1' AND RE_TYPE = 'H' AND HO_NUM NOT IN (SELECT MH_HONUM FROM w_MOUV_HOSPI_source) ; UPDATE w_HOSPITALISATION_SELECT SET HO_OK = '1' WHERE HO_OK <> '1' AND HO_NUM IN (SELECT FAC_HONUM FROM prod_cerner.FACTURE WHERE FAC_DATE >= '[ENV_ADM_ANNEEDEBUT]0101' OR FAC_EXER >= [ENV_ADM_ANNEEDEBUT]) ; UPDATE w_HOSPITALISATION_SELECT SET HO_OK = '1' WHERE HO_OK <> '1' AND HO_NUM IN (SELECT MC_HONUM FROM prod_cerner.MOUV_COMPTA WHERE MC_DATECR >= '[ENV_ADM_ANNEEDEBUT]0101' OR MC_EXER >= [ENV_ADM_ANNEEDEBUT]) ; UPDATE w_HOSPITALISATION_SELECT SET HO_OK = '1' WHERE HO_OK <> '1' AND HO_NUM IN (SELECT HO_NUM FROM w_HOSPITALISATION_SELECT WHERE HO_OK = '1') ; -- Factures et règlements sans référence de séjour DROP TABLE IF EXISTS w_FACTURE_sans_sejour; CREATE TEMP TABLE w_FACTURE_sans_sejour AS SELECT FAC_NUM, FAC_HONUM, FAD_SEANCE AS FAC_SEANCE, MIN(FAD_DEB) AS FAC_DDEB, MAX(FAD_FIN) AS FAC_DFIN, 0::numeric AS FAC_MANUMDOS FROM prod_cerner.FACTURE_DET JOIN prod_cerner.FACTURE ON FAD_NUM = FAC_NUM LEFT JOIN w_HOSPITALISATION_SELECT ON FAC_HONUM = HO_NUM AND FAD_SEANCE = HO_SEANCE WHERE (FAC_DATE >= '[ENV_ADM_ANNEEDEBUT]0101' OR FAC_EXER >= [ENV_ADM_ANNEEDEBUT]) AND HO_NUM IS NULL GROUP BY 1,2,3 ; UPDATE prod_cerner.MOUV_COMPTA SET MC_HONUM = 999999999 WHERE MC_HONUM = 0 AND MC_MANUMDOS = 0 AND (MC_COMPTE LIKE '411%' OR MC_COMPTE LIKE '412%' OR MC_COMPTE LIKE '413%' OR MC_COMPTE LIKE '414%' OR MC_COMPTE LIKE '452%' OR MC_COMPTE LIKE '467%') ; INSERT INTO w_FACTURE_sans_sejour SELECT MC_NUMFAC_LET AS FAC_NUM, MC_HONUM AS FAC_HONUM, ''::text AS FAD_SEANCE, MIN(MC_DATECR) AS FAC_DDEB, MAX(MC_DATECR) AS FAC_DFIN, 0::numeric AS FAC_MANUMDOS FROM prod_cerner.MOUV_COMPTA LEFT JOIN w_HOSPITALISATION_SELECT ON MC_HONUM = HO_NUM WHERE (MC_DATECR >= '[ENV_ADM_ANNEEDEBUT]0101' OR MC_EXER >= [ENV_ADM_ANNEEDEBUT]) AND (MC_COMPTE LIKE '411%' OR MC_COMPTE LIKE '412%' OR MC_COMPTE LIKE '413%' OR MC_COMPTE LIKE '414%' OR MC_COMPTE LIKE '452%' OR MC_COMPTE LIKE '467%') AND HO_NUM IS NULL GROUP BY 1,2 HAVING SUM(CASE WHEN MC_SENS = 'C' THEN MC_MON ELSE 0-MC_MON END) <> 0 ; UPDATE w_FACTURE_sans_sejour SET FAC_MANUMDOS = MC_MANUMDOS FROM prod_cerner.MOUV_COMPTA WHERE MC_NUMV = FAC_NUM AND MC_HONUM = FAC_HONUM AND FAC_MANUMDOS = 0 ; INSERT INTO w_HOSPITALISATION_SELECT SELECT FAC_HONUM, MAX(FAC_MANUMDOS), MAX(COALESCE(MA_SEXE,'1')), ''::text AS HO_VNCODE, MIN(COALESCE(HOSPITALISATION.HO_RECODE,''::text)) AS HO_RECODE, MIN(date(FAC_DDEB)) AS HO_DDEB, MAX(date(FAC_DFIN)) AS HO_DFIN, MAX(COALESCE(REGROUPEMENT.RE_TYPE,''::text)) AS RE_TYPE, '1'::text AS HO_OK, FAC_SEANCE AS HO_SEANCE, MIN(date(FAC_DDEB)) AS HO_DDEBS, '11:00:00' AS HO_HDEBS, MAX(date(FAC_DFIN)) AS HO_DFINS, '11:00:00' AS HO_HFINS, MAX(FAC_HONUM) AS HO_NUMSEJ, '1'::text AS sejour_a_creer, ''::text AS HO_PREENT, '8'::text AS mode_entree, ''::text AS provenance, '0'::text AS urgence, '8'::text AS mode_sortie, ''::text AS destination, ''::text AS HO_INCODE, ''::text AS HO_UFCODE_REA, ''::text AS HO_UFCODE, ''::text AS HO_UMCODE, ''::text AS HO_UFHEBER, ''::text AS HO_SACODE, ''::text AS HO_LICODE, ''::text AS HO_ETCODE_CTI, ''::text AS HO_LICODE_CTI, ''::text AS HO_ELCODE_CTI, ''::text AS mode_traitement_code, ''::text AS dmt_code, 0::bigint AS mode_traitement_id, 0::bigint AS tiers_payant_1_id, MAX(w_DEFAULT.tiers_payant_2_id), 0::bigint AS tiers_payant_22_id, MAX(w_DEFAULT.tiers_payant_0_id), 0::bigint AS code_postal_id, 0::bigint AS medecin_sejour_id, 0::bigint AS lieu_sortie_id, MAX(CASE WHEN FAC_SEANCE = '' OR FAC_HONUM IN (SELECT HO_NUM FROM w_HOSPITALISATION_SELECT ) THEN '0' ELSE '9' END) AS type_sejour_force, 0::bigint AS sejour_id, '1'::text AS sans_sejour FROM w_FACTURE_sans_sejour LEFT JOIN prod_cerner.MALADE ON FAC_MANUMDOS = MA_NUMDOS LEFT JOIN prod_cerner.HOSPITALISATION ON FAC_HONUM = HOSPITALISATION.HO_NUM LEFT JOIN prod_cerner.REGROUPEMENT ON HO_RECODE = RE_CODE JOIN w_DEFAULT ON 1=1 GROUP BY FAC_HONUM, FAC_SEANCE ; -- Supprimer les dossiers à ne pas récupérer DELETE FROM w_HOSPITALISATION_SELECT WHERE HO_OK <> '1' ; -- Numéro de séjour avec séance si séances multiples UPDATE w_HOSPITALISATION_SELECT SET HO_NUMSEJ = HO_NUMSEJ::text || '.' || to_char(HO_DFINS,'YYMMDD') WHERE HO_NUMSEJ IN ( SELECT HO_NUMSEJ FROM w_HOSPITALISATION_SELECT WHERE RE_TYPE NOT IN ('H') GROUP BY 1 HAVING count(DISTINCT HO_DFINS) > 1 ) ; UPDATE w_HOSPITALISATION_SELECT SET sejour_a_creer = CASE WHEN w_HOSPITALISATION_SELECT.HO_SEANCE = subview.HO_SEANCE THEN '1' ELSE '0' END, HO_HDEBS = subview.HO_HDEBS, HO_HFINS = subview.HO_HFINS FROM ( SELECT HO_NUMSEJ, (MIN(Array[sans_sejour,HO_SEANCE::text]))[2] AS HO_SEANCE, MIN(HO_HDEBS) AS HO_HDEBS, MAX(HO_HFINS) AS HO_HFINS FROM w_HOSPITALISATION_SELECT GROUP BY 1 HAVING count(*) > 1 ) subview WHERE w_HOSPITALISATION_SELECT.HO_NUMSEJ = subview.HO_NUMSEJ ; ANALYSE w_HOSPITALISATION_SELECT; UPDATE w_HOSPITALISATION_SELECT SET HO_NUMSEJ = w_HOSPITALISATION_SELECT.HO_NUMSEJ || '.' || nb FROM ( SELECT HO_NUMSEJ, count(*) AS nb, MAX(CTID) AS from_CTID FROM w_HOSPITALISATION_SELECT WHERE sejour_a_creer = '1' GROUP BY 1 HAVING count(*) > 1 ) subview WHERE w_HOSPITALISATION_SELECT.HO_NUMSEJ = subview.HO_NUMSEJ AND w_HOSPITALISATION_SELECT.CTID = from_CTID ; DELETE FROM w_HOSPITALISATION_SELECT WHERE HO_NUMSEJ IS NULL ; ]]> '00010101'; UPDATE w_ADRESSE_tiers SET AD_HDEB = '00010101' FROM w_ADRESSE_tiers w_ADRESSE_tiers_b WHERE w_ADRESSE_tiers.sequence = w_ADRESSE_tiers_b.sequence + 1 AND ( w_ADRESSE_tiers.AD_MANUMDOS <> w_ADRESSE_tiers_b.AD_MANUMDOS OR w_ADRESSE_tiers.AD_PYTYPE_CTI <> w_ADRESSE_tiers_b.AD_PYTYPE_CTI ) AND w_ADRESSE_tiers.AD_HDEB <> '00010101' ; CREATE INDEX w_ADRESSE_tiers_i1 ON w_ADRESSE_tiers USING btree (AD_MANUMDOS); CREATE INDEX w_ADRESSE_tiers_i2 ON w_ADRESSE_tiers USING btree (AD_PYCODE_CTI); UPDATE w_HOSPITALISATION_SELECT SET tiers_payant_1_id = t_tiers_payant.oid FROM w_ADRESSE_tiers JOIN activite[PX].t_tiers_payant ON AD_PYCODE_CTI = t_tiers_payant.code_original WHERE w_HOSPITALISATION_SELECT.HO_MANUMDOS = w_ADRESSE_tiers.AD_MANUMDOS AND AD_PYTYPE_CTI = '1' AND HO_DDEB BETWEEN AD_HDEB AND AD_DFIN ; UPDATE w_HOSPITALISATION_SELECT SET tiers_payant_2_id = t_tiers_payant.oid FROM w_ADRESSE_tiers JOIN activite[PX].t_tiers_payant ON AD_PYCODE_CTI = t_tiers_payant.code_original WHERE w_HOSPITALISATION_SELECT.HO_MANUMDOS = w_ADRESSE_tiers.AD_MANUMDOS AND AD_PYTYPE_CTI = '2' AND HO_DDEB BETWEEN AD_HDEB AND AD_DFIN ; -- Mouvement de sortie DROP TABLE IF EXISTS w_HOSPITALISATION_MOUV_SORTIE; CREATE TEMP TABLE w_HOSPITALISATION_MOUV_SORTIE AS SELECT MH_HONUM, (MIN(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, (MH_HDEB - date(MH_HDEB))::text]))[2]::time without time zone AS MH_HDEB, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, (MH_HFIN - date(MH_HFIN))::text]))[2]::time without time zone AS MH_HFIN, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_INCODE]))[2] AS MH_INCODE, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_UFCODE]))[2] AS MH_UFCODE, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_UMCODE]))[2] AS MH_UMCODE, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_UFHEBER]))[2] AS MH_UFHEBER, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_SACODE]))[2] AS MH_SACODE, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_LICODE]))[2] AS MH_LICODE, (MIN(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_RSCODENT]))[2] AS MH_RSCODENT, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_RSCODSOR]))[2] AS MH_RSCODSOR, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_ETCODE_CTI]))[2] AS MH_ETCODE_CTI, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_LICODE_CTI]))[2] AS MH_LICODE_CTI, (MAX(ARRAY[lpad(MH_DER,1,' ')||(MH_DDEB + (MH_HDEB - date(MH_HDEB)))::text, MH_ELCODE_CTI]))[2] AS MH_ELCODE_CTI, '8'::text AS mode_entree, ''::text AS provenance, '0'::text AS urgence, '8'::text AS mode_sortie, ''::text AS destination FROM w_MOUV_HOSPI_source JOIN w_HOSPITALISATION_SELECT ON HO_NUM = MH_HONUM GROUP BY 1 ; -- Modif CLA du 15-09-2017 -- RAISON.RS_TYPESORT peut prendre des valeurs non aurotisées de mode d'entrée. On force donc à 8/0 si la valeur n'est pas standard UPDATE w_HOSPITALISATION_MOUV_SORTIE SET mode_entree = CASE WHEN t_modes_entree.code IS NULL THEN '8'::text ELSE RS_TYPESORT::text END, provenance = CASE WHEN t_modes_entree.code IS NULL THEN '0'::text ELSE RS_PROVDEST::text END, urgence = CASE WHEN RS_CODE = ANY(string_to_array(t_divers.valeur,',')) THEN '1' ELSE '0' END FROM prod_cerner.RAISON JOIN activite.t_divers ON t_divers.code = 'CERNER_RAISONURGENCE' LEFT JOIN base.t_modes_entree ON t_modes_entree.code = RS_TYPESORT WHERE MH_RSCODENT = RS_CODE AND (mode_entree <> CASE WHEN t_modes_entree.code IS NULL THEN '8'::text ELSE RS_TYPESORT::text END OR provenance <> CASE WHEN t_modes_entree.code IS NULL THEN '0'::text ELSE RS_PROVDEST::text END OR urgence <> CASE WHEN RS_CODE = ANY(string_to_array(t_divers.valeur,',')) THEN '1' ELSE '0' END) ; -- Modif CLA du 15-09-2017 -- RAISON.RS_TYPESORT peut prendre des valeurs non aurotisées de mode de sortie. On force donc à 8/0 si la valeur n'est pas standard UPDATE w_HOSPITALISATION_MOUV_SORTIE SET mode_sortie = CASE WHEN t_modes_sortie.code IS NULL THEN '8'::text ELSE RS_TYPESORT::text END, destination = CASE WHEN t_modes_sortie.code IS NULL THEN '0'::text ELSE RS_PROVDEST::text END FROM prod_cerner.RAISON LEFT JOIN base.t_modes_sortie ON t_modes_sortie.code = RS_TYPESORT WHERE MH_RSCODSOR = RS_CODE AND (mode_sortie <> CASE WHEN t_modes_sortie.code IS NULL THEN '8'::text ELSE RS_TYPESORT::text END OR destination <> CASE WHEN t_modes_sortie.code IS NULL THEN '0'::text ELSE RS_PROVDEST::text END) ; CREATE INDEX w_HOSPITALISATION_MOUV_SORTIE_i1 ON w_HOSPITALISATION_MOUV_SORTIE USING btree (MH_HONUM); UPDATE w_HOSPITALISATION_select SET HO_HDEBS = COALESCE(w_HOSPITALISATION_select.HO_HDEBS,MH_HDEB), HO_HFINS = COALESCE(w_HOSPITALISATION_select.HO_HFINS,MH_HFIN), HO_INCODE = CASE WHEN w_HOSPITALISATION_select.HO_INCODE <> '' THEN w_HOSPITALISATION_select.HO_INCODE ELSE MH_INCODE END, HO_UFCODE = CASE WHEN w_HOSPITALISATION_select.HO_UFCODE <> '' THEN w_HOSPITALISATION_select.HO_UFCODE ELSE MH_UFCODE END, HO_UMCODE = CASE WHEN w_HOSPITALISATION_select.HO_UMCODE <> '' THEN w_HOSPITALISATION_select.HO_UMCODE ELSE MH_UMCODE END, HO_UFCODE_REA = CASE WHEN w_HOSPITALISATION_select.HO_UFCODE_REA <> '' THEN w_HOSPITALISATION_select.HO_UFCODE_REA ELSE MH_UFCODE END, HO_UFHEBER = CASE WHEN w_HOSPITALISATION_select.HO_UFHEBER <> '' THEN w_HOSPITALISATION_select.HO_UFHEBER WHEN MH_UFHEBER <> '' THEN MH_UFHEBER WHEN w_HOSPITALISATION_select.HO_UFCODE <> '' THEN w_HOSPITALISATION_select.HO_UFCODE ELSE MH_UFCODE END, HO_SACODE = CASE WHEN w_HOSPITALISATION_select.HO_SACODE <> '' THEN w_HOSPITALISATION_select.HO_SACODE ELSE MH_SACODE END, HO_LICODE = CASE WHEN w_HOSPITALISATION_select.HO_LICODE <> '' THEN w_HOSPITALISATION_select.HO_LICODE WHEN MH_LICODE <> '' AND MH_LICODE <> MH_UFCODE AND MH_LICODE <> MH_UFHEBER THEN MH_LICODE WHEN MH_SACODE <> '' AND MH_SACODE <> MH_UFCODE AND MH_SACODE <> MH_UFHEBER THEN MH_SACODE ELSE '0' END, HO_ETCODE_CTI = CASE WHEN w_HOSPITALISATION_select.HO_ETCODE_CTI <> '' THEN w_HOSPITALISATION_select.HO_ETCODE_CTI ELSE MH_ETCODE_CTI END, HO_LICODE_CTI = CASE WHEN w_HOSPITALISATION_select.HO_LICODE_CTI <> '' THEN w_HOSPITALISATION_select.HO_LICODE_CTI ELSE MH_LICODE_CTI END, HO_ELCODE_CTI = CASE WHEN w_HOSPITALISATION_select.HO_ELCODE_CTI <> '' THEN w_HOSPITALISATION_select.HO_ELCODE_CTI ELSE MH_ELCODE_CTI END, mode_entree = w_HOSPITALISATION_MOUV_SORTIE.mode_entree, provenance = w_HOSPITALISATION_MOUV_SORTIE.provenance, urgence = w_HOSPITALISATION_MOUV_SORTIE.urgence, mode_sortie = w_HOSPITALISATION_MOUV_SORTIE.mode_sortie, destination = w_HOSPITALISATION_MOUV_SORTIE.destination FROM w_HOSPITALISATION_MOUV_SORTIE WHERE HO_NUM = MH_HONUM AND ( HO_HDEBS IS NULL OR HO_HFINS IS NULL OR HO_INCODE = '' OR HO_UFCODE = '' OR HO_UMCODE = '' OR HO_UFHEBER = '' OR HO_SACODE = '' OR HO_LICODE = '' OR HO_ETCODE_CTI = '' OR HO_LICODE_CTI = '' OR HO_ELCODE_CTI = '' OR w_HOSPITALISATION_MOUV_SORTIE.mode_entree <> '8' OR w_HOSPITALISATION_MOUV_SORTIE.mode_sortie <> '8' OR w_HOSPITALISATION_MOUV_SORTIE.urgence <> '0' ) ; DROP TABLE IF EXISTS w_MALADE_code_postal; CREATE TEMP TABLE w_MALADE_code_postal AS SELECT AD_MANUMDOS, (MAX(ARRAY[to_char(AD_CPT,'FM000'),t_codes_postaux.oid::text]))[2]::bigint AS code_postal_id FROM prod_cerner.ADRESSE JOIN base.t_codes_postaux ON AD_VNCODE = t_codes_postaux.code WHERE AD_TYP = 'M' GROUP BY 1 ; UPDATE w_HOSPITALISATION_select SET code_postal_id = w_MALADE_code_postal.code_postal_id FROM w_MALADE_code_postal WHERE HO_MANUMDOS = AD_MANUMDOS ; UPDATE w_HOSPITALISATION_select SET mode_traitement_id = t_services_facturation.mode_traitement_id, mode_traitement_code = t_modes_traitement.code, dmt_code = t_dmt.code 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 = HO_UFCODE ; UPDATE w_HOSPITALISATION_select SET medecin_sejour_id = t_medecins_administratifs.oid FROM activite[PX].t_medecins_administratifs WHERE t_medecins_administratifs.code_original = HO_INCODE ; CREATE INDEX w_HOSPITALISATION_SELECT_i3 ON w_HOSPITALISATION_SELECT USING btree (HO_UFHEBER); CREATE INDEX w_HOSPITALISATION_SELECT_i4 ON w_HOSPITALISATION_SELECT USING btree (HO_LICODE_CTI); CREATE INDEX w_HOSPITALISATION_SELECT_i5 ON w_HOSPITALISATION_SELECT USING btree (HO_UFCODE); ANALYSE w_HOSPITALISATION_SELECT; -- Id des Tiers payant --UPDATE w_HOSPITALISATION_SELECT --SET tiers_payant_1_id = t_tiers_payant.oid --FROM activite[PX].t_tiers_payant --WHERE t_tiers_payant.code_original = ('C'||NOCAIS) ; 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 HO_UFCODE, HO_RECODE, HO_ETCODE_CTI, HO_ELCODE_CTI, HO_UMCODE, HO_UFCODE_REA FROM w_HOSPITALISATION_SELECT LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = HO_UFCODE AND code_original_2 = HO_RECODE AND code_original_3 = HO_ETCODE_CTI AND code_original_4 = HO_ELCODE_CTI AND code_original_5 = HO_UMCODE AND code_original_6 = HO_UFCODE_REA ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4,5,6; UPDATE activite[PX].t_lieux SET service_facturation_id = COALESCE(t_services_facturation.oid,0), mode_traitement_id = COALESCE(t_services_facturation.mode_traitement_id,0) FROM activite[PX].t_services_facturation WHERE code_original_1 = t_services_facturation.code_original AND (t_lieux.service_facturation_id <> COALESCE(t_services_facturation.oid,0) OR t_lieux.mode_traitement_id <> COALESCE(t_services_facturation.mode_traitement_id,0) ) ; UPDATE activite[PX].t_lieux SET activite_id = COALESCE(t_activites.oid,0) FROM activite[PX].t_activites WHERE code_original_2 = t_activites.code_original AND activite_id <> COALESCE(t_activites.oid,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_HOSPITALISATION_SELECT SET lieu_sortie_id = t_lieux.oid, type_sejour_force = CASE WHEN w_HOSPITALISATION_SELECT.type_sejour_force <> '9' AND t_services_facturation.type_sejour IN ('1', '2', '3', '4', '5', '6') THEN t_services_facturation.type_sejour ELSE w_HOSPITALISATION_SELECT.type_sejour_force END FROM activite[PX].t_lieux JOIN activite[PX].t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE code_original_1 = HO_UFCODE AND code_original_2 = HO_RECODE AND code_original_3 = HO_ETCODE_CTI AND code_original_4 = HO_ELCODE_CTI AND code_original_5 = HO_UMCODE AND code_original_6 = HO_UFCODE_REA ; DROP TABLE IF EXISTS w_sejours; CREATE TEMP TABLE w_sejours AS SELECT '000000000'::text AS finess, w_HOSPITALISATION_SELECT.HO_NUMSEJ as no_sejour, w_HOSPITALISATION_SELECT.HO_NUMSEJ as code_original, to_char(HO_MANUMDOS,'FM0000000000') as no_patient, HO_DDEBS as date_entree, to_char(HO_HDEBS,'HH24MISS')::numeric as heure_entree, COALESCE(HO_DFINS,'20991231') as date_sortie, to_char(HO_HFINS,'HH24MISS')::numeric as heure_sortie, MA_SEXE as code_sexe, 0 AS age, CASE WHEN HO_DFINS IS NULL THEN 0 ELSE 1 END::numeric as code_sorti, CASE WHEN HO_DDEBS > now() THEN 1::numeric ELSE 0::numeric END AS code_prevu, CASE WHEN type_sejour_force <> '0' THEN type_sejour_force WHEN RE_TYPE = 'C' THEN '3' WHEN RE_TYPE = 'H' AND HO_DFINS = HO_DDEBS THEN '2' WHEN RE_TYPE = 'H' THEN '1' WHEN mode_traitement_code IN ('07') OR dmt_code IN ('958') THEN '3' WHEN mode_traitement_code IN ('03') AND HO_DFINS = HO_DDEBS THEN '2' WHEN mode_traitement_code IN ('04') AND HO_DFINS = HO_DDEBS THEN '2' WHEN mode_traitement_code IN ('19', '23') AND HO_DFINS = HO_DDEBS THEN '2' WHEN mode_traitement_code IN ('03') THEN '1' WHEN HO_DFINS = HO_DDEBS THEN '2' ELSE '1' END as type_sejour, w_HOSPITALISATION_SELECT.lieu_sortie_id AS lieu_sortie_id, w_HOSPITALISATION_SELECT.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, '20991231'::date AS DATE_GROUPAGE, '0'::text AS code_cp_demandee, w_HOSPITALISATION_SELECT.mode_traitement_id, w_HOSPITALISATION_SELECT.mode_entree, w_HOSPITALISATION_SELECT.provenance, w_HOSPITALISATION_SELECT.mode_sortie, w_HOSPITALISATION_SELECT.destination, w_HOSPITALISATION_SELECT.tiers_payant_0_id, w_HOSPITALISATION_SELECT.tiers_payant_1_id, w_HOSPITALISATION_SELECT.tiers_payant_2_id, w_HOSPITALISATION_SELECT.tiers_payant_22_id, 1 AS est_budget_global, w_HOSPITALISATION_SELECT.code_postal_id FROM w_HOSPITALISATION_SELECT WHERE sejour_a_creer = '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'); -- FINESS UPDATE w_sejours SET finess = t_finess.code FROM activite[PX].t_lieux JOIN activite[PX].t_services_facturation on service_facturation_id = t_services_facturation.oid JOIN base.t_finess ON finess_id = t_finess.oid WHERE lieu_sortie_id = t_lieux.oid; -- GHM et GHS depuis PMSI UPDATE w_sejours p_sejours SET ghm_id = subview.ghm_id, ghs_id = subview.ghs_id FROM ( SELECT no_sejour, t_ghm_a.oid AS ghm_id, t_ghs_a.oid AS ghs_id FROM w_sejours p_sejours JOIN pmsi.p_rss ON p_sejours.no_sejour = p_rss.no_sejour_administratif AND date_trunc('month',p_sejours.date_sortie) = date_trunc('month',p_rss.date_sortie) JOIN pmsi.t_ghm t_ghm_p ON p_rss.ghm_id = t_ghm_p.oid JOIN base.t_ghs t_ghs_p ON p_rss.ghs_id = t_ghs_p.oid JOIN base.t_ghm t_ghm_a ON t_ghm_p.code = t_ghm_a.code JOIN base.t_ghs t_ghs_a ON t_ghs_p.code = t_ghs_a.code WHERE type_sejour IN ('1','2','5') AND p_rss.ghm_id > 0 AND p_sejours.ghm_id <> t_ghm_a.oid AND t_ghm_p.code NOT LIKE '90%' AND t_ghm_p.code NOT LIKE '99%' ) subview WHERE p_sejours.no_sejour = subview.no_sejour ; -- Validation des séjours SELECT base.cti_disable_index('activite', 'i_sejours_2'); SELECT base.cti_disable_index('activite', 'i_sejours_3'); SELECT base.cti_disable_index('activite', 'i_sejours_4'); SELECT base.cti_disable_index('activite', 'i_sejours_5'); SELECT base.cti_disable_index('activite', 'i_sejours_6'); SELECT base.cti_disable_index('activite', 'i_sejours_7'); SELECT base.cti_disable_index('activite', 'i_sejours_8'); SELECT base.cti_disable_index('activite', 'i_sejours_9'); SELECT base.cti_disable_index('activite', 'i_sejours_10'); SELECT base.cti_disable_index('activite', 'i_sejours_11'); SELECT base.cti_disable_index('activite', 'i_sejours_12'); SELECT base.cti_disable_index('activite', 'i_sejours_13'); UPDATE activite[PX].p_sejours SET finess = w_sejours.finess, 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 ( w_sejours.finess IS DISTINCT FROM p_sejours.finess 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 ( finess, no_sejour, code_original, no_patient, date_entree, heure_entree, date_sortie, heure_sortie, code_sexe, age, code_sorti, code_prevu, type_sejour, lieu_sortie_id, medecin_sejour_id, ghs_id, ghm_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, date_groupage, code_cp_demandee, mode_traitement_id, mode_entree, provenance, mode_sortie, destination, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, est_budget_global, code_postal_id ) SELECT w_sejours.finess, w_sejours.no_sejour, w_sejours.code_original, w_sejours.no_patient, w_sejours.date_entree, w_sejours.heure_entree, w_sejours.date_sortie, w_sejours.heure_sortie, w_sejours.code_sexe, w_sejours.age, w_sejours.code_sorti, w_sejours.code_prevu, w_sejours.type_sejour, w_sejours.lieu_sortie_id, w_sejours.medecin_sejour_id, w_sejours.ghs_id, w_sejours.ghm_id, w_sejours.ghs_bebe1_id, w_sejours.ghs_bebe2_id, w_sejours.ghs_bebe3_id, w_sejours.date_groupage, w_sejours.code_cp_demandee, w_sejours.mode_traitement_id, w_sejours.mode_entree, w_sejours.provenance, w_sejours.mode_sortie, w_sejours.destination, w_sejours.tiers_payant_0_id, w_sejours.tiers_payant_1_id, w_sejours.tiers_payant_2_id, w_sejours.tiers_payant_22_id, w_sejours.est_budget_global, w_sejours.code_postal_id 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 ); DELETE FROM activite[PX].p_sejours USING ( SELECT no_sejour, min(CTID) AS koctid FROM activite[PX].p_sejours GROUP BY 1 HAVING count(*) > 1 ) subview WHERE CTID = koctid; -- 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', 'i_sejours_2'); SELECT base.cti_enable_index('activite', 'i_sejours_3'); SELECT base.cti_enable_index('activite', 'i_sejours_4'); SELECT base.cti_enable_index('activite', 'i_sejours_5'); SELECT base.cti_enable_index('activite', 'i_sejours_6'); SELECT base.cti_enable_index('activite', 'i_sejours_7'); SELECT base.cti_enable_index('activite', 'i_sejours_8'); SELECT base.cti_enable_index('activite', 'i_sejours_9'); SELECT base.cti_enable_index('activite', 'i_sejours_10'); SELECT base.cti_enable_index('activite', 'i_sejours_11'); SELECT base.cti_enable_index('activite', 'i_sejours_12'); SELECT base.cti_enable_index('activite', 'i_sejours_13'); UPDATE w_HOSPITALISATION_SELECT SET sejour_id = p_sejours.oid FROM activite[PX].p_sejours WHERE HO_NUMSEJ = p_sejours.code_original ; ]]> (MIN(ARRAY[to_char(sequence,'FM00000000'),MH_DHDEB::text]))[2]::timestamp without time zone ) subview WHERE w_MOUV_HOSPI.HO_NUMSEJ = subview.HO_NUMSEJ AND w_MOUV_HOSPI.sequence = subview.sequence_first ; -- Correction des mouvements en désaccord avec séjour (date sortie) UPDATE w_MOUV_HOSPI SET MH_DFIN = w_MOUV_HOSPI.HO_DFINS, MH_HFIN = w_MOUV_HOSPI.HO_HFINS, MH_DHFIN = w_MOUV_HOSPI.HO_DHFINS FROM ( SELECT HO_NUMSEJ, MAX(sequence) AS sequence_last, MAX(HO_DFINS) AS HO_DFINS, MAX(HO_HFINS) AS HO_HFINS, MAX(HO_DHFINS) AS HO_DHFINS, (MAX(ARRAY[to_char(sequence,'FM00000000'),MH_DFIN::text]))[2]::date AS MH_DFIN_last, (MAX(ARRAY[to_char(sequence,'FM00000000'),MH_HFIN::text]))[2]::time without time zone AS MH_HFIN_last, (MAX(ARRAY[to_char(sequence,'FM00000000'),MH_DHFIN::text]))[2]::timestamp without time zone AS MH_DHFIN_last FROM w_MOUV_HOSPI GROUP BY 1 HAVING MAX(HO_DHFINS) <> (MAX(ARRAY[to_char(sequence,'FM00000000'),MH_DHFIN::text]))[2]::timestamp without time zone ) subview WHERE w_MOUV_HOSPI.HO_NUMSEJ = subview.HO_NUMSEJ AND w_MOUV_HOSPI.sequence = subview.sequence_last ; UPDATE w_MOUV_HOSPI SET MH_DHDEB = MH_DHFIN - interval '1 second', MH_DDEB = date(MH_DHFIN - interval '1 second'), MH_HDEB = (MH_DHFIN - interval '1 second')::time without time zone WHERE MH_DHDEB > MH_DHFIN ; UPDATE w_MOUV_HOSPI SET MH_DHFIN = w_MOUV_HOSPI_after.MH_DHDEB - interval '1 second', MH_DFIN = date(w_MOUV_HOSPI_after.MH_DHDEB - interval '1 second'), MH_HFIN = (w_MOUV_HOSPI_after.MH_DHDEB - interval '1 second')::time without time zone FROM w_MOUV_HOSPI w_MOUV_HOSPI_after WHERE w_MOUV_HOSPI.HO_NUMSEJ = w_MOUV_HOSPI_after.HO_NUMSEJ AND w_MOUV_HOSPI.sequence = w_MOUV_HOSPI_after.sequence -1 ; DELETE FROM w_MOUV_HOSPI WHERE MH_DHFIN < HO_DHDEBS ; 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 lieu_service_facturation_code_original, lieu_activite_code_original, lieu_etage_code_original, lieu_lit_code_original, lieu_unite_medicale_code_original, lieu_unite_fonctionnelle_code_original FROM w_MOUV_HOSPI LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = lieu_service_facturation_code_original AND code_original_2 = lieu_activite_code_original AND code_original_3 = lieu_etage_code_original AND code_original_4 = lieu_lit_code_original AND code_original_5 = lieu_unite_medicale_code_original AND code_original_6 = lieu_unite_fonctionnelle_code_original ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4,5,6; UPDATE activite[PX].t_lieux SET service_facturation_id = COALESCE(t_services_facturation.oid,0), mode_traitement_id = COALESCE(t_services_facturation.mode_traitement_id,0) FROM activite[PX].t_services_facturation WHERE code_original_1 = t_services_facturation.code_original AND (t_lieux.service_facturation_id <> COALESCE(t_services_facturation.oid,0) OR t_lieux.mode_traitement_id <> COALESCE(t_services_facturation.mode_traitement_id,0) ) ; UPDATE activite[PX].t_lieux SET activite_id = COALESCE(t_activites.oid,0) FROM activite[PX].t_activites WHERE code_original_2 = t_activites.code_original AND activite_id <> COALESCE(t_activites.oid,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_MOUV_HOSPI SET lieu_id = t_lieux.oid, est_chambre_particuliere = CASE WHEN t_lits.chambre_particuliere = 'O' THEN '1' ELSE '0' END FROM activite[PX].t_lieux JOIN activite[PX].t_lits ON lit_id = t_lits.oid WHERE code_original_1 = lieu_service_facturation_code_original AND code_original_2 = lieu_activite_code_original AND code_original_3 = lieu_etage_code_original AND code_original_4 = lieu_lit_code_original AND code_original_5 = lieu_unite_medicale_code_original AND code_original_6 = lieu_unite_fonctionnelle_code_original ; -- Etat avant UPDATE w_MOUV_HOSPI SET lieu_service_facturation_before = w_MOUV_HOSPI_before.lieu_service_facturation_code_original, lieu_activite_before = w_MOUV_HOSPI_before.lieu_activite_code_original, lieu_etage_before = w_MOUV_HOSPI_before.lieu_etage_code_original, lieu_lit_before = w_MOUV_HOSPI_before.lieu_lit_code_original, lieu_unite_fonctionnelle_before = w_MOUV_HOSPI_before.lieu_unite_fonctionnelle_code_original, lieu_unite_medicale_before = w_MOUV_HOSPI_before.lieu_unite_medicale_code_original FROM w_MOUV_HOSPI w_MOUV_HOSPI_before WHERE w_MOUV_HOSPI.HO_NUMSEJ = w_MOUV_HOSPI_before.HO_NUMSEJ AND w_MOUV_HOSPI.sequence = w_MOUV_HOSPI_before.sequence +1 ; -- Etat apres UPDATE w_MOUV_HOSPI SET lieu_service_facturation_after = w_MOUV_HOSPI_after.lieu_service_facturation_code_original, lieu_activite_after = w_MOUV_HOSPI_after.lieu_activite_code_original, lieu_etage_after = w_MOUV_HOSPI_after.lieu_etage_code_original, lieu_lit_after = w_MOUV_HOSPI_after.lieu_lit_code_original, lieu_unite_fonctionnelle_after = w_MOUV_HOSPI_after.lieu_unite_fonctionnelle_code_original, lieu_unite_medicale_after = w_MOUV_HOSPI_after.lieu_unite_medicale_code_original FROM w_MOUV_HOSPI w_MOUV_HOSPI_after WHERE w_MOUV_HOSPI.HO_NUMSEJ = w_MOUV_HOSPI_after.HO_NUMSEJ AND w_MOUV_HOSPI.sequence = w_MOUV_HOSPI_after.sequence -1 ; DROP TABLE IF EXISTS w_mouvements_sejour; CREATE TEMP TABLE w_mouvements_sejour AS SELECT w_MOUV_HOSPI.HO_NUM, w_MOUV_HOSPI.HO_NUMSEJ 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 = MH_DDEB THEN to_char(MH_HDEB,'HH24MISS')::numeric ELSE 0 END AS heure_debut, CASE WHEN p_calendrier.date = MH_DFIN THEN to_char(MH_HFIN,'HH24MISS')::numeric ELSE 240000 END AS heure_fin, CASE WHEN MH_DHDEB = HO_DHDEBS AND p_calendrier.date = MH_DDEB AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_entrees_directes, CASE WHEN MH_DHFIN = HO_DHFINS AND p_calendrier.date = MH_DFIN AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_sorties_directes, CASE WHEN MH_DHDEB = HO_DHDEBS AND p_calendrier.date = MH_DDEB AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_entree, CASE WHEN MH_DHFIN = HO_DHFINS AND p_calendrier.date = MH_DFIN 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 MH_DHDEB = HO_DHDEBS AND p_calendrier.date = MH_DDEB AND p_sejours.type_sejour = '2' THEN 1 ELSE 0 END AS nb_ambulatoires, CASE WHEN MH_DHDEB = HO_DHDEBS AND p_calendrier.date = MH_DDEB AND p_sejours.type_sejour = '3' THEN 1 ELSE 0 END AS nb_externes, CASE WHEN MH_DHDEB = HO_DHDEBS AND p_calendrier.date = MH_DDEB AND p_sejours.type_sejour = '3' THEN 1 ELSE 0 END AS nb_passage_externe, CASE WHEN w_MOUV_HOSPI.urgence = '1' AND p_calendrier.date = MH_DDEB AND MH_DHDEB = HO_DHDEBS THEN 1 ELSE 0 END AS nb_urgences, CASE WHEN MH_DHDEB = HO_DHDEBS AND p_calendrier.date = MH_DDEB AND p_sejours.type_sejour = '5' THEN 1 ELSE 0 END AS nb_seances, CASE WHEN p_calendrier.date = MH_DDEB AND p_sejours.type_sejour = '1' AND MH_DHDEB <> HO_DHDEBS AND lieu_service_facturation_code_original <> lieu_service_facturation_before THEN 1 ELSE 0 END AS nb_entrees_mutation_service, CASE WHEN p_calendrier.date = MH_DFIN AND p_sejours.type_sejour = '1' AND MH_DHFIN <> HO_DHFINS AND lieu_service_facturation_code_original <> lieu_service_facturation_after THEN 1 ELSE 0 END AS nb_sorties_mutation_service, CASE WHEN p_calendrier.date = MH_DDEB AND p_sejours.type_sejour = '1' AND MH_DHDEB <> HO_DHDEBS AND lieu_etage_code_original <> lieu_etage_before THEN 1 ELSE 0 END AS nb_entrees_mutation_etage, CASE WHEN p_calendrier.date = MH_DFIN AND p_sejours.type_sejour = '1' AND MH_DHFIN <> HO_DHFINS AND lieu_etage_code_original <> lieu_etage_after THEN 1 ELSE 0 END AS nb_sorties_mutation_etage, 0 AS nb_entrees_mutation_activite, 0 AS nb_sorties_mutation_activite, 0 AS nb_entrees_mutation_unite_medicale, 0 AS nb_sorties_mutation_unite_medicale, CASE WHEN p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_jours_js_inclus, CASE WHEN p_sejours.type_sejour = '1' AND p_calendrier.date <> MH_DFIN THEN 1 ELSE 0 END AS nb_jours_js_non_inclus, CASE WHEN p_sejours.type_sejour IN ('1','2') THEN est_chambre_particuliere ELSE '0' END AS est_chambre_particuliere, CASE WHEN p_sejours.type_sejour IN ('1','2') AND est_chambre_particuliere = 1 THEN 1 ELSE 0 END AS nb_chambres_particulieres, CASE WHEN MH_DHDEB = HO_DHDEBS AND p_calendrier.date = MH_DDEB AND p_sejours.type_sejour = '6' THEN 1 ELSE 0 END AS nb_bebes, lieu_id, p_sejours.medecin_sejour_id as medecin_sejour_id, CASE WHEN p_sejours.code_prevu = '1' OR p_calendrier.date > date(now_cerner) THEN '1' ELSE '0' END AS est_mouvement_previsionnel FROM w_MOUV_HOSPI JOIN w_PERIODE ON 1=1 JOIN activite[PX].p_sejours ON w_MOUV_HOSPI.HO_NUMSEJ = p_sejours.no_sejour AND p_sejours.etat = '' JOIN base.p_calendrier ON (p_calendrier.date BETWEEN MH_DDEB AND MH_DFIN AND p_calendrier.date <= now() + interval '1 month' ) ORDER BY sequence, p_calendrier.date; -- Externes (avec passages donc possibilité d'avoir plusieurs externes pour un séjour) DROP TABLE IF EXISTS w_mouvements_externes; CREATE TEMP TABLE w_mouvements_externes AS SELECT HO_NUMSEJ, COALESCE(SEA_DATE,HO_DDEBS) AS HO_DDEBS, COALESCE((SEA_HEURE - date(SEA_HEURE))::time without time zone,HO_HDEBS) AS HO_HDEBS, SEA_ID, COALESCE(ACTE_UFXCODE,SEA_UFCODE_REA,HO_UFCODE_REA) AS ACTE_UFXCODE, to_char(SEA_ID,'FM000000000000')||COALESCE(ACTE_UFXCODE,SEA_UFCODE_REA,HO_UFCODE_REA) AS ACTE_KEY, MAX(HO_NUM) AS HO_NUM, MAX(COALESCE(SEA_DATE_FIN,HO_DFINS)) AS HO_DFINS, MAX(COALESCE((SEA_HEURE_FIN - date(SEA_HEURE_FIN))::time without time zone,HO_HFINS)) AS HO_HFINS, MAX(w_HOSPITALISATION_SELECT.medecin_sejour_id) AS medecin_sejour_id, MAX(w_HOSPITALISATION_SELECT.lieu_sortie_id) AS lieu_id, MAX(COALESCE(SEA_UFCODE,HO_UFCODE)) AS lieu_service_facturation_code_original, MAX(HO_RECODE) AS lieu_activite_code_original, MAX(HO_ETCODE_CTI) AS lieu_etage_code_original, MAX(HO_ELCODE_CTI) AS lieu_lit_code_original, ''::text AS lieu_unite_medicale_code_original, MAX(COALESCE(ACTE_UFXCODE,SEA_UFCODE_REA,HO_UFCODE_REA)) AS lieu_unite_fonctionnelle_code_original, '0'::text AS est_chambre_particuliere, '1'::text AS est_premier_passage_jour FROM w_HOSPITALISATION_SELECT LEFT JOIN w_PASSAGE ON HO_NUM = SEA_HONUM AND HO_SEANCE = SEA_SEANCE LEFT JOIN w_PASSAGE_ACTES ON HO_NUM = ACTE_HONUM AND w_PASSAGE.SEA_ID = ACTE_SEAID JOIN activite[PX].p_sejours ON w_HOSPITALISATION_SELECT.HO_NUMSEJ = p_sejours.no_sejour AND p_sejours.etat = '' WHERE RE_TYPE <> 'H' AND sejour_a_creer = '1' GROUP BY 1,2,3,4,5,6 ORDER BY 1,2,3,4 ; CREATE INDEX w_mouvements_externes_i1 ON w_mouvements_externes USING btree (HO_NUMSEJ); SELECT base.cti_execute( 'UPDATE w_mouvements_externes SET HO_HDEBS = w_mouvements_externes.HO_HDEBS + interval ''1 second'' FROM ( SELECT HO_NUMSEJ, HO_DDEBS, HO_HDEBS, MIN(ACTE_KEY) AS ACTE_KEY_first FROM w_mouvements_externes GROUP BY 1,2,3 HAVING count(*) > 1 ) subview WHERE w_mouvements_externes.HO_NUMSEJ = subview.HO_NUMSEJ AND w_mouvements_externes.HO_DDEBS = subview.HO_DDEBS AND w_mouvements_externes.HO_HDEBS = subview.HO_HDEBS AND w_mouvements_externes.ACTE_KEY <> subview.ACTE_KEY_first ',100) ; UPDATE w_mouvements_externes SET est_premier_passage_jour = '0' FROM ( SELECT HO_NUMSEJ, HO_DDEBS, (MIN(ARRAY[HO_HDEBS::text,ACTE_KEY::text]))[2]::text AS ACTE_KEY_first FROM w_mouvements_externes GROUP BY 1,2 HAVING COUNT(*) > 1 ) subview WHERE w_mouvements_externes.HO_NUMSEJ = subview.HO_NUMSEJ AND w_mouvements_externes.HO_DDEBS = subview.HO_DDEBS AND w_mouvements_externes.ACTE_KEY <> subview.ACTE_KEY_first ; 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 lieu_service_facturation_code_original, lieu_activite_code_original, lieu_etage_code_original, lieu_lit_code_original, lieu_unite_medicale_code_original, lieu_unite_fonctionnelle_code_original FROM w_mouvements_externes LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = lieu_service_facturation_code_original AND code_original_2 = lieu_activite_code_original AND code_original_3 = lieu_etage_code_original AND code_original_4 = lieu_lit_code_original AND code_original_5 = lieu_unite_medicale_code_original AND code_original_6 = lieu_unite_fonctionnelle_code_original ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4,5,6; UPDATE activite[PX].t_lieux SET service_facturation_id = COALESCE(t_services_facturation.oid,0), mode_traitement_id = COALESCE(t_services_facturation.mode_traitement_id,0) FROM activite[PX].t_services_facturation WHERE code_original_1 = t_services_facturation.code_original AND (t_lieux.service_facturation_id <> COALESCE(t_services_facturation.oid,0) OR t_lieux.mode_traitement_id <> COALESCE(t_services_facturation.mode_traitement_id,0) ) ; UPDATE activite[PX].t_lieux SET activite_id = COALESCE(t_activites.oid,0) FROM activite[PX].t_activites WHERE code_original_2 = t_activites.code_original AND activite_id <> COALESCE(t_activites.oid,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_mouvements_externes SET lieu_id = t_lieux.oid, est_chambre_particuliere = CASE WHEN t_lits.chambre_particuliere = 'O' THEN '1' ELSE '0' END FROM activite[PX].t_lieux JOIN activite[PX].t_lits ON lit_id = t_lits.oid WHERE code_original_1 = lieu_service_facturation_code_original AND code_original_2 = lieu_activite_code_original AND code_original_3 = lieu_etage_code_original AND code_original_4 = lieu_lit_code_original AND code_original_5 = lieu_unite_medicale_code_original AND code_original_6 = lieu_unite_fonctionnelle_code_original AND ( w_mouvements_externes.lieu_id <> t_lieux.oid OR w_mouvements_externes.est_chambre_particuliere <> CASE WHEN t_lits.chambre_particuliere = 'O' THEN '1' ELSE '0' END ) ; DELETE FROM w_mouvements_sejour USING ( SELECT no_sejour, date, heure_debut, min(CTID) AS keep_ctid FROM w_mouvements_sejour GROUP BY 1,2,3 HAVING count(*) >1 ) subview WHERE w_mouvements_sejour.no_sejour = subview.no_sejour AND w_mouvements_sejour.date = subview.date AND w_mouvements_sejour.heure_debut = subview.heure_debut AND w_mouvements_sejour.CTID <> keep_ctid ; INSERT INTO w_mouvements_sejour ( HO_NUM, no_sejour, sejour_id, sequence, date, jour_semaine, is_weekend, heure_debut, heure_fin, nb_entrees_directes, nb_sorties_directes, est_jour_entree, est_jour_sortie, est_jour_hospitalisation, nb_ambulatoires, nb_externes, nb_passage_externe, nb_urgences, nb_seances, nb_entrees_mutation_service, nb_sorties_mutation_service, nb_entrees_mutation_etage, nb_sorties_mutation_etage, nb_entrees_mutation_activite, nb_sorties_mutation_activite, nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_jours_js_inclus, nb_jours_js_non_inclus, est_chambre_particuliere, nb_chambres_particulieres, nb_bebes, lieu_id, medecin_sejour_id, est_mouvement_previsionnel ) SELECT w_mouvements_externes.HO_NUM, w_mouvements_externes.HO_NUMSEJ AS no_sejour, p_sejours.oid AS sejour_id, 0::numeric, p_calendrier.date, p_calendrier.jour_semaine, p_calendrier.is_weekend, CASE WHEN p_calendrier.date = HO_DDEBS THEN to_char(HO_HDEBS,'HH24MISS')::numeric ELSE 0 END AS heure_debut, CASE WHEN p_calendrier.date = HO_DFINS THEN to_char(HO_HFINS,'HH24MISS')::numeric ELSE 240000 END AS heure_fin, CASE WHEN p_calendrier.date = HO_DDEBS AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_entrees_directes, CASE WHEN p_calendrier.date = HO_DFINS AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_sorties_directes, CASE WHEN p_calendrier.date = HO_DDEBS AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_entree, CASE WHEN p_calendrier.date = HO_DFINS 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 p_calendrier.date = HO_DDEBS AND p_sejours.type_sejour = '2' THEN 1 ELSE 0 END AS nb_ambulatoires, CASE WHEN p_calendrier.date = HO_DDEBS AND p_sejours.type_sejour = '3' AND est_premier_passage_jour = '1' THEN 1 ELSE 0 END AS nb_externes, CASE WHEN p_calendrier.date = HO_DDEBS AND p_sejours.type_sejour = '3' THEN 1 ELSE 0 END AS nb_passage_externe, CASE WHEN '1' <> '1' AND p_calendrier.date = HO_DDEBS THEN 1 ELSE 0 END AS nb_urgences, CASE WHEN p_calendrier.date = HO_DDEBS AND p_sejours.type_sejour = '5' THEN 1 ELSE 0 END AS nb_seances, 0 AS nb_entrees_mutation_service, 0 AS nb_sorties_mutation_service, 0 AS nb_entrees_mutation_etage, 0 AS nb_sorties_mutation_etage, 0 AS nb_entrees_mutation_activite, 0 AS nb_sorties_mutation_activite, 0 AS nb_entrees_mutation_unite_medicale, 0 AS nb_sorties_mutation_unite_medicale, CASE WHEN p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_jours_js_inclus, CASE WHEN p_sejours.type_sejour = '1' AND p_calendrier.date <> HO_DFINS THEN 1 ELSE 0 END AS nb_jours_js_non_inclus, '0'::text AS est_chambre_particuliere, 0::numeric AS nb_chambres_particulieres, CASE WHEN p_calendrier.date = HO_DDEBS AND p_sejours.type_sejour = '6' THEN 1 ELSE 0 END AS nb_bebes, w_mouvements_externes.lieu_id AS lieu_id, w_mouvements_externes.medecin_sejour_id as medecin_sejour_id, CASE WHEN p_sejours.code_prevu = '1' OR p_calendrier.date > date(now_cerner) THEN '1' ELSE '0' END AS est_mouvement_previsionnel FROM w_mouvements_externes JOIN w_PERIODE ON 1=1 JOIN activite[PX].p_sejours ON w_mouvements_externes.HO_NUMSEJ = p_sejours.no_sejour AND p_sejours.etat = '' JOIN base.p_calendrier ON (p_calendrier.date BETWEEN HO_DDEBS AND HO_DFINS AND p_calendrier.date <= now() + interval '1 month' ) ORDER BY w_mouvements_externes.HO_NUMSEJ, p_calendrier.date; -- Séances DROP TABLE IF EXISTS w_MOUV_HOSPI_seances; CREATE TEMP TABLE w_MOUV_HOSPI_seances AS SELECT HO_NUMSEJ, date(mh_ddeb) AS date_seance, to_char(MH_HDEB,'HH24MISS')::numeric AS heure_seance FROM w_HOSPITALISATION_SELECT JOIN w_MOUV_HOSPI_source ON w_HOSPITALISATION_SELECT.HO_NUM = w_MOUV_HOSPI_source.MH_HONUM JOIN activite.t_divers On t_divers.code = 'CERNER_RAISONSEANCE' WHERE MH_RSCODENT = ANY(string_to_array(t_divers.valeur,',')) ; UPDATE w_mouvements_sejour SET nb_seances = 1 FROM w_MOUV_HOSPI_seances WHERE w_mouvements_sejour.no_sejour = HO_NUMSEJ AND w_mouvements_sejour.date = date_seance AND heure_seance BETWEEN heure_debut AND heure_fin ; UPDATE activite[PX].p_mouvements_sejour SET nb_seances = 1, nb_ambulatoires = 0 FROM activite[PX].p_sejours JOIN base.t_ghs ON ghs_id = t_ghs.oid WHERE p_mouvements_sejour.no_sejour = p_sejours.no_sejour AND trim(t_ghs.code) IN (9606,9616,9613,9614) AND (p_mouvements_sejour.nb_seances = 0 OR nb_ambulatoires = 1) ; UPDATE activite[PX].p_sejours SET type_sejour = 5 FROM base.t_ghs WHERE ghs_id = t_ghs.oid AND trim(t_ghs.code) IN (9606,9616,9613,9614) AND type_sejour != 5 ; 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_passage_externe = 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', 'i_mouvements_sejour_1'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_2'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_3'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_4'); SELECT base.cti_disable_index('activite', '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_passage_externe, 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,est_mouvement_previsionnel, 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_passage_externe, 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,est_mouvement_previsionnel, jour_semaine, is_weekend FROM w_mouvements_sejour ORDER BY no_sejour, sequence; SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_1'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_2'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_3'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_4'); SELECT base.cti_enable_index('activite', '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' FROM activite[PX].t_lieux JOIN activite[PX].t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE lieu_sortie_id = t_lieux.oid AND t_services_facturation.type_sejour <> '0sauf5' AND p_sejours.type_sejour <> '5' AND p_sejours.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 ) ; ]]> subview.ghs_id OR p_sejours.ghm_id <> subview.ghm_id ); ]]> FAC_EXER ; ANALYSE w_FACTURE; CREATE INDEX w_FACTURE_i1 ON w_FACTURE USING btree (FAC_NUM); CREATE INDEX w_FACTURE_i2 ON w_FACTURE USING btree (FAC_HONUM); CREATE INDEX w_FACTURE_i_FAC_SEANCE ON w_FACTURE USING btree (FAC_SEANCE); CREATE INDEX w_FACTURE_FAC_MANUMDOS ON w_FACTURE USING btree (FAC_MANUMDOS); UPDATE w_FACTURE SET FAC_PYTYPE_CTI_HB = CASE WHEN AD_TYP = 'T' AND AD_PYTYPE IN ('1','2') THEN '1' WHEN AD_TYP = 'T' AND AD_PYTYPE NOT IN ('1','2') THEN '2' ELSE '0' END, FAC_PYCODE_CTI_HB = CASE WHEN AD_TYP = 'T' THEN ('C'||AD_PYTYPE||AD_PYCODE) ELSE '*PATIENT' END FROM prod_cerner.ADRESSE WHERE FAC_MANUMDOS = AD_MANUMDOS AND FAC_ADCPT_HB = AD_CPT ; DROP TABLE IF EXISTS w_FACTURE_DET; CREATE TEMP TABLE w_FACTURE_DET AS SELECT 'FAD'::text AS FAD_SOURCE, FAD_NUM, FAD_UFCODE, FAD_TYPE, FAD_DEB, FAD_FIN, FAD_HEU, FAD_INCODE, CASE WHEN trim(FAD_CCAMREGR) <> '' THEN trim(FAD_CCAMREGR) ELSE trim(FAD_CTCODE) END AS FAD_CTCODE, CASE WHEN trim(FAD_CCAMREGR) <> '' THEN trim(FAD_CCAMREGR) WHEN trim(FAD_CTNB2) <> '' THEN trim(FAD_CTNB2) ELSE trim(FAD_CTCODE) END AS FAD_CTNB2, CASE WHEN trim(FAD_CCAMREGR) <> '' THEN trim(FAD_CCAMREGR) ELSE '' END AS FAD_CTACTE, FAD_UFEXE, FAD_INEXE, FAD_COMPTE, FAD_SEANCE, FAC_ADCPT_HB AS FAD_CPT, FAD_TAUDG, FAD_PUFAC, CASE WHEN FAD_MON < 0 AND FAD_NBR > 0 THEN 0 - FAD_NBR ELSE FAD_NBR END AS FAD_NBR, FAD_MON, CASE WHEN FAC_PYTYPE_CTI_HB NOT IN ('1','2') THEN FAD_MON ELSE 0 END AS FAD_MON_0, CASE WHEN FAC_PYTYPE_CTI_HB = '1' THEN FAD_MON ELSE 0 END AS FAD_MON_1, CASE WHEN FAC_PYTYPE_CTI_HB = '2' THEN FAD_MON ELSE 0 END AS FAD_MON_2, 0::numeric AS FAD_MON_BG_1 FROM prod_cerner.FACTURE_DET JOIN w_FACTURE ON FAC_NUM = FAD_NUM; INSERT INTO w_FACTURE_DET SELECT 'FDG'::text AS FAD_SOURCE, FDG_NUM, FDG_UFCODE, FDG_TYPE, FDG_DEB, FDG_FIN, FDG_DEB AS FDG_HEU, ''::text AS FDG_INCODE, trim(FDG_CTCODE) AS FDG_CTCODE, trim(FDG_CTCODE) AS FDG_CTNB2, ''::text AS FDG_CTACTE, ''::text AS FDG_UFEXE, ''::text AS FDG_INEXE, trim(FDG_COMPTE) AS FGD_COMPTE, ''::text AS FDG_SEANCE, FDG_CPT, FDG_TAUDG, FDG_PU AS FDG_PUFAC, FDG_NBR, FDG_MON, 0::numeric AS FAD_MON_0, 0::numeric AS FAD_MON_1, 0::numeric AS FAD_MON_2, FDG_MON AS FAD_MON_BG_1 FROM prod_cerner.FACTURE_DG JOIN w_FACTURE ON FAC_NUM = FDG_NUM ; UPDATE w_FACTURE_DET SET FAD_CTNB2 = CT_LET FROM prod_cerner.CODE_TARIF WHERE FAD_CTCODE = CT_CODE AND FAD_CTNB2 <> CT_LET AND CT_LET <> '' ; ANALYSE w_FACTURE_DET; CREATE INDEX w_FACTURE_DET_i_FAD_NUM ON w_FACTURE_DET USING btree (FAD_NUM); DROP TABLE IF EXISTS w_FACTURE_DET_seance; CREATE TEMP TABLE w_FACTURE_DET_seance AS SELECT FAD_NUM, base.cti_array_accum(DISTINCT trim(FAD_SEANCE)) AS FAD_SEANCE_array FROM w_FACTURE_DET WHERE FAD_SEANCE <> '' GROUP BY 1 ; ANALYSE w_FACTURE_DET_seance; CREATE INDEX w_FACTURE_DET_seance_i1 ON w_FACTURE_DET_seance USING btree (FAD_NUM); UPDATE w_FACTURE SET FAC_SEANCE_array = FAD_SEANCE_array, FAC_SEANCE = COALESCE(FAD_SEANCE_array[1],'') FROM w_FACTURE_DET_seance WHERE w_FACTURE.FAC_NUM = w_FACTURE_DET_seance.FAD_NUM ; SELECT base.cti_execute(' INSERT INTO w_FACTURE SELECT FAC_NUM_CTI, FAC_NUM, FAC_HONUM, FAC_MANUMDOS, FAC_ADCPT_BG, FAC_PYTYPE_CTI_BG, FAC_PYCODE_CTI_BG, FAC_ADCPT_HB, FAC_PYTYPE_CTI_HB, FAC_PYCODE_CTI_HB, FAC_DATE, FAC_EXER, FAC_DATE_VENT, FAC_DDEB, FAC_DFIN, FAC_MONT, FAC_MONT_0, FAC_MONT_1, FAC_MONT_2, FAC_MONT_BG_1, FAC_REGL, FAC_REGL_0, FAC_REGL_1, FAC_REGL_2, FAC_ETAT, FAC_COMM, FAC_INV, FAC_ETAB, FAC_BORD, FAC_DATE_LOT, FAC_SEANCE_array[subview.sequence_index] AS FAC_SEANCE, NULL::text[] AS FAC_SEANCE_array, subview.sequence_index FROM w_FACTURE JOIN (SELECT MAX(sequence_index)+1 AS sequence_index FROM w_FACTURE) subview ON 1=1 WHERE FAC_SEANCE_array[subview.sequence_index] IS NOT NULL ',50) ; DROP TABLE IF EXISTS w_FACTURE_DET_fac; CREATE TEMP TABLE w_FACTURE_DET_fac AS SELECT FAD_NUM, trim(FAD_SEANCE) AS FAD_SEANCE, SUM(FAD_MON) AS FAD_MON, SUM(FAD_MON_0) AS FAD_MON_0, SUM(FAD_MON_1) AS FAD_MON_1, SUM(FAD_MON_2) AS FAD_MON_2, SUM(FAD_MON_BG_1) AS FAD_MON_BG_1, date(MIN(FAD_DEB)) AS FAD_DDEB, date(MAX(FAD_FIN)) AS FAD_DFIN, MAX(CASE WHEN FAD_SOURCE = 'FDG' THEN FAD_CPT ELSE 0 END) AS FAD_ADCPT_BG FROM w_FACTURE_DET GROUP BY 1,2 ; ANALYSE w_FACTURE_DET_fac; CREATE INDEX w_FACTURE_DET_fac_i1 ON w_FACTURE_DET_fac USING btree (FAD_NUM); UPDATE w_FACTURE SET FAC_ADCPT_BG = FAD_ADCPT_BG, FAC_MONT = w_FACTURE_DET_fac.FAD_MON, FAC_MONT_0 = w_FACTURE_DET_fac.FAD_MON_0, FAC_MONT_1 = w_FACTURE_DET_fac.FAD_MON_1, FAC_MONT_2 = w_FACTURE_DET_fac.FAD_MON_2, FAC_MONT_BG_1 = w_FACTURE_DET_fac.FAD_MON_BG_1, FAC_DDEB = w_FACTURE_DET_fac.FAD_DDEB, FAC_DFIN = w_FACTURE_DET_fac.FAD_DFIN FROM w_FACTURE_DET_fac WHERE w_FACTURE.FAC_NUM = w_FACTURE_DET_fac.FAD_NUM AND w_FACTURE.FAC_SEANCE = w_FACTURE_DET_fac.FAD_SEANCE ; UPDATE w_FACTURE SET FAC_PYTYPE_CTI_BG = CASE WHEN AD_TYP = 'T' AND AD_PYTYPE IN ('1','2') THEN '1' WHEN AD_TYP = 'T' AND AD_PYTYPE NOT IN ('1','2') THEN '2' ELSE '0' END, FAC_PYCODE_CTI_BG = CASE WHEN AD_TYP = 'T' THEN ('C'||AD_PYTYPE||AD_PYCODE) ELSE '*PATIENT' END FROM prod_cerner.ADRESSE WHERE FAC_MANUMDOS = AD_MANUMDOS AND FAC_ADCPT_BG = AD_CPT ; UPDATE w_FACTURE SET FAC_NUM_CTI = FAC_NUM || '.' || FAC_SEANCE WHERE FAC_SEANCE <> '' AND FAC_NUM IN ( SELECT FAC_NUM FROM w_FACTURE GROUP BY 1 HAVING COUNT(*) > 1 ) ; -- Récupération des règlements et affectation aux factures DROP TABLE IF EXISTS w_MOUV_COMPTA_REG; CREATE TEMP TABLE w_MOUV_COMPTA_REG AS SELECT MC_EXER, MC_NUM, MC_NUMT, MC_LIGNE, MC_COMPTE, CASE WHEN AD_TYP IS NULL THEN '' WHEN AD_TYP = 'T' AND AD_PYTYPE IN ('1','2') THEN '1' WHEN AD_TYP = 'T' AND AD_PYTYPE NOT IN ('1','2') THEN '2' ELSE '0' END AS MC_PYTYPE_CTI_HB, MC_DATECR, MC_HONUM, MC_MANUMDOS, ''::text AS MC_SEANCE, MC_NUMFAC_LET, MC_TYPE, CASE WHEN MC_SENS = 'C' THEN MC_MON ELSE 0-MC_MON END AS MC_MON_REG, MC_EXER*100000000000000+MC_NUM*10000000+MC_LIGNE AS MC_KEY, ''::text AS MC_FACNUM_CTI, '0'::text AS MC_OK FROM prod_cerner.MOUV_COMPTA LEFT JOIN prod_cerner.FACTURE ON MC_NUMFAC_LET = FAC_NUM LEFT JOIN prod_cerner.ADRESSE ON MC_MANUMDOS = AD_MANUMDOS AND FAC_ADCPT = AD_CPT WHERE MC_JRN <> 'JV' AND MC_HONUM <> 0 AND (MC_COMPTE LIKE '411%' OR MC_COMPTE LIKE '412%' OR MC_COMPTE LIKE '413%' OR MC_COMPTE LIKE '414%' OR MC_COMPTE LIKE '452%' OR MC_COMPTE LIKE '467%') AND MC_HONUM IN (SELECT HO_NUM FROM w_HOSPITALISATION_SELECT) ; UPDATE w_MOUV_COMPTA_REG SET MC_PYTYPE_CTI_HB = subview.MC_PYTYPE_CTI_HB FROM ( SELECT MC_COMPTE_racine, (MAX(ARRAY[to_char(nb,'FM000000000000'),MC_PYTYPE_CTI_HB]))[2] AS MC_PYTYPE_CTI_HB FROM ( SELECT substr(MC_COMPTE,1,4) AS MC_COMPTE_racine, MC_PYTYPE_CTI_HB, count(*) AS nb FROM w_MOUV_COMPTA_REG WHERE MC_PYTYPE_CTI_HB <> '' GROUP BY 1,2 ORDER BY 1,2 ) subview GROUP BY 1 ) subview WHERE substr(w_MOUV_COMPTA_REG.MC_COMPTE,1,4) = MC_COMPTE_racine AND w_MOUV_COMPTA_REG.MC_PYTYPE_CTI_HB = '' ; -- Ne pas tenir compte des règlements qui s'annulent DELETE FROM w_MOUV_COMPTA_REG USING ( SELECT MC_HONUM, MC_NUMT, MC_DATECR, SUM(MC_MON_REG) FROM w_MOUV_COMPTA_REG GROUP BY 1,2,3 HAVING SUM(MC_MON_REG) = 0 ) subview WHERE w_MOUV_COMPTA_REG.MC_HONUM = subview.MC_HONUM AND w_MOUV_COMPTA_REG.MC_NUMT = subview.MC_NUMT AND w_MOUV_COMPTA_REG.MC_DATECR = subview.MC_DATECR ; -- Ne pas tenir compte des règlements qui s'annulent (n° facture) DELETE FROM w_MOUV_COMPTA_REG USING ( SELECT MC_HONUM, MC_NUMFAC_LET, MC_DATECR, SUM(MC_MON_REG) FROM w_MOUV_COMPTA_REG GROUP BY 1,2,3 HAVING SUM(MC_MON_REG) = 0 ) subview WHERE w_MOUV_COMPTA_REG.MC_HONUM = subview.MC_HONUM AND w_MOUV_COMPTA_REG.MC_NUMFAC_LET = subview.MC_NUMFAC_LET AND w_MOUV_COMPTA_REG.MC_DATECR = subview.MC_DATECR ; -- Lettrage des factures. Cas d'une seule facture réglée par séjour UPDATE w_MOUV_COMPTA_REG SET MC_NUMFAC_LET = subview.MC_NUMFAC_LET FROM ( SELECT MC_HONUM, MAX(MC_NUMFAC_LET) AS MC_NUMFAC_LET FROM w_MOUV_COMPTA_REG WHERE MC_NUMT <> 0 GROUP BY 1 HAVING count(DISTINCT CASE WHEN MC_NUMFAC_LET > 0 THEN MC_NUMFAC_LET ELSE NULL END) = 1 AND MAX(MC_NUMFAC_LET) > 0 AND MIN(MC_NUMFAC_LET) = 0 ) subview WHERE w_MOUV_COMPTA_REG.MC_HONUM = subview.MC_HONUM AND w_MOUV_COMPTA_REG.MC_NUMFAC_LET = 0 ; -- Lettrage des factures. Cas d'une seule facture réglée par pièce UPDATE w_MOUV_COMPTA_REG SET MC_NUMFAC_LET = subview.MC_NUMFAC_LET FROM ( SELECT MC_HONUM, MC_NUMT, MAX(MC_NUMFAC_LET) AS MC_NUMFAC_LET FROM w_MOUV_COMPTA_REG WHERE MC_NUMT <> 0 GROUP BY 1,2 HAVING count(DISTINCT CASE WHEN MC_NUMFAC_LET > 0 THEN MC_NUMFAC_LET ELSE NULL END) = 1 AND MAX(MC_NUMFAC_LET) > 0 AND MIN(MC_NUMFAC_LET) = 0 ) subview WHERE w_MOUV_COMPTA_REG.MC_HONUM = subview.MC_HONUM AND w_MOUV_COMPTA_REG.MC_NUMFAC_LET = 0 ; -- Lettrage des factures. Cas d'une facture seule pour un montant réglé (plusieurs passages) DROP TABLE IF EXISTS w_FACTURE_LET; CREATE TEMP TABLE w_FACTURE_LET ( FAC_HONUM numeric, FAC_REGL numeric, FAC_DATE date, FAC_NUM numeric, FAC_nb numeric ) ; DROP TABLE IF EXISTS w_MOUV_COMPTA_LET; CREATE TEMP TABLE w_MOUV_COMPTA_LET ( MC_HONUM numeric, MC_MON_REG numeric, MC_DATECR date, MC_nb numeric, MC_KEY numeric ) ; SELECT base.cti_execute( 'TRUNCATE w_FACTURE_LET ., INSERT INTO w_FACTURE_LET SELECT FAC_HONUM, FAC_REGL, MIN(date(FAC_DATE)) AS FAC_DATE, (MIN(ARRAY[FAC_DATE::text,FAC_NUM::text]))[2]::numeric AS FAC_NUM, count(*) AS FAC_nb FROM prod_cerner.FACTURE WHERE FAC_INV = 0 AND FAC_HONUM IN (SELECT MC_HONUM FROM w_MOUV_COMPTA_REG WHERE MC_NUMFAC_LET = 0) AND FAC_NUM NOT IN (SELECT MC_NUMFAC_LET FROM w_MOUV_COMPTA_REG WHERE MC_NUMFAC_LET <> 0) GROUP BY 1,2 ., TRUNCATE w_MOUV_COMPTA_LET ., INSERT INTO w_MOUV_COMPTA_LET SELECT MC_HONUM, MC_MON_REG, DATE(min(MC_DATECR)) AS MC_DATECR, count(*) AS MC_nb, MIN(MC_KEY) AS MC_KEY FROM w_MOUV_COMPTA_REG WHERE MC_NUMFAC_LET = 0 GROUP BY 1,2 ., UPDATE w_MOUV_COMPTA_REG SET MC_NUMFAC_LET = subview.FAC_NUM FROM ( SELECT w_MOUV_COMPTA_LET.MC_KEY, w_FACTURE_LET.FAC_NUM FROM w_MOUV_COMPTA_LET JOIN w_FACTURE_LET ON w_MOUV_COMPTA_LET.MC_HONUM = w_FACTURE_LET.FAC_HONUM AND w_MOUV_COMPTA_LET.MC_MON_REG = w_FACTURE_LET.FAC_REGL AND (FAC_DATE <= MC_DATECR OR FAC_nb = MC_nb) ) subview WHERE w_MOUV_COMPTA_REG.MC_KEY = subview.MC_KEY ',100) ; DROP TABLE IF EXISTS w_MOUV_COMPTA_LET; CREATE TEMP TABLE w_MOUV_COMPTA_LET AS SELECT MC_HONUM, MC_NUMFAC_LET, SUM(MC_MON_REG) AS MC_MON_REG FROM w_MOUV_COMPTA_REG WHERE MC_NUMFAC_LET <> 0 GROUP BY 1,2 ; UPDATE w_MOUV_COMPTA_REG SET MC_NUMFAC_LET = subview.MC_NUMFAC_LET FROM ( SELECT w_MOUV_COMPTA_LET.MC_HONUM, w_MOUV_COMPTA_LET.MC_NUMFAC_LET, FAC_REGL, w_MOUV_COMPTA_LET.MC_MON_REG, w_MOUV_COMPTA_REG.MC_MON_REG, w_MOUV_COMPTA_REG.MC_KEY FROM w_MOUV_COMPTA_LET JOIN prod_cerner.FACTURE ON FAC_HONUM = MC_HONUM AND FAC_NUM = MC_NUMFAC_LET JOIN w_MOUV_COMPTA_REG ON w_MOUV_COMPTA_REG.MC_HONUM = w_MOUV_COMPTA_LET.MC_HONUM AND w_MOUV_COMPTA_REG.MC_NUMFAC_LET = 0 WHERE FAC_REGL <> w_MOUV_COMPTA_LET.MC_MON_REG AND w_MOUV_COMPTA_LET.MC_MON_REG + w_MOUV_COMPTA_REG.MC_MON_REG = FAC_REGL ) subview WHERE w_MOUV_COMPTA_REG.MC_KEY = subview.MC_KEY ; -- Lettrage des factures. Cas d'une facture seule pour un montant réglé (plusieurs passages) DROP TABLE IF EXISTS w_FACTURE_LET; CREATE TEMP TABLE w_FACTURE_LET ( FAC_HONUM numeric, FAC_REGL numeric, FAC_DATE date, FAC_NUM numeric, FAC_nb numeric ) ; DROP TABLE IF EXISTS w_MOUV_COMPTA_LET; CREATE TEMP TABLE w_MOUV_COMPTA_LET ( MC_HONUM numeric, MC_MON_REG numeric, MC_DATECR date, MC_nb numeric, MC_KEY numeric ) ; SELECT base.cti_execute( 'TRUNCATE w_FACTURE_LET ., INSERT INTO w_FACTURE_LET SELECT FAC_HONUM, FAC_REGL, MIN(date(FAC_DATE)) AS FAC_DATE, (MIN(ARRAY[FAC_DATE::text,FAC_NUM::text]))[2]::numeric AS FAC_NUM, count(*) AS FAC_nb FROM prod_cerner.FACTURE WHERE FAC_INV = 0 AND FAC_HONUM IN (SELECT MC_HONUM FROM w_MOUV_COMPTA_REG WHERE MC_NUMFAC_LET = 0) AND FAC_NUM NOT IN (SELECT MC_NUMFAC_LET FROM w_MOUV_COMPTA_REG WHERE MC_NUMFAC_LET <> 0) GROUP BY 1,2 ., TRUNCATE w_MOUV_COMPTA_LET ., INSERT INTO w_MOUV_COMPTA_LET SELECT MC_HONUM, MC_MON_REG, DATE(min(MC_DATECR)) AS MC_DATECR, count(*) AS MC_nb, MIN(MC_KEY) AS MC_KEY FROM w_MOUV_COMPTA_REG WHERE MC_NUMFAC_LET = 0 GROUP BY 1,2 ., UPDATE w_MOUV_COMPTA_REG SET MC_NUMFAC_LET = subview.FAC_NUM FROM ( SELECT w_MOUV_COMPTA_LET.MC_KEY, w_FACTURE_LET.FAC_NUM FROM w_MOUV_COMPTA_LET JOIN w_FACTURE_LET ON w_MOUV_COMPTA_LET.MC_HONUM = w_FACTURE_LET.FAC_HONUM AND w_MOUV_COMPTA_LET.MC_MON_REG = w_FACTURE_LET.FAC_REGL ) subview WHERE w_MOUV_COMPTA_REG.MC_KEY = subview.MC_KEY ',100) ; SELECT base.cti_execute( 'TRUNCATE w_FACTURE_LET ., INSERT INTO w_FACTURE_LET SELECT FAC_HONUM, FAC_MONT AS FAC_REGL, MIN(date(FAC_DATE)) AS FAC_DATE, (MIN(ARRAY[FAC_DATE::text,FAC_NUM::text]))[2]::numeric AS FAC_NUM, count(*) AS FAC_nb FROM prod_cerner.FACTURE WHERE FAC_INV = 0 AND FAC_REGL = 0 AND FAC_HONUM IN (SELECT MC_HONUM FROM w_MOUV_COMPTA_REG WHERE MC_NUMFAC_LET = 0) AND FAC_NUM NOT IN (SELECT MC_NUMFAC_LET FROM w_MOUV_COMPTA_REG WHERE MC_NUMFAC_LET <> 0) GROUP BY 1,2 ., TRUNCATE w_MOUV_COMPTA_LET ., INSERT INTO w_MOUV_COMPTA_LET SELECT MC_HONUM, MC_MON_REG, DATE(min(MC_DATECR)) AS MC_DATECR, count(*) AS MC_nb, MIN(MC_KEY) AS MC_KEY FROM w_MOUV_COMPTA_REG WHERE MC_NUMFAC_LET = 0 GROUP BY 1,2 ., UPDATE w_MOUV_COMPTA_REG SET MC_NUMFAC_LET = subview.FAC_NUM FROM ( SELECT w_MOUV_COMPTA_LET.MC_KEY, w_FACTURE_LET.FAC_NUM FROM w_MOUV_COMPTA_LET JOIN w_FACTURE_LET ON w_MOUV_COMPTA_LET.MC_HONUM = w_FACTURE_LET.FAC_HONUM AND w_MOUV_COMPTA_LET.MC_MON_REG = w_FACTURE_LET.FAC_REGL AND (FAC_DATE <= MC_DATECR OR FAC_nb = MC_nb) ) subview WHERE w_MOUV_COMPTA_REG.MC_KEY = subview.MC_KEY ',100) ; -- Lettrage des factures. Affectation facture CTI (facture + passage) mono facture DROP TABLE IF EXISTS w_FACTURE_reg; CREATE TEMP TABLE w_FACTURE_reg AS SELECT FAC_NUM, COUNT(DISTINCT FAC_NUM_CTI), COUNT(DISTINCT FAC_NUM_CTI) AS nb, (MAX(ARRAY[FAC_DATE::text,FAC_NUM_CTI]))[2] AS FAC_NUM_CTI_LAST, SUM(FAC_MONT_0 + FAC_MONT_1 + FAC_MONT_2) AS FAC_MONT_HBG FROM w_FACTURE GROUP BY 1 ; UPDATE w_MOUV_COMPTA_REG SET MC_FACNUM_CTI = FAC_NUM_CTI_LAST, MC_OK = '1' FROM w_FACTURE_reg WHERE w_MOUV_COMPTA_REG.MC_NUMFAC_LET = w_FACTURE_reg.FAC_NUM AND nb = 1 ; -- Lettrage des factures. Affectation facture CTI (facture + passage) plusieurs factures sur total identique INSERT INTO w_MOUV_COMPTA_REG SELECT MC_EXER, MC_NUM, MC_NUMT, MC_LIGNE, MC_COMPTE, MC_PYTYPE_CTI_HB, MC_DATECR, MC_HONUM, MC_MANUMDOS, MC_SEANCE, MC_NUMFAC_LET, MC_TYPE, FAC_MONT_0 + FAC_MONT_1 + FAC_MONT_2 AS MC_MON_REG, MC_KEY, w_FACTURE.FAC_NUM_CTI AS MC_FACNUM_CTI, '1'::text AS MC_OK FROM w_MOUV_COMPTA_REG JOIN w_FACTURE_reg ON w_MOUV_COMPTA_REG.MC_NUMFAC_LET = w_FACTURE_reg.FAC_NUM JOIN w_FACTURE ON w_MOUV_COMPTA_REG.MC_NUMFAC_LET = w_FACTURE.FAC_NUM WHERE MC_OK = '0' AND nb > 1 AND MC_MON_REG = FAC_MONT_HBG ; DELETE FROM w_MOUV_COMPTA_REG WHERE MC_OK = '0' AND MC_KEY IN (SELECT MC_KEY FROM w_MOUV_COMPTA_REG WHERE MC_OK = '1') ; -- Lettrage des factures. Affectation facture CTI (facture + passage) plusieurs factures sur total identique inversé (remboursement) INSERT INTO w_MOUV_COMPTA_REG SELECT MC_EXER, MC_NUM, MC_NUMT, MC_LIGNE, MC_COMPTE, MC_PYTYPE_CTI_HB, MC_DATECR, MC_HONUM, MC_MANUMDOS, MC_SEANCE, MC_NUMFAC_LET, MC_TYPE, 0 - (FAC_MONT_0 + FAC_MONT_1 + FAC_MONT_2) AS MC_MON_REG, MC_KEY, w_FACTURE.FAC_NUM_CTI AS MC_FACNUM_CTI, '1'::text AS MC_OK FROM w_MOUV_COMPTA_REG JOIN w_FACTURE_reg ON w_MOUV_COMPTA_REG.MC_NUMFAC_LET = w_FACTURE_reg.FAC_NUM JOIN w_FACTURE ON w_MOUV_COMPTA_REG.MC_NUMFAC_LET = w_FACTURE.FAC_NUM WHERE MC_OK = '0' AND nb > 1 AND MC_MON_REG = 0-FAC_MONT_HBG ; DELETE FROM w_MOUV_COMPTA_REG WHERE MC_OK = '0' AND MC_KEY IN (SELECT MC_KEY FROM w_MOUV_COMPTA_REG WHERE MC_OK = '1') ; -- Création des factures fictives CTI sur règlements non lettrés UPDATE w_MOUV_COMPTA_REG SET MC_FACNUM_CTI = CASE WHEN MC_NUMFAC_LET <> 0 THEN MC_NUMFAC_LET ELSE MC_HONUM END::text || '.' || 'RG', MC_OK = '1' WHERE MC_OK = '0' ; UPDATE w_MOUV_COMPTA_REG SET MC_SEANCE = subview.HO_SEANCE FROM ( SELECT MC_KEY, MAX(w_HOSPITALISATION_SELECT_HONUM.HO_SEANCE) AS HO_SEANCE FROM w_MOUV_COMPTA_REG LEFT JOIN w_HOSPITALISATION_SELECT ON MC_HONUM = w_HOSPITALISATION_SELECT.HO_NUM AND MC_SEANCE = w_HOSPITALISATION_SELECT.HO_SEANCE JOIN w_HOSPITALISATION_SELECT w_HOSPITALISATION_SELECT_HONUM ON MC_HONUM = w_HOSPITALISATION_SELECT_HONUM.HO_NUM WHERE MC_FACNUM_CTI LIKE '%.RG' AND w_HOSPITALISATION_SELECT.HO_NUM IS NULL GROUP BY 1 ) subview WHERE w_MOUV_COMPTA_REG.MC_KEY = subview.MC_KEY ; INSERT INTO w_FACTURE SELECT MC_FACNUM_CTI, MC_NUMFAC_LET AS FAC_NUM, MC_HONUM AS HONUM, COALESCE(HO_MANUMDOS,MC_MANUMDOS,0), 0::numeric AS FAC_ADCPT_BG, '' AS FAC_PYTYPE_CTI_BG, '' AS FAC_PYCODE_CTI_BG, 0::numeric AS FAC_ADCPT_HB, MAX(MC_PYTYPE_CTI_HB) AS FAC_PYTYPE_CTI_HB, '' AS FAC_PYCODE_CTI_HB, MIN(MC_DATECR) AS FAC_DATE, MIN(MC_EXER) AS FAC_EXER, MIN(MC_DATECR) AS FAC_DATE_VENT, MIN(HO_DDEB) AS FAC_DDEB, MAX(HO_DFIN) AS FAC_DFIN, 0::numeric AS FAC_MONT, 0::numeric AS FAC_MONT_0, 0::numeric AS FAC_MONT_1, 0::numeric AS FAC_MONT_2, 0::numeric AS FAC_MONT_BG_1, 0::numeric AS FAC_REGL, 0::numeric AS FAC_REGL_0, 0::numeric AS FAC_REGL_1, 0::numeric AS FAC_REGL_2, 0::numeric AS FAC_ETAT, 0::numeric AS FAC_COMM, 0::numeric AS FAC_INV, ''::text AS FAC_ETAB, 0::numeric AS FAC_BORD, '20991231' AS FAC_DATE_LOT, MAX(MC_SEANCE) AS FAC_SEANCE, NULL::text[] AS FAC_SEANCE_array, 0 FROM w_MOUV_COMPTA_REG LEFT JOIN prod_cerner.HOSPITALISATION ON MC_HONUM = HO_NUM WHERE MC_FACNUM_CTI LIKE '%.RG' GROUP BY 1,2,3,4 ; UPDATE w_FACTURE SET FAC_REGL = MC_MON_REG, FAC_REGL_0 = CASE WHEN FAC_PYTYPE_CTI_HB = '0' THEN MC_MON_REG ELSE 0 END, FAC_REGL_1 = CASE WHEN FAC_PYTYPE_CTI_HB = '1' THEN MC_MON_REG ELSE 0 END, FAC_REGL_2 = CASE WHEN FAC_PYTYPE_CTI_HB = '2' THEN MC_MON_REG ELSE 0 END FROM ( SELECT MC_FACNUM_CTI, SUM(MC_MON_REG) AS MC_MON_REG FROM w_MOUV_COMPTA_REG GROUP BY 1 ) subview WHERE w_FACTURE.FAC_NUM_CTI = MC_FACNUM_CTI AND ( FAC_REGL <> MC_MON_REG OR FAC_REGL_0 <> CASE WHEN FAC_PYTYPE_CTI_HB = '0' THEN MC_MON_REG ELSE 0 END OR FAC_REGL_1 <> CASE WHEN FAC_PYTYPE_CTI_HB = '1' THEN MC_MON_REG ELSE 0 END OR FAC_REGL_2 <> CASE WHEN FAC_PYTYPE_CTI_HB = '2' THEN MC_MON_REG ELSE 0 END ) ; UPDATE w_FACTURE SET FAC_REGL = FAC_REGL_0+FAC_REGL_1+FAC_REGL_2 WHERE FAC_REGL <> FAC_REGL_0+FAC_REGL_1+FAC_REGL_2 ; -- Préparation factures CTI DROP TABLE IF EXISTS w_factures; CREATE TEMP TABLE w_factures AS SELECT FAC_NUM, FAC_SEANCE, nextval('activite[PX].s_factures'::regclass) AS oid, p_sejours.oid AS sejour_id, p_sejours.no_sejour, FAC_NUM_CTI AS no_facture, FAC_NUM_CTI AS no_facture_reference, 0::bigint AS facture_reference_id, ''::text AS no_facture_od_avoir, 0::bigint AS facture_od_avoir_id, FAC_DDEB AS date_debut, FAC_DFIN AS date_fin, p_sejours.ghs_id, p_sejours.ghs_bebe1_id, p_sejours.ghs_bebe2_id, p_sejours.ghs_bebe3_id, p_sejours.code_cp_demandee, CASE WHEN FAC_NUM_CTI LIKE '%.RG' THEN '9' WHEN FAC_MONT < 0 THEN '1' ELSE '0' END AS type_facture, CASE WHEN FAC_MONT < 0 THEN 1 ELSE 0 END AS nb_rejets, '1' AS code_facture, date(FAC_DATE) AS date_facture, '1' AS code_vente, to_char(FAC_DATE_VENT,'YYYYMM')::numeric AS mois_vente, date(FAC_DATE_VENT) AS date_vente, '' AS code_cloture, '' AS particularite_t2a, p_sejours.tiers_payant_0_id, p_sejours.tiers_payant_1_id, p_sejours.tiers_payant_2_id, p_sejours.tiers_payant_22_id, FAC_MONT AS montant_facture_c, 0::numeric AS montant_facture_h, FAC_MONT_0 AS montant_facture_0_c, 0::numeric AS montant_facture_0_h, FAC_MONT_1 + FAC_MONT_BG_1 AS montant_facture_1_c, 0::numeric AS montant_facture_1_h, FAC_MONT_2 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, FAC_MONT_0 + FAC_MONT_1 + FAC_MONT_2 AS montant_comptabilise_c, 0::numeric AS montant_comptabilise_h, FAC_MONT_0 AS montant_comptabilise_0_c, 0::numeric AS montant_comptabilise_0_h, FAC_MONT_1 AS montant_comptabilise_1_c, 0::numeric AS montant_comptabilise_1_h, FAC_MONT_2 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, FAC_MONT_BG_1 AS montant_comptabilise_budget_global_c, FAC_REGL AS montant_regle_c, 0::numeric AS montant_regle_h, FAC_REGL_0 AS montant_regle_0_c, 0::numeric AS montant_regle_0_h, FAC_REGL_1 AS montant_regle_1_c, 0::numeric AS montant_regle_1_h, FAC_REGL_2 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, CASE WHEN FAC_PYTYPE_CTI_HB = '0' AND FAC_BORD > 0 THEN '1' ELSE '0' END AS code_expedie_0, CASE WHEN (FAC_PYTYPE_CTI_HB = '1' OR FAC_PYTYPE_CTI_HB = '1') AND FAC_BORD > 0 THEN '1' ELSE '0' END AS code_expedie_1, CASE WHEN FAC_PYTYPE_CTI_HB = '2' AND FAC_BORD > 0 THEN '1' ELSE '0' END AS code_expedie_2, '0' AS code_expedie_22, CASE WHEN FAC_DATE_LOT IS NOT NULL THEN date(FAC_DATE_LOT) ELSE '20991231' END date_expedition, CASE WHEN FAC_PYTYPE_CTI_HB = '0' AND FAC_DATE_LOT IS NOT NULL THEN date(FAC_DATE_LOT) ELSE '20991231' END AS date_expedition_0, CASE WHEN (FAC_PYTYPE_CTI_HB = '1' OR FAC_PYTYPE_CTI_HB = '1') AND FAC_DATE_LOT IS NOT NULL THEN date(FAC_DATE_LOT) ELSE '20991231' END AS date_expedition_1, CASE WHEN FAC_PYTYPE_CTI_HB = '2' AND FAC_DATE_LOT IS NOT NULL THEN date(FAC_DATE_LOT) ELSE '20991231' END AS date_expedition_2, '20991231'::date AS date_expedition_22, CASE WHEN FAC_PYTYPE_CTI_HB = '0' AND FAC_BORD > 0 THEN FAC_BORD::text ELSE '' END AS no_bordereau_0, CASE WHEN (FAC_PYTYPE_CTI_HB = '1' OR FAC_PYTYPE_CTI_HB = '1') AND FAC_BORD > 0 THEN FAC_BORD::text ELSE '' END AS no_bordereau_1, CASE WHEN FAC_PYTYPE_CTI_HB = '2' AND FAC_BORD > 0 THEN FAC_BORD::text ELSE '' END AS no_bordereau_2, ''::text AS no_bordereau_22, '0001-01-01'::date AS date_solde, '0001-01-01'::date AS date_solde_c, '0001-01-01'::date AS date_solde_h, '0001-01-01'::date AS date_solde_0_c, '0001-01-01'::date AS date_solde_0_h, '0001-01-01'::date AS date_solde_1_c, '0001-01-01'::date AS date_solde_1_h, '0001-01-01'::date AS date_solde_2_c, '0001-01-01'::date AS date_solde_2_h, '0001-01-01'::date AS date_solde_22_c, '0001-01-01'::date AS date_solde_22_h FROM w_FACTURE JOIN w_HOSPITALISATION_SELECT ON FAC_HONUM = HO_NUM AND FAC_SEANCE = HO_SEANCE JOIN activite[PX].p_sejours ON w_HOSPITALISATION_SELECT.sejour_id = p_sejours.oid ; CREATE INDEX w_factures_i1 ON w_factures USING btree (no_facture); CREATE INDEX w_factures_FAC_NUM ON w_factures USING btree (FAC_NUM); CREATE INDEX w_factures_FAC_SEANCE ON w_factures USING btree (FAC_SEANCE); UPDATE w_factures SET facture_od_avoir_id = w_factures_od_avoir.oid FROM w_factures w_factures_od_avoir WHERE w_factures.no_facture_od_avoir = w_factures_od_avoir.no_facture ; UPDATE w_factures SET type_facture = 'X' WHERE w_factures.no_facture_od_avoir <> '0' AND w_factures.no_facture_od_avoir <> '' AND w_factures.type_facture = '0' ; UPDATE w_factures SET no_facture_reference = subview.no_facture_reference FROM (SELECT sejour_id, (MAX(ARRAY[date_facture::text,no_facture]))[2] AS no_facture_reference FROM w_factures WHERE type_facture = '0' GROUP BY 1 ) subview WHERE w_factures.sejour_id = subview.sejour_id AND w_factures.no_facture_reference <> subview.no_facture_reference ; UPDATE w_factures SET facture_reference_id = w_factures_reference.oid FROM w_factures w_factures_reference WHERE w_factures.no_facture_reference = w_factures_reference.no_facture ; truncate activite[PX].p_factures; SELECT base.cti_disable_index('activite', 'i_factures_3'); SELECT base.cti_disable_index('activite', 'i_factures_4'); SELECT base.cti_disable_index('activite', 'i_factures_5'); SELECT base.cti_disable_index('activite', 'i_factures_6'); SELECT base.cti_disable_index('activite', 'i_factures_7'); SELECT base.cti_disable_index('activite', 'i_factures_8'); SELECT base.cti_disable_index('activite', 'i_factures_9'); SELECT base.cti_disable_index('activite', 'i_factures_10'); SELECT base.cti_disable_index('activite', 'i_factures_11'); SELECT base.cti_disable_index('activite', 'i_factures_12'); SELECT base.cti_disable_index('activite', 'i_factures_13'); SELECT base.cti_disable_index('activite', 'i_factures_14'); INSERT INTO activite[PX].p_factures ( oid, sejour_id, no_sejour, no_facture, no_facture_reference, facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, date_debut, date_fin, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, code_cp_demandee, type_facture, nb_rejets, code_facture, date_facture, code_vente, mois_vente, date_vente, code_cloture, particularite_t2a, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, montant_facture_c, montant_facture_h, montant_facture_0_c, montant_facture_0_h, montant_facture_1_c, montant_facture_1_h, montant_facture_2_c, montant_facture_2_h, montant_facture_22_c, montant_facture_22_h, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_22_c, montant_comptabilise_22_h, montant_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, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_22, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, date_expedition_22, no_bordereau_0, no_bordereau_1, no_bordereau_2, no_bordereau_22, date_solde, date_solde_c, date_solde_h, date_solde_0_c, date_solde_0_h, date_solde_1_c, date_solde_1_h, date_solde_2_c, date_solde_2_h, date_solde_22_c, date_solde_22_h ) SELECT oid, sejour_id, no_sejour, no_facture, w_factures.no_facture_reference, facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, date_debut, date_fin, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, code_cp_demandee, type_facture, nb_rejets, code_facture, date_facture, code_vente, mois_vente, date_vente, code_cloture, particularite_t2a, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, montant_facture_c, montant_facture_h, montant_facture_0_c, montant_facture_0_h, montant_facture_1_c, montant_facture_1_h, montant_facture_2_c, montant_facture_2_h, montant_facture_22_c, montant_facture_22_h, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_22_c, montant_comptabilise_22_h, montant_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, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_22, CASE WHEN date_expedition <> '00010101' THEN date_expedition ELSE '20991231' END, CASE WHEN date_expedition_0 <> '00010101' THEN date_expedition_0 ELSE '20991231' END, CASE WHEN date_expedition_1 <> '00010101' THEN date_expedition_1 ELSE '20991231' END, CASE WHEN date_expedition_2 <> '00010101' THEN date_expedition_2 ELSE '20991231' END, CASE WHEN date_expedition_22 <> '00010101' THEN date_expedition_22 ELSE '20991231' END, no_bordereau_0, no_bordereau_1, no_bordereau_2, no_bordereau_22, CASE WHEN date_solde <> '00010101' THEN date_solde ELSE '20991231' END, CASE WHEN date_solde_c <> '00010101' THEN date_solde_c ELSE '20991231' END, CASE WHEN date_solde_h <> '00010101' THEN date_solde_h ELSE '20991231' END, CASE WHEN date_solde_0_c <> '00010101' THEN date_solde_0_c ELSE '20991231' END, CASE WHEN date_solde_0_h <> '00010101' THEN date_solde_0_h ELSE '20991231' END, CASE WHEN date_solde_1_c <> '00010101' THEN date_solde_1_c ELSE '20991231' END, CASE WHEN date_solde_1_h <> '00010101' THEN date_solde_1_h ELSE '20991231' END, CASE WHEN date_solde_2_c <> '00010101' THEN date_solde_2_c ELSE '20991231' END, CASE WHEN date_solde_2_h <> '00010101' THEN date_solde_2_h ELSE '20991231' END, CASE WHEN date_solde_22_c <> '00010101' THEN date_solde_22_c ELSE '20991231' END, CASE WHEN date_solde_22_h <> '00010101' THEN date_solde_22_h ELSE '20991231' END FROM w_factures ; SELECT base.cti_enable_index('activite', 'i_factures_3'); SELECT base.cti_enable_index('activite', 'i_factures_4'); SELECT base.cti_enable_index('activite', 'i_factures_5'); SELECT base.cti_enable_index('activite', 'i_factures_6'); SELECT base.cti_enable_index('activite', 'i_factures_7'); SELECT base.cti_enable_index('activite', 'i_factures_8'); SELECT base.cti_enable_index('activite', 'i_factures_9'); SELECT base.cti_enable_index('activite', 'i_factures_10'); SELECT base.cti_enable_index('activite', 'i_factures_11'); SELECT base.cti_enable_index('activite', 'i_factures_12'); SELECT base.cti_enable_index('activite', 'i_factures_13'); SELECT base.cti_enable_index('activite', 'i_factures_14'); -- 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%' 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 date_entree <= now() AND p_sejours.type_sejour <> '6' AND p_sejours.type_sejour <> '9' AND code_prevu <> 1 GROUP BY 1,2,3,4,5,6,7,8,9,10,11; INSERT INTO activite[PX].p_factures( finess, no_sejour, 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, no_sejour || '.00' || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END, no_sejour || '.00' || 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; UPDATE activite[PX].p_factures SET date_debut = date_entree, date_fin = CASE WHEN code_sorti = '1' THEN date_sortie ELSE date_fin END FROM activite[PX].p_sejours JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid AND avec_facturation_intermediaire IS DISTINCT FROM '1' WHERE p_factures.no_sejour = p_sejours.no_sejour AND CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END - date_entree < 30 AND ( p_factures.date_debut <> date_entree OR p_factures.date_fin <> CASE WHEN code_sorti = '1' THEN date_sortie ELSE date_fin END ); ]]> 1 or nb_prestation < -1 OR (prestation_code = 'GHS' 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 w_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 sequence, no_sejour, facture_id, no_facture, date_vente, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, prestation_id, prestation_code, prestation_type_ventilation_jour, compte_produit_id, lieu_id, origine_facturation_id, prix_unitaire, taux_0, taux_1, taux_2, taux_22, 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, 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, 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, round(montant_comptabilise_budget_global_1 / ABS(nb_det),2) AS montant_comptabilise_budget_global_1, rubrique_facture_id FROM w_factures_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_lignes_sup_c_sup_tot; CREATE TEMP TABLE w_factures_lignes_sup_c_sup_tot AS SELECT sequence, 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_comptabilise_budget_global_1) AS montant_comptabilise_budget_global_1 FROM w_factures_lignes_sup_c_sup GROUP BY 1; UPDATE w_factures_lignes_c SET date_fin = w_factures_lignes_c.date_debut, nb_rubrique = w_factures_lignes_c.nb_rubrique - w_factures_lignes_sup_c_sup_tot.nb_rubrique, nb_prestation = w_factures_lignes_c.nb_prestation - w_factures_lignes_sup_c_sup_tot.nb_prestation, montant_facture = w_factures_lignes_c.montant_facture - w_factures_lignes_sup_c_sup_tot.montant_facture, montant_facture_0 = w_factures_lignes_c.montant_facture_0 - w_factures_lignes_sup_c_sup_tot.montant_facture_0, montant_facture_1 = w_factures_lignes_c.montant_facture_1 - w_factures_lignes_sup_c_sup_tot.montant_facture_1, montant_facture_2 = w_factures_lignes_c.montant_facture_2 - w_factures_lignes_sup_c_sup_tot.montant_facture_2, montant_facture_22 = w_factures_lignes_c.montant_facture_22 - w_factures_lignes_sup_c_sup_tot.montant_facture_22, montant_comptabilise = w_factures_lignes_c.montant_comptabilise - w_factures_lignes_sup_c_sup_tot.montant_comptabilise, montant_comptabilise_0 = w_factures_lignes_c.montant_comptabilise_0 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_0, montant_comptabilise_1 = w_factures_lignes_c.montant_comptabilise_1 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_1, montant_comptabilise_2 = w_factures_lignes_c.montant_comptabilise_2 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_2, montant_comptabilise_22 = w_factures_lignes_c.montant_comptabilise_22 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_22, montant_comptabilise_budget_global_1 = w_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 w_factures_lignes_c.sequence = w_factures_lignes_sup_c_sup_tot.sequence; -- Ajout des lignes INSERT INTO w_factures_lignes_c( sequence, no_sejour, facture_id, no_facture, date_vente, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, prestation_id, prestation_code, prestation_type_ventilation_jour, compte_produit_id, lieu_id, origine_facturation_id, prix_unitaire, taux_0, taux_1, taux_2, taux_22, date_debut, date_fin, nb_rubrique, nb_prestation, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_comptabilise_budget_global_1, rubrique_facture_id) SELECT sequence, no_sejour, facture_id, no_facture, date_vente, coefficient, coefficient_mco, rubrique_facturation_id, rubrique_comptabilisation_id, prestation_id, prestation_code, prestation_type_ventilation_jour, compte_produit_id, lieu_id, origine_facturation_id, prix_unitaire, taux_0, taux_1, taux_2, taux_22, date_debut, date_fin, nb_rubrique, nb_prestation, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_comptabilise_budget_global_1, rubrique_facture_id FROM w_factures_lignes_sup_c_sup; -- Lieu exécution 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 AND nb_externes <> 1; -- Rubriques internes cti SELECT activite[PX].cti_reorganize_rubrique_facture_c('w_factures_lignes_c'); -- Validation des lignes de facture SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_1'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_2'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_3'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_4'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_5'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_6'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_7'); SELECT base.cti_disable_index('activite', '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, 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, 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, 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, montant_comptabilise_budget_global_1, origine_facturation_id FROM w_factures_lignes_c WHERE montant_facture <> 0; SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_1'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_2'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_3'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_4'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_5'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_6'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_7'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_8'); ]]> 0 AND date_part('year',p_factures.date_facture) = date_part('year',p_sejours.date_sortie) THEN Array[to_char(p_sejour_pmsi.sejour_id,'FM000000000000'),p_factures.no_facture] ELSE NULL END))[2]::text AS no_facture_budget_global, (MAX(CASE WHEN p_factures.montant_facture_c > 0 AND date_part('year',p_factures.date_facture) = date_part('year',p_sejours.date_sortie) THEN Array[to_char(p_sejour_pmsi.sejour_id,'FM000000000000'),p_factures.no_facture] ELSE NULL END))[2]::text AS no_facture_hors_budget_global, (MAX(Array[p_sejour_pmsi.sejour_id,p_sejours.lieu_sortie_id]))[2] AS lieu_sortie_id FROM activite[PX].p_sejour_pmsi JOIN activite[PX].p_sejours ON p_sejour_pmsi.sejour_id = p_sejours.oid LEFT JOIN activite[PX].p_factures ON p_factures.no_sejour = p_sejours.no_sejour WHERE p_sejour_pmsi.sejour_id IS NOT NULL AND p_sejour_pmsi.sejour_id <> 0 AND p_sejour_pmsi.rss_id <> 0 GROUP BY 1; -- Suppression des lignes issues de la facturation DELETE FROM activite[PX].p_factures_lignes_c WHERE montant_comptabilise_budget_global_1 <> 0 AND no_facture IN (SELECT no_facture FROM activite[PX].p_factures JOIN w_sejours_budget_global ON p_factures.no_sejour = w_sejours_budget_global.no_sejour AND w_sejours_budget_global.rss_id <> 0 ) ; DELETE FROM activite[PX].p_factures_lignes_c WHERE montant_comptabilise_budget_global_1 <> 0 AND no_facture IN (SELECT no_facture FROM activite[PX].p_factures JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite[PX].t_lieux On lieu_sortie_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON t_services_facturation.oid = service_facturation_id AND type_t2a = '1' ) ; -- Génération des lignes venant du pmsi DROP TABLE IF EXISTS w_factures_lignes_pmsi; CREATE TEMP TABLE w_factures_lignes_pmsi AS SELECT w_sejours_budget_global.no_sejour, w_sejours_budget_global.sejour_id, COALESCE(w_sejours_budget_global.no_facture_budget_global,w_sejours_budget_global.no_facture_hors_budget_global,w_sejours_budget_global.no_sejour || '.BG') AS no_facture, 0::bigint AS facture_id, CASE WHEN p_rsf_detail.type = 'C' THEN 'H' ELSE 'C' END AS clinique_honoraire, p_rsf_detail.date_debut, p_rsf_detail.date_fin, p_rsf_detail.nombre AS nb_rubrique, p_rsf_detail.nombre AS nb_prestation, p_rsf_detail.coefficient AS coefficient, p_rsf_detail.coefficient_mco, COALESCE(t_rubriques_facturation.oid,0::bigint) AS rubrique_facturation_id, COALESCE(t_rubriques_facturation.oid,0::bigint) AS rubrique_comptabilisation_id, COALESCE(t_prestations_activite.oid,0::bigint) AS prestation_id, p_rsf_detail.sejour_remboursable AS montant_facture, 0::numeric AS montant_facture_0, p_rsf_detail.sejour_remboursable AS montant_facture_1, 0::numeric AS montant_facture_2, 0::numeric AS montant_facture_22, 0::numeric AS taux_0, p_rsf_detail.taux_remboursement AS taux_1, 0::numeric AS taux_2, 0::numeric AS taux_22, p_rsf_detail.prix_unitaire, w_sejours_budget_global.lieu_sortie_id AS lieu_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, 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, 1::bigint AS origine_facturation_id, CASE WHEN p_rss.traitement_epmsi IN ('30','31','32','33') THEN p_rsf_detail.sejour_remboursable ELSE 0 END AS montant_comptabilise_budget_global_1, 0::numeric AS protocole_id, 0::numeric AS compte_produit_id, t_prestations_pmsi.code AS prestation_code, ''::text AS uf_code, ''::text AS dmt_code, ''::text AS mt_code FROM pmsi.p_rsf_detail JOIN pmsi.p_rss ON p_rss.oid = p_rsf_detail.rss_id AND p_rss.etat = '' AND p_rss.en_cours = '0' JOIN pmsi.p_rsf_total ON p_rss.oid = p_rsf_total.rss_id AND p_rsf_total.valorise_fides IS DISTINCT FROM 1 JOIN pmsi.t_prestations t_prestations_pmsi ON t_prestations_pmsi.oid = p_rsf_detail.prestation_id JOIN base.t_finess ON p_rss.finess = t_finess.code AND t_finess.type_etablissement <> '1' JOIN w_sejours_budget_global ON p_rss.oid = w_sejours_budget_global.rss_id LEFT JOIN activite.t_prestations t_prestations_activite ON t_prestations_activite.code = t_prestations_pmsi.code LEFT JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code = t_prestations_pmsi.code WHERE est_ligne_rss = '1' AND p_rss.en_cours = '0' AND p_rss.date_sortie >= '[ENV_ADM_ANNEEDEBUT]0101' AND operation_lamda IS DISTINCT FROM '1' AND operation_lamda IS DISTINCT FROM '2' AND p_rss.traitement_epmsi IN ('30','31','32','33') ; -- Factures à créer DROP TABLE IF EXISTS w_factures_pmsi; CREATE TEMP TABLE w_factures_pmsi AS SELECT w_factures_lignes_pmsi.no_sejour, w_factures_lignes_pmsi.sejour_id, w_factures_lignes_pmsi.no_facture, p_sejours.date_entree AS date_debut, p_sejours.date_sortie AS date_fin, '0'::text AS type_facture, '1'::text AS code_facture, MAX(p_sejours.date_sortie) AS date_facture, MAX('1') AS code_vente, MAX(to_char(p_sejours.date_sortie,'YYYYMM')::numeric) AS mois_vente, MAX(p_sejours.date_sortie) AS date_solde, '0'::text AS particularite_t2a, MAX(p_sejours.date_sortie) AS date_vente, ''::text AS code_cloture, MAX(p_sejours.code_cp_demandee) AS code_cp_demandee, '20991231'::date AS date_encours, MAX(p_sejours.ghs_id) AS ghs_id, MAX(p_sejours.ghs_bebe1_id) AS ghs_bebe1_id, MAX(p_sejours.ghs_bebe2_id) AS ghs_bebe2_id, MAX(p_sejours.ghs_bebe3_id) AS ghs_bebe3_id, MAX(p_sejours.ghm_id) AS ghm_id, SUM(montant_facture) AS montant_facture_c, 0::numeric AS montant_facture_h, 0::numeric AS montant_regle_c, 0::numeric AS montant_regle_h, 0::numeric AS delai_facture, 0::numeric AS delai_solde, '20991231'::date AS date_expedition, 0::numeric AS delai_expedition, MAX(p_sejours.tiers_payant_1_id) AS tiers_payant_1_id, MAX(p_sejours.tiers_payant_2_id) AS tiers_payant_2_id, MAX(p_sejours.tiers_payant_22_id) AS tiers_payant_22_id, MAX(p_sejours.tiers_payant_0_id) AS tiers_payant_0_id, '20991231'::date AS date_solde_0_c, '20991231'::date AS date_solde_0_h, '20991231'::date AS date_solde_1_c, '20991231'::date AS date_solde_1_h, '20991231'::date AS date_solde_2_c, '20991231'::date AS date_solde_2_h, '20991231'::date AS date_solde_22_c, '20991231'::date AS date_solde_22_h, '20991231'::date AS date_expedition_0, '20991231'::date AS date_expedition_1, '20991231'::date AS date_expedition_2, '20991231'::date AS date_expedition_22, '0'::text AS code_expedie_0, '0'::text AS code_expedie_1, '0'::text AS code_expedie_2, '0'::text AS code_expedie_22, ''::text AS no_bordereau_0, ''::text AS no_bordereau_1, ''::text AS no_bordereau_2, ''::text AS no_bordereau_22, 0::numeric AS montant_facture_0_c, 0::numeric AS montant_facture_0_h, SUM(montant_facture) 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_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, 0::numeric AS delai_expedition_0, 0::numeric AS delai_expedition_1, 0::numeric AS delai_expedition_2, 0::numeric AS delai_expedition_22, 0::numeric AS delai_solde_0_c, 0::numeric AS delai_solde_0_h, 0::numeric AS delai_solde_1_c, 0::numeric AS delai_solde_1_h, 0::numeric AS delai_solde_2_c, 0::numeric AS delai_solde_2_h, 0::numeric AS delai_solde_22_c, 0::numeric AS delai_solde_22_h, 0::numeric AS montant_encours_c, 0::numeric AS montant_encours_0_c, 0::numeric AS montant_encours_1_c, 0::numeric AS montant_encours_2_c, 0::numeric AS montant_encours_22_c, 0::numeric AS montant_encours_h, 0::numeric AS montant_encours_0_h, 0::numeric AS montant_encours_1_h, 0::numeric AS montant_encours_2_h, 0::numeric AS montant_encours_22_h, 0::numeric AS nb_rejets, 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, w_factures_lignes_pmsi.no_facture AS no_facture_reference, 0::bigint AS facture_reference_id, '20991231'::date AS date_solde_reference, '20991231'::date AS date_solde_reference_c, '20991231'::date AS date_solde_reference_h, '20991231'::date AS date_solde_reference_0_c, '20991231'::date AS date_solde_reference_1_c, '20991231'::date AS date_solde_reference_2_c, '20991231'::date AS date_solde_reference_22_c, '20991231'::date AS date_solde_reference_0_h, '20991231'::date AS date_solde_reference_1_h, '20991231'::date AS date_solde_reference_2_h, '20991231'::date AS date_solde_reference_22_h, '20991231'::date AS date_solde_c, '20991231'::date AS date_solde_h, 0::numeric AS montant_facture_c_actes_inclus_dans_sejour, 0::numeric AS montant_facture_h_actes_inclus_dans_sejour, SUM(montant_comptabilise_budget_global_1) AS montant_comptabilise_budget_global_c, ''::text AS no_facture_od_avoir, 0::bigint AS facture_od_avoir_id FROM w_factures_lignes_pmsi JOIN activite[PX].p_sejours ON w_factures_lignes_pmsi.no_sejour = p_sejours.no_sejour WHERE w_factures_lignes_pmsi.no_facture LIKE '%BG' GROUP BY 1,2,3,4,5; -- Ajout des factures INSERT INTO activite[PX].p_factures (no_sejour, no_facture, date_debut, date_fin, type_facture, code_facture, date_facture, code_vente, mois_vente, date_solde, montant_facture_c, montant_facture_h, montant_regle_c, montant_regle_h, delai_facture, delai_solde, date_expedition, delai_expedition, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, tiers_payant_0_id, 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, 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, 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_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_expedition_0, delai_expedition_1, delai_expedition_2, delai_expedition_22, delai_solde_0_c, delai_solde_0_h, delai_solde_1_c, delai_solde_1_h, delai_solde_2_c, delai_solde_2_h, delai_solde_22_c, delai_solde_22_h, ghs_id, particularite_t2a, date_vente, code_cloture, 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, code_cp_demandee, date_encours, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, nb_rejets, 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, no_facture_reference, 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, date_solde_c, date_solde_h, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_comptabilise_budget_global_c, no_facture_od_avoir, sejour_id, facture_reference_id, facture_od_avoir_id, ghm_id) SELECt no_sejour, no_facture, date_debut, date_fin, type_facture, code_facture, date_facture, code_vente, mois_vente, date_solde, montant_facture_c, montant_facture_h, montant_regle_c, montant_regle_h, delai_facture, delai_solde, date_expedition, delai_expedition, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, tiers_payant_0_id, 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, 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, 'PMSIMCO' AS no_bordereau_1, no_bordereau_2, no_bordereau_22, 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_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_expedition_0, delai_expedition_1, delai_expedition_2, delai_expedition_22, delai_solde_0_c, delai_solde_0_h, delai_solde_1_c, delai_solde_1_h, delai_solde_2_c, delai_solde_2_h, delai_solde_22_c, delai_solde_22_h, ghs_id, particularite_t2a, date_vente, code_cloture, 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, code_cp_demandee, date_encours, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, nb_rejets, 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, no_facture_reference, 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, date_solde_c, date_solde_h, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_comptabilise_budget_global_c, no_facture_od_avoir, sejour_id, facture_reference_id, facture_od_avoir_id, ghm_id FROM w_factures_pmsi; -- Ajout des lignes INSERT INTO activite[PX].p_factures_lignes_c( no_facture, date_debut, date_fin, nb_rubrique, coefficient, coefficient_mco, rubrique_facturation_id, prestation_id, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, taux_0, taux_1, taux_2, taux_22, 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, protocole_id, compte_produit_id) SELECT p_factures.no_facture, w_factures_lignes_pmsi.date_debut, w_factures_lignes_pmsi.date_fin, nb_rubrique, coefficient, coefficient_mco, rubrique_facturation_id, prestation_id, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, taux_0, taux_1, taux_2, taux_22, 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, p_factures.oid AS facture_id, protocole_id, compte_produit_id FROM w_factures_lignes_pmsi JOIN activite[PX].p_factures ON w_factures_lignes_pmsi.no_facture = p_factures.no_facture ; -- 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 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, 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, 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, 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 ; -- En cours PMSI public INSERT INTO activite[PX].p_factures( sejour_id, no_sejour, no_facture, no_facture_reference, date_debut, date_fin, type_facture, code_facture, date_facture, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id) SELECT p_sejours.oid, p_sejours.no_sejour, p_sejours.no_sejour || '.BG', p_sejours.no_sejour || '.BG', p_sejours.date_entree, p_sejours.date_sortie, '0', '0', '20991231'::date, 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.ghs_id, p_sejours.ghs_bebe1_id, p_sejours.ghs_bebe2_id, p_sejours.ghs_bebe3_id FROM pmsi.p_rss JOIN base.t_finess ON p_rss.finess = t_finess.code AND t_finess.type_etablissement <> '1' JOIN activite[PX].p_sejours on no_sejour_administratif = p_sejours.no_sejour AND p_sejours.est_budget_global = '1' LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND p_factures.no_facture LIKE '%BG' WHERE p_rss.en_cours = '1' AND p_factures.no_facture IS NULL GROUP BY 1,2,3,4,5,6,10,11,12,13,14,15,16,17; -- Sejours BG PMSi qui ne sont pas dans les RSS INSERT INTO activite[PX].p_factures( sejour_id, no_sejour, no_facture, no_facture_reference, date_debut, date_fin, type_facture, code_facture, date_facture, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id) SELECT p_sejours.oid, p_sejours.no_sejour, p_sejours.no_sejour || '.BG', p_sejours.no_sejour || '.BG', p_sejours.date_entree, p_sejours.date_sortie, '0', '0', '20991231'::date, 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.ghs_id, p_sejours.ghs_bebe1_id, p_sejours.ghs_bebe2_id, p_sejours.ghs_bebe3_id FROM activite[PX].p_sejours JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE p_sejours.est_budget_global = '1' AND type_t2a = '1' AND date_entree between now() - interval '1 year' AND now() AND code_sorti = '1' AND no_sejour NOT IN (SELECt no_sejour FROM activite[PX].p_factures where no_facture like '%BG') AND no_sejour NOT IN ( SELECT p_factures.no_sejour FROM activite[PX].p_factures JOIN activite[PX].p_factures_lignes_c ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite[PX].t_prestations ON prestation_id = t_prestations.oid WHERE t_prestations.code = 'GHS' AND montant_facture > 0 ) AND no_sejour NOT IN ( SELECT p_factures.no_sejour 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 JOIN activite.t_prestations ON prestation_id = t_prestations.oid WHERE p_sejours.est_budget_global = '1' AND code_facture = '1' AND t_prestations.code = 'PJ' AND (taux_2 = 100 OR taux_0 = 100) GROUP BY 1 HAVING SUM(montant_facture_0+montant_facture_2) > 0 ); -- Factures non assurés ajoutées à tord (on trouve un 100% dans patient ou tp1 DROP TABLE IF EXISTS w_sejours_bg_24; CREATE TEMP TABLE w_sejours_bg_24 AS SELECT p_factures.no_sejour, SUM(montant_facture_0+montant_facture_1+montant_facture_2) AS montant_facture_100 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 JOIN activite.t_prestations ON prestation_id = t_prestations.oid JOIN activite[PX].p_sejour_pmsi ON p_sejour_pmsi.sejour_id = p_sejours.oid JOIN pmsi.p_rss ON p_sejour_pmsi.rss_id = p_rss.oid WHERE p_sejours.est_budget_global = '1' AND code_facture = '1' AND t_prestations.code = 'PJ' AND (taux_1 + taux_2 + taux_0 = 100 OR taux_0+taux_1+taux_2=0 AND montant_facture_1 = montant_facture ) AND p_rss.traitement_epmsi NOT IN ('30','31','32','33') GROUP BY 1 HAVING SUM(montant_facture_0+montant_facture_1+montant_facture_2) > 0 ORDER BY 1; DELETE FROM activite[PX].p_factures_lignes_c USING activite[PX].p_factures WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND p_factures.no_sejour IN (SELECT no_sejour FROM w_sejours_bg_24) AND p_factures_lignes_c.no_facture LIKE '%BG' AND origine_facturation_id = 1; UPDATE activite[PX].p_factures SET code_facture = '1', montant_facture_c = 0, montant_facture_1_c = 0, montant_comptabilise_1_c =0, montant_comptabilise_budget_global_c = 0 WHERE no_sejour IN (SELECT no_sejour FROM w_sejours_bg_24) AND no_facture LIKE '%BG' AND montant_comptabilise_budget_global_c = 0; -- Suppression des factures encours externes ajoutées à tord DROP TABLE IF EXISTS w_factures_externes_double_bg; CREATE TEMP TABLE w_factures_externes_double_bg AS SELECT p_factures.no_sejour, MAX(CASE WHEN code_facture = '0' AND p_factures.montant_facture_c = 0 THEN no_facture ELSE '' END) AS no_facture_encours, MAX(CASE WHEN code_facture = '1' AND no_facture LIKE '%BG%' THEN no_facture ELSE '' END) AS no_facture_bg FROM activite[PX].p_factures JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour WHERE p_sejours.type_sejour = '3' GROUP BY 1 HAVING MAX(CASE WHEN code_facture = '0' THEN no_facture ELSE '' END) <> '' AND MAX(CASE WHEN code_facture = '1' AND no_facture LIKE '%BG%' THEN no_facture ELSE '' END) <> '' ; DELETE FROM activite[PX].p_factures WHERE code_facture = '0' AND montant_facture_c = 0 AND no_facture IN (SELECT no_facture_encours FROM w_factures_externes_double_bg) ; DELETE FROM activite[PX].p_factures_lignes_non_facturees_c WHERE no_facture IN (SELECT no_facture_encours FROM w_factures_externes_double_bg) ; -- Ajout des prestations NGAP non facturées INSERT INTO activite[PX].p_factures_lignes_non_facturees_c( facture_id, no_facture, date_debut, date_fin, nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, prix_unitaire, lieu_id) SELECT p_factures.oid AS facture_id, p_factures.no_facture AS no_facture, date(NGAP_DATE) AS date_debut, date(NGAP_DATE) AS date_fin, NGAP_NB AS nb_rubrique, NGAP_COEF AS coefficient, t_rubriques_facturation.oid AS rubrique_facturation_id, t_prestations.oid AS prestation_id, LC_PRIX AS prix_unitaire, p_sejours.lieu_sortie_id AS lieu_id FROM prod_cerner.PASSAGE_NGAP JOIN prod_cerner.CODE_TARIF ON NGAP_CTCODE = CT_CODE JOIN prod_cerner.LETTRE_CLE ON CT_LET = LC_CODE AND NGAP_DATE BETWEEN LC_DDEB AND COALESCE(LC_DFIN,'20991231') JOIN activite[PX].p_sejours ON NGAP_HONUM = p_sejours.code_original AND p_sejours.etat = '' AND NGAP_DATE BETWEEN p_sejours.date_entree AND p_sejours.date_sortie JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour JOIN activite.t_prestations ON t_prestations.code = CT_LET JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = NGAP_CTCODE WHERE p_factures.code_facture <> '1' AND p_sejours.type_sejour = '3' AND NGAP_DATE >= '[ENV_ADM_ANNEEDEBUT]0101' ; INSERT INTO activite[PX].p_factures_lignes_non_facturees_c( facture_id, no_facture, date_debut, date_fin, nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, prix_unitaire, lieu_id) SELECT p_factures.oid AS facture_id, p_factures.no_facture AS no_facture, date(CDAM_DATE) AS date_debut, date(CDAM_DATE) AS date_fin, 1 AS nb_rubrique, 1 AS coefficient, t_rubriques_facturation.oid AS rubrique_facturation_id, t_prestations.oid AS prestation_id, PRIX_ACTE * CASE CDAM_CCAM_ASSNOPREV WHEN '2' THEN 0.5 WHEN '3' THEN 0.75 ELSE 1 END AS prix_unitaire, p_sejours.lieu_sortie_id AS lieu_id FROM prod_cerner.PASSAGE_CDAM JOIN activite[PX].p_sejours ON CDAM_HONUM = p_sejours.code_original AND p_sejours.etat = '' AND CDAM_DATE BETWEEN p_sejours.date_entree AND p_sejours.date_sortie JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour JOIN base.t_actes ON CDAM_CODEACTE = t_actes.code JOIN base.t_ccam_regroupements ON (t_actes.ccam_regroupement_id_1 = t_ccam_regroupements.oid AND CDAM_CCAM_ACTIVITE <> '4' OR t_actes.ccam_regroupement_id_4 = t_ccam_regroupements.oid AND CDAM_CCAM_ACTIVITE = '4' ) JOIN activite.t_prestations ON t_prestations.code = t_ccam_regroupements.code JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = t_ccam_regroupements.code WHERE p_factures.code_facture <> '1' AND p_sejours.type_sejour = '3' AND CDAM_DATE >= '[ENV_ADM_ANNEEDEBUT]0101' ; ]]> = '[ENV_ADM_ANNEEDEBUT]0101' AND 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; 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 p_factures.oid AS facture_id, no_facture, date_trunc('month',MC_DATECR) + interval '1 month' - interval '1 day', 0::bigint AS rubrique_comptabilisation_id, 0::bigint 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(MC_MON_REG) AS montant_regle, SUM(CASE WHEN FAC_PYTYPE_CTI_HB = '0' THEN MC_MON_REG ELSE 0 END) AS montant_regle_0, SUM(CASE WHEN FAC_PYTYPE_CTI_HB = '1' THEN MC_MON_REG ELSE 0 END) AS montant_regle_1, SUM(CASE WHEN FAC_PYTYPE_CTI_HB = '2' THEN MC_MON_REG ELSE 0 END) AS montant_regle_2, 0::numeric AS montant_regle_22 FROM w_MOUV_COMPTA_REG JOIN w_FACTURE ON w_FACTURE.FAC_NUM_CTI = MC_FACNUM_CTI JOIN activite[PX].p_factures ON w_MOUV_COMPTA_REG.MC_FACNUM_CTI = p_factures.no_facture WHERE MC_DATECR >= '[ENV_ADM_ANNEEDEBUT]0101' AND MC_MON_REG <> 0 GROUP BY 1,2,3,4,5; SELECT base.cti_enable_index('activite', 'i_factures_soldes_c_1'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_c_2'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_c_3'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_c_4'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_c_8'); ]]> '1' AND type_facture <> 'X' AND type_facture <> 'P' THEN p_factures.no_facture ELSE null END) AS no_facture_reference_last, (MAX(ARRAY[to_char( CASE WHEN type_facture <> '1' AND type_facture <> 'X' AND type_facture <> 'P' AND (t_prestations.code IN ('GHS','PJ') OR (p_factures.no_facture LIKE '%BG' AND p_sejours.type_sejour IN ('1','2','5','6'))) THEN p_factures_lignes_c.taux_1 ELSE 0 END ,'FM00000'), CASE WHEN type_facture <> '1' AND type_facture <> 'X' AND type_facture <> 'P' AND (t_prestations.code IN ('GHS','PJ') OR (p_factures.no_facture LIKE '%BG' AND p_sejours.type_sejour IN ('1','2','5','6'))) THEN p_factures.no_facture ELSE NULL END ] ))[2] AS no_facture_reference_sejour_last, COUNT(DISTINCT p_factures.no_facture) AS nb_factures, MAX(avec_facturation_intermediaire) AS avec_facturation_intermediaire FROM activite[PX].p_factures JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite[PX].t_lieux ON p_sejours.lieu_sortie_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON service_facturation_id = t_services_facturation.oid 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 IN ('GHS','PJ') GROUP BY 1,2; 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_sejour_last, no_facture_reference_last, no_facture_last) FROM w_sejours_facture_reference JOIN activite[PX].p_sejours ON p_sejours.no_sejour = w_sejours_facture_reference.no_sejour WHERE p_factures.no_sejour = w_sejours_facture_reference.no_sejour AND ( p_factures.date_fin = w_sejours_facture_reference.date_fin OR p_factures.date_fin = p_sejours.date_sortie AND avec_facturation_intermediaire IS DISTINCT FROM '1' ) AND p_factures.no_facture_reference <> COALESCE(no_facture_reference_sejour_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_fin = date_fin_facture FROM activite[PX].p_factures_reference WHERE p_factures.no_facture_reference = p_factures_reference.no_facture_reference AND p_factures.date_fin <> p_factures_reference.date_fin_facture ; UPDATE activite[PX].p_factures SET date_debut = date_debut_facture FROM activite[PX].p_factures_reference WHERE p_factures.no_facture_reference = p_factures_reference.no_facture_reference AND p_factures.date_debut <> p_factures_reference.date_debut_facture ; INSERT INTO base.t_actes (code, texte, texte_court, nomenclature, ccam_regroupement_id_1) SELECT CT_LET, MAX(CT_LIB), MAX(CT_LIB), 'NGAP', MAX(t_ccam_regroupements.oid) FROM prod_cerner.PASSAGE_NGAP JOIN prod_cerner.CODE_TARIF ON NGAP_CTCODE = CT_CODE JOIN base.t_ccam_regroupements ON t_ccam_regroupements.Code = 'NGAP' LEFT JOIN base.t_actes ON t_actes.code = CT_LET WHERE CT_LET NOT IN ('SE1','SE2','SE3','SE4','SE5', 'SE6', 'SE7','ATU', 'FPU','FFM') AND t_actes.oid IS NULL GROUP BY 1 ORDER BY 1 ; SELECT base.cti_disable_index('activite', 'i_factures_lignes_h_1'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_h_2'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_h_3'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_h_4'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_h_5'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_h_6'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_h_7'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_h_8'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_h_9'); DROP TABLE IF EXISTS w_PASSAGE_NGAP; CREATE TEMP TABLE w_PASSAGE_NGAP AS SELECT row_number() OVER () AS oid, 0 as lieu_id, code_original_1, code_original_2, code_original_3, code_original_4, code_original_5, PASSAGE_NGAP.*, CODE_TARIF.*, LETTRE_CLE.* FROM prod_cerner.PASSAGE_NGAP JOIN prod_cerner.CODE_TARIF ON NGAP_CTCODE = CT_CODE JOIN prod_cerner.LETTRE_CLE ON CT_LET = LC_CODE AND NGAP_DATE BETWEEN LC_DDEB AND COALESCE(LC_DFIN,'20991231') JOIN activite[PX].p_sejours ON no_sejour = NGAP_HONUM JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid ; ANALYSE w_PASSAGE_NGAP ; CREATE INDEX w_PASSAGE_NGAP_oid ON w_PASSAGE_NGAP USING btree (oid); DROP TABLE IF EXISTS w_PASSAGE_NGAP_facture; CREATE TEMP TABLE w_PASSAGE_NGAP_facture AS SELECT PASSAGE_NGAP.oid, NGAP_HONUM AS HONUM, MAX(no_facture) AS no_facture, (MAX(ARRAY[no_facture,p_factures.oid::text]))[2]::bigint AS facture_id, MAX(p_sejours.lieu_sortie_id) AS lieu_sortie_id FROM w_PASSAGE_NGAP PASSAGE_NGAP JOIN activite[PX].p_sejours ON NGAP_HONUM = p_sejours.no_sejour AND p_sejours.etat = '' JOIN activite[PX].p_factures ON NGAP_HONUM = p_factures.no_sejour AND p_factures.no_facture = p_factures.no_facture_reference AND NGAP_DATE BETWEEN p_factures.date_debut AND p_factures.date_fin GROUP BY 1,2 ; ANALYSE w_PASSAGE_NGAP_facture ; CREATE INDEX w_PASSAGE_NGAP_facture_oid ON w_PASSAGE_NGAP_facture USING btree (oid) ; 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 w_PASSAGE_NGAP.code_original_1, w_PASSAGE_NGAP.code_original_2, w_PASSAGE_NGAP.code_original_3, w_PASSAGE_NGAP.code_original_4, w_PASSAGE_NGAP.code_original_5, NGAP_UFXCODE FROM w_PASSAGE_NGAP LEFT JOIN activite[PX].t_lieux ON ( t_lieux.code_original_1 = w_PASSAGE_NGAP.code_original_1 AND t_lieux.code_original_2 = w_PASSAGE_NGAP.code_original_2 AND t_lieux.code_original_3 = w_PASSAGE_NGAP.code_original_3 AND t_lieux.code_original_4 = w_PASSAGE_NGAP.code_original_4 AND t_lieux.code_original_5 = w_PASSAGE_NGAP.code_original_5 AND t_lieux.code_original_6 = NGAP_UFXCODE ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4,5,6 ; UPDATE w_PASSAGE_NGAP SET lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE t_lieux.code_original_1 = w_PASSAGE_NGAP.code_original_1 AND t_lieux.code_original_2 = w_PASSAGE_NGAP.code_original_2 AND t_lieux.code_original_3 = w_PASSAGE_NGAP.code_original_3 AND t_lieux.code_original_4 = w_PASSAGE_NGAP.code_original_4 AND t_lieux.code_original_5 = w_PASSAGE_NGAP.code_original_5 AND t_lieux.code_original_6 = NGAP_UFXCODE ; INSERT INTO activite[PX].p_factures_lignes_h( no_facture, date_debut, date_fin, coefficient, coefficient_mco, prestation_id, nb_rubrique, nb_prestation, prix_unitaire, taux_0, taux_1, taux_2, taux_22, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, lieu_id, montant_depassement, acte_id, medecin_facture_id, medecin_comptabilise_id, heure_debut, phase_ccam, activite_ccam, extension_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4, 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, facture_id, protocole_id, rubrique_facturation_id, rubrique_comptabilisation_id, montant_non_facture ) SELECT w_PASSAGE_NGAP_facture.no_facture, date(NGAP_DATE) AS date_debut, date(NGAP_DATE) AS date_fin, CASE WHEN CT_COEF = NGAP_COEF THEN CT_COEF ELSE CT_COEF * NGAP_COEF END AS coefficient, 1 AS coefficient_mco, COALESCE(t_prestations.oid, 0) AS prestation_id, NGAP_NB AS nb_rubrique, NGAP_NB AS nb_prestation, LC_PRIX AS prix_unitaire, 0 AS taux_0, 0 AS taux_1, 0 AS taux_2, 0 AS taux_22, NGAP_NB * (CASE WHEN CT_COEF = NGAP_COEF THEN CT_COEF ELSE CT_COEF * NGAP_COEF END ) * LC_PRIX AS montant_facture, 0 AS montant_facture_0, NGAP_NB * (CASE WHEN CT_COEF = NGAP_COEF THEN CT_COEF ELSE CT_COEF * NGAP_COEF END ) * LC_PRIX AS montant_facture_1, 0 AS montant_facture_2, 0 AS montant_facture_22, 0 AS montant_comptabilise, 0 AS montant_comptabilise_0, 0 AS montant_comptabilise_1, 0 AS montant_comptabilise_2, 0 AS montant_comptabilise_22, PASSAGE_NGAP.lieu_id AS lieu_id, 0 AS montant_depassement, COALESCE(t_actes.oid,0) AS acte_id, COALESCE(t_medecins_administratifs.oid,0) AS medecin_facture_id, COALESCE(t_medecins_administratifs.oid,0) AS medecin_comptabilise_id, to_char(NGAP_HEURE,'HH24MISS')::numeric AS heure_debut, '' AS phase_ccam, '' AS activite_ccam, '' AS extension_ccam, '' AS modificateur_ccam_1, '' AS modificateur_ccam_2, '' AS modificateur_ccam_3, '' AS modificateur_ccam_4, 0 AS montant_encours, 0 AS montant_encours_0, 0 AS montant_encours_1, 0 AS montant_encours_2, 0 AS montant_encours_22, 0 AS montant_facture_actes_inclus_dans_sejour, 0 AS montant_facture_0_actes_inclus_dans_sejour, 0 AS montant_facture_1_actes_inclus_dans_sejour, 0 AS montant_facture_2_actes_inclus_dans_sejour, 0 AS montant_facture_22_actes_inclus_dans_sejour, w_PASSAGE_NGAP_facture.facture_id, 0 AS protocole_id, COALESCE(t_rubriques_facturation.oid,0) AS rubrique_facturation_id, COALESCE(t_rubriques_facturation.oid,0) AS rubrique_comptabilisation_id, 0 AS montant_non_facture FROM w_PASSAGE_NGAP PASSAGE_NGAP JOIN w_PASSAGE_NGAP_facture ON PASSAGE_NGAP.oid = w_PASSAGE_NGAP_facture.oid LEFT JOIN activite.t_prestations ON t_prestations.code = CT_LET LEFT JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = NGAP_CTCODE LEFT JOIN base.t_actes ON t_actes.code = CT_LET LEFT JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = NGAP_INXCODE WHERE CT_LET NOT IN ('SE1','SE2','SE3','SE4','SE5','SE6', 'SE7','ATU', 'FPU','FFM') ; DROP TABLE IF EXISTS w_PASSAGE_CDAM; CREATE TEMP TABLE w_PASSAGE_CDAM AS SELECT row_number() OVER () AS oid, 0 as lieu_id, code_original_1, code_original_2, code_original_3, code_original_4, code_original_5, PASSAGE_CDAM.* FROM prod_cerner.PASSAGE_CDAM JOIN activite[PX].p_sejours ON no_sejour = CDAM_HONUM JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid ; ANALYSE w_PASSAGE_CDAM ; CREATE INDEX w_PASSAGE_CDAM_oid ON w_PASSAGE_CDAM USING btree (oid); 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 w_PASSAGE_CDAM.code_original_1, w_PASSAGE_CDAM.code_original_2, w_PASSAGE_CDAM.code_original_3, w_PASSAGE_CDAM.code_original_4, w_PASSAGE_CDAM.code_original_5, CDAM_UFXCODE FROM w_PASSAGE_CDAM LEFT JOIN activite[PX].t_lieux ON ( t_lieux.code_original_1 = w_PASSAGE_CDAM.code_original_1 AND t_lieux.code_original_2 = w_PASSAGE_CDAM.code_original_2 AND t_lieux.code_original_3 = w_PASSAGE_CDAM.code_original_3 AND t_lieux.code_original_4 = w_PASSAGE_CDAM.code_original_4 AND t_lieux.code_original_5 = w_PASSAGE_CDAM.code_original_5 AND t_lieux.code_original_6 = CDAM_UFXCODE ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4,5,6 ; UPDATE w_PASSAGE_CDAM SET lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE t_lieux.code_original_1 = w_PASSAGE_CDAM.code_original_1 AND t_lieux.code_original_2 = w_PASSAGE_CDAM.code_original_2 AND t_lieux.code_original_3 = w_PASSAGE_CDAM.code_original_3 AND t_lieux.code_original_4 = w_PASSAGE_CDAM.code_original_4 AND t_lieux.code_original_5 = w_PASSAGE_CDAM.code_original_5 AND t_lieux.code_original_6 = CDAM_UFXCODE ; DROP TABLE IF EXISTS w_PASSAGE_CDAM_facture; CREATE TEMP TABLE w_PASSAGE_CDAM_facture AS SELECT PASSAGE_CDAM.oid, CDAM_HONUM AS HONUM, MAX(no_facture) AS no_facture, (MAX(ARRAY[no_facture,p_factures.oid::text]))[2]::bigint AS facture_id, MAX(p_sejours.lieu_sortie_id) AS lieu_sortie_id FROM w_PASSAGE_CDAM PASSAGE_CDAM JOIN activite[PX].p_sejours ON CDAM_HONUM = p_sejours.no_sejour AND p_sejours.etat = '' JOIN activite[PX].p_factures ON CDAM_HONUM = p_factures.no_sejour AND p_factures.no_facture = p_factures.no_facture_reference AND CDAM_DATE BETWEEN p_factures.date_debut AND p_factures.date_fin GROUP BY 1,2 ; ANALYSE w_PASSAGE_CDAM_facture ; CREATE INDEX w_PASSAGE_CDAM_facture_HONUM ON w_PASSAGE_CDAM_facture USING btree (HONUM); INSERT INTO activite[PX].p_factures_lignes_h( no_facture, date_debut, date_fin, coefficient, coefficient_mco, prestation_id, nb_rubrique, nb_prestation, prix_unitaire, taux_0, taux_1, taux_2, taux_22, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, lieu_id, montant_depassement, acte_id, medecin_facture_id, medecin_comptabilise_id, heure_debut, phase_ccam, activite_ccam, extension_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4, 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, facture_id, protocole_id, rubrique_facturation_id, rubrique_comptabilisation_id, montant_non_facture ) SELECT w_PASSAGE_CDAM_facture.no_facture, date(CDAM_DATE) AS date_debut, date(CDAM_DATE) AS date_fin, 1 AS coefficient, 1 AS coefficient_mco, t_prestations.oid AS prestation_id, 1 AS nb_rubrique, 1 AS nb_prestation, PRIX_ACTE * CASE CDAM_CCAM_ASSNOPREV WHEN '2' THEN 0.5 WHEN '3' THEN 0.75 ELSE 1 END AS prix_unitaire, 0 AS taux_0, 0 AS taux_1, 0 AS taux_2, 0 AS taux_22, PRIX_ACTE * CASE CDAM_CCAM_ASSNOPREV WHEN '2' THEN 0.5 WHEN '3' THEN 0.75 ELSE 1 END AS montant_facture, 0 AS montant_facture_0, PRIX_ACTE * CASE CDAM_CCAM_ASSNOPREV WHEN '2' THEN 0.5 WHEN '3' THEN 0.75 ELSE 1 END AS montant_facture_1, 0 AS montant_facture_2, 0 AS montant_facture_22, 0 AS montant_comptabilise, 0 AS montant_comptabilise_0, 0 AS montant_comptabilise_1, 0 AS montant_comptabilise_2, 0 AS montant_comptabilise_22, PASSAGE_CDAM.lieu_id AS lieu_id, 0 AS montant_depassement, COALESCE(t_actes.oid,0) AS acte_id, COALESCE(t_medecins_administratifs.oid,0) AS medecin_facture_id, COALESCE(t_medecins_administratifs.oid,0) AS medecin_comptabilise_id, to_char(CDAM_HEURE,'HH24MISS')::numeric AS heure_debut, CDAM_CCAM_PHASTRAIT::text AS phase_ccam, CDAM_CCAM_ACTIVITE AS activite_ccam, CDAM_CCAM_EXTDOC AS extension_ccam, CDAM_CCAM_MODIF1 AS modificateur_ccam_1, CDAM_CCAM_MODIF2 AS modificateur_ccam_2, CDAM_CCAM_MODIF3 AS modificateur_ccam_3, CDAM_CCAM_MODIF4 AS modificateur_ccam_4, 0 AS montant_encours, 0 AS montant_encours_0, 0 AS montant_encours_1, 0 AS montant_encours_2, 0 AS montant_encours_22, 0 AS montant_facture_actes_inclus_dans_sejour, 0 AS montant_facture_0_actes_inclus_dans_sejour, 0 AS montant_facture_1_actes_inclus_dans_sejour, 0 AS montant_facture_2_actes_inclus_dans_sejour, 0 AS montant_facture_22_actes_inclus_dans_sejour, w_PASSAGE_CDAM_facture.facture_id, 0 AS protocole_id, COALESCE(t_rubriques_facturation.oid,0) AS rubrique_facturation_id, COALESCE(t_rubriques_facturation.oid,0) AS rubrique_comptabilisation_id, 0 AS montant_non_facture FROM w_PASSAGE_CDAM PASSAGE_CDAM JOIN activite[PX].p_sejours ON CDAM_HONUM = p_sejours.code_original AND p_sejours.etat = '' JOIN w_PASSAGE_CDAM_facture ON PASSAGE_CDAM.oid = w_PASSAGE_CDAM_facture.oid JOIN base.t_actes ON CDAM_CODEACTE = t_actes.code JOIN base.t_ccam_regroupements ON (t_actes.ccam_regroupement_id_1 = t_ccam_regroupements.oid AND CDAM_CCAM_ACTIVITE <> '4' OR t_actes.ccam_regroupement_id_4 = t_ccam_regroupements.oid AND CDAM_CCAM_ACTIVITE = '4' ) LEFT JOIN activite.t_prestations ON t_prestations.code = t_ccam_regroupements.code LEFT JOIN activite[PX].t_rubriques_facturation ON t_rubriques_facturation.code_original = t_ccam_regroupements.code LEFT JOIN activite[PX].t_medecins_administratifs ON t_medecins_administratifs.code_original = CDAM_INXCODE ; ANALYSE activite[PX].p_factures_lignes_h ; SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_1'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_2'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_3'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_4'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_5'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_6'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_7'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_8'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_9'); -- Supplément F UPDATE activite[PX].p_factures_lignes_h SET prix_unitaire = prix_unitaire + 19.06, montant_facture = montant_facture + 19.06, montant_facture_1 = montant_facture_1 + 19.06 WHERE montant_facture > 0 AND ( modificateur_ccam_1 = 'F' OR modificateur_ccam_2 = 'F' OR modificateur_ccam_3 = 'F' OR modificateur_ccam_4 = 'F' ) ; -- Supplément M UPDATE activite[PX].p_factures_lignes_h SET prix_unitaire = prix_unitaire + 26.88, montant_facture = montant_facture + 26.88, montant_facture_1 = montant_facture_1 + 26.88 WHERE montant_facture > 0 AND ( modificateur_ccam_1 = 'M' OR modificateur_ccam_2 = 'M' OR modificateur_ccam_3 = 'M' OR modificateur_ccam_4 = 'M' ) ; -- Supplément P UPDATE activite[PX].p_factures_lignes_h SET prix_unitaire = prix_unitaire + 35, montant_facture = montant_facture + 35, montant_facture_1 = montant_facture_1 + 35 WHERE montant_facture > 0 AND ( modificateur_ccam_1 = 'P' OR modificateur_ccam_2 = 'P' OR modificateur_ccam_3 = 'P' OR modificateur_ccam_4 = 'P' ) ; -- Comptabilbilité lettre clé G uniquement avec ECG UPDATE activite[PX].p_factures_lignes_h SET montant_facture = 0, montant_facture_1 = 0 FROM ( SELECT p_factures_lignes_h.no_facture, p_factures_lignes_h.date_debut, p_factures_lignes_h.medecin_facture_id, subview.prestation_id FROM activite[PX].p_factures_lignes_h JOIN activite.t_prestations ON prestation_id = t_prestations.oid JOIN base.t_actes ON acte_id = t_actes.oid JOIN ( SELECT p_factures_lignes_h.no_facture, p_factures_lignes_h.date_debut, p_factures_lignes_h.medecin_facture_id, p_factures_lignes_h.prestation_id FROM activite[PX].p_factures_lignes_h JOIN activite.t_prestations ON prestation_id = t_prestations.oid WHERE t_prestations.code IN ('G','GS') AND montant_facture <> 0 GROUP BY 1,2,3,4 ) subview ON p_factures_lignes_h.no_facture = subview.no_facture AND p_factures_lignes_h.date_debut = subview.date_debut AND p_factures_lignes_h.medecin_facture_id = subview.medecin_facture_id WHERE t_prestations.code = 'ATM' AND t_actes.code NOT LIKE 'DEQP%' GROUP BY 1,2,3,4 ) subview WHERE p_factures_lignes_h.no_facture = subview.no_facture AND p_factures_lignes_h.date_debut = subview.date_debut AND p_factures_lignes_h.medecin_facture_id = subview.medecin_facture_id AND p_factures_lignes_h.prestation_id = subview.prestation_id ; UPDATE activite[PX].p_factures_lignes_h SET lieu_id = p_sejours.lieu_sortie_id FROM activite[PX].p_factures JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour WHERE p_factures_lignes_h.no_facture = p_factures.no_facture AND (p_factures_lignes_h.lieu_id = 0 OR (SELECT count(*) FROM activite.t_divers WHERE code = 'CERNER_LIEU_H' AND valeur = '1') = 0) ; -- UPDATE activite[PX].p_factures_lignes_h -- SET lieu_id = p_mouvements_sejour.lieu_id -- FROM -- activite[PX].p_factures , -- activite[PX].p_sejours , -- 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.no_sejour = p_sejours.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 = 0 OR -- (p_factures_lignes_h.lieu_id <> p_mouvements_sejour.lieu_id AND -- (SELECT count(*) FROM activite.t_divers WHERE code = 'CERNER_LIEU_H' AND valeur = '1') = 0) OR -- (p_factures_lignes_h.lieu_id <> p_mouvements_sejour.lieu_id AND -- p_factures_lignes_h.lieu_id <> lieu_sortie_id AND -- (SELECT count(*) FROM activite.t_divers WHERE code = 'CERNER_LIEU_H' AND valeur = '1') = 1)) -- ; UPDATE activite[PX].p_factures_lignes_h SET lieu_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_factures , activite[PX].p_sejours , 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.no_sejour = p_sejours.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 = 0 OR (p_factures_lignes_h.lieu_id <> p_mouvements_sejour.lieu_id AND (SELECT count(*) FROM activite.t_divers WHERE code = 'CERNER_LIEU_H' AND valeur = '1') = 0) ) ; ]]> = '[ENV_ADM_ANNEEDEBUT]0101' 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,6; DROP TABLE IF EXISTS w_medecins_3; CREATE TEMP TABLE w_medecins_3 AS SELECT base.cti_to_number(right(code_original,3)) AS code_3, MAX(oid) AS medecin_administratif_id FROM activite[PX].t_medecins_administratifs GROUP BY 1; INSERT INTO activite[PX].p_factures_soldes_h( facture_id, no_facture, date_comptable, medecin_comptabilise_id, prestation_id, rubrique_comptabilisee_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 w_factures.oid AS facture_id, no_facture, (to_char(ACSDTF,'FM00')||to_char(ACADTF,'FM00')||to_char(ACMDTF,'FM00')||'01')::date, COALESCE(w_medecins_3.medecin_administratif_id,0) AS medecin_comptabilise_id, 0::bigint AS rubrique_comptabilisation_id, 0::bigint AS prestation_id, 0, 0, 0, 0, 0, SUM(0-ACMTFC) AS montant_regle, SUM(CASE WHEN ACINDI = 3 THEN 0-ACMTFC ELSE 0 END) AS montant_regle_0, SUM(CASE WHEN ACINDI = 1 THEN 0-ACMTFC ELSE 0 END) AS montant_regle_1, SUM(CASE WHEN ACINDI = 2 THEN 0-ACMTFC ELSE 0 END) AS montant_regle_2, 0 AS montant_regle_22 FROM prod_chataigneraie_as400.NXXXFAC_FACTURES FACTURES JOIN w_NDOADM_SELECT ON w_NDOADM_SELECT.NONUMA = FACTURES.NONUMA JOIN prod_chataigneraie_as400.XXXFICH_REGLI REGLI ON FACTURES.FAID = REGLI.ACNFAC JOIN w_factures ON REGLI.ACNFAC = w_factures.FAID LEFT JOIN w_medecins_3 ON w_medecins_3.code_3 = ACMED WHERE ACSDTF*100+ACADTF >= [ENV_ADM_ANNEEDEBUT] AND ACID > 100 GROUP BY 1,2,3,4,5,6 ; SELECT base.cti_enable_index('activite', 'i_factures_soldes_h_1'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_h_3'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_h_4'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_h_8'); ]]> 0 ; INSERT INTO activite[PX].t_rejets_noemie (texte, code) SELECT rejet_texte, MAX(rejet_code) FROM activite[PX].p_factures_rejets LEFT JOIN activite[PX].t_rejets_noemie ON (rejet_texte = t_rejets_noemie.texte) WHERE t_rejets_noemie.oid IS NULL GROUP BY 1; UPDATE activite[PX].p_factures_rejets SET rejet_id = t_rejets_noemie.oid FROM activite[PX].t_rejets_noemie WHERE rejet_texte = t_rejets_noemie.texte; ]]> 0 AND MC_TYPE <> 'IRR' AND MC_OD <> 'X' AND MC_JRN = 'JV' THEN CASE WHEN MC_SENS = 'D' THEN MC_MON ELSE 0-MC_MON END ELSE 0 END ) AS montant_ventes_c, SUM( CASE WHEN MC_JRN <> 'JV' THEN CASE WHEN MC_SENS = 'C' THEN MC_MON ELSE 0-MC_MON END ELSE 0 END::numeric ) AS montant_reglements_c, 0::numeric AS montant_solde_client_c, 0::numeric AS montant_ventes_h, 0::numeric AS montant_reglements_h, 0::numeric AS montant_solde_client_h FROM prod_cerner.MOUV_COMPTA WHERE (MC_COMPTE LIKE '411%' OR MC_COMPTE LIKE '412%' OR MC_COMPTE LIKE '413%' OR MC_COMPTE LIKE '414%' OR MC_COMPTE LIKE '452%' OR MC_COMPTE LIKE '467%') AND date(CASE WHEN date_part('year',MC_DATECR) = MC_EXER THEN MC_DATECR ELSE to_date(MC_EXER||'-12-31','YYYY-MM-DD') END) >= '[ENV_ADM_ANNEEDEBUT]0101' GROUP BY 1; -- Justificatif par facture DROP TABLE IF EXISTS w_factures_comptables; CREATE TEMP TABLE w_factures_comptables AS SELECT MC_NUMV::text AS no_facture, date(CASE WHEN date_part('year',MC_DATECR) = MC_EXER THEN MC_DATECR ELSE to_date(MC_EXER||'-12-31','YYYY-MM-DD') END) AS date_comptable, SUM(CASE WHEN MC_SENS = 'D' THEN MC_MON ELSE 0-MC_MON END) AS montant_ventes_c, 0::numeric AS montant_reglements_c, 0::numeric AS montant_ventes_h, 0::numeric AS montant_reglements_h FROM prod_cerner.MOUV_COMPTA WHERE MC_NUMV <> 0 AND (MC_COMPTE LIKE '411%' OR MC_COMPTE LIKE '412%' OR MC_COMPTE LIKE '413%' OR MC_COMPTE LIKE '414%' OR MC_COMPTE LIKE '452%' OR MC_COMPTE LIKE '467%') AND MC_TYPE <> 'IRR' AND MC_OD <> 'X' AND MC_JRN = 'JV' AND date(CASE WHEN date_part('year',MC_DATECR) = MC_EXER THEN MC_DATECR ELSE to_date(MC_EXER||'-12-31','YYYY-MM-DD') END) >= '[ENV_ADM_ANNEEDEBUT]0101' GROUP BY 1,2 ; -- Ajustement des factures trouvées dans les ecritures pour ajouter les séances DROP TABLE IF EXISTS w_factures_eclatees; CREATE TEMP TABLE w_factures_eclatees AS SELECT split_part(no_facture,'.',1)::numeric AS no_facture, MAX(date_vente) AS date_vente, SUM(montant_comptabilise_c) AS montant_comptabilise_c, MIN(no_facture) AS no_facture_1, base.cti_array_accum(no_facture) AS no_factures_array, count(*) AS nb FROM activite[PX].p_factures WHERE date_vente >= '[ENV_ADM_ANNEEDEBUT]0101' GROUP BY 1 ; -- Attribuer le bon n° de facture si une seule UPDATE w_factures_comptables SET no_facture = no_facture_1 FROM w_factures_eclatees WHERE w_factures_comptables.no_facture = w_factures_eclatees.no_facture AND w_factures_comptables.date_comptable = w_factures_eclatees.date_vente AND w_factures_eclatees.nb = 1 AND w_factures_comptables.no_facture <> no_facture_1 ; -- Eclater si plusieurs DELETE FROM w_factures_eclatees WHERE nb = 1; INSERT INTO w_factures_comptables( no_facture, date_comptable, montant_ventes_c, montant_reglements_c, montant_ventes_h, montant_reglements_h) SELECT p_factures.no_facture, p_factures.date_vente, p_factures.montant_comptabilise_c, 0, 0, 0 FROM w_factures_comptables JOIN w_factures_eclatees ON w_factures_comptables.no_facture = w_factures_eclatees.no_facture AND w_factures_comptables.date_comptable = w_factures_eclatees.date_vente AND w_factures_comptables.montant_ventes_c = w_factures_eclatees.montant_comptabilise_c JOIN activite[PX].p_factures ON p_factures.no_facture = ANY(no_factures_array) AND p_factures.no_facture <> w_factures_eclatees.no_facture_1 ; UPDATE w_factures_comptables SET no_facture = no_facture_1, montant_ventes_c = p_factures.montant_comptabilise_c FROM w_factures_eclatees JOIN activite[PX].p_factures ON p_factures.no_facture = no_facture_1 WHERE w_factures_comptables.no_facture = w_factures_eclatees.no_facture AND w_factures_comptables.date_comptable = w_factures_eclatees.date_vente ; -- Ajout des règlements (déjà éclatés) INSERT INTO w_factures_comptables SELECT MC_FACNUM_CTI::text AS no_facture, date(CASE WHEN date_part('year',MC_DATECR) = MC_EXER THEN MC_DATECR ELSE to_date(MC_EXER||'-12-31','YYYY-MM-DD') END) AS date_comptable, 0 AS montant_ventes_c, SUM(MC_MON_REG) AS montant_reglements_c, 0 AS montant_ventes_h, 0 AS montant_reglements_h FROM w_MOUV_COMPTA_REG WHERE date(CASE WHEN date_part('year',MC_DATECR) = MC_EXER THEN MC_DATECR ELSE to_date(MC_EXER||'-12-31','YYYY-MM-DD') END) >= '[ENV_ADM_ANNEEDEBUT]0101' GROUP BY 1,2 ; -- Validation TRUNCATE activite[PX].p_factures_comptables; INSERT INTO activite[PX].p_factures_comptables ( no_facture, date_comptable, montant_ventes_c, montant_reglements_c, montant_ventes_h, montant_reglements_h ) SELECT no_facture, date_comptable, SUM(montant_ventes_c), SUM(montant_reglements_c), 0 AS montant_ventes_h, 0 AS montant_reglements_h FROM w_factures_comptables GROUP BY 1,2 ; ]]> '' THEN SA_UFHEBERG WHEN t_divers.valeur = '1' THEN MH_SACODE WHEN MH_UFHEBER <> '' THEN MH_UFHEBER WHEN SA_CODE IS NOT NULL AND SA_UFHEBERG <> '' THEN SA_UFHEBERG ELSE MH_UFCODE END AS MH_ETCODE_CTI, CASE WHEN t_divers.valeur = '1' THEN CASE WHEN MH_SACODE <> '' THEN CASE WHEN MH_LICODE <> '' THEN MH_LICODE ELSE '0' END ELSE '' END ELSE CASE WHEN MH_LICODE <> '' AND MH_LICODE <> MH_UFCODE AND MH_LICODE <> MH_UFHEBER THEN MH_LICODE WHEN MH_SACODE <> '' AND MH_SACODE <> MH_UFCODE AND MH_SACODE <> MH_UFHEBER THEN MH_SACODE ELSE '0' END END AS MH_LICODE_CTI, ''::text AS MH_ELCODE_CTI FROM prod_cerner.MOUV_HOSPI JOIN prod_cerner.HOSPITALISATION ON HO_NUM = MH_HONUM LEFT JOIN prod_cerner.SALLE ON MH_SACODE = SA_CODE JOIN activite.t_divers ON t_divers.code = 'CERNER_SALLE=ETAGE' ; UPDATE w_MOUV_HOSPI_source SET MH_DFIN = '20991231', MH_HFIN = now() WHERE MH_DFIN IS NULL ; -- Modification Spécifique SJSL pour les urgences (nouvelle version CERNER) UPDATE w_MOUV_HOSPI_source SET MH_UFCODE = 'UR21', MH_COMM = '*URG*' WHERE MH_URGORG = 'UR21' AND MH_UFCODE <> 'CS21' AND MH_UFCODE <> 'UR21' AND MH_DDEB >= '[ENV_ADM_ANNEEDEBUT]0101' ; UPDATE w_MOUV_HOSPI_source SET MH_UFHEBER = 'UR00', MH_COMM = '*URG*' WHERE MH_SACODE = 'UR00' AND MH_UFHEBER <> 'UR00' AND MH_DDEB >= '[ENV_ADM_ANNEEDEBUT]0101' ; CREATE INDEX w_MOUV_HOSPI_source_MH_MANUMDOS ON w_MOUV_HOSPI_source USING btree (MH_MANUMDOS); -- Spécifique Saint Joseph St Luc -- Le premier mouveement transfert urgence sur hospit = Etage = UR00 UPDATE w_MOUV_HOSPI_source SET MH_ETCODE_CTI = 'UR00', MH_LICODE_CTI = '0' WHERE MH_ID IN ( SELECT w_MOUV_HOSPI_source_HOS.MH_ID FROM w_MOUV_HOSPI_source w_MOUV_HOSPI_source_URG JOIN w_MOUV_HOSPI_source w_MOUV_HOSPI_source_HOS ON w_MOUV_HOSPI_source_URG.MH_MANUMDOS = w_MOUV_HOSPI_source_HOS.MH_MANUMDOS AND w_MOUV_HOSPI_source_URG.MH_DDEB = w_MOUV_HOSPI_source_HOS.MH_DDEB AND to_char(w_MOUV_HOSPI_source_URG.MH_HDEB,'HH24MISS') = to_char(w_MOUV_HOSPI_source_HOS.MH_HDEB,'HH24MISS') AND w_MOUV_HOSPI_source_URG.MH_DFIN = w_MOUV_HOSPI_source_HOS.MH_DFIN AND to_char(w_MOUV_HOSPI_source_URG.MH_HFIN,'HH24MISS') = to_char(w_MOUV_HOSPI_source_HOS.MH_HFIN,'HH24MISS') AND w_MOUV_HOSPI_source_URG.MH_UFSOR = w_MOUV_HOSPI_source_HOS.MH_UFCODE AND w_MOUV_HOSPI_source_URG.MH_HONUM <> w_MOUV_HOSPI_source_HOS.MH_HONUM JOIN base.t_finess ON t_finess.Code = '690805361' WHERE w_MOUV_HOSPI_source_URG.MH_RSCODSOR = 'UH' AND w_MOUV_HOSPI_source_HOS.MH_RSCODENT = 'UH' AND w_MOUV_HOSPI_source_HOS.MH_ETCODE_CTI <> 'UR00' ) ; UPDATE w_MOUV_HOSPI_source SET MH_ETCODE_CTI = 'UR00', MH_LICODE_CTI = '0' WHERE MH_ID IN ( SELECT w_MOUV_HOSPI_source_HOS.MH_ID FROM w_MOUV_HOSPI_source w_MOUV_HOSPI_source_URG JOIN w_MOUV_HOSPI_source w_MOUV_HOSPI_source_HOS ON w_MOUV_HOSPI_source_URG.MH_MANUMDOS = w_MOUV_HOSPI_source_HOS.MH_MANUMDOS AND w_MOUV_HOSPI_source_URG.MH_DDEB = w_MOUV_HOSPI_source_HOS.MH_DDEB AND to_char(w_MOUV_HOSPI_source_URG.MH_HDEB,'HH24MISS') = to_char(w_MOUV_HOSPI_source_HOS.MH_HDEB,'HH24MISS') AND w_MOUV_HOSPI_source_URG.MH_DFIN = w_MOUV_HOSPI_source_HOS.MH_DFIN AND to_char(w_MOUV_HOSPI_source_URG.MH_HFIN,'HH24MISS') = to_char(w_MOUV_HOSPI_source_HOS.MH_HFIN,'HH24MISS') AND w_MOUV_HOSPI_source_URG.MH_HONUM <> w_MOUV_HOSPI_source_HOS.MH_HONUM JOIN base.t_finess ON t_finess.Code = '690805361' WHERE w_MOUV_HOSPI_source_URG.MH_RSCODSOR = 'UH' AND w_MOUV_HOSPI_source_HOS.MH_RSCODENT = 'UH' AND w_MOUV_HOSPI_source_HOS.MH_ETCODE_CTI <> 'UR00' ) ; UPDATE w_MOUV_HOSPI_source SET MH_ETCODE_CTI = 'UR00', MH_LICODE_CTI = '0' WHERE MH_ID IN ( SELECT w_MOUV_HOSPI_source_HOS.MH_ID FROM w_MOUV_HOSPI_source w_MOUV_HOSPI_source_URG JOIN w_MOUV_HOSPI_source w_MOUV_HOSPI_source_HOS ON w_MOUV_HOSPI_source_URG.MH_MANUMDOS = w_MOUV_HOSPI_source_HOS.MH_MANUMDOS AND w_MOUV_HOSPI_source_URG.MH_DDEB = w_MOUV_HOSPI_source_HOS.MH_DDEB AND to_char(w_MOUV_HOSPI_source_URG.MH_HDEB,'HH24MISS') = to_char(w_MOUV_HOSPI_source_HOS.MH_HDEB,'HH24MISS') AND w_MOUV_HOSPI_source_URG.MH_HONUM <> w_MOUV_HOSPI_source_HOS.MH_HONUM JOIN base.t_finess ON t_finess.Code = '690805361' WHERE w_MOUV_HOSPI_source_URG.MH_RSCODSOR = 'UH' AND w_MOUV_HOSPI_source_HOS.MH_RSCODENT = 'UH' AND w_MOUV_HOSPI_source_HOS.MH_ETCODE_CTI <> 'UR00' ) ; UPDATE w_MOUV_HOSPI_source SET MH_ELCODE_CTI = MH_ETCODE_CTI || '|' || MH_LICODE_CTI WHERE MH_LICODE_CTI <> '' ; ANALYSE w_MOUV_HOSPI_source; CREATE INDEX w_MOUV_HOSPI_source_i1 ON w_MOUV_HOSPI_source USING btree (MH_HONUM); CREATE INDEX w_MOUV_HOSPI_source_i2 ON w_MOUV_HOSPI_source USING btree (MH_INCODE); CREATE INDEX w_MOUV_HOSPI_source_i3 ON w_MOUV_HOSPI_source USING btree (MH_UFCODE); -- Fusion des urgences hospitalisés (SJSL < [ENV_ADM_ANNEEDEBUT]0630) DROP TABLE IF EXISTS w_FUSION_UR21; CREATE TEMP TABLE w_FUSION_UR21 AS SELECT MH_MANUMDOS, MH_DDEB, MH_HDEB, MAX(CASE WHEN MH_UFCODE = 'UR21' THEN MH_HONUM ELSE 0 END) AS MH_HONUM_urg, MAX(CASE WHEN MH_UFCODE <> 'UR21' THEN MH_HONUM ELSE 0 END) AS MH_HONUM_hos, MAX(CASE WHEN MH_UFCODE = 'UR21' THEN MH_UFCODE ELSE '' END) AS MH_UFHEBER_urg, MAX(CASE WHEN MH_UFCODE = 'UR21' THEN MH_ETCODE_CTI ELSE '' END) AS MH_ETCODE_CTI_urg, MAX(CASE WHEN MH_UFCODE = 'UR21' THEN MH_LICODE_CTI ELSE '' END) AS MH_LICODE_CTI_urg, MAX(CASE WHEN MH_UFCODE = 'UR21' THEN MH_ELCODE_CTI ELSE '' END) AS MH_ELCODE_CTI_urg FROM w_MOUV_HOSPI_source JOIN prod_cerner.HOSPITALISATION ON HO_NUM = MH_HONUM AND MH_DDEB = HO_DDEB AND HO_VALID <> 'X' WHERE MH_UFCODE <> 'CS21' GROUP BY 1,2,3 HAVING count(*) > 1 AND MAX(CASE WHEN MH_UFCODE = 'UR21' THEN MH_HONUM ELSE 0 END) > 0 AND MAX(CASE WHEN MH_UFCODE <> 'UR21' THEN MH_HONUM ELSE 0 END) > 0 ; UPDATE w_MOUV_HOSPI_source SET MH_UFCODE = 'UR21', MH_UFHEBER = MH_UFHEBER_urg, MH_ETCODE_CTI = MH_ETCODE_CTI_urg, MH_LICODE_CTI = MH_LICODE_CTI_urg, MH_ELCODE_CTI = MH_ELCODE_CTI_urg FROM w_FUSION_UR21 WHERE w_MOUV_HOSPI_source.MH_HONUM = w_FUSION_UR21.MH_HONUM_hos AND w_MOUV_HOSPI_source.MH_DDEB = w_FUSION_UR21.MH_DDEB AND w_MOUV_HOSPI_source.MH_HDEB = w_FUSION_UR21.MH_HDEB ; UPDATE prod_cerner.HOSPITALISATION SET HO_VALID = 'U' FROM w_FUSION_UR21 WHERE HOSPITALISATION.HO_NUM = MH_HONUM_urg ; ]]> substr(translate(IN_NOM,' -=()''',''),1,5) || substr(translate(IN_PRENOM,' -=()''',''),1,2) OR t_medecins_administratifs.nom <> IN_NOM OR t_medecins_administratifs.nom <> IN_NOM OR t_medecins_administratifs.prenom <> IN_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.IN_IDNATIONAL ); 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; ]]> '' GROUP BY 1 ORDER BY 1; INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, nb_lits, type_t2a) SELECT UF_CODE, UF_CODE, UF_LIB, UF_LIB, 0 AS nb_lits, '0' AS type_t2a FROM prod_cerner.UF WHERE UF_CODE NOT IN (SELECT code_original FROM activite[PX].t_services_facturation WHERE code_original IS NOT NULL) AND UF_CODE IN (SELECT NGAP_UFXCODE FROM prod_cerner.PASSAGE_NGAP) ORDER BY UF_CODE; INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, nb_lits, type_t2a) SELECT UF_CODE, UF_CODE, UF_LIB, UF_LIB, 0 AS nb_lits, '0' AS type_t2a FROM prod_cerner.UF WHERE UF_CODE NOT IN (SELECT code_original FROM activite[PX].t_services_facturation WHERE code_original IS NOT NULL) AND UF_CODE IN (SELECT CDAM_UFXCODE FROM prod_cerner.PASSAGE_CDAM) ORDER BY UF_CODE; UPDATE activite[PX].t_services_facturation SET mode_traitement_id = COALESCE(t_modes_traitement.oid,0) FROM prod_cerner.UF LEFT JOIN base.t_modes_traitement ON UF_ACTIVITE = t_modes_traitement.code WHERE t_services_facturation.code_original = UF_CODE AND COALESCE(mode_traitement_id,0) = 0 AND COALESCE(mode_traitement_id,0) <> COALESCE(t_modes_traitement.oid,0); INSERT INTO base.t_dmt(code_original, code, texte, texte_court) SELECT DP_CODE, DP_CODE, DP_LIB, DP_LIB FROM prod_cerner.DISP_PRES WHERE DP_CODE NOT IN (SELECT code FROM base.t_dmt WHERE code IS NOT NULL) AND DP_CODE <> '' GROUP BY 1,2,3,4 ORDER BY 1; UPDATE activite[PX].t_services_facturation SET dmt_id = COALESCE(t_dmt.oid,0) FROM prod_cerner.UF LEFT JOIN base.t_dmt ON UF_DPCODE = t_dmt.code WHERE t_services_facturation.code_original = UF_CODE AND COALESCE(dmt_id,0) = 0 AND COALESCE(dmt_id,0) <> COALESCE(t_dmt.oid,0); UPDATE activite[PX].t_services_facturation SET dmt_id = COALESCE(t_dmt.oid,0) FROM prod_cerner.UF LEFT JOIN base.t_dmt ON UF_DECODE = t_dmt.code WHERE t_services_facturation.code_original = UF_CODE 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 UF_CODE, UF_CODE, UF_LIB, UF_LIB FROM prod_cerner.UF WHERE UF_CODE NOT IN (SELECT code_original FROM activite[PX].t_unites_fonctionnelles WHERE code_original IS NOT NULL) AND UF_CODE IN (SELECT MH_UFCODE FROM w_MOUV_HOSPI_source) ORDER BY UF_CODE; INSERT INTO activite[PX].t_unites_fonctionnelles(code_original, code, texte, texte_court) SELECT UF_CODE, UF_CODE, UF_LIB, UF_LIB FROM prod_cerner.UF WHERE UF_CODE NOT IN (SELECT code_original FROM activite[PX].t_unites_fonctionnelles WHERE code_original IS NOT NULL) AND UF_CODE IN (SELECT NGAP_UFXCODE FROM prod_cerner.PASSAGE_NGAP) ORDER BY UF_CODE; INSERT INTO activite[PX].t_unites_fonctionnelles(code_original, code, texte, texte_court) SELECT UF_CODE, UF_CODE, UF_LIB, UF_LIB FROM prod_cerner.UF WHERE UF_CODE NOT IN (SELECT code_original FROM activite[PX].t_unites_fonctionnelles WHERE code_original IS NOT NULL) AND UF_CODE IN (SELECT CDAM_UFXCODE FROM prod_cerner.PASSAGE_CDAM) ORDER BY UF_CODE; UPDATE activite[PX].t_unites_fonctionnelles SET code = UF_CODE, texte = UF_LIB, texte_court = CASE WHEN texte_court = texte THEN UF_LIB ELSE texte_court END FROM prod_cerner.UF WHERE UF_CODE = code_original AND ( code IS DISTINCT FROM UF_CODE OR texte IS DISTINCT FROM UF_LIB OR texte_court IS DISTINCT FROM CASE WHEN texte_court = texte THEN UF_LIB ELSE texte_court END ); -- Unités médicales INSERT INTO activite[PX].t_unites_medicales(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_unites_medicales); INSERT INTO activite[PX].t_unites_medicales(code_original, code, texte, texte_court) SELECT code_original, code, texte, texte_court FROM activite[PX].t_unites_fonctionnelles WHERE t_unites_fonctionnelles.oid <> 0 AND t_unites_fonctionnelles.code_original NOT IN (SELECT t_unites_medicales.code_original FROM activite[PX].t_unites_medicales WHERE code_original IS NOT NULL) ORDER BY code; UPDATE activite[PX].t_unites_medicales SET code = t_unites_fonctionnelles.code, texte = t_unites_fonctionnelles.texte, texte_court = t_unites_fonctionnelles.texte_court FROM activite[PX].t_unites_fonctionnelles WHERE t_unites_medicales.code_original = t_unites_fonctionnelles.code_original AND t_unites_medicales.oid <> 0 AND ( t_unites_medicales.code IS DISTINCT FROM t_unites_fonctionnelles.code OR t_unites_medicales.texte IS DISTINCT FROM t_unites_fonctionnelles.texte OR t_unites_medicales.texte_court IS DISTINCT FROM t_unites_fonctionnelles.texte_court ); -- Activités INSERT INTO activite[PX].t_activites(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_activites); INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT RE_CODE, RE_CODE, RE_LIB, RE_LIB FROM prod_cerner.REGROUPEMENT WHERE RE_CODE NOT IN (SELECT code_original FROM activite[PX].t_activites WHERE code_original IS NOT NULL) AND RE_CODE IN (SELECT HO_RECODE FROM prod_cerner.HOSPITALISATION) ORDER BY RE_CODE; UPDATE activite[PX].t_activites SET code = RE_CODE, texte = RE_LIB, texte_court = RE_LIB FROM prod_cerner.REGROUPEMENT WHERE RE_CODE = code_original AND ( t_activites.code IS DISTINCT FROM RE_CODE OR t_activites.texte IS DISTINCT FROM RE_LIB OR t_activites.texte_court IS DISTINCT FROM RE_LIB ) ; -- Etages et lits INSERT INTO activite[PX].t_etages(oid, code_original, code, texte, texte_court, nb_lits) SELECT 0, 0, '', 'Non renseigné', 'Non renseigné', 0 WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_etages); INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court, nb_lits) SELECT MH_ETCODE_CTI, MH_ETCODE_CTI, MH_ETCODE_CTI, MH_ETCODE_CTI, 0 FROM w_MOUV_HOSPI_source WHERE MH_ETCODE_CTI <> '' AND MH_ETCODE_CTI NOT IN (SELECT code_original FROM activite[PX].t_etages WHERE code_original IS NOT NULL) GROUP BY 1 ORDER BY MH_ETCODE_CTI; UPDATE activite[PX].t_etages SET code = UF_CODE, texte = UF_LIB, texte_court = CASE WHEN texte_court = t_etages.texte THEN UF_LIB ELSE t_etages.texte_court END FROM prod_cerner.UF JOIN activite.t_divers ON t_divers.code = 'CERNER_SALLE=ETAGE' AND t_divers.valeur IS DISTINCT FROM '1' WHERE UF_CODE = code_original AND ( t_etages.code IS DISTINCT FROM UF_CODE OR t_etages.texte IS DISTINCT FROM UF_LIB OR t_etages.texte_court IS DISTINCT FROM CASE WHEN texte_court = t_etages.texte THEN UF_LIB ELSE t_etages.texte_court END ); UPDATE activite[PX].t_etages SET code = SA_CODE, texte = SA_LIB, texte_court = CASE WHEN texte_court = t_etages.texte THEN SA_LIB ELSE t_etages.texte_court END FROM prod_cerner.SALLE JOIN activite.t_divers ON t_divers.code = 'CERNER_SALLE=ETAGE' AND t_divers.valeur = '1' WHERE SA_CODE = code_original AND ( t_etages.code IS DISTINCT FROM SA_CODE OR t_etages.texte IS DISTINCT FROM SA_LIB OR t_etages.texte_court IS DISTINCT FROM CASE WHEN texte_court = t_etages.texte THEN SA_LIB ELSE t_etages.texte_court END ); 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); DROP TABLE IF EXISTS w_lits; CREATE TEMP TABLE w_lits AS SELECT MH_ETCODE_CTI AS etage_code, ''::text AS etage_texte, MH_LICODE_CTI AS lit_code, ''::text AS lit_texte, MH_ELCODE_CTI AS lit_code_original, 0::bigint AS lit_id FROM w_MOUV_HOSPI_source WHERE MH_ELCODE_CTI <> '' GROUP BY 1,2,3,4,5,6 ORDER BY 1,2,3,4,5,6; UPDATE w_lits SET lit_texte = LI_LIB FROM prod_cerner.LIT WHERE LI_CODE = lit_code ; UPDATE w_lits SET lit_texte = SA_LIB FROM prod_cerner.SALLE WHERE SA_CODE = lit_code AND lit_texte = '' ; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT lit_code_original, lit_code, lit_texte, lit_texte, t_etages.oid, CASE WHEN lit_texte ilike '%individuel%' THEN 'O' ELSE 'N' END AS chambre_particuliere FROM w_lits JOIN activite[PX].t_etages ON etage_code = t_etages.code_original WHERE lit_code_original <> '' AND lit_code_original NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL) GROUP BY 1,2,3,4,5,6 ORDER BY 1; UPDATE w_lits SET lit_id = t_lits.oid FROM activite[PX].t_lits WHERE lit_code_original = t_lits.code_original ; UPDATE activite[PX].t_lits SET code = lit_code, texte = lit_texte, texte_court = lit_texte FROM w_lits WHERE lit_code_original = code_original AND ( t_lits.code IS DISTINCT FROM lit_code OR t_lits.texte IS DISTINCT FROM lit_texte OR t_lits.texte_court IS DISTINCT FROM lit_texte ) ; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT code_original || '|0' , '', 'Non renseigné', 'Non renseigné', oid, 'O' FROM activite[PX].t_etages WHERE oid > 0 AND code_original || '|0' NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL ); ]]> '' AND CT_CODE NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code_original IS NOT NULL) GROUP BY 1 ORDER BY 1; UPDATE activite[PX].t_rubriques_facturation SET code = CT_CODE, texte = CT_LIB, texte_court = CT_LIB FROM ( SELECT CT_CODE, MAX(CT_LIB) AS CT_LIB FROM prod_cerner.CODE_TARIF WHERE CT_CODE <> '' GROUP BY 1 ) subview WHERE CT_CODE = code_original AND ( t_rubriques_facturation.code IS DISTINCT FROM CT_CODE OR t_rubriques_facturation.texte IS DISTINCT FROM CT_LIB OR t_rubriques_facturation.texte_court IS DISTINCT FROM CT_LIB ) ; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT LC_CODE, LC_CODE, (MAX(ARRAY[LC_DDEB::text,LC_LIB]))[2], (MAX(ARRAY[LC_DDEB::text,LC_LIB]))[2] FROM prod_cerner.LETTRE_CLE WHERE LC_LIB <> '' AND LC_CODE NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code_original IS NOT NULL) GROUP BY 1 ORDER BY 1; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT LC_CODE, LC_CODE, LC_CODE, LC_CODE FROM prod_cerner.LETTRE_CLE WHERE LC_LIB = '' AND LC_CODE NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code_original IS NOT NULL) GROUP BY 1 ORDER BY 1; UPDATE activite[PX].t_rubriques_facturation SET code = LC_CODE, texte = LC_DDEB, texte_court = LC_DDEB FROM ( SELECT LC_CODE, (MAX(ARRAY[LC_DDEB::text,LC_LIB]))[2] AS LC_DDEB FROM prod_cerner.LETTRE_CLE WHERE LC_CODE <> '' GROUP BY 1 ) subview WHERE LC_CODE = code_original AND ( t_rubriques_facturation.code IS DISTINCT FROM LC_CODE OR t_rubriques_facturation.texte IS DISTINCT FROM LC_DDEB OR t_rubriques_facturation.texte_court IS DISTINCT FROM LC_DDEB ) ; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT CT_LET, CT_LET, MAX(CT_LIB), MAX(CT_LIB) FROM prod_cerner.CODE_TARIF WHERE CT_LET <> '' AND CT_LET NOT IN (SELECT LC_CODE FROM prod_cerner.LETTRE_CLE) AND CT_LET NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code_original IS NOT NULL) GROUP BY 1 ORDER BY 1; UPDATE activite[PX].t_rubriques_facturation SET texte = CT_LIB, texte_court = CT_LIB FROM ( SELECT CT_LET, MAX(CT_LIB) AS CT_LIB FROM prod_cerner.CODE_TARIF JOIN activite[PX].t_rubriques_facturation ON CT_LET = code_original WHERE t_rubriques_facturation.code = t_rubriques_facturation.texte GROUP BY 1 HAVING count(DISTINCT CT_LIB) = 1 AND MAX(CT_LIB) <> CT_LET ) subview WHERE subview.CT_LET = t_rubriques_facturation.code_original ; 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) SELECT CT_LET, CT_LET, MAX(CT_LIB), MAX(CT_LIB) FROM prod_cerner.CODE_TARIF WHERE CT_LET <> '' AND CT_LET NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL) GROUP BY 1 ORDER BY 1; INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT LC_CODEB2, LC_CODEB2, MAX(LC_CODEB2), MAX(LC_CODEB2) FROM prod_cerner.LETTRE_CLE WHERE LC_CODEB2 <> '' AND LC_CODEB2 NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL) GROUP BY 1 ORDER BY 1 ; INSERT INTO activite[PX].t_compte(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_compte); INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court) SELECT MC_COMPTE,MC_COMPTE,MC_COMPTE,MC_COMPTE FROM prod_cerner.MOUV_COMPTA WHERE MC_COMPTE <> '' AND MC_COMPTE <> '0' AND MC_COMPTE NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code_original IS NOT NULL) GROUP BY 1 ORDER BY 1 ; INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court) SELECT FAD_COMPTE,FAD_COMPTE,FAD_COMPTE,FAD_COMPTE FROM prod_cerner.FACTURE_DET WHERE FAD_COMPTE <> '' AND FAD_COMPTE <> '0' AND FAD_COMPTE NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code_original IS NOT NULL) GROUP BY 1 ORDER BY 1 ; UPDATE activite[PX].t_compte SET code = MC_COMPTE, texte = MC_COMPTE, texte_court = MC_COMPTE FROM prod_cerner.MOUV_COMPTA WHERE MC_COMPTE = code_original AND ( t_compte.code IS DISTINCT FROM MC_COMPTE OR t_compte.texte IS DISTINCT FROM MC_COMPTE OR t_compte.texte_court IS DISTINCT FROM MC_COMPTE ) ; UPDATE activite[PX].t_compte SET code = FAD_COMPTE, texte = FAD_COMPTE, texte_court = FAD_COMPTE FROM prod_cerner.FACTURE_DET WHERE FAD_COMPTE = code_original AND ( t_compte.code IS DISTINCT FROM FAD_COMPTE OR t_compte.texte IS DISTINCT FROM FAD_COMPTE OR t_compte.texte_court IS DISTINCT FROM FAD_COMPTE ) ; ]]> '2099-12-31'; -- Si deux factures (une pour tp1 et une pour patient, il ne faut pas la quantité sur cette du patient DROP TABLE IF EXISTS w_factures_lignes_quantite_0; CREATE TEMP TABLE w_factures_lignes_quantite_0 AS SELECT p_factures.no_sejour, p_factures_lignes_c.date_debut, prestation_id, rubrique_facturation_id 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 WHERE p_sejours.type_sejour = '3' AND nb_prestation <> 0 GROUP BY 1,2,3,4 HAVING count(*) > 1 AND MAX(CASE WHEN montant_facture_1 <> 0 THEN 1 ELSE 0 END) = 1 AND MAX(CASE WHEN montant_facture_1 = 0 AND (montant_facture_2 <> 0 OR montant_facture_0 <> 0) THEN 1 ELSE 0 END) = 1 ; ANALYSE w_factures_lignes_quantite_0 ; UPDATE activite[PX].p_factures_lignes_c SET nb_prestation = 0, nb_rubrique = 0 FROM activite[PX].p_factures, w_factures_lignes_quantite_0 WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND p_factures.no_sejour = w_factures_lignes_quantite_0.no_sejour AND p_factures_lignes_c.date_debut = w_factures_lignes_quantite_0.date_debut AND p_factures_lignes_c.prestation_id = w_factures_lignes_quantite_0.prestation_id AND p_factures_lignes_c.rubrique_facturation_id = w_factures_lignes_quantite_0.rubrique_facturation_id AND montant_facture_1 = 0 AND (montant_facture_2 <> 0 OR montant_facture_0 <> 0) ]]> '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, p_sejours.code_sorti, p_sejours.date_sortie, p_sejours.date_groupage, p_sejours.ghs_id, 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, 0::numeric AS delai_groupage, 0::numeric AS delai_facture, 0::numeric AS delai_expedition, 0::numeric AS delai_solde, 0::numeric AS delai_expedition_0, 0::numeric AS delai_solde_0, 0::numeric AS delai_expedition_1, 0::numeric AS delai_solde_1, 0::numeric AS delai_expedition_2, 0::numeric AS delai_solde_2, 0::numeric AS delai_expedition_22, 0::numeric AS delai_solde_22 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 1,2,3,4,5; UPDATE w_sejours_total SET date_groupage = date_facture WHERE (date_groupage IS null OR date_groupage = '20991231' OR date_groupage = '00010101') AND date_facture <> '2099-12-31'; UPDATE w_sejours_total SET date_groupage = CASE WHEN date_groupage > '00010101' THEN date_groupage ELSE '20991231' END, date_facture = CASE WHEN date_facture> '00010101' THEN date_facture ELSE '20991231' END, date_expedition = CASE WHEN date_expedition > '00010101' THEN date_expedition ELSE '20991231' END, date_solde = CASE WHEN date_solde > '00010101' THEN date_solde ELSE '20991231' END, date_expedition_0 = CASE WHEN date_expedition_0 > '00010101' THEN date_expedition_0 ELSE '20991231' END, date_solde_0 = CASE WHEN date_solde_0 > '00010101' THEN date_solde_0 ELSE '20991231' END, date_expedition_1 = CASE WHEN date_expedition_1 > '00010101' THEN date_expedition_1 ELSE '20991231' END, date_solde_1 = CASE WHEN date_solde_1 > '00010101' THEN date_solde_1 ELSE '20991231' END, date_expedition_2 = CASE WHEN date_expedition_2 > '00010101' THEN date_expedition_2 ELSE '20991231' END, date_solde_2 = CASE WHEN date_solde_2 > '00010101' THEN date_solde_2 ELSE '20991231' END, date_expedition_22 = CASE WHEN date_expedition_22 > '00010101' THEN date_expedition_22 ELSE '20991231' END, date_solde_22 = CASE WHEN date_solde_22 > '00010101' THEN date_solde_22 ELSE '20991231' END; UPDATE w_sejours_total 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; 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 = w_sejours_total.date_expedition_0, 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 = w_sejours_total.date_expedition_1, 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 = w_sejours_total.date_expedition_2, 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 = w_sejours_total.date_expedition_22, 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, delai_groupage = w_sejours_total.delai_groupage, delai_facture = w_sejours_total.delai_facture, delai_expedition = w_sejours_total.delai_expedition, delai_solde = w_sejours_total.delai_solde, delai_expedition_0 = w_sejours_total.delai_expedition_0, delai_solde_0 = w_sejours_total.delai_solde_0, delai_expedition_1 = w_sejours_total.delai_expedition_1, delai_solde_1 = w_sejours_total.delai_solde_1, delai_expedition_2 = w_sejours_total.delai_expedition_2, delai_solde_2 = w_sejours_total.delai_solde_2, delai_expedition_22 = w_sejours_total.delai_expedition_22, delai_solde_22 = w_sejours_total.delai_solde_22 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 w_sejours_total.date_expedition_0 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 w_sejours_total.date_expedition_1 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 w_sejours_total.date_expedition_2 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 w_sejours_total.date_expedition_22 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 OR p_sejours.delai_groupage IS DISTINCT FROM w_sejours_total.delai_groupage OR p_sejours.delai_facture IS DISTINCT FROM w_sejours_total.delai_facture OR p_sejours.delai_expedition IS DISTINCT FROM w_sejours_total.delai_expedition OR p_sejours.delai_solde IS DISTINCT FROM w_sejours_total.delai_solde OR p_sejours.delai_expedition_0 IS DISTINCT FROM w_sejours_total.delai_expedition_0 OR p_sejours.delai_solde_0 IS DISTINCT FROM w_sejours_total.delai_solde_0 OR p_sejours.delai_expedition_1 IS DISTINCT FROM w_sejours_total.delai_expedition_1 OR p_sejours.delai_solde_1 IS DISTINCT FROM w_sejours_total.delai_solde_1 OR p_sejours.delai_expedition_2 IS DISTINCT FROM w_sejours_total.delai_expedition_2 OR p_sejours.delai_solde_2 IS DISTINCT FROM w_sejours_total.delai_solde_2 OR p_sejours.delai_expedition_22 IS DISTINCT FROM w_sejours_total.delai_expedition_22 OR p_sejours.delai_solde_22 IS DISTINCT FROM w_sejours_total.delai_solde_22 ); -- Sejours qui n'existe plus dans CERNER UPDATE activite[PX].p_sejours SET type_sejour = '9' WHERE split_part(no_sejour,'.',1) NOT IN (SELECT HO_NUM FROM prod_cerner.HOSPITALISATION) AND type_sejour <> '9' ; DELETE FROM activite[PX].p_mouvements_sejour WHERE no_sejour IN (SELECT no_sejour FROM activite[PX].p_sejours WHERE type_sejour = '9') ; ]]>