'' ; UPDATE w_S_P_PCHA SET INDI_CODE = CASE WHEN w_S_P_PCHA.INDI_CODE <> '' THEN w_S_P_PCHA.INDI_CODE ELSE R_E_HIST.INDI_CODE END, C_I_INDI_CODE = R_E_HIST.C_I_INDI_CODE FROM prod_anthadine.R_E_HIST WHERE R_E_HIST.HIST_CODE = w_S_P_PCHA.HIST_CODE ; UPDATE w_S_P_PCHA SET INDI_CODE = R_E_HIST.INDI_CODE FROM prod_anthadine.R_E_HIST WHERE R_E_HIST.PCHA_CODE = w_S_P_PCHA.PCHA_CODE AND w_S_P_PCHA.INDI_CODE = '' ; UPDATE w_S_P_PCHA SET INDI_CODE = A_F_FSEJ.S_M_INDI_CODE FROM prod_anthadine.A_F_FSEJ WHERE A_F_FSEJ.PCHA_CODE = w_S_P_PCHA.PCHA_CODE AND w_S_P_PCHA.INDI_CODE = '' ; DROP TABLE IF EXISTS w_S_P_PCHA_pat; CREATE TEMP TABLE w_S_P_PCHA_pat AS SELECT INDI_CODE, SUBSTR(PCHA_NODOS,0,LENGTH(PCHA_NODOS)-2) AS NIPP FROM w_S_P_PCHA GROUP BY 1,2 ORDER BY 1,2 ; -- NIPP en double UPDATE w_S_P_PCHA_pat SET NIPP = NIPP || INDI_CODE WHERE NIPP IN (SELECT NIPP FROM w_S_P_PCHA_pat GROUP BY 1 HAVING count(*) > 1) ; UPDATE w_S_P_PCHA SET NIPP = w_S_P_PCHA_pat.NIPP FROM w_S_P_PCHA_pat WHERE w_S_P_PCHA.INDI_CODE = w_S_P_PCHA_pat.INDI_CODE ; -- Séjours en double UPDATE w_S_P_PCHA SET PCHA_NODOS = PCHA_NODOS || '-' || PCHA_CODE WHERE PCHA_NODOS IN ( SELECT PCHA_NODOS FROM w_S_P_PCHA GROUP BY 1 HAVING count(*) > 1 ) ; -- Ajout des patients DROP TABLE IF EXISTS w_patients; CREATE TEMP TABLE w_patients AS SELECT '' as FINESS, NIPP, INDI_NOM, INDI_NOMJF, INDI_PRNOM, INDI_DNAIS, CASE WHEN INDI_SEXE = 'M' THEN '1' ELSE '2' END AS INDI_SEXE, IDENT FROM w_S_P_PCHA_pat JOIN prod_anthadine.S_M_INDI ON w_S_P_PCHA_pat.INDI_CODE = S_M_INDI.INDI_CODE ; INSERT INTO activite[PX].p_patients(finess, no_patient, nom, nom_naissance, prenom, date_naissance, code_sexe) SELECT '' as FINESS, NIPP, INDI_NOM, INDI_NOMJF, INDI_PRNOM, INDI_DNAIS, INDI_SEXE FROM w_patients LEFT JOIN activite[PX].p_patients ON NIPP = p_patients.no_patient WHERE p_patients.no_patient IS NULL ; UPDATE activite[PX].p_patients SET nom = INDI_NOM, nom_naissance = INDI_NOMJF, prenom = INDI_PRNOM, date_naissance = INDI_DNAIS, code_sexe = INDI_SEXE FROM w_patients WHERE p_patients.no_patient = NIPP AND ( nom IS DISTINCT FROM INDI_NOM OR nom_naissance IS DISTINCT FROM INDI_NOMJF OR prenom IS DISTINCT FROM INDI_PRNOM OR date_naissance IS DISTINCT FROM INDI_DNAIS OR code_sexe IS DISTINCT FROM INDI_SEXE ); ]]> = 0 THEN ENTR_PRDE_CODE ELSE 0 END AS provenance, PCHA_DFIN AS date_sortie, COALESCE(REPLACE(PCHA_HFSEJ,':','')::int,0) AS heure_sortie, SORT_ENSO_CODE AS mode_sortie, CASE WHEN SORT_PRDE_CODE >= 0 THEN SORT_PRDE_CODE ELSE 0 END AS destination, PCHA_CLOTU AS code_sorti, CASE WHEN PCHA_DDEBU < now() THEN 0 ELSE 1 END as code_prevu, '1' AS type_sejour, t_services_facturation.mode_traitement_id, t_lieux.oid AS lieu_sortie_id, COALESCE(t_medecins_administratifs.oid,0) as medecin_sejour_id, COALESCE(t_medecins_traitants_administratifs.oid,0) as medecin_sejour_id, COALESCE(t_tiers_payant_1.oid,0), COALESCE(t_tiers_payant_2.oid,0), COALESCE(t_tiers_payant_0.oid,0), '2099-12-31' AS date_groupage, t_codes_postaux.oid AS code_postal_id FROM w_sej JOIN w_S_P_PCHA S_P_PCHA ON S_P_PCHA.PCHA_CODE = w_sej.PCHA_CODE JOIN prod_anthadine.S_M_INDI ON S_M_INDI_CODE = S_M_INDI.INDI_CODE LEFT JOIN ( SELECT PCHA_CODE, (MAX(ARRAY[ROWID::text,S_O_INDI_CODE::text]))[2] as S_O_INDI_CODE FROM prod_anthadine.R_E_HIST GROUP BY 1) w_R_E_HIST ON w_R_E_HIST.PCHA_CODE = w_sej.PCHA_CODE LEFT JOIN prod_anthadine.S_M_MALA ON S_M_INDI_CODE = S_M_MALA.INDI_CODE JOIN activite[PX].t_lieux ON t_lieux.code_original_1 = S_P_PCHA.SERV_CODE AND t_lieux.code_original_2 = UOACT_CODE AND t_lieux.code_original_6 = UOGEO_CODE LEFT JOIN activite[PX].t_services_facturation ON S_P_PCHA.SERV_CODE = t_services_facturation.code LEFT JOIN activite[PX].p_patients ON SUBSTR(PCHA_NODOS,0,GREATEST(LENGTH(PCHA_NODOS)-2,0)) = no_patient LEFT JOIN activite[PX].t_medecins_administratifs ON COALESCE(NULLIF(w_R_E_HIST.S_O_INDI_CODE,''),S_M_MALA.S_O_INDI_CODE,'') = t_medecins_administratifs.code_original LEFT JOIN activite[PX].t_medecins_traitants_administratifs ON COALESCE(S_M_MALA.S_O_INDI_CODE,'') = t_medecins_traitants_administratifs.code_original LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_1 ON CAIP_CODE = t_tiers_payant_1.code_original LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_2 ON CAIC_CODE = t_tiers_payant_2.code_original LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_0 ON 'PATIENT' = t_tiers_payant_0.code_original LEFT JOIN ( SELECT S_M_HABI.INDI_CODE, (MAX(ARRAY[COALESCE(HABI_DDEBUT,'1900-01-01'::date)::text,ADRS_CPOST::text]))[2] AS ADRS_CPOST --COALESCE(HABI_DDEBUT,'1900-01-01'::date) AS HABI_DDEBUT, --COALESCE(HABI_DFIN,'2099-12-31'::date) AS HABI_DFIN, FROM prod_anthadine.S_M_HABI JOIN prod_anthadine.S_M_ADRS ON S_M_HABI.ADRS_CODE = S_M_ADRS.ADRS_CODE WHERE adrs_cpost != '' GROUP BY 1--,2,3 ) sub ON sub.INDI_CODE = S_M_INDI_CODE -- AND PCHA_DDEBU between HABI_DDEBUT AND HABI_DFIN LEFT JOIN base.t_codes_postaux ON t_codes_postaux.code = ADRS_CPOST ; -- Report date sortie pour les présents UPDATE activite[PX].p_sejours SET date_sortie = date(now()) WHERE date_sortie < date(now()) AND code_sorti = '0' ; -- Les heures E/S ne sont pas toujours saisies UPDATE activite[PX].p_sejours SET heure_entree = 080000 WHERE heure_entree = 0 ; UPDATE activite[PX].p_sejours SET heure_sortie = 180000 WHERE code_sorti = '1' AND heure_sortie = 0 ; -- 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'); -- Provenance DROP TABLE IF EXISTS w_ETAB_PROV; CREATE TEMP TABLE w_ETAB_PROV AS SELECT w_S_P_PCHA.C_I_INDI_CODE , COALESCE(S_M_INDI_3.INDI_NOM,S_M_INDI_2.INDI_NOM,S_M_INDI.INDI_NOM) AS INDI_NOM, CASE WHEN S_I_INTC_3.INTC_FINES <> '' THEN S_I_INTC_3.INTC_FINES||S_I_INTC_3.INTC_CFINE WHEN S_I_INTC_2.INTC_FINES <> '' THEN S_I_INTC_2.INTC_FINES||S_I_INTC_2.INTC_CFINE WHEN S_I_INTC.INTC_FINES <> '' THEN S_I_INTC.INTC_FINES||S_I_INTC.INTC_CFINE ELSE '' END AS finess, ''::text AS INDI_NOM_SYN, 0::bigint AS etablissement_id FROM w_S_P_PCHA JOIN prod_anthadine.S_M_INDI ON S_M_INDI.INDI_CODE = w_S_P_PCHA.C_I_INDI_CODE LEFT JOIN prod_anthadine.S_I_INTC ON S_I_INTC.INDI_CODE = S_M_INDI.INDI_CODE LEFT JOIN prod_anthadine.S_M_INDI S_M_INDI_2 ON S_M_INDI_2.INDI_CODE = S_I_INTC.INTC_INDI_CODE LEFT JOIN prod_anthadine.S_I_INTC S_I_INTC_2 ON S_I_INTC_2.INDI_CODE = S_M_INDI_2.INDI_CODE LEFT JOIN prod_anthadine.S_M_INDI S_M_INDI_3 ON S_M_INDI_3.INDI_CODE = S_I_INTC_2.INTC_INDI_CODE LEFT JOIN prod_anthadine.S_I_INTC S_I_INTC_3 ON S_I_INTC_3.INDI_CODE = S_M_INDI_3.INDI_CODE GROUP BY 1,2,3 ; ANALYSE w_ETAB_PROV ; UPDATE w_ETAB_PROV SET etablissement_id = t_etablissements.oid FROM base.t_etablissements WHERE t_etablissements.code = finess AND finess <> '' ; -- Les finess ne sont pas toujours renseignes. Tentative par le texte UPDATE w_ETAB_PROV SET finess = t_etablissements.code, etablissement_id = t_etablissements.oid FROM base.t_etablissements WHERE t_etablissements.texte ILIKE INDI_NOM AND etablissement_id = 0 ; UPDATE w_ETAB_PROV SET INDI_NOM_SYN = trim(REPLACE(UPPER(INDI_NOM),'CENTRE HOSPITALIER','CH')) WHERE INDI_NOM ILIKE '%CENTRE HOSPITALIER%' ; UPDATE w_ETAB_PROV SET INDI_NOM_SYN = trim(REPLACE(UPPER(INDI_NOM),'CLINIQUE','POLYCLINIQUE')) WHERE INDI_NOM ILIKE 'CLINIQUE%' ; UPDATE w_ETAB_PROV SET finess = t_etablissements.code, etablissement_id = t_etablissements.oid FROM base.t_etablissements WHERE t_etablissements.texte ILIKE INDI_NOM_SYN AND INDI_NOM_SYN <> '' AND etablissement_id = 0 ; UPDATE w_ETAB_PROV SET finess = t_etablissements.code, etablissement_id = t_etablissements.oid FROM base.t_etablissements WHERE t_etablissements.texte ILIKE '%'||INDI_NOM||'%' AND length(INDI_NOM) > 10 AND etablissement_id = 0 ; -- Finess non trouve, code provisoire UPDATE w_ETAB_PROV SET finess = 'X'||substr(upper(md5(INDI_NOM)),1,8) WHERE finess = '' ; INSERT INTO base.t_etablissements (code, texte, texte_court) SELECT finess, MAX(INDI_NOM), MAX(INDI_NOM) FROM w_ETAB_PROV WHERE finess NOT IN (SELECT code FROM base.t_etablissements) GROUP BY 1 ; UPDATE w_ETAB_PROV SET etablissement_id = t_etablissements.oid FROM base.t_etablissements WHERE t_etablissements.code = finess AND finess <> '' ; INSERT INTO activite[PX].p_sejours_transferts (sejour_id, provenance_id, destination_id) SELECT p_sejours.oid, MAX(etablissement_id), MAX(0) FROM w_S_P_PCHA LEFT JOIN w_ETAB_PROV ON w_S_P_PCHA.C_I_INDI_CODE = w_ETAB_PROV.C_I_INDI_CODE JOIN activite[PX].p_sejours ON w_S_P_PCHA.PCHA_CODE = p_sejours.code_original GROUP BY 1 ; ]]> now() - interval '1 day' THEN '1' ELSE '0' END) AS est_mouvement_previsionnel , MAX(CASE WHEN p_sejours.type_sejour = '1' AND (p_calendrier.date <> date_sortie) THEN 1 ELSE 0 END) AS nb_jours_js_non_inclus, MAX(lieu_id), MAX(CASE WHEN date = date_entree THEN 1 ELSE 0 END) AS nb_entrees_directes, MAX(CASE WHEN date = date_sortie THEN 1 ELSE 0 END) nb_sorties_directes, 0 AS nb_urgences, 0 AS nb_externes, 0 AS nb_ambulatoires, MAX(medecin_sejour_id), 1 AS nb_jours_js_inclus, 0 AS nb_seances, 0 AS nb_entrees_mutation_service, 0 AS nb_sorties_mutation_service, 0 AS nb_entrees_mutation_activite, 0 AS nb_sorties_mutation_activite, 0 AS nb_entrees_mutation_etage, 0 AS nb_sorties_mutation_etage, 0 AS nb_chambres_particulieres, MAX(CASE WHEN p_calendrier.date = date_entree THEN heure_entree ELSE 0 END) AS heure_debut, MAX(CASE WHEN p_calendrier.date = date_sortie THEN heure_sortie ELSE 240000 END) AS heure_fin, MAX(CASE WHEN p_calendrier.date = date_entree THEN 1 ELSE 0 END) AS est_jour_entree, MAX(CASE WHEN p_calendrier.date = date_sortie THEN 1 ELSE 0 END) AS est_jour_sortie, 1 AS est_jour_hospitalisation, 0 AS est_chambre_particuliere, 0 AS nb_entrees_mutation_unite_medicale, 0 AS nb_sorties_mutation_unite_medicale, 0 AS nb_bebes, 1 AS est_premier_mouvement_jour, 1 AS est_dernier_mouvement_jour, MAX(jour_semaine), MAX(is_weekend) FROM activite[PX].p_sejours JOIN w_A_F_FSEJ_mvt A_F_FSEJ ON code_original = PCHA_CODE JOIN w_lieu_sej ON w_lieu_sej.FSEJ_CODE = A_F_FSEJ.FSEJ_CODE JOIN base.p_calendrier ON p_calendrier.date BETWEEN FSEJ_DDEBU AND FSEJ_DFIN_mvt WHERE FSEJ_DANNUL IS NULL GROUP BY 1,2,3 ; SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_1'); SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_2'); SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_3'); SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_4'); SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_5'); ]]> = f_a_piec.piec_dpact JOIN activite[PX].p_sejours ON S_P_PCHA.PCHA_CODE = p_sejours.code_original WHERE LGFA_ONERE = '1' GROUP BY 1 ; ANALYSE w_factures_mo ; 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, 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 ) 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, 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 FROM w_factures WHERE oid NOT IN (SELECT oid FROM 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, 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 ) SELECT oid, sejour_id, no_sejour, no_facture, w_factures_mo.no_facture_reference, facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, date_debut, date_fin, ghs_id, 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 FROM w_factures_mo WHERE oid NOT IN (SELECT oid FROM activite[PX].p_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 ); -- Date de fin pour les factures Molecules UPDATE activite[PX].p_factures SET date_fin = p_sejours.date_sortie FROM activite[PX].p_sejours WHERE no_facture NOT LIKE 'MO%' AND p_factures.no_sejour = p_sejours.no_sejour AND p_sejours.code_sorti = '1' AND p_factures.date_fin = date(p_sejours.date_sortie - interval '1 day') ; UPDATE activite[PX].p_factures SET date_fin = p_factures_ght.date_fin, date_debut = p_factures_ght.date_debut FROM activite[PX].p_factures p_factures_ght WHERE p_factures.no_facture LIKE 'MO%' AND p_factures.no_sejour = p_factures_ght.no_sejour AND p_factures_ght.type_facture = '0' AND p_factures.date_fin BETWEEN p_factures_ght.date_debut AND p_factures_ght.date_fin AND p_factures.date_fin <> p_factures_ght.date_fin ; ]]> 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, FAAVFA, 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, 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 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 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, FAAVFA, 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, rubrique_facture_id) SELECT sequence, no_sejour, facture_id, no_facture, date_vente, FAAVFA, 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, rubrique_facture_id FROM w_factures_lignes_sup_c_sup; -- Inversion signe pour avoirs UPDATE w_factures_lignes_c SET nb_rubrique = 0-nb_rubrique, nb_prestation = 0-nb_prestation, montant_facture = 0-montant_facture, montant_facture_0 = 0-montant_facture_0, montant_facture_1 = 0-montant_facture_1, montant_facture_2 = 0-montant_facture_2, montant_facture_22 = 0-montant_facture_22, montant_comptabilise = 0-montant_comptabilise, montant_comptabilise_0 = 0-montant_comptabilise_0, montant_comptabilise_1 = 0-montant_comptabilise_1, montant_comptabilise_2 = 0-montant_comptabilise_2, montant_comptabilise_22 = 0-montant_comptabilise_22 WHERE FAAVFA = 'A' ; -- 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; -- Rubriques internes cti SELECT activite[PX].cti_reorganize_rubrique_facture_c('w_factures_lignes_c'); -- Lignes molecules onereuses DROP TABLE IF EXISTS w_factures_lignes_c_mo; CREATE TEMP TABLE w_factures_lignes_c_mo AS SELECT nextval('w_factures_lignes_c_seq'::regclass) AS sequence, w_factures_mo.no_sejour, w_factures_mo.oid AS facture_id, w_factures_mo.no_facture AS no_facture, w_factures_mo.date_vente, ''::text AS FAAVFA, 1::numeric AS coefficient, 1::numeric AS coefficient_mco, t_rubriques_facturation.oid AS rubrique_facturation_id, t_rubriques_facturation.oid AS rubrique_comptabilisation_id, t_prestations.oid AS prestation_id, t_prestations.code AS prestation_code, t_prestations.type_ventilation_jour AS prestation_type_ventilation_jour, COALESCE(t_compte.oid,0) AS compte_produit_id, COALESCE(t_ucd.oid,0) AS ucd_id, p_sejours.lieu_sortie_id AS lieu_id, 1::bigint AS origine_facturation_id, LGFA_PU AS prix_unitaire, 0::numeric AS taux_0, LGFA_TXFINA AS taux_1, 0::numeric AS taux_2, 0::numeric AS taux_22, COALESCE(LGFA_DADMI,PIEC_DDACT) AS date_debut, COALESCE(LGFA_DADMI,PIEC_DDACT) AS date_fin, LGFA_QT AS nb_rubrique, LGFA_QT AS nb_prestation, LGFA_MONT AS montant_facture, 0::numeric AS montant_facture_0, LGFA_MONT AS montant_facture_1, 0::numeric AS montant_facture_2, 0::numeric AS montant_facture_22, LGFA_MONREM AS montant_comptabilise, 0::numeric AS montant_comptabilise_0, LGFA_MONREM AS montant_comptabilise_1, 0::numeric AS montant_comptabilise_2, 0::numeric AS montant_comptabilise_22, 0::numeric AS rubrique_facture_id FROM prod_anthadine.F_A_PIEC JOIN prod_anthadine.A_F_LGFA ON F_A_PIEC.PIEC_CODE = A_F_LGFA.PIEC_CODE JOIN prod_anthadine.S_P_PCHA ON f_a_piec.serv_code = s_p_pcha.serv_code AND f_a_piec.mala_indi_code = s_p_pcha.indi_code AND s_p_pcha.pcha_ddebu <= f_a_piec.piec_dpact AND s_p_pcha.pcha_dfsej >= f_a_piec.piec_dpact LEFT JOIN prod_anthadine.S_O_RECO ON A_F_LGFA.S_O_RECO_IDENT = S_O_RECO.IDENT LEFT JOIN prod_anthadine.S_O_TRAI ON S_O_RECO.TRAI_CODE = S_O_TRAI.TRAI_CODE LEFT JOIN base.t_ucd ON TRAI_UCD = t_ucd.code JOIN w_factures_mo ON w_factures_mo.PIEC_CODE = F_A_PIEC.PIEC_CODE JOIN activite[PX].p_sejours ON w_factures_mo.no_sejour = p_sejours.no_sejour JOIN activite[PX].t_rubriques_facturation ON 'MO' = t_rubriques_facturation.code_original JOIN activite.t_prestations ON 'MO' = t_prestations.code LEFT JOIN activite.t_compte ON 0 = t_compte.code WHERE LGFA_ONERE = '1' ; UPDATE w_factures_lignes_c_mo w_factures_lignes_c SET lieu_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE w_factures_lignes_c.no_sejour = p_mouvements_sejour.no_sejour AND w_factures_lignes_c.date_fin = p_mouvements_sejour.date AND (230000 BETWEEN p_mouvements_sejour.heure_debut AND p_mouvements_sejour.heure_fin OR nb_entrees_directes = 1 AND heure_fin = 240000 OR nb_sorties_directes = 1 ) AND w_factures_lignes_c.lieu_id <> p_mouvements_sejour.lieu_id; -- Rubriques internes cti SELECT activite[PX].cti_reorganize_rubrique_facture_c('w_factures_lignes_c_mo'); -- 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, 0::numeric AS montant_comptabilise_budget_global_1, origine_facturation_id FROM w_factures_lignes_c WHERE montant_facture <> 0; 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, ucd_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, ucd_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, 0::numeric AS montant_comptabilise_budget_global_1, origine_facturation_id FROM w_factures_lignes_c_mo WHERE montant_facture <> 0 OR montant_comptabilise <> 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'); ]]> = '20120101' 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 facture_id, no_facture, date_trunc('month',date_vente) + interval '1 month' - interval '1 day', rubrique_comptabilisation_id, prestation_id, SUM(montant_comptabilise), SUM(montant_comptabilise_0), SUM(montant_comptabilise_1), SUM(montant_comptabilise_2), SUM(montant_comptabilise_22), 0, 0, 0, 0, 0 FROM w_factures_lignes_c_mo w_factures_lignes_c WHERE date_vente >= '20120101' 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 w_factures.oid AS facture_id, no_facture, REGL_DATE::date, 0::bigint AS rubrique_comptabilisation_id, 0::bigint AS prestation_id, 0, 0, 0, 0, 0, SUM(REGL_MONT) AS montant_regle, SUM(CASE WHEN type = 0 THEN REGL_MONT ELSE 0 END) AS montant_regle_0, SUM(CASE WHEN type = 1 THEN REGL_MONT ELSE 0 END) AS montant_regle_1, SUM(CASE WHEN type = 2 THEN REGL_MONT ELSE 0 END) AS montant_regle_2, 0 AS montant_regle_22 FROM ( SELECT 0 AS type, FSEJ_CODE, REGL_MONT, REGL_DATE FROM prod_anthadine.V_F_REGP UNION ALL SELECT 1, FSEJ_CODE, REGL_MONT, REGL_DATE FROM prod_anthadine.V_F_REGS UNION ALL SELECT 2, FSEJ_CODE, REGL_MONT, REGL_DATE FROM prod_anthadine.V_F_REGC ) sub JOIN prod_anthadine.A_F_FSEJ ON A_F_FSEJ.FSEJ_CODE = sub.FSEJ_CODE JOIN w_factures ON FSEJ_NUM = w_factures.no_facture 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'); -- Si sejour solde, solde des factures lignes à lignes DROP TABLE IF EXISTS w_sejour_solde; CREATE TEMP TABLE w_sejour_solde AS SELECT no_sejour, MAX(CASE WHEN montant_regle <> 0 THEN date_comptable ELSE NULL END) AS date_solde FROM activite[PX].p_factures_soldes_c JOIN activite[PX].p_factures ON p_factures_soldes_c.no_facture = p_factures.no_facture GROUP BY 1 HAVING SUM(montant_comptabilise) = SUM(montant_regle) ; ANALYSE w_sejour_solde ; DROP TABLE IF EXISTS w_facture_solde; CREATE TEMP TABLE w_facture_solde AS SELECT p_factures_soldes_c.no_facture, p_factures_soldes_c.facture_id, p_factures_soldes_c.rubrique_comptabilisee_id, p_factures_soldes_c.prestation_id, MAX(w_sejour_solde.date_solde) AS date_solde, SUM(montant_comptabilise) - SUM(montant_regle) AS montant_solde, SUM(montant_comptabilise_0) - SUM(montant_regle_0) AS montant_solde_0, SUM(montant_comptabilise_1) - SUM(montant_regle_1) AS montant_solde_1, SUM(montant_comptabilise_2) - SUM(montant_regle_2) AS montant_solde_2 FROM activite[PX].p_factures_soldes_c JOIN activite[PX].p_factures ON p_factures_soldes_c.no_facture = p_factures.no_facture JOIN w_sejour_solde ON p_factures.no_sejour = w_sejour_solde.no_sejour GROUP BY 1,2,3,4 HAVING SUM(montant_comptabilise) IS DISTINCT FROM SUM(montant_regle) ; ANALYSE w_facture_solde ; 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, od_non_comptabilise ) SELECT facture_id, no_facture, date_solde, rubrique_comptabilisee_id, prestation_id, 0::numeric AS montant_comptabilise, 0::numeric AS montant_comptabilise_0, 0::numeric AS montant_comptabilise_1, 0::numeric AS montant_comptabilise_2, 0::numeric AS montant_comptabilise_22, montant_solde AS montant_regle, montant_solde_0 AS montant_regle_0, montant_solde_1 AS montant_regle_1, montant_solde_2 AS montant_regle_2, 0::numeric AS montant_regle_22, '1'::text AS od_non_comptabilise FROM w_facture_solde ; UPDATE activite[PX].p_factures SET montant_regle_c = montant_comptabilise_c, montant_regle_0_c = montant_comptabilise_0_c, montant_regle_1_c = montant_comptabilise_1_c, montant_regle_2_c = montant_comptabilise_2_c FROM w_sejour_solde WHERE p_factures.no_sejour = w_sejour_solde.no_sejour AND ( montant_regle_c <> montant_comptabilise_c OR montant_regle_0_c <> montant_comptabilise_0_c OR montant_regle_1_c <> montant_comptabilise_1_c OR montant_regle_2_c <> montant_comptabilise_2_c ) ; ]]> p_mouvements_sejour.lieu_id ; INSERT INTO activite[PX].p_factures_lignes_h( no_facture, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, medecin_facture_id, medecin_comptabilise_id, prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id, acte_id, protocole_id, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_depassement, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour ) SELECT no_facture, date_debut, date_fin, nb_rubrique, nb_prestation, coefficient, coefficient_mco, medecin_facture_id, medecin_comptabilise_id, prestation_id, rubrique_facturation_id, rubrique_comptabilisation_id, acte_id, protocole_id, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_depassement, taux_0, taux_1, taux_2, taux_22, prix_unitaire, lieu_id, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour FROM w_factures_lignes_h ; UPDATE activite[PX].p_factures SET montant_facture_h = subview.montant_facture, montant_facture_0_h = subview.montant_facture_0, montant_facture_1_h = subview.montant_facture_1, montant_facture_2_h = subview.montant_facture_2, montant_facture_22_h = subview.montant_facture_22, montant_comptabilise_h = subview.montant_comptabilise, montant_comptabilise_0_h = subview.montant_comptabilise_0, montant_comptabilise_1_h = subview.montant_comptabilise_1, montant_comptabilise_2_h = subview.montant_comptabilise_2, montant_comptabilise_22_h = subview.montant_comptabilise_22 FROM ( SELECT no_facture, 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 FROM w_factures_lignes_h GROUP BY 1 ) subview WHERE p_factures.no_facture = subview.no_facture ; ]]> 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; ]]> 0 WHERE t_tiers_payant.code_original = IDENT AND (grand_regime_id = 0 OR grand_regime_id IS NULL); INSERT INTO activite[PX].t_tiers_payant(code_original, code, type_tiers_payant, texte, texte_court) SELECT IDENT, CAIC_CODE, '2', CAIC_NOM, LEFT(CAIC_NOM,50) FROM prod_anthadine.S_S_CAIC WHERE IDENT NOT IN (SELECT code_original FROM activite[PX].t_tiers_payant WHERE code_original IS NOT NULL) ; ]]> w_medecins.NOM OR t_medecins_administratifs.prenom <> PRNOM OR t_medecins_administratifs.specialite_id <> COALESCE(t_specialites_medecin.oid,0) OR t_medecins_administratifs.medecin_id <> w_medecins.medecin_id ); INSERT INTO activite[PX].t_medecins_traitants_administratifs(code_original, code, nom, prenom, specialite_id, medecin_id) SELECT DISTINCT INDI_CODE, substr(translate(NOM,' -=()''',''),1,5) || substr(translate(PRNOM,' -=()''',''),1,2), NOM, PRNOM, COALESCE(t_specialites_medecin.oid,0), medecin_id FROM w_medecins LEFT JOIN base.t_specialites_medecin ON SPPS_CODE = t_specialites_medecin.code_original WHERE INDI_CODE NOT IN (SELECT code_original FROM activite[PX].t_medecins_traitants_administratifs); UPDATE activite[PX].t_medecins_traitants_administratifs SET nom = w_medecins.NOM, prenom = PRNOM, specialite_id = COALESCE(t_specialites_medecin.oid,0), medecin_id = w_medecins.medecin_id FROM w_medecins LEFT JOIN base.t_specialites_medecin ON SPPS_CODE = t_specialites_medecin.code_original WHERE w_medecins.INDI_CODE = t_medecins_traitants_administratifs.code_original AND ( t_medecins_traitants_administratifs.nom <> w_medecins.NOM OR t_medecins_traitants_administratifs.prenom <> PRNOM OR t_medecins_traitants_administratifs.specialite_id <> COALESCE(t_specialites_medecin.oid,0) OR t_medecins_traitants_administratifs.medecin_id <> w_medecins.medecin_id ); UPDATE base.t_medecins SET code = CASE WHEN t_medecins.code <> '' THEN t_medecins.code ELSE subview.code END, specialite_id = CASE WHEN t_medecins.specialite_id <> 0 THEN t_medecins.specialite_id ELSE subview.specialite_id END FROM ( SELECT t_medecins.oid, MAX(t_medecins_administratifs.code) AS code, MIN(t_medecins_administratifs.specialite_id) as specialite_id FROM base.t_medecins JOIN activite[PX].t_medecins_administratifs ON t_medecins.oid = t_medecins_administratifs.medecin_id JOIN base.t_specialites_medecin ON 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 OR t_medecins.code = '' OR t_medecins.code IS NULL ) ; ]]> 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 UO_CODE, UO_CODE, UO_LIBE, LEFT(UO_LIBE,50) FROM prod_anthadine.C_S_UO LEFT JOIN activite[PX].t_unites_fonctionnelles ON UO_CODE = code_original WHERE UOTYPE_CODE = 2 AND t_unites_fonctionnelles.oid IS NULL ; -- 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); INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT UO_CODE, UO_CODE, UO_LIBE, LEFT(UO_LIBE,50) FROM prod_anthadine.C_S_UO LEFT JOIN activite[PX].t_activites ON UO_CODE = code_original WHERE UOTYPE_CODE = 1 AND t_activites.oid IS NULL ; -- 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_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); ]]> '' THEN PRES_CODE ELSE CPRE_CODE END AS rubrique_code, CASE WHEN PRES_CODE <> '' THEN PRES_CODE ELSE CPRE_CODE END AS prestation_code, 0::bigint AS rubrique_facturation_id, 0::bigint AS prestation_id, 0::bigint AS acte_id FROM prod_anthadine.S_N_VCAL ORDER BY PRES_CODE, CPRE_CODE ; UPDATE w_S_N_VCAL SET rubrique_code = rubrique_code || '-' || VCAL_CODE WHERE rubrique_code IN (SELECt rubrique_code FROM w_S_N_VCAL GROUp BY 1 HAVING count(*) > 1) ; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT rubrique_code_original, rubrique_code, VCAL_LIBEL, VCAL_LIBEL FROM w_S_N_VCAL WHERE rubrique_code_original NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code_original IS NOT NULL) ; UPDATE w_S_N_VCAL SET rubrique_facturation_id = t_rubriques_facturation.oid FROM activite[PX].t_rubriques_facturation WHERE t_rubriques_facturation.code_original = rubrique_code_original ; INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT prestation_code, prestation_code, prestation_code, prestation_code FROM w_S_N_VCAL WHERE prestation_code NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL) AND prestation_code <> '' GROUP BY 1 ; UPDATE w_S_N_VCAL SET prestation_id = t_prestations.oid FROM activite.t_prestations WHERE t_prestations.code = prestation_code ; INSERT INTO base.t_actes(code, texte, texte_court, nomenclature) SELECT prestation_code, prestation_code, prestation_code, 'NGAP' FROM w_S_N_VCAL WHERE prestation_code NOT IN (SELECT code FROM base.t_actes WHERE nomenclature = 'NGAP') AND prestation_code <> '' GROUP BY 1 ; UPDATE w_S_N_VCAL SET acte_id = t_actes.oid FROM base.t_actes WHERE t_actes.code = prestation_code ; ANALYSE w_S_N_VCAL ; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT LGHT_CODE, LGHT_CODE, LGHT_LIBE, LEFT(LGHT_LIBE,50) FROM prod_anthadine.A_C_LGHT WHERE LGHT_CODE NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code IS NOT NULL) ; INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT 'MO'::text, 'MO'::text, 'Molecules Onereuses'::text, 'Molecules Onereuses'::text WHERE 'MO'::text NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation WHERE code_original IS NOT NULL) ; 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 'MO'::text, 'MO'::text, 'Molecules Onereuses'::text, 'Molecules Onereuses'::text WHERE 'MO'::text NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL) ; INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT 'CTI_GHT', 'GHT', 'Groupe homogène de tarifs', 'Groupe homogène de tarifs' WHERE 'GHT' NOT IN (SELECT code FROM activite[PX].t_prestations); 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); ]]> '2099-12-31'; ]]> '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 ); ]]>