TNOM OR p_patients.prenom <> TPRENOM OR p_patients.nom_naissance <> TNOMJF OR p_patients.date_naissance <> date(DNAISDATE) OR p_patients.code_sexe <> CASE WHEN TSEXE = 'F' THEN '2' ELSE '1' END ) ; ]]> date(now()) THEN 0 ELSE 1 END::numeric AS CODE_SORTI, '80'::text AS MODE_SORTIE, ''::text AS CODE_MEDECIN_SEJOUR, '1'::text AS type_sejour, TRESCODPOST, 0::bigint AS medecin_sejour_id, 0::bigint AS code_postal_id, 0::bigint AS tiers_payant_0_id, 0::bigint AS tiers_payant_1_id, 0::bigint AS tiers_payant_2_id, 0::bigint AS tiers_payant_22_id FROM prod_sano.PATHOSP_TD JOIN prod_sano.PATIPP_TD ON XNCLEPAT = NCLEPAT WHERE ABS(NSTATUTHOSP) NOT IN (4104, 257) AND XNCLEPAT > 0 ORDER BY DENTREE ; UPDATE w_PATHOSP SET NHOSPI = w_PATHOSP.NHOSPI + 50000 FROM ( SELECT NHOSPI, MIN(NCLEHOSP) AS NCLEHOSP_min FROM w_PATHOSP GROUP BY 1 HAVING count(*) > 1 ) subview WHERE w_PATHOSP.NCLEHOSP = NCLEHOSP_min ; UPDATE w_PATHOSP SET code_postal_id = t_codes_postaux.oid FROM base.t_codes_postaux WHERE TRESCODPOST = t_codes_postaux.code ; UPDATE w_PATHOSP SET tiers_payant_0_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE code_original = 'PATIENT' ; UPDATE w_PATHOSP SET tiers_payant_2_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE code_original = 'MUTDIV' ; UPDATE w_PATHOSP SET tiers_payant_1_id = subview.tiers_payant_id FROM (SELECT XNCLEHOSP, (MAX(Array[to_char(DDATEFACT,'YYYYMMDD'), t_tiers_payant.oid::text]))[2]::bigint AS tiers_payant_id FROM prod_sano.PATFACT_TD join activite[PX].t_tiers_payant ON code_original = TGDREGCACE GROUP BY 1 ) subview WHERE w_PATHOSP.NCLEHOSP = subview.XNCLEHOSP ; UPDATE w_PATHOSP SET tiers_payant_2_id = subview.tiers_payant_id FROM (SELECT XNCLEHOSP, (MAX(Array[to_char(DDATEFACT,'YYYYMMDD'), t_tiers_payant.oid::text]))[2]::bigint AS tiers_payant_id FROM prod_sano.PATFACT_TD join activite[PX].t_tiers_payant ON code_original = TSPECCODE AND TSPECCODE <> '' GROUP BY 1 ) subview WHERE w_PATHOSP.NCLEHOSP = subview.XNCLEHOSP ; UPDATE w_PATHOSP SET XTMODENTPMSI = trim(translate(XTMODENTPMSI,' -','')), XTMODSORTPMSI = trim(translate(XTMODSORTPMSI,' -','')) ; UPDATE w_PATHOSP SET XTMODENTPMSI = XTMODENTPMSI || '0' WHERE length(XTMODENTPMSI) = 1 ; UPDATE w_PATHOSP SET XTMODENTPMSI = '80' WHERE XTMODENTPMSI = '' ; UPDATE w_PATHOSP SET XTMODSORTPMSI = XTMODSORTPMSI || '0' WHERE length(XTMODSORTPMSI) = 1 ; UPDATE w_PATHOSP SET XTMODSORTPMSI = '80' WHERE XTMODSORTPMSI = '' ; -- Validation SELECT base.cti_disable_index('activite[PX]', 'i_sejours_2'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_3'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_4'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_5'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_6'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_7'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_8'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_9'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_10'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_11'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_12'); SELECT base.cti_disable_index('activite[PX]', 'i_sejours_13'); INSERT INTO activite[PX].p_sejours ( no_sejour, code_original, no_patient, date_entree, heure_entree, date_sortie, heure_sortie, code_sexe, age, code_sorti, code_prevu, type_sejour, lieu_sortie_id, medecin_sejour_id, ghs_id, ghm_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, date_groupage, code_cp_demandee, mode_traitement_id, mode_entree, provenance, mode_sortie, destination, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, est_budget_global, code_postal_id, risque_id ) SELECT w_PATHOSP.NHOSPI AS no_sejour, w_PATHOSP.NCLEHOSP AS code_original, w_PATHOSP.no_patient AS no_patient, w_PATHOSP.date_entree, w_PATHOSP.heure_entree, w_PATHOSP.date_sortie, w_PATHOSP.heure_sortie, p_patients.code_sexe, 0::numeric AS age, w_PATHOSP.code_sorti, '0' AS code_prevu, w_PATHOSP.type_sejour, 0 AS lieu_sortie_id, w_PATHOSP.medecin_sejour_id, 0 AS ghs_id, 0 AS ghm_id, 0 AS ghs_bebe1_id, 0 AS ghs_bebe2_id, 0 AS ghs_bebe3_id, '20991231' AS date_groupage, '0' AS code_cp_demandee, 0 AS mode_traitement_id, substr(w_PATHOSP.XTMODENTPMSI,1,1) AS mode_entree, substr(w_PATHOSP.XTMODENTPMSI,2,1) AS provenance, substr(w_PATHOSP.XTMODSORTPMSI,1,1) AS mode_sortie, substr(w_PATHOSP.XTMODSORTPMSI,2,1) AS destination, w_PATHOSP.tiers_payant_0_id, w_PATHOSP.tiers_payant_1_id, w_PATHOSP.tiers_payant_2_id, 0 AS tiers_payant_22_id, '0' AS est_budget_global, w_PATHOSP.code_postal_id, 0 AS risque_id FROM w_PATHOSP JOIN activite.p_patients ON p_patients.no_patient = w_PATHOSP.no_patient ; -- Séjours ignorés UPDATE activite[PX].p_sejours SET etat = 'I' FROM activite.t_sejour WHERE t_sejour.no_sejour = p_sejours.no_sejour AND est_ignore = '1' AND etat <> 'I' AND '[PX]' = ''; UPDATE activite[PX].p_sejours SET etat = '' WHERE etat = 'I' AND no_sejour NOT IN (SELECT no_sejour FROM activite.t_sejour WHERE est_ignore = '1') AND '[PX]' = ''; -- Médecin séjour forcé UPDATE activite[PX].p_sejours SET medecin_sejour_id = t_sejour.medecin_sejour_id FROM activite.t_sejour WHERE t_sejour.no_sejour = p_sejours.no_sejour AND t_sejour.medecin_sejour_id <> 0 AND p_sejours.medecin_sejour_id IS DISTINCT FROM t_sejour.medecin_sejour_id AND '[PX]' = ''; -- recréation index SELECT base.cti_enable_index('activite[PX]', 'i_sejours_2'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_3'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_4'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_5'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_6'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_7'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_8'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_9'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_10'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_11'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_12'); SELECT base.cti_enable_index('activite[PX]', 'i_sejours_13'); ]]> DSORTIE ; DELETE FROM w_PATHISTLIT_CORR WHERE DFIN <= DDEB ; UPDATE w_PATHISTLIT_CORR SET DDEB = w_PATHISTLIT_CORR.DENTREE FROM ( SELECT XNCLEHOSP, (MIN(Array[DDEB::text, to_char(NINDEX,'FM000000000000')]))[2]::bigint AS NINDEX FROM w_PATHISTLIT_CORR GROUP BY 1 HAVING MIN(DDEB) <> MIN(DENTREE) ) subview WHERE w_PATHISTLIT_CORR.XNCLEHOSP = subview.XNCLEHOSP AND w_PATHISTLIT_CORR.NINDEX = subview.NINDEX ; UPDATE w_PATHISTLIT_CORR SET DFIN = w_PATHISTLIT_CORR.DSORTIE FROM ( SELECT XNCLEHOSP, (MAX(Array[COALESCE(DFIN,'20991231')::text, to_char(NINDEX,'FM000000000000')]))[2]::bigint AS NINDEX FROM w_PATHISTLIT_CORR GROUP BY 1 HAVING MAX(COALESCE(DFIN,'20991231')) <> MAX(DSORTIE) ) subview WHERE w_PATHISTLIT_CORR.XNCLEHOSP = subview.XNCLEHOSP AND w_PATHISTLIT_CORR.NINDEX = subview.NINDEX ; DELETE FROM w_PATHISTLIT_CORR WHERE DFIN <= DDEB ; DROP SEQUENCE IF EXISTS w_PATHISTLIT_seq; CREATE TEMP SEQUENCE w_PATHISTLIT_seq; DROP TABLE IF EXISTS w_PATHISTLIT; CREATE TEMP TABLE w_PATHISTLIT AS SELECT *, nextval('w_PATHISTLIT_seq'::regclass) AS sequence, '1'::text AS entree_directe, '1'::text AS sortie_directe, date(MVT_DDEB) AS MVT_DDEB_date, to_char(MVT_DDEB,'HH24MISS')::numeric AS MVT_DDEB_heure, date(MVT_DFIN) AS MVT_DFIN_date, to_char(MVT_DFIN,'HH24MISS')::numeric AS MVT_DFIN_heure, SEJ_XNCLEUF AS service_code, SEJ_XNCLEUF AS uf_code, MVT_XNCLESECT AS etage_code, MVT_XNCLELIT AS lit_code, SEJ_XNCLEUF AS av_service_code, SEJ_XNCLEUF AS av_uf_code, MVT_XNCLESECT AS av_etage_code, SEJ_XNCLEUF AS ap_service_code, SEJ_XNCLEUF AS ap_uf_code, MVT_XNCLESECT AS ap_etage_code, '0'::text AS code_urgence, 0::bigint AS lieu_id FROM ( SELECT NHOSPI, w_PATHOSP.NCLEHOSP, w_PATHOSP.DENTREE AS SEJ_DDEB, w_PATHOSP.DSORTIE AS SEJ_DFIN, w_PATHOSP.XNCLEUF AS SEJ_XNCLEUF, w_PATHOSP.XNCLESECT AS SEJ_XNCLESECT, CASE WHEN w_PATHOSP.XNCLELIT <> 0 THEN w_PATHOSP.XNCLELIT ELSE w_PATHOSP.XNCLESECT END AS SEJ_XNCLELIT, COALESCE(PATHISTLIT_TD.DDEB,w_PATHOSP.DENTREE) AS MVT_DDEB, COALESCE(PATHISTLIT_TD.DFIN,w_PATHOSP.DSORTIE) AS MVT_DFIN, COALESCE(PATHISTLIT_TD.XNCLESECT,w_PATHOSP.XNCLESECT) AS MVT_XNCLESECT, COALESCE(CASE WHEN PATHISTLIT_TD.XNCLELIT <> 0 THEN PATHISTLIT_TD.XNCLELIT ELSE PATHISTLIT_TD.XNCLESECT END,CASE WHEN w_PATHOSP.XNCLELIT <> 0 THEN w_PATHOSP.XNCLELIT ELSE w_PATHOSP.XNCLESECT END) AS MVT_XNCLELIT FROM w_PATHOSP LEFT JOIN w_PATHISTLIT_CORR PATHISTLIT_TD ON PATHISTLIT_TD.XNCLEHOSP = w_PATHOSP.NCLEHOSP ORDER BY NHOSPI, w_PATHOSP.DENTREE, DDEB ) subview ; UPDATE w_PATHISTLIT SET sortie_directe = '0', ap_service_code = w_PATHISTLIT_next.service_code, ap_uf_code = w_PATHISTLIT_next.uf_code, ap_etage_code = w_PATHISTLIT_next.etage_code FROM w_PATHISTLIT w_PATHISTLIT_next WHERE w_PATHISTLIT.NHOSPI = w_PATHISTLIT_next.NHOSPI AND w_PATHISTLIT.sequence = w_PATHISTLIT_next.sequence - 1 ; UPDATE w_PATHISTLIT SET entree_directe = '0', MVT_DDEB = w_PATHISTLIT_before.MVT_DFIN + interval '1 second', MVT_DDEB_date = date(w_PATHISTLIT_before.MVT_DFIN + interval '1 second'), MVT_DDEB_heure = to_char(w_PATHISTLIT_before.MVT_DFIN + interval '1 second','HH24MISS')::numeric, av_service_code = w_PATHISTLIT_before.service_code, av_uf_code = w_PATHISTLIT_before.uf_code, av_etage_code = w_PATHISTLIT_before.etage_code FROM w_PATHISTLIT w_PATHISTLIT_before WHERE w_PATHISTLIT.NHOSPI = w_PATHISTLIT_before.NHOSPI AND w_PATHISTLIT.sequence = w_PATHISTLIT_before.sequence + 1 ; INSERT INTO activite[PX].t_lieux( code_original_1, code_original_2, code_original_3, code_original_4, code_original_6) SELECT service_code, '', etage_code, lit_code, uf_code FROM w_PATHISTLIT LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = service_code AND code_original_2 = '' AND code_original_3 = etage_code AND code_original_4 = lit_code AND code_original_6 = uf_code ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4,5; UPDATE activite[PX].t_lieux SET service_facturation_id = COALESCE(t_services_facturation.oid,0), mode_traitement_id = COALESCE(t_services_facturation.mode_traitement_id,0) FROM activite[PX].t_services_facturation WHERE code_original_1 = t_services_facturation.code_original AND (t_lieux.service_facturation_id <> COALESCE(t_services_facturation.oid,0) OR t_lieux.mode_traitement_id <> COALESCE(t_services_facturation.mode_traitement_id,0) ) ; UPDATE activite[PX].t_lieux SET unite_fonctionnelle_id = COALESCE(t_unites_fonctionnelles.oid,0) FROM activite[PX].t_unites_fonctionnelles WHERE code_original_6 = t_unites_fonctionnelles.code_original AND unite_fonctionnelle_id <> COALESCE(t_unites_fonctionnelles.oid,0); UPDATE activite[PX].t_lieux SET 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_PATHISTLIT SET lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE code_original_1 = service_code AND code_original_2 = '' AND code_original_3 = etage_code AND code_original_4 = lit_code AND code_original_6 = uf_code ; DROP TABLE IF EXISTS w_mouvements_sejour; CREATE TEMP TABLE w_mouvements_sejour AS SELECT w_PATHISTLIT.NHOSPI, w_PATHISTLIT.NHOSPI AS no_sejour, p_sejours.oid AS sejour_id, sequence, p_calendrier.date, p_calendrier.jour_semaine, p_calendrier.is_weekend, CASE WHEN p_calendrier.date = date(w_PATHISTLIT.MVT_DDEB_date) THEN w_PATHISTLIT.MVT_DDEB_heure ELSE 0 END AS heure_debut, CASE WHEN p_calendrier.date = date(w_PATHISTLIT.MVT_DFIN_date) THEN w_PATHISTLIT.MVT_DFIN_heure ELSE 240000 END AS heure_fin, CASE WHEN entree_directe = '1' AND p_calendrier.date = date(p_sejours.date_entree) AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_entrees_directes, CASE WHEN SORTIE_DIRECTE = '1' AND p_calendrier.date = date(p_sejours.date_sortie) AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_sorties_directes, CASE WHEN entree_directe = '1' AND p_calendrier.date = date(p_sejours.date_entree) AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_entree, CASE WHEN SORTIE_DIRECTE = '1' AND p_calendrier.date = date(p_sejours.date_sortie) 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 entree_directe = '1' AND p_calendrier.date = date(p_sejours.date_entree) AND p_sejours.type_sejour = '2' THEN 1 ELSE 0 END AS nb_ambulatoires, CASE WHEN entree_directe = '1' AND p_calendrier.date = date(p_sejours.date_entree) AND p_sejours.type_sejour = '3' THEN 1 ELSE 0 END AS nb_externes, CASE WHEN code_urgence = '1' AND p_calendrier.date = date(p_sejours.date_entree) AND entree_directe = '1' THEN 1 ELSE 0 END AS nb_urgences, CASE WHEN entree_directe = '1' AND p_calendrier.date = date(p_sejours.date_entree) AND p_sejours.type_sejour = '5' THEN 1 ELSE 0 END AS nb_seances, CASE WHEN p_calendrier.date = date(w_PATHISTLIT.MVT_DDEB_date) AND p_sejours.type_sejour = '1' AND entree_directe <> '1' AND service_code <> av_service_code THEN 1 ELSE 0 END AS nb_entrees_mutation_service, CASE WHEN p_calendrier.date = date(w_PATHISTLIT.MVT_DFIN_date) AND p_sejours.type_sejour = '1' AND SORTIE_DIRECTE <> '1' AND service_code <> ap_service_code THEN 1 ELSE 0 END AS nb_sorties_mutation_service, CASE WHEN p_calendrier.date = date(w_PATHISTLIT.MVT_DDEB_date) AND p_sejours.type_sejour = '1' AND entree_directe <> '1' AND etage_code <> av_etage_code THEN 1 ELSE 0 END AS nb_entrees_mutation_etage, CASE WHEN p_calendrier.date = date(w_PATHISTLIT.MVT_DFIN_date) AND p_sejours.type_sejour = '1' AND SORTIE_DIRECTE <> '1' AND etage_code <> ap_etage_code THEN 1 ELSE 0 END AS nb_sorties_mutation_etage, 0 AS nb_entrees_mutation_activite, 0 AS nb_sorties_mutation_activite, 0 AS nb_entrees_mutation_unite_medicale, 0 AS nb_sorties_mutation_unite_medicale, CASE WHEN p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_jours_js_inclus, CASE WHEN p_sejours.type_sejour = '1' AND p_calendrier.date <> date(p_sejours.date_sortie) THEN 1 ELSE 0 END AS nb_jours_js_non_inclus, CASE WHEN p_sejours.type_sejour = '1' AND t_lits.chambre_particuliere = 'O' THEN '1' ELSE '0' END AS est_chambre_particuliere, CASE WHEN p_sejours.type_sejour = '1' AND t_lits.chambre_particuliere = 'O' THEN 1 ELSE 0 END AS nb_chambres_particulieres, 0 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()) THEN '1' ELSE '0' END AS est_mouvement_previsionnel FROM w_PATHISTLIT JOIN activite[PX].p_sejours ON w_PATHISTLIT.NHOSPI = p_sejours.no_sejour AND p_sejours.etat = '' LEFT JOIN activite[PX].t_lits ON lit_code = t_lits.code_original JOIN base.p_calendrier ON (p_calendrier.date BETWEEN date(w_PATHISTLIT.MVT_DDEB_date) AND date(w_PATHISTLIT.MVT_DFIN_date) AND p_calendrier.date <= now() + interval '1 month' ) ORDER BY sequence, p_calendrier.date; -- Génération DELETE FROM w_mouvements_sejour WHERE nb_entrees_directes = 0 AND nb_sorties_directes = 0 AND est_jour_hospitalisation <> '1' AND nb_ambulatoires = 0 AND nb_externes = 0 AND nb_urgences = 0 AND nb_seances = 0 AND nb_entrees_mutation_service = 0 AND nb_sorties_mutation_service = 0 AND nb_entrees_mutation_etage = 0 AND nb_sorties_mutation_etage = 0 AND nb_entrees_mutation_activite = 0 AND nb_sorties_mutation_activite = 0 AND nb_entrees_mutation_unite_medicale = 0 AND nb_sorties_mutation_unite_medicale = 0 AND nb_jours_js_inclus = 0 AND nb_jours_js_non_inclus = 0 AND est_chambre_particuliere <> '1' AND nb_chambres_particulieres = 0 AND nb_bebes = 0; DELETE FROM w_mouvements_sejour WHERE heure_debut = heure_fin ; 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'); TRUNCATE activite[PX].p_mouvements_sejour; INSERT INTO activite[PX].p_mouvements_sejour( sejour_id, no_sejour, date, nb_jours_js_non_inclus, lieu_id, nb_entrees_directes, nb_sorties_directes, nb_urgences, nb_externes, nb_ambulatoires, medecin_sejour_id, nb_jours_js_inclus, nb_seances, nb_entrees_mutation_service, nb_sorties_mutation_service, nb_entrees_mutation_activite, nb_sorties_mutation_activite, nb_entrees_mutation_etage, nb_sorties_mutation_etage, nb_chambres_particulieres, heure_debut, heure_fin, est_jour_entree, est_jour_sortie, est_jour_hospitalisation, est_chambre_particuliere, nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes,est_mouvement_previsionnel, jour_semaine, is_weekend) SELECT sejour_id, no_sejour, date,nb_jours_js_non_inclus, lieu_id, nb_entrees_directes, nb_sorties_directes, nb_urgences, nb_externes, nb_ambulatoires, medecin_sejour_id, nb_jours_js_inclus, nb_seances, nb_entrees_mutation_service, nb_sorties_mutation_service, nb_entrees_mutation_activite, nb_sorties_mutation_activite, nb_entrees_mutation_etage, nb_sorties_mutation_etage, nb_chambres_particulieres, heure_debut, heure_fin, est_jour_entree, est_jour_sortie, est_jour_hospitalisation, est_chambre_particuliere, nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes,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' WHERE type_sejour <> '5' AND type_sejour <> '1' AND no_sejour IN ( SELECT no_sejour FROM activite[PX].p_mouvements_sejour WHERE nb_seances > 0); UPDATE activite[PX].p_mouvements_sejour SET nb_externes = 0, nb_ambulatoires = 0 FROM activite[PX].p_sejours WHERE p_mouvements_sejour.no_sejour = p_sejours.no_sejour AND p_sejours.type_sejour = '5' AND ( nb_externes <> 0 OR nb_ambulatoires <> 0 ) ; ]]> 0 ORDER BY NHOSPI, DDATFINFACT, DDATEFACT ) subview ; DROP TABLE IF EXISTS w_PATFACT_PER; DROP SEQUENCE IF EXISTS w_PATFACT_PER_seq; CREATE TEMP SEQUENCE w_PATFACT_PER_seq; CREATE TEMP TABLE w_PATFACT_PER AS SELECT nextval('w_PATFACT_PER_seq'::regclass) AS sequence, * FROM ( SELECT XNCLEHOSP, DDATFINFACT, MIN(DDATDEBFACT) AS DDATDEBFACT FROM w_PATFACT GROUP BY 1,2 ORDER BY 1,2 ) subview ; UPDATE w_PATFACT_PER SET DDATDEBFACT = w_PATFACT_PER_prev.DDATFINFACT + interval '1 day' FROM w_PATFACT_PER w_PATFACT_PER_prev WHERE w_PATFACT_PER.XNCLEHOSP = w_PATFACT_PER_prev.XNCLEHOSP AND w_PATFACT_PER.sequence = w_PATFACT_PER_prev.sequence +1 ; UPDATE w_PATFACT SET DDATDEBFACT = w_PATFACT_PER.DDATDEBFACT FROM w_PATFACT_PER WHERE w_PATFACT_PER.XNCLEHOSP = w_PATFACT.XNCLEHOSP AND w_PATFACT_PER.DDATFINFACT = w_PATFACT.DDATFINFACT ; -- Factures 'normales' DROP TABLE IF EXISTS w_factures; CREATE TEMP TABLE w_factures AS SELECT nextval('activite.s_factures'::regclass) AS oid, p_sejours.oid AS sejour_id, w_PATFACT.NHOSPI AS no_sejour, w_PATFACT.NIDFACT, w_PATFACT.NNOFACT::text AS no_facture, w_PATFACT.NNOFACT::text AS no_facture_source, w_PATFACT.NNOFACT::text AS no_facture_reference, '0'::text AS zero_compta, 0::bigint AS facture_reference_id, ''::text AS no_facture_od_avoir, 0::bigint AS facture_od_avoir_id, w_PATFACT.DDATDEBFACT AS date_debut, w_PATFACT.DDATFINFACT AS date_fin, p_sejours.ghs_id, p_sejours.ghs_bebe1_id, p_sejours.ghs_bebe2_id, p_sejours.ghs_bebe3_id, p_sejours.code_cp_demandee AS code_cp_demandee, CASE WHEN w_PATFACT.NNOFACTORI < 1 THEN 'X' ELSE '0'::text END AS type_facture, 0 AS nb_rejets, 1::numeric AS code_facture, w_PATFACT.DDATEFACT AS date_facture, '0' AS code_vente, '20991231'::date AS date_vente, 209912::numeric AS mois_vente, ''::text AS code_cloture, CASE WHEN p_sejours.ghs_id > 0 THEN 'GHS' ELSE '' END 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, 0::numeric AS montant_facture_c, 0::numeric AS montant_facture_h, 0::numeric AS montant_facture_0_c, 0::numeric AS montant_facture_0_h, 0::numeric AS montant_facture_1_c, 0::numeric AS montant_facture_1_h, 0::numeric AS montant_facture_2_c, 0::numeric AS montant_facture_2_h, 0::numeric AS montant_facture_22_c, 0::numeric AS montant_facture_22_h, 0::numeric AS montant_comptabilise_c, 0::numeric AS montant_comptabilise_h, 0::numeric AS montant_comptabilise_0_c, 0::numeric AS montant_comptabilise_0_h, 0::numeric AS montant_comptabilise_1_c, 0::numeric AS montant_comptabilise_1_h, 0::numeric AS montant_comptabilise_2_c, 0::numeric AS montant_comptabilise_2_h, 0::numeric AS montant_comptabilise_22_c, 0::numeric AS montant_comptabilise_22_h, 0::numeric AS montant_regle_c, 0::numeric AS montant_regle_h, 0::numeric AS montant_regle_0_c, 0::numeric AS montant_regle_0_h, 0::numeric AS montant_regle_1_c, 0::numeric AS montant_regle_1_h, 0::numeric AS montant_regle_2_c, 0::numeric AS montant_regle_2_h, 0::numeric AS montant_regle_22_c, 0::numeric AS montant_regle_22_h, '1'::text AS code_expedie_0, CASE WHEN DDATTELTRANS IS NOT NULL THEN '1' ELSE '0' END AS code_expedie_1, CASE WHEN DDATTELTRANS IS NOT NULL THEN '1' ELSE '0' END AS code_expedie_2, 0::numeric AS code_expedie_22, CASE WHEN DDATTELTRANS > '00010101' THEN DDATTELTRANS ELSE '00010101' END AS date_expedition, w_PATFACT.DDATEFACT AS date_expedition_0, CASE WHEN DDATTELTRANS > '00010101' THEN DDATTELTRANS ELSE '00010101' END AS date_expedition_1, CASE WHEN DDATTELTRANS > '00010101' THEN DDATTELTRANS ELSE '00010101' END AS date_expedition_2, '00010101'::date AS date_expedition_22, 0 AS no_bordereau_0, 0 AS no_bordereau_1, 0 AS no_bordereau_2, 0::numeric AS no_bordereau_22, LEAST('20991231'::date) AS date_solde, LEAST('20991231'::date) AS date_solde_c, LEAST('20991231'::date) AS date_solde_h, LEAST('20991231'::date) AS date_solde_0_c, LEAST('20991231'::date) AS date_solde_0_h, LEAST('20991231'::date) AS date_solde_1_c, LEAST('20991231'::date) AS date_solde_1_h, LEAST('20991231'::date) AS date_solde_2_c, LEAST('20991231'::date) AS date_solde_2_h, '20991231'::date AS date_solde_22_c, '20991231'::date AS date_solde_22_h, 0::numeric AS montant_encours_c, 0::numeric AS montant_encours_0_c, 0::numeric AS montant_encours_1_c, 0::numeric AS montant_encours_2_c, 0::numeric AS montant_encours_22_c, 0::numeric AS montant_encours_h, 0::numeric AS montant_encours_0_h, 0::numeric AS montant_encours_1_h, 0::numeric AS montant_encours_2_h, 0::numeric AS montant_encours_22_h, '20991231'::date AS date_solde_reference, '20991231'::date AS date_solde_reference_c, '20991231'::date AS date_solde_reference_h, '20991231'::date AS date_solde_reference_0_c, '20991231'::date AS date_solde_reference_1_c, '20991231'::date AS date_solde_reference_2_c, '20991231'::date AS date_solde_reference_22_c, '20991231'::date AS date_solde_reference_0_h, '20991231'::date AS date_solde_reference_1_h, '20991231'::date AS date_solde_reference_2_h, '20991231'::date AS date_solde_reference_22_h, 0::numeric AS delai_facture, 0::numeric AS delai_solde, 0::numeric AS delai_expedition, 0::numeric AS delai_expedition_0, 0::numeric AS delai_expedition_1, 0::numeric AS delai_expedition_2, 0::numeric AS delai_expedition_22, 0::numeric AS delai_solde_0_c, 0::numeric AS delai_solde_0_h, 0::numeric AS delai_solde_1_c, 0::numeric AS delai_solde_1_h, 0::numeric AS delai_solde_2_c, 0::numeric AS delai_solde_2_h, 0::numeric AS delai_solde_22_c, 0::numeric AS delai_solde_22_h, '20991231'::date AS date_encours, 0::numeric AS montant_facture_c_actes_inclus_dans_sejour, 0::numeric AS montant_facture_h_actes_inclus_dans_sejour, 0::numeric AS montant_comptabilise_budget_global_c FROM w_PATFACT JOIN activite[PX].p_sejours ON w_PATFACT.XNCLEHOSP = p_sejours.code_original AND p_sejours.etat = '' ; -- Avoirs INSERT INTO w_factures SELECT nextval('activite.s_factures'::regclass) AS oid, p_sejours.oid AS sejour_id, w_PATFACT.NHOSPI AS no_sejour, w_PATFACT.NIDFACT, 'A'||w_PATFACT.NNOFACT AS no_facture, w_PATFACT.NNOFACT AS no_facture_source, w_PATFACT.NNOFACT AS no_facture_reference, '0'::text AS zero_compta, 0::bigint AS facture_reference_id, COALESCE(w_PATFACT_refact.NNOFACT::text,'') AS no_facture_od_avoir, 0::bigint AS facture_od_avoir_id, w_PATFACT.DDATDEBFACT AS date_debut, w_PATFACT.DDATFINFACT AS date_fin, p_sejours.ghs_id, p_sejours.ghs_bebe1_id, p_sejours.ghs_bebe2_id, p_sejours.ghs_bebe3_id, p_sejours.code_cp_demandee AS code_cp_demandee, '1' AS type_facture, 1 AS nb_rejets, 1::numeric AS code_facture, COALESCE(w_PATFACT_refact.DDATEFACT,w_PATFACT.DDATEFACT) AS date_facture, '0' AS code_vente, '20991231'::date AS date_vente, 209912::numeric AS mois_vente, ''::text AS code_cloture, CASE WHEN p_sejours.ghs_id > 0 THEN 'GHS' ELSE '' END 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, 0::numeric AS montant_facture_c, 0::numeric AS montant_facture_h, 0::numeric AS montant_facture_0_c, 0::numeric AS montant_facture_0_h, 0::numeric AS montant_facture_1_c, 0::numeric AS montant_facture_1_h, 0::numeric AS montant_facture_2_c, 0::numeric AS montant_facture_2_h, 0::numeric AS montant_facture_22_c, 0::numeric AS montant_facture_22_h, 0::numeric AS montant_comptabilise_c, 0::numeric AS montant_comptabilise_h, 0::numeric AS montant_comptabilise_0_c, 0::numeric AS montant_comptabilise_0_h, 0::numeric AS montant_comptabilise_1_c, 0::numeric AS montant_comptabilise_1_h, 0::numeric AS montant_comptabilise_2_c, 0::numeric AS montant_comptabilise_2_h, 0::numeric AS montant_comptabilise_22_c, 0::numeric AS montant_comptabilise_22_h, 0::numeric AS montant_regle_c, 0::numeric AS montant_regle_h, 0::numeric AS montant_regle_0_c, 0::numeric AS montant_regle_0_h, 0::numeric AS montant_regle_1_c, 0::numeric AS montant_regle_1_h, 0::numeric AS montant_regle_2_c, 0::numeric AS montant_regle_2_h, 0::numeric AS montant_regle_22_c, 0::numeric AS montant_regle_22_h, '1'::text AS code_expedie_0, CASE WHEN w_PATFACT.DDATTELTRANS IS NOT NULL THEN '1' ELSE '0' END AS code_expedie_1, CASE WHEN w_PATFACT.DDATTELTRANS IS NOT NULL THEN '1' ELSE '0' END AS code_expedie_2, 0::numeric AS code_expedie_22, CASE WHEN w_PATFACT.DDATTELTRANS > '00010101' THEN w_PATFACT.DDATTELTRANS ELSE '00010101' END AS date_expedition, w_PATFACT.DDATEFACT AS date_expedition_0, CASE WHEN w_PATFACT.DDATTELTRANS > '00010101' THEN w_PATFACT.DDATTELTRANS ELSE '00010101' END AS date_expedition_1, CASE WHEN w_PATFACT.DDATTELTRANS > '00010101' THEN w_PATFACT.DDATTELTRANS ELSE '00010101' END AS date_expedition_2, '00010101'::date AS date_expedition_22, 0 AS no_bordereau_0, 0 AS no_bordereau_1, 0 AS no_bordereau_2, 0::numeric AS no_bordereau_22, LEAST('20991231'::date) AS date_solde, LEAST('20991231'::date) AS date_solde_c, LEAST('20991231'::date) AS date_solde_h, LEAST('20991231'::date) AS date_solde_0_c, LEAST('20991231'::date) AS date_solde_0_h, LEAST('20991231'::date) AS date_solde_1_c, LEAST('20991231'::date) AS date_solde_1_h, LEAST('20991231'::date) AS date_solde_2_c, LEAST('20991231'::date) AS date_solde_2_h, '20991231'::date AS date_solde_22_c, '20991231'::date AS date_solde_22_h, 0::numeric AS montant_encours_c, 0::numeric AS montant_encours_0_c, 0::numeric AS montant_encours_1_c, 0::numeric AS montant_encours_2_c, 0::numeric AS montant_encours_22_c, 0::numeric AS montant_encours_h, 0::numeric AS montant_encours_0_h, 0::numeric AS montant_encours_1_h, 0::numeric AS montant_encours_2_h, 0::numeric AS montant_encours_22_h, '20991231'::date AS date_solde_reference, '20991231'::date AS date_solde_reference_c, '20991231'::date AS date_solde_reference_h, '20991231'::date AS date_solde_reference_0_c, '20991231'::date AS date_solde_reference_1_c, '20991231'::date AS date_solde_reference_2_c, '20991231'::date AS date_solde_reference_22_c, '20991231'::date AS date_solde_reference_0_h, '20991231'::date AS date_solde_reference_1_h, '20991231'::date AS date_solde_reference_2_h, '20991231'::date AS date_solde_reference_22_h, 0::numeric AS delai_facture, 0::numeric AS delai_solde, 0::numeric AS delai_expedition, 0::numeric AS delai_expedition_0, 0::numeric AS delai_expedition_1, 0::numeric AS delai_expedition_2, 0::numeric AS delai_expedition_22, 0::numeric AS delai_solde_0_c, 0::numeric AS delai_solde_0_h, 0::numeric AS delai_solde_1_c, 0::numeric AS delai_solde_1_h, 0::numeric AS delai_solde_2_c, 0::numeric AS delai_solde_2_h, 0::numeric AS delai_solde_22_c, 0::numeric AS delai_solde_22_h, '20991231'::date AS date_encours, 0::numeric AS montant_facture_c_actes_inclus_dans_sejour, 0::numeric AS montant_facture_h_actes_inclus_dans_sejour, 0::numeric AS montant_comptabilise_budget_global_c FROM w_PATFACT LEFT JOIN prod_sano.PATFACT_TD w_PATFACT_refact ON w_PATFACT.NNOFACT = ABS(w_PATFACT_refact.NNOFACTORI) JOIN activite[PX].p_sejours ON w_PATFACT.XNCLEHOSP = p_sejours.code_original AND p_sejours.etat = '' WHERE w_PATFACT.NNOFACTORI < 0 ; DROP TABLE IF EXISTS w_PATFACTCPTA_TD; CREATE TEMP TABLE w_PATFACTCPTA_TD AS SELECT NNOFACT::text AS NNOFACT_CTI, ''::text AS type_tiers_payant, '0'::text AS zero_compta, * FROM prod_sano.PATFACTCPTA_TD ; UPDATE w_PATFACTCPTA_TD SET zero_compta = '1' FROM ( SELECT XNIDFACT, date(DDATECR) AS DDATECR, SUM(CSOMDUE) FROM w_PATFACTCPTA_TD WHERE CSOMDUE <> 0 GROUP BY 1,2 HAVING SUM(CSOMDUE) = 0 ) subview WHERE w_PATFACTCPTA_TD.XNIDFACT = subview.XNIDFACT AND date(w_PATFACTCPTA_TD.DDATECR) = subview.DDATECR ; UPDATE w_PATFACTCPTA_TD SET NNOFACT_CTI = 'A'||NNOFACT_CTI FROM ( SELECT NNOFACT, date(DDATECR) AS DDATECR FROM w_PATFACTCPTA_TD JOIN w_factures ON w_PATFACTCPTA_TD.XNIDFACT = w_factures.NIDFACT AND no_facture = 'A'||w_PATFACTCPTA_TD.NNOFACT WHERE w_PATFACTCPTA_TD.zero_compta <> '1' AND NTYPLIG < 0 GROUP BY 1,2 HAVING SUM(CSOMDUE) <> 0 ) subview WHERE w_PATFACTCPTA_TD.NNOFACT = subview.NNOFACT AND date(w_PATFACTCPTA_TD.DDATECR) = subview.DDATECR AND CSOMDUE <> 0 ; UPDATE w_PATFACTCPTA_TD SET type_tiers_payant = CASE WHEN TREFCPTE LIKE 'T%' THEN '1' WHEN TREFCPTE LIKE 'C%' THEN '2' WHEN TREFCPTE LIKE 'P%' THEN '0' ELSE '' END WHERE substr(TREFCPTE,1,1) in ('T','C','P') ; UPDATE w_PATFACTCPTA_TD SET type_tiers_payant = t_tiers_payant.type_tiers_payant FROM activite[PX].t_tiers_payant WHERE t_tiers_payant.code_original = TREFCPTE AND w_PATFACTCPTA_TD.type_tiers_payant = '' ; UPDATE w_factures SET code_vente = '1', date_vente = date(DDATECR), mois_vente = to_char(date(DDATECR),'YYYYMM')::numeric FROM ( SELECT NNOFACT_CTI, MIN(DDATECR) AS DDATECR FROM w_PATFACTCPTA_TD WHERE CSOMDUE <> 0 AND zero_compta <> '1' GROUP BY 1 HAVING SUM(CSOMDUE) <> 0 ) subview WHERE w_factures.no_facture = NNOFACT_CTI AND date_vente <> date(DDATECR) ; -- Sur les factures qui d'annulent le même jour, enlever montant comptabilisé UPDATE w_factures SET zero_compta = '1'::text WHERE NIDFACT IN (SELECT XNIDFACT FROM w_PATFACTCPTA_TD WHERE zero_compta = '1') ; drop table if exists temp.w_w_factures; create table temp.w_w_factures AS select * from w_factures; -- Ajout des factures UPDATE w_factures SET montant_facture_1_c = CASE WHEN type_facture <> '1' THEN subview.montant_facture_1 ELSE 0 - subview.montant_facture_1 END, montant_facture_2_c = CASE WHEN type_facture <> '1' THEN subview.montant_facture_2 ELSE 0 - subview.montant_facture_2 END, montant_facture_0_c = CASE WHEN type_facture <> '1' THEN subview.montant_facture_0 ELSE 0 - subview.montant_facture_0 END, montant_comptabilise_1_c = CASE WHEN zero_compta = '1' THEN 0 WHEN type_facture <> '1' THEN subview.montant_facture_1 ELSE 0 - subview.montant_facture_1 END, montant_comptabilise_2_c = CASE WHEN zero_compta = '1' THEN 0 WHEN type_facture <> '1' THEN subview.montant_facture_2 ELSE 0 - subview.montant_facture_2 END, montant_comptabilise_0_c = CASE WHEN zero_compta = '1' THEN 0 WHEN type_facture <> '1' THEN subview.montant_facture_0 ELSE 0 - subview.montant_facture_0 END FROM ( SELECT XNIDFACT, SUM(CPRIXACTSS) AS montant_facture_1, SUM(CPRIXACTCMP) AS montant_facture_2, SUM(CPRIXACTPAT) AS montant_facture_0 FROm prod_sano.PATFACTACT_TD GROUP BY 1 ) subview WHERE w_factures.NIDFACT = subview.XNIDFACT ; UPDATE w_factures SET montant_facture_c = montant_facture_1_c + montant_facture_2_c + montant_facture_0_c, montant_comptabilise_c = montant_comptabilise_1_c + montant_comptabilise_2_c + montant_comptabilise_0_c, montant_facture_h = montant_facture_1_h + montant_facture_2_h + montant_facture_0_h, montant_comptabilise_h = montant_comptabilise_1_h + montant_comptabilise_2_h + montant_comptabilise_0_h ; SELECT base.cti_disable_index('activite[PX]', 'i_factures_3'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_4'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_5'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_6'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_7'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_8'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_9'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_10'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_11'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_12'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_13'); SELECT base.cti_disable_index('activite[PX]', 'i_factures_14'); TRUNCATE activite[PX].p_factures ; INSERT INTO activite[PX].p_factures ( oid, sejour_id, no_sejour, no_facture, no_facture_reference, facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, date_debut, date_fin, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, code_cp_demandee, type_facture, nb_rejets, code_facture, date_facture, code_vente, mois_vente, date_vente, code_cloture, particularite_t2a, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, montant_facture_c, montant_facture_h, montant_facture_0_c, montant_facture_0_h, montant_facture_1_c, montant_facture_1_h, montant_facture_2_c, montant_facture_2_h, montant_facture_22_c, montant_facture_22_h, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_22_c, montant_comptabilise_22_h, montant_regle_c, montant_regle_h, montant_regle_0_c, montant_regle_0_h, montant_regle_1_c, montant_regle_1_h, montant_regle_2_c, montant_regle_2_h, montant_regle_22_c, montant_regle_22_h, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_22, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, date_expedition_22, no_bordereau_0, no_bordereau_1, no_bordereau_2, no_bordereau_22, date_solde, date_solde_c, date_solde_h, date_solde_0_c, date_solde_0_h, date_solde_1_c, date_solde_1_h, date_solde_2_c, date_solde_2_h, date_solde_22_c, date_solde_22_h, montant_encours_c, montant_encours_0_c, montant_encours_1_c, montant_encours_2_c, montant_encours_22_c, montant_encours_h, montant_encours_0_h, montant_encours_1_h, montant_encours_2_h, montant_encours_22_h, date_solde_reference, date_solde_reference_c, date_solde_reference_h, date_solde_reference_0_c, date_solde_reference_1_c, date_solde_reference_2_c, date_solde_reference_22_c, date_solde_reference_0_h, date_solde_reference_1_h, date_solde_reference_2_h, date_solde_reference_22_h, delai_facture, delai_solde, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, delai_expedition_22, delai_solde_0_c, delai_solde_0_h, delai_solde_1_c, delai_solde_1_h, delai_solde_2_c, delai_solde_2_h, delai_solde_22_c, delai_solde_22_h, date_encours, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_comptabilise_budget_global_c ) SELECT oid, sejour_id, no_sejour, no_facture, w_factures.no_facture_reference, facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, date_debut, date_fin, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, code_cp_demandee, type_facture, nb_rejets, code_facture, date_facture, code_vente, mois_vente, date_vente, code_cloture, particularite_t2a, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, montant_facture_c, montant_facture_h, montant_facture_0_c, montant_facture_0_h, montant_facture_1_c, montant_facture_1_h, montant_facture_2_c, montant_facture_2_h, montant_facture_22_c, montant_facture_22_h, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_22_c, montant_comptabilise_22_h, montant_regle_c, montant_regle_h, montant_regle_0_c, montant_regle_0_h, montant_regle_1_c, montant_regle_1_h, montant_regle_2_c, montant_regle_2_h, montant_regle_22_c, montant_regle_22_h, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_22, CASE WHEN date_expedition <> '00010101' THEN date_expedition ELSE '20991231' END, CASE WHEN date_expedition_0 <> '00010101' THEN date_expedition_0 ELSE '20991231' END, CASE WHEN date_expedition_1 <> '00010101' THEN date_expedition_1 ELSE '20991231' END, CASE WHEN date_expedition_2 <> '00010101' THEN date_expedition_2 ELSE '20991231' END, CASE WHEN date_expedition_22 <> '00010101' THEN date_expedition_22 ELSE '20991231' END, no_bordereau_0, no_bordereau_1, no_bordereau_2, no_bordereau_22, CASE WHEN date_solde <> '00010101' THEN date_solde ELSE '20991231' END, CASE WHEN date_solde_c <> '00010101' THEN date_solde_c ELSE '20991231' END, CASE WHEN date_solde_h <> '00010101' THEN date_solde_h ELSE '20991231' END, CASE WHEN date_solde_0_c <> '00010101' THEN date_solde_0_c ELSE '20991231' END, CASE WHEN date_solde_0_h <> '00010101' THEN date_solde_0_h ELSE '20991231' END, CASE WHEN date_solde_1_c <> '00010101' THEN date_solde_1_c ELSE '20991231' END, CASE WHEN date_solde_1_h <> '00010101' THEN date_solde_1_h ELSE '20991231' END, CASE WHEN date_solde_2_c <> '00010101' THEN date_solde_2_c ELSE '20991231' END, CASE WHEN date_solde_2_h <> '00010101' THEN date_solde_2_h ELSE '20991231' END, CASE WHEN date_solde_22_c <> '00010101' THEN date_solde_22_c ELSE '20991231' END, CASE WHEN date_solde_22_h <> '00010101' THEN date_solde_22_h ELSE '20991231' END, montant_encours_c, montant_encours_0_c, montant_encours_1_c, montant_encours_2_c, montant_encours_22_c, montant_encours_h, montant_encours_0_h, montant_encours_1_h, montant_encours_2_h, montant_encours_22_h, '20991231', '20991231', '20991231', '20991231', '20991231', '20991231', '20991231', '20991231', '20991231', '20991231', '20991231', delai_facture, delai_solde, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, delai_expedition_22, delai_solde_0_c, delai_solde_0_h, delai_solde_1_c, delai_solde_1_h, delai_solde_2_c, delai_solde_2_h, delai_solde_22_c, delai_solde_22_h, date_encours, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_comptabilise_budget_global_c FROM w_factures WHERE oid NOT IN (SELECT oid FROM activite[PX].p_factures); UPDATE activite[PX].p_factures SET date_fin = p_sejours.date_sortie FROM activite[PX].p_sejours WHERE p_factures.no_sejour = p_sejours.no_sejour AND p_factures.date_fin > p_sejours.date_sortie ; UPDATE activite[PX].p_factures SET date_debut = p_sejours.date_entree FROM activite[PX].p_sejours WHERE p_factures.no_sejour = p_sejours.no_sejour AND p_factures.date_debut < p_sejours.date_entree ; SELECT base.cti_enable_index('activite[PX]', 'i_factures_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_5'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_6'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_7'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_8'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_9'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_10'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_11'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_12'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_13'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_14'); UPDATE activite[PX].p_factures SET facture_od_avoir_id = p_factures_od_avoir.oid FROM activite[PX].p_factures p_factures_od_avoir WHERE p_factures.no_facture_od_avoir = p_factures_od_avoir.no_facture AND p_factures.no_facture_od_avoir <> ''; UPDATE activite[PX].p_sejours SET est_sans_facturation = '1' WHERE lieu_sortie_id IN (SELECT oid FROM activite[PX].t_lieux WHERE service_facturation_id IN (SELECT oid FROM activite[PX].t_services_facturation WHERE est_sans_facturation = '1') OR unite_fonctionnelle_id IN (SELECT oid FROM activite[PX].t_unites_fonctionnelles WHERE est_sans_facturation = '1') ); -- Séjours sans facture DROP TABLE IF EXISTS w_factures_trous; CREATE TEMP TABLE w_factures_trous AS SELECT p_sejours.finess, p_sejours.no_sejour, p_sejours.date_entree, p_sejours.tiers_payant_0_id, p_sejours.tiers_payant_1_id, p_sejours.tiers_payant_2_id, p_sejours.tiers_payant_22_id, p_sejours.code_cp_demandee, COALESCE(t_services_facturation.avec_facturation_intermediaire,'') AS avec_facturation_intermediaire, p_sejours.code_sorti, CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_sortie, MAX(CASE WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN date_sortie ELSE p_factures.date_fin END) AS date_fin_facture, date(MAX(COALESCE(CASE WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN date_sortie ELSE p_factures.date_fin END + interval '1 day', p_sejours.date_entree))) AS date_debut_encours, CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_fin_encours FROM activite[PX].p_sejours LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND no_facture NOT LIKE 'E%' 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' 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, 'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END, 'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END, 'E', '0', '20991231'::date, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee , MIN(GREATEST(date_debut_encours, p_calendrier.date)), MAX(LEAST(date_fin_encours, p_calendrier.date)) FROM w_factures_trous JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_debut_encours AND date_fin_encours WHERE (date_debut_encours <= date_fin_encours or date_fin_facture is null) GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12 HAVING MAX(LEAST(date_fin_encours, p_calendrier.date)) >= '[ENV_ADM_ANNEEDEBUT]0101' ; ]]> 0 THEN 100-(NTAUXSS*100) ELSE 0 END AS taux_0, NTAUXSS*100 AS taux_1, CASE WHEN CPRIXACTCMP <> 0 THEN 100-(NTAUXSS*100) ELSE 0 END AS taux_2, 0::numeric AS taux_22, PATFACTACT_TD.CPUACTHT, 0::bigint AS lieu_id, CASE WHEN type_facture = '1' THEN -1 ELSE 1 END * PATFACTACT_TD.NQTACTE AS nb_prestation, CASE WHEN zero_compta = '1' THEN 0 WHEN type_facture = '1' THEN -1 ELSE 1 END * (CPRIXACTSS + CPRIXACTCMP + CPRIXACTPAT) AS montant_comptabilise, CASE WHEN zero_compta = '1' THEN 0 WHEN type_facture = '1' THEN -1 ELSE 1 END * CPRIXACTPAT AS montant_comptabilise_0, CASE WHEN zero_compta = '1' THEN 0 WHEN type_facture = '1' THEN -1 ELSE 1 END * CPRIXACTSS AS montant_comptabilise_1, CASE WHEN zero_compta = '1' THEN 0 WHEN type_facture = '1' THEN -1 ELSE 1 END * CPRIXACTCMP AS montant_comptabilise_2, 0::numeric AS montant_comptabilise_22, COALESCE(t_rubriques_facturation.oid,0) AS rubrique_comptabilisation_id, 1::bigint AS origine_facturation_id, w_factures.oid AS facture_id, 0::bigint AS compte_produit_id FROM prod_sano.PATFACTACT_TD JOIN w_factures ON w_factures.NIDFACT = PATFACTACT_TD.XNIDFACT LEFT JOIN activite[PX].t_rubriques_facturation ON PATFACTACT_TD.XNNUMACT = t_rubriques_facturation.code_original LEFT JOIN activite.t_prestations ON PATFACTACT_TD.TCODTELE = t_prestations.code ; -- Regrouper Rubriques avec code en double DROP TABLE IF EXISTS w_rubriques; CREATE TEMP TABLE w_rubriques AS SELECT code, (MIN(Array[CASE WHEN statut = 'P' THEN 0 ELSE 1 END::numeric,oid::numeric]))[2]::bigint AS oid, (MIN(Array[to_char(oid,'FM000000000000'),texte]))[2] AS texte, base.cti_array_accum(oid) AS oid_array FROM activite[PX].t_rubriques_facturation GROUP BY 1 ; UPDATE activite[PX].t_rubriques_facturation SET statut = CASE WHEN t_rubriques_facturation.oid = w_rubriques.oid THEN 'P' ELSE '' END FROM w_rubriques WHERE t_rubriques_facturation.oid = ANY(oid_array) AND statut IS DISTINCT FROM CASE WHEN t_rubriques_facturation.oid = w_rubriques.oid THEN 'P' ELSE '' END ; UPDATE activite[PX].p_factures_lignes_c SET rubrique_facturation_id = w_rubriques.oid, rubrique_comptabilisation_id = w_rubriques.oid FROM w_rubriques WHERE p_factures_lignes_c.rubrique_facturation_id = ANY(oid_array) AND p_factures_lignes_c.rubrique_facturation_id <> w_rubriques.oid ; -- Eclatement des supplements par jour DROP TABLE IF EXISTS w_factures_lignes_sup_c; CREATE TEMP TABLE w_factures_lignes_sup_c AS SELECT p_factures_lignes_c.CTID AS from_CTID, t_prestations.code AS prestation_code, date(p_sejours.date_entree) AS date_debut_ghs, date(p_sejours.date_sortie - interval '1 day') AS date_fin_ghs, (date(date_sortie) - date(date_entree)) * CASE WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation_ghs, CASE WHEN t_prestations.code = 'GHS' THEN date(date_entree + interval '1 day') ELSE date(p_factures_lignes_c.date_debut + interval '1 day') END AS date_debut_det, CASE WHEN t_prestations.code = 'GHS' THEN date(p_sejours.date_sortie - interval '1 day') ELSE date(p_factures_lignes_c.date_debut + ((ABS(nb_prestation)-1) || ' day')::interval) END AS date_fin_det, ABS(CASE WHEN t_prestations.code = 'GHS' THEN date(date_sortie) - date(date_entree) ELSE nb_prestation END) AS nb_det, p_factures_lignes_c.* FROM activite[PX].p_factures_lignes_c JOIN activite[PX].p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour AND p_sejours.etat = '' JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND ( code IN ('PJ', 'FJ', 'SSM', 'GHS', 'EXH', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO') OR t_prestations.type_ventilation_jour = '1' ) WHERE (nb_prestation > 1 or nb_prestation < -1 OR (t_prestations.code = 'GHS' AND p_sejours.type_sejour != '5' AND date(date_sortie) - date(date_entree) > 1)) ; UPDATE w_factures_lignes_sup_c SET date_fin_ghs = date(date_debut_exh - interval '1 day'), date_fin_det = date(date_debut_exh - interval '1 day'), nb_prestation_ghs = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1, nb_det = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1 FROM ( SELECT no_facture, date(MIN(date_debut)) AS date_debut_exh FROM activite[PX].p_factures_lignes_c JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code = 'EXH' GROUP BY 1) subview WHERE w_factures_lignes_sup_c.no_facture = subview.no_facture AND w_factures_lignes_sup_c.prestation_code = 'GHS'; CREATE INDEX w_factures_lignes_sup_c_i1 ON w_factures_lignes_sup_c USING btree (date_debut); DROP TABLE IF EXISTS w_factures_lignes_sup_c_sup; CREATE TEMP TABLE w_factures_lignes_sup_c_sup AS SELECT from_CTID, no_facture, date AS date_debut, date AS date_fin, CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_rubrique, CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation, coefficient, coefficient_mco, rubrique_facturation_id, prestation_id, 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; UPDATE activite[PX].p_factures_lignes_c 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_c.no_facture = p_factures.no_facture AND p_factures_lignes_c.lieu_id = 0; SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_2'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_5'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_6'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_7'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_8'); SELECT activite[PX].cti_reorganize_rubrique_facture_c('activite[PX].p_factures_lignes_c'); ; -- Factures référence DROP TABLE IF EXISTS w_sejours_facture_reference; CREATE TEMP TABLE w_sejours_facture_reference AS SELECT p_sejours.no_sejour, CASE WHEN avec_facturation_intermediaire IS DISTINCT FROM '1' THEN p_sejours.date_sortie ELSE p_factures.date_fin END AS date_fin, MIN(CASE WHEN avec_facturation_intermediaire IS DISTINCT FROM '1' THEN p_sejours.date_entree ELSE p_factures.date_debut END) AS date_debut, MAX(p_factures.no_facture) AS no_facture_last, MAX(CASE WHEN type_facture <> '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(p_factures_lignes_c.taux_1,'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'))) 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; ]]> 0 GROUP BY 1,2,3,4,5 ; SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_1'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_2'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_3'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_4'); SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_8'); -- Maj montants regles dans factures UPDATE activite[PX].p_factures SET montant_regle_c = subview.montant_regle, montant_regle_0_c = subview.montant_regle_0, montant_regle_1_c = subview.montant_regle_1, montant_regle_2_c = subview.montant_regle_2, date_solde_c = subview.date_solde, date_solde_0_c = subview.date_solde_0, date_solde_1_c = subview.date_solde_1, date_solde_2_c = subview.date_solde_2 FROM ( SELECT no_facture, SUM(montant_regle) AS montant_regle, SUM(montant_regle_0) AS montant_regle_0, SUM(montant_regle_1) AS montant_regle_1, SUM(montant_regle_2) AS montant_regle_2, MAX(date_comptable) AS date_solde, MAX(CASE WHEN montant_regle_0 <> 0 THEN date_comptable ELSE '00010101' END) AS date_solde_0, MAX(CASE WHEN montant_regle_1 <> 0 THEN date_comptable ELSE '00010101' END) AS date_solde_1, MAX(CASE WHEN montant_regle_2 <> 0 THEN date_comptable ELSE '00010101' END) AS date_solde_2 FROM activite[PX].p_factures_soldes_c WHERE montant_regle <> 0 OR montant_regle_0 <> 0 OR montant_regle_1 <> 0 OR montant_regle_2 <> 0 GROUP BY 1 ) subview WHERE p_factures.no_facture = subview.no_facture ]]> = '[ENV_ADM_ANNEEDEBUT]0101' AND CSOMDUE <> 0 GROUP BY 1 UNION SELECT date(DDATENC) AS date_comptable, 0::numeric AS montant_ventes_c, SUM(CSOMENC) AS montant_reglements_c FROM w_PATFACTCPTA_TD WHERE date(DDATENC) >= '[ENV_ADM_ANNEEDEBUT]0101' AND CSOMENC <> 0 GROUP BY 1 ) subview GROUP BY 1; 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::numeric AS montant_ventes_h, 0::numeric AS montant_reglements_h FROM ( SELECT NNOFACT_CTI AS no_facture, date(DDATECR) AS date_comptable, SUM(CSOMDUE) AS montant_ventes_c, 0::numeric AS montant_reglements_c FROM w_PATFACTCPTA_TD WHERE date(DDATECR) >= '[ENV_ADM_ANNEEDEBUT]0101' AND CSOMDUE <> 0 GROUP BY 1,2 UNION SELECT NNOFACT_CTI AS no_facture, date(DDATENC) AS date_comptable, 0::numeric AS montant_ventes_c, SUM(CSOMENC) AS montant_reglements_c FROM w_PATFACTCPTA_TD WHERE date(DDATENC) >= '[ENV_ADM_ANNEEDEBUT]0101' AND CSOMENC <> 0 GROUP BY 1,2 ) subview GROUP BY 1,2 ; ]]> '' GROUP BY TCODDEST; INSERT INTO activite[PX].t_tiers_payant(code_original, code, type_tiers_payant, texte, texte_court) SELECT TCODDEST, TCODDEST, '2', MAX(TLIBELLE), MAX(TLIBELLE) FROM prod_sano.LISTFACTDEST_TP WHERE TCODDEST IN (SELECT TSPECCODE FROM prod_sano.PATFACT_TD) AND TCODDEST NOT IN (SELECT code_original FROM activite[PX].t_tiers_payant WHERE code_original IS NOT NULL) AND TCODDEST <> '' GROUP BY TCODDEST; ]]> 0 AND NINDEX NOT IN (SELECT code_original FROM activite[PX].t_services_facturation WHERE code_original IS NOT NULL) AND NINDEX IN (SELECT XNCLEUF FROM prod_sano.PATHOSP_TD ) ORDER BY 1; UPDATE activite[PX].t_services_facturation SET mode_traitement_id = COALESCE(t_modes_traitement.oid,0) FROM prod_sano.TOPOUF_TP LEFT JOIN base.t_modes_traitement ON substr(TCODSSUF,1,2) = t_modes_traitement.code WHERE t_services_facturation.code_original = NINDEX AND COALESCE(mode_traitement_id,0) = 0 AND COALESCE(mode_traitement_id,0) <> COALESCE(t_modes_traitement.oid,0); UPDATE activite[PX].t_services_facturation SET dmt_id = COALESCE(t_dmt.oid,0) FROM prod_sano.TOPOUF_TP LEFT JOIN base.t_dmt ON substr(TCODSSUF,3,3) = t_dmt.code WHERE t_services_facturation.code_original = NINDEX 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 NINDEX, NINDEX, TLIBELLE, TLIBELLE FROM prod_sano.TOPOUF_TP WHERE NINDEX <> 0 AND NINDEX NOT IN (SELECT code_original FROM activite[PX].t_unites_fonctionnelles WHERE code_original IS NOT NULL) AND NINDEX IN (SELECT XNCLEUF FROM prod_sano.PATHOSP_TD ) ORDER BY 1; -- 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); -- Activités INSERT INTO activite[PX].t_activites(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_activites); -- Etages et lits 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) SELECT to_char(NCLESECT,'FM999999999999'), to_char(NCLESECT,'FM999999999999'), to_char(NCLESECT,'FM999999999999'), to_char(NCLESECT,'FM999999999999') FROM prod_sano.TOPOSECT_TP WHERE NINDEX IN (SELECT XNCLELIT FROM prod_sano.PATHOSP_TD) AND to_char(NCLESECT,'FM999999999999') NOT IN (SELECT code_original FROM activite[PX].t_etages WHERE code_original IS NOT NULL) GROUP BY 1 ; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court) SELECT to_char(NINDEX,'FM999999999999'), to_char(NINDEX,'FM999999999999'), to_char(NINDEX,'FM999999999999'), to_char(NINDEX,'FM999999999999') FROM prod_sano.TOPOSECT_TP WHERE NINDEX IN (SELECT NCLESECT FROM prod_sano.PATHOSP_TD) AND to_char(NINDEX,'FM999999999999') NOT IN (SELECT code_original FROM activite[PX].t_etages WHERE code_original IS NOT NULL) GROUP BY 1 ; UPDATE activite[PX].t_etages SET texte = TLIBELLE, texte_court = TLIBELLE FROM prod_sano.TOPOSECT_TP WHERE t_etages.code_original = to_char(NINDEX,'FM999999999999') AND t_etages.texte = t_etages.code_original ; INSERT INTO activite[PX].t_lits(oid, code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT 0, 0, '', 'Non renseigné', 'Non renseigné', 0, 'N' WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_lits); INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT to_char(NINDEX,'FM999999999999'), TLIBELLE, TLIBELLE, TLIBELLE, t_etages.oid, CASE WHEN TCODFAC = 'CPC' THEN 'O' ELSE 'N' END FROM prod_sano.TOPOSECT_TP JOIN activite[PX].t_etages ON t_etages.code_original = to_char(NCLESECT,'FM999999999999') WHERE NINDEX IN (SELECT XNCLELIT FROM prod_sano.PATHOSP_TD) AND to_char(NINDEX,'FM999999999999') NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL) ; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT to_char(NINDEX,'FM999999999999'), TLIBELLE, TLIBELLE, TLIBELLE, t_etages.oid, CASE WHEN TCODFAC = 'CPC' THEN 'O' ELSE 'N' END FROM prod_sano.TOPOSECT_TP JOIN activite[PX].t_etages ON t_etages.code_original = to_char(NCLESECT,'FM999999999999') WHERE NINDEX IN (SELECT XNCLELIT FROM prod_sano.PATHISTLIT_TD) AND to_char(NINDEX,'FM999999999999') NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL) ; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT code_original, code, texte || ' - sans lit', texte_court || ' - sans lit', oid, 'N' FROM activite[PX].t_etages WHERE oid <> 0 AND code_original NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL) ; ]]> 'PJ' THEN t_prestations.code ELSE 'PJS' END AS prestation_mcode FROM activite[PX].p_factures_lignes_c JOIN activite[PX].t_lieux ON lieu_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON t_services_facturation.oid = service_facturation_id JOIN activite.t_prestations ON prestation_id = t_prestations.oid WHERE date_fin >= '20170701' AND date_debut >= '20170701' AND type_t2a = '2' AND prestation_id = ANY (SELECT to_id FROM activite.t_listes_contenu JOIN activite.t_listes ON liste_id = t_listes.oid AND t_listes.code = 'DMAP_MFS') AND montant_comptabilise <> 0 AND montant_comptabilise_1 <> 0 AND round(prix_unitaire * nb_prestation,2) <> montant_comptabilise AND abs(round(prix_unitaire * nb_prestation,2)) <> abs(montant_comptabilise)+(nb_prestation*18) ORDER BY no_facture, prestation_id ; -- Calcul tarif plein UPDATE w_moins10 SET montant_facture_1 = CASE WHEN prestation_code = 'PJ' OR type_valorisation_non_facture = 'PJ' THEN round(prix_unitaire * nb_prestation * taux_1 / 100,2) - montant_fj ELSE round(prix_unitaire * nb_prestation * taux_1 / 100,2) END, montant_facture = CASE WHEN prestation_code = 'PJ' OR type_valorisation_non_facture = 'PJ' THEN round(prix_unitaire * nb_prestation * taux_1 / 100,2) - montant_fj ELSE round(prix_unitaire * nb_prestation * taux_1 / 100,2) END + (montant_facture_2+montant_facture_22+montant_facture_0) ; -- Génération prestations spécifiques INSERT INTO activite.t_prestations (code, texte, texte_court) SELECT prestation_mcode, t_prestations.texte || ' (-10%)', t_prestations.texte || ' (-10%)' FROM w_moins10 JOIN activite.t_prestations on prestation_id = t_prestations.oid WHERE prestation_mcode NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL) GROUP BY 1,2,3 ; -- Maj tarif plein UPDATE activite[PX].p_factures_lignes_c SET montant_facture = w_moins10.montant_facture, montant_facture_1 = w_moins10.montant_facture_1 FROM w_moins10 WHERE p_factures_lignes_c.CTID = w_moins10.CTID_orig; ; -- Génération -10% UPDATE w_moins10 SET montant_facture = montant_comptabilise - montant_facture, montant_facture_1 = montant_comptabilise_1 - montant_facture_1, montant_facture_2 = montant_comptabilise_2 - montant_facture_2, montant_facture_22 = montant_comptabilise_22 - montant_facture_22, montant_facture_0 = montant_comptabilise_0 - montant_facture_0, montant_comptabilise = 0, montant_comptabilise_1 = 0, montant_comptabilise_2 = 0, montant_comptabilise_22 = 0, montant_comptabilise_0 = 0, prestation_id = t_prestations.oid FROM activite.t_prestations WHERE t_prestations.code = prestation_mcode ; ALTER TABLE w_moins10 DROP COLUMN CTID_orig; ALTER TABLE w_moins10 DROP COLUMN montant_fj; ALTER TABLE w_moins10 DROP COLUMN prestation_code; ALTER TABLE w_moins10 DROP COLUMN prestation_mcode; ALTER TABLE w_moins10 DROP COLUMN type_valorisation_non_facture; INSERT INTO activite[PX].p_factures_lignes_c SELECT * FROM w_moins10 WHERE montant_facture <> 0 ; SELECT activite[PX].cti_reorganize_rubrique_facture_c('activite[PX].p_factures_lignes_c'); ]]> '2099-12-31'; DROP TABLE IF EXISTS w_sejours_total; CREATE TEMP TABLE w_sejours_total AS SELECT p_sejours.no_sejour AS no_sejour, MAX(COALESCE(p_factures.date_facture,'20991231')) AS date_facture, MAX(COALESCE(p_factures.date_expedition,'20991231')) AS date_expedition, MAX(COALESCE(p_factures.date_solde,'20991231')) AS date_solde, SUM(COALESCE(p_factures.montant_facture_c,0)) AS montant_facture_c, SUM(COALESCE(p_factures.montant_facture_h,0)) AS montant_facture_h, SUM(COALESCE(p_factures.montant_regle_c,0)) AS montant_regle_c, SUM(COALESCE(p_factures.montant_regle_h,0)) AS montant_regle_h, SUM(COALESCE(CASE WHEN p_factures.type_facture <> 'P' AND p_factures.type_facture <> 'E' AND p_factures.type_facture <> 'G' THEN 1 ELSE 0 END,0)) AS nb_factures, SUM(COALESCE(CASE WHEN p_factures.type_facture = '0' THEN 0 ELSE 1 END,0)) AS nb_factures_regularisation, SUM(COALESCE(p_factures.nb_rejets,0)) AS nb_rejets, SUM(COALESCE(p_factures.montant_facture_0_c,0)) AS montant_facture_0_c, SUM(COALESCE(p_factures.montant_facture_0_h,0)) AS montant_facture_0_h, SUM(COALESCE(p_factures.montant_regle_0_c,0)) AS montant_regle_0_c, SUM(COALESCE(p_factures.montant_regle_0_h,0)) AS montant_regle_0_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_0_c <> 0 OR p_factures.montant_facture_0_h <> 0) THEN p_factures.date_expedition_0 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_0, MAX(COALESCE(CASE WHEN p_factures.date_solde_0_c < '2099-12-31' AND p_factures.date_solde_0_c > p_factures.date_solde_0_h THEN p_factures.date_solde_0_c ELSE p_factures.date_solde_0_h END,'20991231' )) AS date_solde_0, SUM(COALESCE(p_factures.montant_facture_1_c,0)) AS montant_facture_1_c, SUM(COALESCE(p_factures.montant_facture_1_h,0)) AS montant_facture_1_h, SUM(COALESCE(p_factures.montant_regle_1_c,0)) AS montant_regle_1_c, SUM(COALESCE(p_factures.montant_regle_1_h,0)) AS montant_regle_1_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_1_c <> 0 OR p_factures.montant_facture_1_h <> 0) THEN p_factures.date_expedition_1 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_1, MAX(COALESCE(CASE WHEN p_factures.date_solde_1_c < '2099-12-31' AND p_factures.date_solde_1_c > p_factures.date_solde_1_h THEN p_factures.date_solde_1_c ELSE p_factures.date_solde_1_h END,'20991231' )) AS date_solde_1, SUM(COALESCE(p_factures.montant_facture_2_c,0)) AS montant_facture_2_c, SUM(COALESCE(p_factures.montant_facture_2_h,0)) AS montant_facture_2_h, SUM(COALESCE(p_factures.montant_regle_2_c,0)) AS montant_regle_2_c, SUM(COALESCE(p_factures.montant_regle_2_h,0)) AS montant_regle_2_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_2_c <> 0 OR p_factures.montant_facture_2_h <> 0) THEN p_factures.date_expedition_2 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_2, MAX(COALESCE(CASE WHEN p_factures.date_solde_2_c < '2099-12-31' AND p_factures.date_solde_2_c > p_factures.date_solde_2_h THEN p_factures.date_solde_2_c ELSE p_factures.date_solde_2_h END,'20991231' )) AS date_solde_2, SUM(COALESCE(p_factures.montant_facture_22_c,0)) AS montant_facture_22_c, SUM(COALESCE(p_factures.montant_facture_22_h,0)) AS montant_facture_22_h, SUM(COALESCE(p_factures.montant_regle_22_c,0)) AS montant_regle_22_c, SUM(COALESCE(p_factures.montant_regle_22_h,0)) AS montant_regle_22_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_22_c <> 0 OR p_factures.montant_facture_22_h <> 0) THEN p_factures.date_expedition_22 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_22, MAX(COALESCE(CASE WHEN p_factures.date_solde_22_c < '2099-12-31' AND p_factures.date_solde_22_c > p_factures.date_solde_22_h THEN p_factures.date_solde_22_c ELSE p_factures.date_solde_22_h END,'20991231' )) AS date_solde_22 , SUM(COALESCE(p_factures.montant_comptabilise_c,0)) AS montant_comptabilise_c, SUM(COALESCE(p_factures.montant_comptabilise_h,0)) AS montant_comptabilise_h, SUM(COALESCE(p_factures.montant_comptabilise_0_c,0)) AS montant_comptabilise_0_c, SUM(COALESCE(p_factures.montant_comptabilise_0_h,0)) AS montant_comptabilise_0_h, SUM(COALESCE(p_factures.montant_comptabilise_1_c,0)) AS montant_comptabilise_1_c, SUM(COALESCE(p_factures.montant_comptabilise_1_h,0)) AS montant_comptabilise_1_h, SUM(COALESCE(p_factures.montant_comptabilise_2_c,0)) AS montant_comptabilise_2_c, SUM(COALESCE(p_factures.montant_comptabilise_2_h,0)) AS montant_comptabilise_2_h, SUM(COALESCE(p_factures.montant_comptabilise_22_c,0)) AS montant_comptabilise_22_c, SUM(COALESCE(p_factures.montant_comptabilise_22_h,0)) AS montant_comptabilise_22_h, SUM(COALESCE(p_factures.montant_comptabilise_budget_global_c,0)) AS montant_comptabilise_budget_global_c, SUM(COALESCE(p_factures.montant_facture_c_actes_inclus_dans_sejour,0)) AS montant_facture_c_actes_inclus_dans_sejour, SUM(COALESCE(p_factures.montant_facture_h_actes_inclus_dans_sejour,0)) AS montant_facture_h_actes_inclus_dans_sejour FROM activite[PX].p_sejours LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND type_facture <> 'P' GROUP BY p_sejours.no_sejour; ALTER TABLE w_sejours_total ADD CONSTRAINT w_sejours_total_pkey PRIMARY KEY(no_sejour); UPDATE activite[PX].p_sejours SET date_facture = w_sejours_total.date_facture, date_expedition = w_sejours_total.date_expedition, date_solde = w_sejours_total.date_solde, montant_facture_c = w_sejours_total.montant_facture_c, montant_facture_h = w_sejours_total.montant_facture_h, montant_regle_c = w_sejours_total.montant_regle_c, montant_regle_h = w_sejours_total.montant_regle_h, nb_factures = w_sejours_total.nb_factures, nb_factures_regularisation = w_sejours_total.nb_factures_regularisation, nb_factures_rejet = w_sejours_total.nb_rejets, montant_facture_0_c = w_sejours_total.montant_facture_0_c, montant_facture_0_h = w_sejours_total.montant_facture_0_h, montant_regle_0_c = w_sejours_total.montant_regle_0_c, montant_regle_0_h = w_sejours_total.montant_regle_0_h, date_expedition_0 = CASE WHEN w_sejours_total.date_expedition_0 <> '0001-01-01' THEN w_sejours_total.date_expedition_0 ELSE '2099-12-31' END, date_solde_0 = w_sejours_total.date_solde_0, montant_facture_1_c = w_sejours_total.montant_facture_1_c, montant_facture_1_h = w_sejours_total.montant_facture_1_h, montant_regle_1_c = w_sejours_total.montant_regle_1_c, montant_regle_1_h = w_sejours_total.montant_regle_1_h, date_expedition_1 = CASE WHEN w_sejours_total.date_expedition_1 <> '0001-01-01' THEN w_sejours_total.date_expedition_1 ELSE '2099-12-31' END, date_solde_1 = w_sejours_total.date_solde_1, montant_facture_2_c = w_sejours_total.montant_facture_2_c, montant_facture_2_h = w_sejours_total.montant_facture_2_h, montant_regle_2_c = w_sejours_total.montant_regle_2_c, montant_regle_2_h = w_sejours_total.montant_regle_2_h, date_expedition_2 = CASE WHEN w_sejours_total.date_expedition_2 <> '0001-01-01' THEN w_sejours_total.date_expedition_2 ELSE '2099-12-31' END, date_solde_2 = w_sejours_total.date_solde_2, montant_facture_22_c = w_sejours_total.montant_facture_22_c, montant_facture_22_h = w_sejours_total.montant_facture_22_h, montant_regle_22_c = w_sejours_total.montant_regle_22_c, montant_regle_22_h = w_sejours_total.montant_regle_22_h, date_expedition_22 = CASE WHEN w_sejours_total.date_expedition_22 <> '0001-01-01' THEN w_sejours_total.date_expedition_22 ELSE '2099-12-31' END, date_solde_22 = w_sejours_total.date_solde_22, montant_comptabilise_c = w_sejours_total.montant_comptabilise_c, montant_comptabilise_h = w_sejours_total.montant_comptabilise_h, montant_comptabilise_0_c = w_sejours_total.montant_comptabilise_0_c, montant_comptabilise_0_h = w_sejours_total.montant_comptabilise_0_h, montant_comptabilise_1_c = w_sejours_total.montant_comptabilise_1_c, montant_comptabilise_1_h = w_sejours_total.montant_comptabilise_1_h, montant_comptabilise_2_c = w_sejours_total.montant_comptabilise_2_c, montant_comptabilise_2_h = w_sejours_total.montant_comptabilise_2_h, montant_comptabilise_22_c = w_sejours_total.montant_comptabilise_22_c, montant_comptabilise_22_h = w_sejours_total.montant_comptabilise_22_h, montant_comptabilise_budget_global_c = w_sejours_total.montant_comptabilise_budget_global_c, montant_facture_c_actes_inclus_dans_sejour = w_sejours_total.montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour = w_sejours_total.montant_facture_h_actes_inclus_dans_sejour FROM w_sejours_total WHERE w_sejours_total.no_sejour = p_sejours.no_sejour AND ( p_sejours.date_facture IS DISTINCT FROM w_sejours_total.date_facture OR p_sejours.date_expedition IS DISTINCT FROM w_sejours_total.date_expedition OR p_sejours.date_solde IS DISTINCT FROM w_sejours_total.date_solde OR p_sejours.montant_facture_c IS DISTINCT FROM w_sejours_total.montant_facture_c OR p_sejours.montant_facture_h IS DISTINCT FROM w_sejours_total.montant_facture_h OR p_sejours.montant_regle_c IS DISTINCT FROM w_sejours_total.montant_regle_c OR p_sejours.montant_regle_h IS DISTINCT FROM w_sejours_total.montant_regle_h OR p_sejours.nb_factures IS DISTINCT FROM w_sejours_total.nb_factures OR p_sejours.nb_factures_regularisation IS DISTINCT FROM w_sejours_total.nb_factures_regularisation OR p_sejours.nb_factures_rejet IS DISTINCT FROM w_sejours_total.nb_rejets OR p_sejours.montant_facture_0_c IS DISTINCT FROM w_sejours_total.montant_facture_0_c OR p_sejours.montant_facture_0_h IS DISTINCT FROM w_sejours_total.montant_facture_0_h OR p_sejours.montant_regle_0_c IS DISTINCT FROM w_sejours_total.montant_regle_0_c OR p_sejours.montant_regle_0_h IS DISTINCT FROM w_sejours_total.montant_regle_0_h OR p_sejours.date_expedition_0 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_0 <> '0001-01-01' THEN w_sejours_total.date_expedition_0 ELSE '2099-12-31' END OR p_sejours.date_solde_0 IS DISTINCT FROM w_sejours_total.date_solde_0 OR p_sejours.montant_facture_1_c IS DISTINCT FROM w_sejours_total.montant_facture_1_c OR p_sejours.montant_facture_1_h IS DISTINCT FROM w_sejours_total.montant_facture_1_h OR p_sejours.montant_regle_1_c IS DISTINCT FROM w_sejours_total.montant_regle_1_c OR p_sejours.montant_regle_1_h IS DISTINCT FROM w_sejours_total.montant_regle_1_h OR p_sejours.date_expedition_1 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_1 <> '0001-01-01' THEN w_sejours_total.date_expedition_1 ELSE '2099-12-31' END OR p_sejours.date_solde_1 IS DISTINCT FROM w_sejours_total.date_solde_1 OR p_sejours.montant_facture_2_c IS DISTINCT FROM w_sejours_total.montant_facture_2_c OR p_sejours.montant_facture_2_h IS DISTINCT FROM w_sejours_total.montant_facture_2_h OR p_sejours.montant_regle_2_c IS DISTINCT FROM w_sejours_total.montant_regle_2_c OR p_sejours.montant_regle_2_h IS DISTINCT FROM w_sejours_total.montant_regle_2_h OR p_sejours.date_expedition_2 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_2 <> '0001-01-01' THEN w_sejours_total.date_expedition_2 ELSE '2099-12-31' END OR p_sejours.date_solde_2 IS DISTINCT FROM w_sejours_total.date_solde_2 OR p_sejours.montant_facture_22_c IS DISTINCT FROM w_sejours_total.montant_facture_22_c OR p_sejours.montant_facture_22_h IS DISTINCT FROM w_sejours_total.montant_facture_22_h OR p_sejours.montant_regle_22_c IS DISTINCT FROM w_sejours_total.montant_regle_22_c OR p_sejours.montant_regle_22_h IS DISTINCT FROM w_sejours_total.montant_regle_22_h OR p_sejours.date_expedition_22 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_22 <> '0001-01-01' THEN w_sejours_total.date_expedition_22 ELSE '2099-12-31' END OR p_sejours.date_solde_22 IS DISTINCT FROM w_sejours_total.date_solde_22 OR p_sejours.montant_comptabilise_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_c OR p_sejours.montant_comptabilise_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_h OR p_sejours.montant_comptabilise_0_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_0_c OR p_sejours.montant_comptabilise_0_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_0_h OR p_sejours.montant_comptabilise_1_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_1_c OR p_sejours.montant_comptabilise_1_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_1_h OR p_sejours.montant_comptabilise_2_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_2_c OR p_sejours.montant_comptabilise_2_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_2_h OR p_sejours.montant_comptabilise_22_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_22_c OR p_sejours.montant_comptabilise_22_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_22_h OR p_sejours.montant_comptabilise_budget_global_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_budget_global_c OR p_sejours.montant_facture_c_actes_inclus_dans_sejour IS DISTINCT FROM w_sejours_total.montant_facture_c_actes_inclus_dans_sejour OR p_sejours.montant_facture_h_actes_inclus_dans_sejour IS DISTINCT FROM w_sejours_total.montant_facture_h_actes_inclus_dans_sejour ); UPDATE activite[PX].p_sejours set ghm_id = t_ghs.ghm_id::bigint FROM base.t_ghs WHERE p_sejours.ghs_id = t_ghs.oid AND p_sejours.ghm_id = 0 AND p_sejours.ghs_id > 0; UPDATE activite[PX].p_sejours SET delai_groupage = CASE WHEN code_sorti = '1' AND date_groupage > date_sortie AND date_groupage < '2099-12-31' AND ghs_id <> 0 THEN date_groupage - date_sortie ELSE 0 END, delai_facture = CASE WHEN code_sorti = '1' AND date_facture > date_sortie AND date_facture < '2099-12-31' AND date_facture > date_sortie THEN date_facture - date_sortie ELSE 0 END, delai_expedition = CASE WHEN code_sorti = '1' AND date_expedition > date_sortie AND date_facture < '2099-12-31' AND date_expedition < '2099-12-31' THEN date_expedition - date_sortie ELSE 0 END, delai_solde = CASE WHEN code_sorti = '1' AND date_solde > date_sortie AND date_facture < '2099-12-31' AND date_solde < '2099-12-31' THEN date_solde - date_sortie ELSE 0 END, delai_expedition_0 = CASE WHEN code_sorti = '1' AND date_expedition_0 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_0 < '2099-12-31' THEN date_expedition_0 - date_sortie ELSE 0 END, delai_solde_0 = CASE WHEN code_sorti = '1'AND date_solde_0 > date_sortie AND date_facture < '2099-12-31' AND date_solde_0 < '2099-12-31' THEN date_solde_0 - date_sortie ELSE 0 END, delai_expedition_1 = CASE WHEN code_sorti = '1' AND date_expedition_1 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_1 < '2099-12-31' THEN date_expedition_1 - date_sortie ELSE 0 END, delai_solde_1 = CASE WHEN code_sorti = '1' AND date_solde_1 > date_sortie AND date_facture < '2099-12-31' AND date_solde_1 < '2099-12-31' THEN date_solde_1 - date_sortie ELSE 0 END, delai_expedition_2 = CASE WHEN code_sorti = '1' AND date_expedition_2 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_2 < '2099-12-31' THEN date_expedition_2 - date_sortie ELSE 0 END, delai_solde_2 = CASE WHEN code_sorti = '1' AND date_solde_2 > date_sortie AND date_facture < '2099-12-31' AND date_solde_2 < '2099-12-31' THEN date_solde_2 - date_sortie ELSE 0 END, delai_expedition_22 = CASE WHEN code_sorti = '1' AND date_expedition_22 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_22 < '2099-12-31' THEN date_expedition_22 - date_sortie ELSE 0 END, delai_solde_22 = CASE WHEN code_sorti = '1' AND date_solde_22 > date_sortie AND date_facture < '2099-12-31' AND date_solde_22 < '2099-12-31' THEN date_solde_22 - date_sortie ELSE 0 END WHERE delai_groupage IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_groupage > date_sortie AND date_groupage < '2099-12-31' AND ghs_id <> 0 THEN date_groupage - date_sortie ELSE 0 END OR delai_facture IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_facture > date_sortie AND date_facture < '2099-12-31' AND date_facture > date_sortie THEN date_facture - date_sortie ELSE 0 END OR delai_expedition IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition > date_sortie AND date_facture < '2099-12-31' AND date_expedition < '2099-12-31' THEN date_expedition - date_sortie ELSE 0 END OR delai_solde IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde > date_sortie AND date_facture < '2099-12-31' AND date_solde < '2099-12-31' THEN date_solde - date_sortie ELSE 0 END OR delai_expedition_0 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_0 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_0 < '2099-12-31' THEN date_expedition_0 - date_sortie ELSE 0 END OR delai_solde_0 IS DISTINCT FROM CASE WHEN code_sorti = '1'AND date_solde_0 > date_sortie AND date_facture < '2099-12-31' AND date_solde_0 < '2099-12-31' THEN date_solde_0 - date_sortie ELSE 0 END OR delai_expedition_1 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_1 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_1 < '2099-12-31' THEN date_expedition_1 - date_sortie ELSE 0 END OR delai_solde_1 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde_1 > date_sortie AND date_facture < '2099-12-31' AND date_solde_1 < '2099-12-31' THEN date_solde_1 - date_sortie ELSE 0 END OR delai_expedition_2 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_2 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_2 < '2099-12-31' THEN date_expedition_2 - date_sortie ELSE 0 END OR delai_solde_2 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde_2 > date_sortie AND date_facture < '2099-12-31' AND date_solde_2 < '2099-12-31' THEN date_solde_2 - date_sortie ELSE 0 END OR delai_expedition_22 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_22 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_22 < '2099-12-31' THEN date_expedition_22 - date_sortie ELSE 0 END OR delai_solde_22 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde_22 > date_sortie AND date_facture < '2099-12-31' AND date_solde_22 < '2099-12-31' THEN date_solde_22 - date_sortie ELSE 0 END; ]]>