0 ; -- Services + UF vers service UPDATE activite.t_lieux SET service_facturation_id = t_transformation.to_id FROM activite.t_transformation WHERE t_lieux.service_facturation_id = t_transformation.service_facturation_id AND t_lieux.unite_fonctionnelle_id = t_transformation.unite_fonctionnelle_id AND t_transformation.type = 'UFSER' AND t_transformation.to_id <> 0 ; -- Services UPDATE activite.t_lieux SET service_facturation_id = t_transformation.to_id FROM activite.t_transformation WHERE t_lieux.service_facturation_id = t_transformation.service_facturation_id AND t_transformation.type = 'SER' AND t_transformation.to_id <> 0 ; -- Unités fonctionnelles UPDATE activite.t_lieux SET unite_fonctionnelle_id = t_transformation.to_id FROM activite.t_transformation WHERE t_lieux.unite_fonctionnelle_id = t_transformation.unite_fonctionnelle_id AND t_transformation.type = 'UF' AND t_transformation.to_id <> 0 ; -- Activites UPDATE activite.t_lieux SET activite_id = t_transformation.to_id FROM activite.t_transformation WHERE t_lieux.activite_id = t_transformation.activite_id AND t_transformation.type = 'ACT' AND t_transformation.to_id <> 0 ; -- Correction de comptes en double UPDATE activite.t_compte SET code = t_compte.code || '#' || indice::text FROM ( SELECT code, max(oid) AS dupplicate_oid, count(*) AS indice FROM activite.t_compte WHERE oid <> 0 GROUP BY 1 HAVING count(*)>1 ) subview WHERE t_compte.oid = dupplicate_oid ; UPDATE activite.t_compte SET code = 'N/R' WHERE oid = 0 ; -- Prestation forcée UPDATE activite.p_factures_lignes_c SET prestation_id = t_service_rubrique.prestation_forcee_id FROM activite.t_lieux, activite.t_service_rubrique WHERE lieu_id = t_lieux.oid AND t_service_rubrique.service_facturation_id = t_lieux.service_facturation_id AND t_service_rubrique.rubrique_facturation_id = p_factures_lignes_c.rubrique_facturation_id AND t_service_rubrique.prestation_forcee_id <> 0 AND p_factures_lignes_c.prestation_id IS DISTINCT FROM t_service_rubrique.prestation_forcee_id ; UPDATE activite.p_factures_lignes_non_facturees_c p_factures_lignes_c SET prestation_id = t_service_rubrique.prestation_forcee_id FROM activite.t_lieux, activite.t_service_rubrique WHERE lieu_id = t_lieux.oid AND t_service_rubrique.service_facturation_id = t_lieux.service_facturation_id AND t_service_rubrique.rubrique_facturation_id = p_factures_lignes_c.rubrique_facturation_id AND t_service_rubrique.prestation_forcee_id <> 0 AND p_factures_lignes_c.prestation_id IS DISTINCT FROM t_service_rubrique.prestation_forcee_id ; -- FJ non facturés qui sont à cheval sur plusieurs factures en cours SMR -- Il faut ventiler par facture DROP TABLE IF EXISTS w_factures_lignes_non_facturees_c_cheval; CREATE TEMP TABLE w_factures_lignes_non_facturees_c_cheval AS SELECT p_factures_lignes_non_facturees_c.CTID AS from_ctid , p_factures_lignes_non_facturees_c.no_facture , facture_id , p_factures_lignes_non_facturees_c.date_debut AS date_debut_ligne , p_factures_lignes_non_facturees_c.date_fin AS date_fin_ligne , p_factures_lignes_non_facturees_c.nb_rubrique , p_factures_lignes_non_facturees_c.coefficient , p_factures_lignes_non_facturees_c.rubrique_facturation_id , p_factures_lignes_non_facturees_c.prestation_id , p_factures_lignes_non_facturees_c.prix_unitaire , p_factures_lignes_non_facturees_c.lieu_id , p_factures_lignes_non_facturees_c.montant_encours , p_factures_lignes_non_facturees_c.coefficient_mco , p_factures_lignes_non_facturees_c.lpp_id , p_factures_lignes_non_facturees_c.ucd_id , p_factures.date_debut AS date_debut_facture , p_factures.date_fin AS date_fin_facture , p_factures_to.no_facture AS to_no_facture , p_factures_to.oid AS to_facture_id , base.cti_division( p_factures_lignes_non_facturees_c.nb_rubrique * p_factures_lignes_non_facturees_c.prix_unitaire, (p_factures_lignes_non_facturees_c.date_fin-p_factures_lignes_non_facturees_c.date_debut+1)::numeric ) AS prix_unitaire_jour , base.cti_division( p_factures_lignes_non_facturees_c.montant_encours , (p_factures_lignes_non_facturees_c.date_fin-p_factures_lignes_non_facturees_c.date_debut+1)::numeric ) AS montant_encours_jour , GREATEST(p_factures_to.date_debut, p_factures_lignes_non_facturees_c.date_debut) AS to_date_debut_ligne , LEAST(p_factures_to.date_fin, p_factures_lignes_non_facturees_c.date_fin) AS to_date_fin_ligne , 1::numeric AS to_nb_rubrique , 0::numeric AS to_prix_unitaire , 0::numeric AS to_montant_encours FROM activite.p_factures_lignes_non_facturees_c JOIN activite.p_factures on p_factures_lignes_non_facturees_c.no_facture = p_factures.no_facture JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite.t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid JOIN activite.t_prestations ON prestation_id = t_prestations.oid JOIN activite.p_factures p_factures_to ON p_factures.no_sejour = p_factures_to.no_sejour AND ( p_factures_to.date_debut BETWEEN p_factures_lignes_non_facturees_c.date_debut AND p_factures_lignes_non_facturees_c.date_fin OR p_factures_to.date_fin BETWEEN p_factures_lignes_non_facturees_c.date_debut AND p_factures_lignes_non_facturees_c.date_fin ) AND p_factures_to.code_facture = '0' WHERE p_factures.code_facture = '0' AND t_services_facturation.avec_facturation_intermediaire = '1' AND t_prestations.code IN ('FJ') AND ( p_factures_lignes_non_facturees_c.date_debut NOT BETWEEN p_factures.date_debut AND p_factures.date_fin OR p_factures_lignes_non_facturees_c.date_fin NOT BETWEEN p_factures.date_debut AND p_factures.date_fin ) ; ANALYSE w_factures_lignes_non_facturees_c_cheval ; UPDATE w_factures_lignes_non_facturees_c_cheval SET to_prix_unitaire = round((to_date_fin_ligne - to_date_debut_ligne + 1) * prix_unitaire_jour,2), to_montant_encours = round((to_date_fin_ligne - to_date_debut_ligne + 1) * montant_encours_jour,2) ; DELETE FROM activite.p_factures_lignes_non_facturees_c WHERE CTID IN (SELECT from_CTID FROM w_factures_lignes_non_facturees_c_cheval) ; INSERT INTO activite.p_factures_lignes_non_facturees_c( no_facture, date_debut, date_fin, nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, prix_unitaire, lieu_id, facture_id, montant_encours, coefficient_mco, lpp_id, ucd_id ) SELECT to_no_facture, to_date_debut_ligne, to_date_fin_ligne, to_nb_rubrique, coefficient, rubrique_facturation_id, prestation_id, to_prix_unitaire, lieu_id, to_facture_id, to_montant_encours, coefficient_mco, lpp_id, ucd_id FROM w_factures_lignes_non_facturees_c_cheval ; ]]> 1 THEN email ELSE '' END ; UPDATE activite.p_sejours SET medecin_sejour_id = subview.medecin_sejour_id FROM ( SELECT p_factures.no_sejour, (MAX(ARRAY[to_char(p_factures_lignes_h.montant_facture,'FM000000000000'),medecin_facture_id::text]))[2]::bigint AS medecin_sejour_id FROM activite.p_factures_lignes_h JOIN activite.p_factures ON p_factures_lignes_h.no_facture = p_factures.no_facture JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour WHERE p_sejours.type_sejour = '3' AND p_sejours.medecin_sejour_id = 0 AND medecin_facture_id <> 0 GROUP BY 1 ) subview WHERE p_sejours.no_sejour = subview.no_sejour ; ]]> 0 AND montant_facture_0 = 0 AND ( taux_1+taux_2 = 100 AND round(montant_facture_1,0) = round(montant_facture*taux_1/100,0) AND round(montant_facture_2,0) = round(montant_facture*taux_2/100,0) ) ; UPDATE activite.p_factures_lignes_h SET montant_facture = montant_facture+w_depassements_detail.montant_depassement, montant_facture_0 = montant_facture_0+w_depassements_detail.montant_depassement FROM w_depassements_detail WHERE p_factures_lignes_h.no_facture = w_depassements_detail.no_facture AND p_factures_lignes_h.CTID = fromCTID; UPDATE activite.p_factures SET montant_facture_h = subview.montant_facture, montant_facture_0_h = subview.montant_facture_0 FROM ( SELECT no_facture, SUM(montant_facture) AS montant_facture, SUM(montant_facture_0) AS montant_facture_0 FROM activite.p_factures_lignes_h WHERE no_facture IN (SELECT no_facture FROM w_depassements_detail) GROUP BY 1 ) subview WHERE p_factures.no_facture = subview.no_facture AND p_factures.no_facture IN (SELECT no_facture FROM w_depassements_detail); UPDATE activite.p_sejours SET montant_facture_h = subview.montant_facture_h, montant_facture_0_h = subview.montant_facture_0_h FROM ( SELECT no_sejour, SUM(montant_facture_h) AS montant_facture_h, SUM(montant_facture_0_h) AS montant_facture_0_h FROM activite.p_factures WHERE no_facture IN (SELECT no_facture FROM w_depassements_detail) GROUP BY 1 ) subview WHERE p_sejours.no_sejour = subview.no_sejour; -- Suppression montant dépassement sur avoirs et factures annulées (pour comptage des sejours avec dépassement) INSERT INTO activite.t_divers (code, texte, valeur, description) SELECT 'DELDEPASSEMENTAVOIR', 'Suppression dépassements sur avoirs', '0', '1=Suppression sur avoirs et factures annulées' WHERE 'DELDEPASSEMENTAVOIR' NOT IN (SELECT code FROM activite.t_divers) ; DROP TABLE IF EXISTS w_factures_avoir; CREATE TEMP TABLE w_factures_avoir AS SELECT p_factures.no_facture, p_factures.no_facture_od_avoir FROM activite.p_factures JOIN activite.p_factures p_factures_avoir ON p_factures.no_facture_od_avoir = p_factures_avoir.no_facture JOIN activite.t_divers ON t_divers.code = 'DELDEPASSEMENTAVOIR' WHERE t_divers.valeur = '1' AND p_factures.type_facture = 'X' AND p_factures.montant_facture_h = 0-p_factures_avoir.montant_facture_h AND p_factures.montant_facture_h <> 0 ; ANALYSE w_factures_avoir ; UPDATE activite.p_factures_lignes_h SET montant_depassement = 0 WHERE no_facture = ANY (SELECT w_factures_avoir.no_facture FROM w_factures_avoir) AND montant_depassement <> 0 ; UPDATE activite.p_factures_lignes_h SET montant_depassement = 0 WHERE no_facture = ANY (SELECT w_factures_avoir.no_facture_od_avoir FROM w_factures_avoir) AND montant_depassement <> 0 ; ]]> '1' AND p_sejours.code_sorti = '0' GROUP BY 1 HAVING ( MAX(p_mouvements_sejour.date) < date((SELECT MAX(date) FROM activite.p_mouvements_sejour WHERE est_mouvement_previsionnel = '0') - interval '7 days') OR (MAX(avec_facturation_intermediaire) <> '1' AND p_mouvements_sejour.no_sejour IN (SELECT no_sejour FROM activite.p_factures where code_facture = '1')) ) ) subview WHERE p_sejours.no_sejour = subview.no_sejour ; -- GHM et GHS selon PMSI SELECT base.cti_execute( 'DROP TABLE IF EXISTS w_sejours_ghm ., CREATE TEMP TABLE w_sejours_ghm AS SELECT oid, no_sejour, date_naissance, p_sejours.ghm_id, p_sejours.ghs_id, date_entree, date_sortie, type_sejour FROM activite.p_sejours JOIN activite.p_patients ON p_sejours.no_patient = p_patients.no_patient WHERE type_sejour IN (''1'',''2'',''5'',''6'') ., DROP TABLE IF EXISTS w_ghm_corres ., CREATE TEMP TABLE w_ghm_corres AS SELECT t_ghm_p.code AS ghm_code, t_ghm_p.oid AS ghm_p_id, t_ghm_a.oid AS ghm_a_id FROM pmsi.t_ghm t_ghm_p JOIN base.t_ghm t_ghm_a ON t_ghm_a.code = t_ghm_p.code WHERE t_ghm_p.code BETWEEN ''01 '' AND ''29 '' ., DROP TABLE IF EXISTS w_ghs_corres ., CREATE TEMP TABLE w_ghs_corres AS SELECT t_ghs_p.code AS ghs_code, t_ghs_p.oid AS ghs_p_id, t_ghs_a.oid AS ghs_a_id FROM pmsi.t_ghs t_ghs_p JOIN base.t_ghs t_ghs_a ON t_ghs_a.code = t_ghs_p.code ., UPDATE activite.p_sejours SET ghm_id = subview.ghm_id ,ghs_id = CASE WHEN subview.ghs_id > 0 THEN subview.ghs_id ELSE p_sejours.ghs_id END FROM ( SELECT p_sejours.no_sejour, ghm_a_id AS ghm_id, ghs_a_id AS ghs_id FROM w_sejours_ghm p_sejours JOIN activite.p_sejour_pmsi ON p_sejour_pmsi.sejour_id = p_sejours.oid JOIN pmsi.p_rss ON p_sejour_pmsi.rss_id = p_rss.oid AND date_trunc(''month'',p_sejours.date_sortie) = date_trunc(''month'',p_rss.date_sortie) AND p_sejours.date_naissance = p_rss.date_naissance JOIN w_ghm_corres ON p_rss.ghm_id = ghm_p_id JOIN w_ghs_corres ON p_rss.ghs_id = ghs_p_id WHERE (p_sejours.ghm_id <> ghm_a_id OR p_sejours.ghs_id <> ghs_a_id) AND p_rss.ghm_id > 0 AND p_rss.etat = '''' AND (p_rss.en_cours = ''0'' OR p_rss.en_cours_etat IN (''V'',''F'')) ) subview WHERE p_sejours.no_sejour = subview.no_sejour ',1) WHERE 'p_rss' IN (SELECT tablename FROM pg_tables WHERE schemaname = 'pmsi' AND tablename = 'p_rss') ; -- Date groupage selon PMSI SELECT base.cti_execute( 'UPDATE activite.p_sejours SET date_groupage = subview.date_groupage FROM ( SELECT p_sejours.no_sejour ,MAX(p_rss_etat.date_groupage) AS date_groupage FROM activite.p_sejours JOIN activite.p_sejour_pmsi ON p_sejour_pmsi.sejour_id = p_sejours.oid JOIN pmsi.p_rss ON p_sejour_pmsi.rss_id = p_rss.oid AND date_trunc(''month'',p_sejours.date_sortie) = date_trunc(''month'',p_rss.date_sortie) JOIN pmsi.p_rss_etat ON p_rss_etat.rss_id = p_rss.oid JOIN pmsi.t_ghm t_ghm_p ON p_rss.ghm_id = t_ghm_p.oid WHERE type_sejour IN (''1'',''2'',''5'',''6'') AND p_rss.ghm_id > 0 AND p_rss_etat.date_groupage < ''20991231''::date AND t_ghm_p.code NOT LIKE ''90%'' AND t_ghm_p.code NOT LIKE ''99%'' AND (p_rss.en_cours = ''0'' OR p_rss.en_cours_etat IN (''V'',''F'')) GROUP BY 1 ) subview WHERE p_sejours.no_sejour = subview.no_sejour AND p_sejours.date_groupage IS DISTINCT FROM subview.date_groupage ',1) WHERE 'p_rss' IN (SELECT tablename FROM pg_tables WHERE schemaname = 'pmsi' AND tablename = 'p_rss') ; UPDATE activite.p_factures SET ghs_id = p_sejours.ghs_id, gmt_id = p_sejours.gmt_id FROM activite.p_sejours WHERE p_factures.no_sejour = p_sejours.no_sejour AND ( p_factures.ghs_id IS DISTINCT FROM p_sejours.ghs_id OR p_factures.gmt_id IS DISTINCT FROM p_sejours.gmt_id ) ; -- Chambres particulières selon facturation DROP TABLE IF EXISTS w_cp_facturees; CREATE TEMP TABLE w_cp_facturees AS SELECT no_sejour, p_factures_lignes_c.date_debut, SUM(montant_facture) FROM activite.p_factures_lignes_c JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite.t_listes ON t_listes.code = 'CTI_SHO_R' JOIN activite.t_listes_contenu ON t_listes.oid = t_listes_contenu.liste_id AND rubrique_facturation_id = t_listes_contenu.to_id WHERE p_factures_lignes_c.date_debut = p_factures_lignes_c.date_fin GROUP BY 1,2 HAVING SUM(montant_facture) > 0 ; UPDATE activite.p_mouvements_sejour SET est_chambre_particuliere = '1', nb_chambres_particulieres = 1, est_chambre_particuliere_facturee = '1' FROM w_cp_facturees WHERE w_cp_facturees.no_sejour = p_mouvements_sejour.no_sejour AND w_cp_facturees.date_debut = p_mouvements_sejour.date AND ( p_mouvements_sejour.heure_fin = 240000 OR nb_sorties_directes = 1 OR nb_ambulatoires = 1 OR nb_externes = 1 ) ; -- Séjours ambulatoires avec prestation externe -> transformation DROP TABLE IF EXISTS w_sejours_ambu_to_externe; CREATE TEMP TABLE w_sejours_ambu_to_externe AS SELECT p_sejours.no_sejour FROM activite.p_sejours JOIN activite.t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid JOIN activite.p_factures ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture JOIN activite.t_prestations ON prestation_id = t_prestations.oid WHERE t_prestations.code IN ('SE1', 'SE2', 'SE3', 'SE4', 'SE5', 'SE6', 'ATU', 'FPU', 'FFM') AND p_sejours.type_sejour = '2' AND t_services_facturation.type_sejour NOT IN ('1','2','3','4','5','6','9') AND montant_facture <> 0 GROUP BY 1 HAVING SUM(ABS(montant_facture)) > 0 AND SUM(montant_facture) <> 0 ; UPDATE activite.p_sejours SET type_sejour = '3' WHERE no_sejour IN (SELECT no_sejour FROM w_sejours_ambu_to_externe) ; UPDATE activite.p_mouvements_sejour SET nb_externes = 1, nb_ambulatoires = 0 WHERE nb_ambulatoires = 1 AND no_sejour IN (SELECT no_sejour FROM w_sejours_ambu_to_externe) ; -- Séjours externes avec prestation ambu -> transformation DROP TABLE IF EXISTS w_sejours_externe_to_ambu; CREATE TEMP TABLE w_sejours_externe_to_ambu AS SELECT p_sejours.no_sejour FROM activite.p_sejours JOIN activite.t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid JOIN activite.p_factures ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite.p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture JOIN activite.t_prestations ON prestation_id = t_prestations.oid LEFT JOIN activite.t_sejour ON p_sejours.no_sejour = t_sejour.no_sejour WHERE t_prestations.code IN ('GHS') AND p_sejours.type_sejour = '3' AND ( t_services_facturation.type_sejour NOT IN ('1','2','3','4','5','6','9') OR p_sejours.ghm_id > 0 ) AND t_sejour.type_sejour IS DISTINCT FROM '3' AND montant_facture <> 0 GROUP BY 1 HAVING SUM(ABS(montant_facture)) > 0 AND SUM(montant_facture) <> 0 ; UPDATE activite.p_sejours SET type_sejour = '2' WHERE no_sejour IN (SELECT no_sejour FROM w_sejours_externe_to_ambu) ; UPDATE activite.p_mouvements_sejour SET nb_ambulatoires = 1, nb_externes= 0 WHERE nb_externes = 1 AND no_sejour IN (SELECT no_sejour FROM w_sejours_externe_to_ambu) ; -- Si Service sans facturation et sans mouvement, alors séjour fictif UPDATE activite[PX].p_sejours SET type_sejour = '9' FROM activite[PX].t_lieux JOIN activite[PX].t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE lieu_sortie_id = t_lieux.oid AND t_services_facturation.est_sans_mouvement = '1' AND t_services_facturation.est_sans_facturation = '1' AND p_sejours.type_sejour <> '9' ; UPDATE activite[PX].p_sejours SET lieu_sortie_id = 0 WHERE lieu_sortie_id IS NULL ; -- Idem si séjour sans acte et service sans acte fictif, alors séjour fictif UPDATE activite[PX].p_sejours SET type_sejour = '9' WHERE p_sejours.type_sejour != '9' AND lieu_sortie_id = ANY( SELECT t_lieux.oid FROM activite[PX].t_lieux JOIN activite[PX].t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE t_services_facturation.sej_sans_acte_fictif = '1') AND oid != ALL ( SELECT DISTINCT p_sejours.oid FROM activite[PX].p_sejours LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour LEFT JOIN activite[PX].p_factures_lignes_h ON p_factures.oid = p_factures_lignes_h.facture_id LEFT JOIN activite[PX].p_factures_lignes_non_facturees_h ON p_factures.oid = p_factures_lignes_non_facturees_h.facture_id WHERE (p_factures_lignes_h.facture_id IS NOT NULL OR p_factures_lignes_non_facturees_h.facture_id IS NOT NULL) ) ; -- Ajout ligne fictive dans mouvements séjour pour que chaque séjour ait au moins une ligne -- dans les mouvements INSERT INTO activite.p_mouvements_sejour (no_sejour, date, heure_debut, heure_fin, lieu_id, medecin_sejour_id) WITH w_mv AS (SELECT DISTINCT no_sejour FROM activite.p_mouvements_sejour) SELECT p_sejours.no_sejour , p_sejours.date_entree , p_sejours.heure_entree , p_sejours.heure_sortie , p_sejours.lieu_sortie_id , p_sejours.medecin_sejour_id FROM activite.p_sejours LEFT JOIN w_mv ON p_sejours.no_sejour = w_mv.no_sejour WHERE 1=1 AND type_sejour <> '9' AND code_prevu <> 1 AND p_sejours.etat NOT IN ('A', 'R', 'C') AND w_mv.no_sejour IS NULL ; INSERT INTO activite.p_mouvements_sejour (no_sejour, date, heure_debut, heure_fin, lieu_id, medecin_sejour_id) SELECT p_sejours.no_sejour, date_sortie, 0, heure_sortie, lieu_sortie_id, p_sejours.medecin_sejour_id FROM activite.p_sejours LEFT JOIN activite.p_mouvements_sejour ON p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.date = p_sejours.date_sortie WHERE type_sejour <> '9' AND code_prevu <> 1 AND p_sejours.code_sorti = '1' AND p_mouvements_sejour.no_sejour IS NULL ; -- Ajout des séjours annulés dans les mouvements pour regroupement et tri dans les requêtes INSERT INTO activite.p_mouvements_sejour (no_sejour, date, lieu_id, medecin_sejour_id, is_annulation) SELECT p_sejours.no_sejour, date_entree, lieu_sortie_id, p_sejours.medecin_sejour_id, CASE WHEN date_entree = date(date_etat) THEN 1 ELSE 0 END AS is_annulation FROM activite.p_sejours LEFT JOIN activite.p_mouvements_sejour ON p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.date = p_sejours.date_sortie WHERE p_sejours.etat IN ('A', 'R', 'C') AND p_mouvements_sejour.no_sejour IS NULL ; -- Correction séjours à séance selon GHM DROP TABLE IF EXISTS w_correction_seances_28z14; CREATE TEMP TABLE w_correction_seances_28z14 AS SELECT p_factures.no_sejour, p_factures_lignes_h.date_debut, SUM(p_factures_lignes_h.nb_prestation) AS nb_seances FROM activite.p_factures_lignes_h JOIN activite.p_factures ON p_factures_lignes_h.no_facture = p_factures.no_facture JOIN activite.p_sejours On p_factures.no_sejour = p_sejours.no_sejour AND type_sejour = '1' JOIN base.t_ghm ON p_sejours.ghm_id = t_ghm.oid AND t_ghm.code LIKE '28Z14%' JOIN base.t_actes ON acte_id = t_actes.oid AND t_actes.code = 'FELF011' GROUP BY 1,2 HAVING SUM(p_factures_lignes_h.nb_prestation) > 0 ; UPDATE activite.p_mouvements_sejour SET nb_seances = w_correction_seances_28z14.nb_seances FROM w_correction_seances_28z14 WHERE p_mouvements_sejour.no_sejour = w_correction_seances_28z14.no_sejour AND p_mouvements_sejour.date = w_correction_seances_28z14.date_debut AND p_mouvements_sejour.nb_seances <> w_correction_seances_28z14.nb_seances; DROP TABLE IF EXISTS w_correction_seances; CREATE TEMP TABLE w_correction_seances AS SELECT p_sejours.no_sejour, p_sejours.date_entree, p_sejours.date_sortie, COALESCE(t_services_facturation.type_sejour,'0') AS type_sejour_force, t_ghm.code AS ghm_code, SUM(nb_entrees_directes) AS nb_entrees_directes, SUM(nb_sorties_directes)AS nb_sorties_directes, SUM(nb_ambulatoires) AS nb_ambulatoires, SUM(nb_externes) AS nb_externes, SUM(nb_seances) AS nb_seances FROM activite.p_sejours JOIN activite.t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid LEFT JOIN activite.p_mouvements_sejour ON p_sejours.no_sejour = p_mouvements_sejour.no_sejour JOIN base.t_ghm ON ghm_id = t_ghm.oid WHERE p_sejours.type_sejour <> '9' AND t_ghm.code LIKE '28%' AND t_services_facturation.type_sejour IS DISTINCT FROM '0sauf5' GROUP BY 1,2,3,4,5 HAVING ( SUM(nb_entrees_directes) <> 0 OR SUM(nb_ambulatoires) <> 0 OR SUM(nb_externes) <> 0 OR SUM(nb_seances) = 0 ) ; UPDATE activite.p_mouvements_sejour SET nb_seances = 1, nb_ambulatoires = CASE WHEN w_correction_seances.type_sejour_force <> '0sauf5' AND w_correction_seances.type_sejour_force <> '2' THEN 0 ELSE p_mouvements_sejour.nb_ambulatoires END FROM w_correction_seances WHERE w_correction_seances.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.nb_ambulatoires <> 0 AND w_correction_seances.nb_seances = 0 AND w_correction_seances.nb_ambulatoires <> 0; UPDATE activite.p_sejours SET type_sejour = '5' FROM w_correction_seances WHERE w_correction_seances.type_sejour_force <> '0sauf5' AND w_correction_seances.type_sejour_force <> '2' AND w_correction_seances.no_sejour = p_sejours.no_sejour AND p_sejours.type_sejour = '2' AND w_correction_seances.nb_seances = 0 AND w_correction_seances.nb_ambulatoires <> 0; UPDATE activite.p_mouvements_sejour SET nb_seances = 1 FROM w_correction_seances WHERE w_correction_seances.no_sejour = p_mouvements_sejour.no_sejour AND p_mouvements_sejour.nb_entrees_directes <> 0 AND p_mouvements_sejour.nb_seances = 0 AND w_correction_seances.nb_seances = 0 AND w_correction_seances.nb_ambulatoires = 0 AND w_correction_seances.nb_entrees_directes <> 0; -- Types séjours Hospitalisés vers séances UPDATE activite.p_sejours SET type_sejour = '5' FROM activite.t_lieux JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE lieu_sortie_id = t_lieux.oid AND t_services_facturation.type_sejour <> '0sauf5' AND t_services_facturation.type_sejour <> '1' AND t_services_facturation.type_sejour <> '2' AND p_sejours.type_sejour <> '5' AND p_sejours.type_sejour <> '9' AND ghs_id > 0 AND ghm_id in (SELECT oid FROm base.t_ghm where code LIKE '28%') ; UPDATE activite.p_mouvements_sejour SET nb_entrees_directes = 0, nb_sorties_directes = 0, est_jour_hospitalisation = '0', nb_ambulatoires = 0, nb_externes = 0, nb_urgences = 0, nb_entrees_mutation_service = 0, nb_sorties_mutation_service = 0, nb_entrees_mutation_etage = 0, nb_sorties_mutation_etage = 0, nb_entrees_mutation_activite = 0, nb_sorties_mutation_activite = 0, nb_entrees_mutation_unite_medicale = 0, nb_sorties_mutation_unite_medicale = 0, nb_jours_js_inclus = 0, nb_jours_js_non_inclus = 0, est_chambre_particuliere = '0', nb_chambres_particulieres = 0, nb_bebes = 0 WHERE no_sejour IN (SELECT no_sejour FROM activite.p_sejours WHERE type_sejour = '5') AND ( nb_entrees_directes IS DISTINCT FROM 0 OR nb_sorties_directes IS DISTINCT FROM 0 OR est_jour_hospitalisation IS DISTINCT FROM '0' OR nb_ambulatoires IS DISTINCT FROM 0 OR nb_externes IS DISTINCT FROM 0 OR nb_urgences IS DISTINCT FROM 0 OR nb_entrees_mutation_service IS DISTINCT FROM 0 OR nb_sorties_mutation_service IS DISTINCT FROM 0 OR nb_entrees_mutation_etage IS DISTINCT FROM 0 OR nb_sorties_mutation_etage IS DISTINCT FROM 0 OR nb_entrees_mutation_activite IS DISTINCT FROM 0 OR nb_sorties_mutation_activite IS DISTINCT FROM 0 OR nb_entrees_mutation_unite_medicale IS DISTINCT FROM 0 OR nb_sorties_mutation_unite_medicale IS DISTINCT FROM 0 OR nb_jours_js_inclus IS DISTINCT FROM 0 OR nb_jours_js_non_inclus IS DISTINCT FROM 0 OR est_chambre_particuliere IS DISTINCT FROM '0' OR nb_chambres_particulieres IS DISTINCT FROM 0 OR nb_bebes IS DISTINCT FROM 0 ) ; -- Séjours hospît vers externe si duree séjour <= 1 DROP TABLE IF EXISTS w_sejours_hospit_to_externe; CREATE TEMP TABLE w_sejours_hospit_to_externe AS SELECT p_sejours.no_sejour FROM activite.p_sejours JOIN activite.t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE p_sejours.type_sejour = '1' AND date_sortie - date_entree <= 1 AND code_sorti = '1' AND t_services_facturation.type_sejour = '31' ; UPDATE activite.p_sejours SET type_sejour = '3' WHERE no_sejour IN (SELECT no_sejour FROM w_sejours_hospit_to_externe) ; UPDATE activite.p_mouvements_sejour SET nb_externes = 1, nb_entrees_directes = 0 WHERE nb_entrees_directes = 1 AND no_sejour IN (SELECT no_sejour FROM w_sejours_hospit_to_externe) ; UPDATE activite.p_mouvements_sejour SET nb_entrees_directes = 0, nb_sorties_directes = 0, est_jour_hospitalisation = '0', nb_ambulatoires = 0, nb_seances = 0, nb_urgences = 0, nb_entrees_mutation_service = 0, nb_sorties_mutation_service = 0, nb_entrees_mutation_etage = 0, nb_sorties_mutation_etage = 0, nb_entrees_mutation_activite = 0, nb_sorties_mutation_activite = 0, nb_entrees_mutation_unite_medicale = 0, nb_sorties_mutation_unite_medicale = 0, nb_jours_js_inclus = 0, nb_jours_js_non_inclus = 0, est_chambre_particuliere = '0', nb_chambres_particulieres = 0, nb_bebes = 0 WHERE no_sejour IN (SELECT no_sejour FROM w_sejours_hospit_to_externe) ; -- Forcage ambulatoires non traité dans import prestataire DROP TABLE IF EXISTS w_correction_seances; CREATE TEMP TABLE w_correction_seances AS SELECT p_sejours.no_sejour FROM activite.p_sejours JOIN activite.t_lieux on lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation on service_facturation_id = t_services_facturation.oid LEFT JOIN base.t_ghm on ghm_id = t_ghm.oid WHERE p_sejours.type_sejour = '5' AND t_services_facturation.type_sejour = '2' ; UPDATE activite.p_sejours SET type_sejour = '2' FROM w_correction_seances WHERE p_sejours.no_sejour = w_correction_seances.no_sejour ; UPDATE activite.p_mouvements_sejour SET nb_ambulatoires = 1 FROM w_correction_seances WHERE p_mouvements_sejour.no_sejour = w_correction_seances.no_sejour AND nb_seances = 1 ; -- Premiers et derniers mouvements par jour pour journées HDJ UPDATE activite.p_mouvements_sejour SET est_premier_mouvement_jour = '1' FROM ( SELECT no_sejour, date, MIN(heure_fin) AS heure_fin FROM activite.p_mouvements_sejour GROUP BY 1,2 HAVING MIN(heure_fin) < 240000 ) subview WHERE p_mouvements_sejour.no_sejour = subview.no_sejour AND p_mouvements_sejour.heure_fin = subview.heure_fin AND p_mouvements_sejour.date = subview.date AND est_premier_mouvement_jour IS DISTINCT FROM '1' ; UPDATE activite.p_mouvements_sejour SET est_dernier_mouvement_jour = '1' FROM ( SELECT no_sejour, date, MAX(heure_debut) AS heure_debut FROM activite.p_mouvements_sejour GROUP BY 1,2 HAVING MAX(heure_debut) <> 0 ) subview WHERE p_mouvements_sejour.no_sejour = subview.no_sejour AND p_mouvements_sejour.heure_debut = subview.heure_debut AND p_mouvements_sejour.date = subview.date AND est_dernier_mouvement_jour IS DISTINCT FROM '1'; UPDATE activite.p_mouvements_sejour SET est_premier_mouvement_jour = CASE WHEN heure_premier = heure_debut THEN '1' ELSE '0' END, est_dernier_mouvement_jour = CASE WHEN heure_dernier = heure_debut THEN '1' ELSE '0' END FROM ( SELECT no_sejour, date, MIN(CASE WHEN est_jour_hospitalisation = '1' THEN heure_debut ELSE 999999 END) AS heure_premier, MAX(CASE WHEN est_jour_hospitalisation = '1' THEN heure_debut ELSE -1 END) AS heure_dernier FROM activite.p_mouvements_sejour GROUP BY 1,2 HAVING ( MAX(nb_entrees_directes) = 1 OR MAX(nb_sorties_directes) = 1 ) AND ( MIN(heure_debut) <> MIN(CASE WHEN est_jour_hospitalisation = '1' THEN heure_debut ELSE 999999 END) OR MAX(heure_debut) <> MAX(CASE WHEN est_jour_hospitalisation = '1' THEN heure_debut ELSE -1 END) ) ) subview WHERE p_mouvements_sejour.no_sejour = subview.no_sejour AND p_mouvements_sejour.date = subview.date AND ( est_premier_mouvement_jour IS DISTINCT FROM CASE WHEN heure_premier = heure_debut THEN '1' ELSE '0' END OR est_dernier_mouvement_jour IS DISTINCT FROM CASE WHEN heure_dernier = heure_debut THEN '1' ELSE '0' END ); -- Transformation UF selon type eclatement SELECT activite.cti_transform_uf(); -- Mises à jour mouvements selon présence prestation (hdj) SELECT activite[PX].cti_calcul_hdj_mouvements(); -- Calcul des journées dans la table des mouvements SELECT activite[PX].cti_calcul_journees_mouvements(); ]]> 0 ; WITH finess as ( SELECT MAX(t_finess.code) AS code FROM base.t_finess WHERE secondaire = '0' HAVING count(*) = 1 ), empty_sejours as ( SELECT p_sejours.oid, finess.code as finess_code, lieu_sortie_id FROM activite.p_sejours JOIN finess ON 1=1 WHERE p_sejours.finess = '' OR p_sejours.finess = '000000000' ), update_sejours as ( SELECT empty_sejours.oid, finess_code FROM empty_sejours JOIN activite.t_lieux ON empty_sejours.lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid WHERE t_services_facturation.finess_id = 0 ) UPDATE activite.p_sejours SET finess = finess_code FROM update_sejours WHERE update_sejours.oid = p_sejours.oid AND finess IS DISTINCT FROM finess_code ; UPDATE activite.p_sejours SET finess = subview.code FROM ( SELECT MAX(code) AS code FROM base.t_finess WHERE secondaire = '0' HAVING count(DISTINCT code) = 1 ) subview WHERE p_sejours.finess = '' OR p_sejours.finess = '000000000' ; -- Médecin séjour selon service UPDATE activite.p_sejours SET medecin_sejour_id = CASE WHEN COALESCE(t_services_facturation.medecin_force_id,0) > 0 THEN t_services_facturation.medecin_force_id WHEN COALESCE(t_services_facturation.medecin_par_defaut_id,0) > 0 AND p_sejours.medecin_sejour_id = 0 THEN t_services_facturation.medecin_par_defaut_id ELSE p_sejours.medecin_sejour_id END FROM activite.t_lieux JOIN activite.t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid WHERE lieu_sortie_id = t_lieux.oid AND ( t_services_facturation.medecin_force_id <> 0 OR t_services_facturation.medecin_par_defaut_id <> 0 ) ; -- Correction date sortie dans séjours pour externes et ambu présents UPDATE activite.p_sejours SET date_sortie = subview.date_sortie, heure_sortie = subview.heure_sortie FROM ( SELECT p_sejours.no_sejour, MAX(date) AS date_sortie, (MAX(Array[date::text, heure_fin::text]))[2]::numeric AS heure_sortie FROM activite.p_sejours JOIN activite.p_mouvements_sejour ON p_sejours.no_sejour = p_mouvements_sejour.no_sejour WHERE p_sejours.type_sejour IN ('2','3') AND p_sejours.code_sorti <> '1' AND ( p_mouvements_sejour.nb_ambulatoires = 1 OR p_mouvements_sejour.nb_externes = 1 ) GROUP BY 1 ) subview WHERE p_sejours.no_sejour = subview.no_sejour ; -- Chambre particuliere demandee si facturee DROP TABLE IF EXISTS w_factures_lignes_c_cp; CREATE TEMP TABLE w_factures_lignes_c_cp AS SELECT p_factures.no_sejour FROM activite[PX].p_factures_lignes_c JOIN activite[PX].p_factures ON p_factures.no_facture = p_factures_lignes_c.no_facture JOIN activite[PX].p_sejours ON p_sejours.no_sejour = p_factures.no_sejour AND p_sejours.code_cp_demandee <> '1' JOIN activite[PX].v_listes_3 ON liste_code = 'CTI_SHO_R' AND rubrique_facturation_id = to_id WHERE p_factures_lignes_c.montant_facture <> 0 GROUP BY 1 HAVING SUM(nb_rubrique) > 0; ALTER TABLE w_factures_lignes_c_cp ADD CONSTRAINT w_factures_lignes_c_cp_pkey PRIMARY KEY(no_sejour); UPDATE activite[PX].p_sejours SET code_cp_demandee = '1' FROM w_factures_lignes_c_cp WHERE p_sejours.no_sejour = w_factures_lignes_c_cp.no_sejour AND code_cp_demandee <> '1'; -- GHS esthétique UPDATE activite[PX].p_sejours SET ghs_id = (SELECT oid FROM base.t_ghs WHERE code = 9999) WHERE ghs_id <= 0 AND ghm_id IN (SELECT oid FROM base.t_ghm WHERE code LIKE '09Z02%' OR code LIKE '23Z03%'); -- GHS UPDATE activite[PX].p_sejours SET date_groupage = '20991231'::date, ghs_id = CASE WHEN p_sejours.particularite_t2a::bpchar = 'SE1'::bpchar THEN - 9991::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE2'::bpchar THEN - 9992::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE3'::bpchar THEN - 9993::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE4'::bpchar THEN - 9994::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE5'::bpchar THEN - 9997::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE6'::bpchar THEN - 9998::bigint WHEN p_sejours.particularite_t2a::bpchar = 'ATU'::bpchar THEN - 9995::bigint WHEN p_sejours.particularite_t2a::bpchar = 'FFM'::bpchar THEN - 9996::bigint WHEN t_services_facturation.type_t2a <> '1'::bpchar THEN - 9990::bigint WHEN p_sejours.type_sejour NOT IN ('1','2','5','6') THEN - 9990::bigint WHEN p_sejours.code_sorti <> 1::numeric THEN - 9980::bigint WHEN p_sejours.date_groupage = '2099-12-31'::date THEN - 9981::bigint ELSE - 9981::bigint END, ghm_id = CASE WHEN p_sejours.particularite_t2a::bpchar = 'SE1'::bpchar THEN - 9991::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE2'::bpchar THEN - 9992::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE3'::bpchar THEN - 9993::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE4'::bpchar THEN - 9994::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE5'::bpchar THEN - 9997::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE6'::bpchar THEN - 9998::bigint WHEN p_sejours.particularite_t2a::bpchar = 'ATU'::bpchar THEN - 9995::bigint WHEN p_sejours.particularite_t2a::bpchar = 'FFM'::bpchar THEN - 9996::bigint WHEN t_services_facturation.type_t2a <> '1'::bpchar THEN - 9990::bigint WHEN p_sejours.type_sejour NOT IN ('1','2','5','6') THEN - 9990::bigint WHEN p_sejours.code_sorti <> 1::numeric THEN - 9980::bigint WHEN p_sejours.date_groupage = '2099-12-31'::date THEN - 9981::bigint ELSE - 9981::bigint END FROM activite[PX].t_lieux JOIN activite[PX].t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE p_sejours.lieu_sortie_id = t_lieux.oid AND ghs_id <= 0 AND gmt_id <= 0 AND ( date_groupage IS DISTINCT FROM '20991231'::date OR ghm_id IS DISTINCT FROM CASE WHEN p_sejours.particularite_t2a::bpchar = 'SE1'::bpchar THEN - 9991::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE2'::bpchar THEN - 9992::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE3'::bpchar THEN - 9993::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE4'::bpchar THEN - 9994::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE5'::bpchar THEN - 9997::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE6'::bpchar THEN - 9998::bigint WHEN p_sejours.particularite_t2a::bpchar = 'ATU'::bpchar THEN - 9995::bigint WHEN p_sejours.particularite_t2a::bpchar = 'FFM'::bpchar THEN - 9996::bigint WHEN t_services_facturation.type_t2a <> '1'::bpchar THEN - 9990::bigint WHEN p_sejours.type_sejour NOT IN ('1','2','5','6') THEN - 9990::bigint WHEN p_sejours.code_sorti <> 1::numeric THEN - 9980::bigint WHEN p_sejours.date_groupage = '2099-12-31'::date THEN - 9981::bigint ELSE - 9981::bigint END OR ghs_id IS DISTINCT FROM CASE WHEN p_sejours.particularite_t2a::bpchar = 'SE1'::bpchar THEN - 9991::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE2'::bpchar THEN - 9992::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE3'::bpchar THEN - 9993::bigint WHEN p_sejours.particularite_t2a::bpchar = 'SE4'::bpchar THEN - 9994::bigint WHEN p_sejours.particularite_t2a::bpchar = 'ATU'::bpchar THEN - 9995::bigint WHEN p_sejours.particularite_t2a::bpchar = 'FFM'::bpchar THEN - 9996::bigint WHEN t_services_facturation.type_t2a <> '1'::bpchar THEN - 9990::bigint WHEN p_sejours.type_sejour NOT IN ('1','2','5','6') THEN - 9990::bigint WHEN p_sejours.code_sorti <> 1::numeric THEN - 9980::bigint WHEN p_sejours.date_groupage = '2099-12-31'::date THEN - 9981::bigint ELSE - 9981::bigint END ) ; -- Calcul des ages en années (date_entre - date_naissance ou -1 si une des deux dates absente) UPDATE activite.p_sejours SET age = NULL; -- Court séjour UPDATE activite.p_sejours set age = extract(year from age(date_entree, date_naissance)) FROM activite.p_patients WHERE p_patients.no_patient = p_sejours.no_patient and (p_sejours.age = 0 OR p_sejours.age is null OR p_sejours.age = -1) and date_naissance >= '1890-01-01'::date and date_entree >= '2000-01-01'::date AND ( code_sorti = '1' AND date_sortie - date_entree < 180 OR code_sorti <> '1' AND date(now()) - date_entree < 180 ) and date_naissance <= date_sortie and extract(year from age(date_entree, date_naissance)) <= 120 ; -- longs sejours (> 6mois) age selondébut d'année UPDATE activite.p_sejours set age = extract(year from age(date_trunc('year',CASE WHEN code_sorti = '1' THEN date_sortie ELSE now() END), date_naissance)) FROM activite.p_patients WHERE p_patients.no_patient = p_sejours.no_patient and (p_sejours.age = 0 OR p_sejours.age is null OR p_sejours.age = -1) and date_naissance >= '1890-01-01'::date AND ( code_sorti = '1' AND date_sortie - date_entree >= 180 OR code_sorti <> '1' AND date(now()) - date_entree >= 180 ) and date_naissance <= date_sortie and extract(year from age(date_trunc('year',CASE WHEN code_sorti = '1' THEN date_sortie ELSE now() END), date_naissance)) <= 120 ; UPDATE activite.p_sejours SET age = -1 WHERE p_sejours.age is null OR age < -1 ; -- Codes de mode d'entree obsolètes UPDATE activite[PX].p_sejours SET mode_entree = CASE WHEN mode_entree = 'T' THEN '7' WHEN mode_entree = 'I' THEN '6' ELSE '8' END WHERE mode_entree IN ('D', 'T', 'I'); -- Codes de modes de sortie obsolètes UPDATE activite[PX].p_sejours SET mode_sortie = CASE WHEN mode_sortie = 'T' THEN '7' WHEN mode_sortie = 'I' THEN '6' ELSE '8' END WHERE mode_sortie IN ('D', 'T', 'I'); -- Suppression des tables de travail non utilisées après DROP TABLE IF EXISTS w_factures_lignes_c_cp CASCADE; -- Compléments séjours (type pmsi) SELECT activite.cti_reorganize_sejours('activite.p_sejours'); ]]> date facture = date groupage UPDATE activite.p_factures SET date_facture = p_sejours.date_groupage FROM activite.p_sejours WHERE p_factures.type_facture = 'G' AND p_factures.no_sejour = p_sejours.no_sejour AND p_sejours.date_groupage > p_factures.date_facture AND p_sejours.date_groupage <> '20991231'; -- Factures BG récupérées depuis PMSI -> date facture = date derniere facture TP1 hbg UPDATE activite.p_factures SET date_facture = p_factures_x.date_facture FROM activite.p_factures p_factures_x JOIN activite.p_sejours ON p_factures_x.no_sejour = p_sejours.no_sejour WHERE p_factures.type_facture = 'G' AND p_factures_x.no_sejour = p_factures.no_sejour AND p_factures_x.no_facture <> p_factures.no_facture AND p_factures_x.type_facture <> 'G' AND p_factures_x.date_facture > p_factures.date_facture AND p_factures_x.code_facture = '1' AND p_factures_x.montant_facture_1_c > 0 AND p_factures_x.date_facture <> '20991231' ; ]]> 1 AND ( t_prestations.code IN ('CPC') OR type_ventilation_jour = '1' ) AND (date_fin - date_debut + 1) = nb_rubrique ; UPDATE activite.p_factures_lignes_non_facturees_c SET nb_rubrique = 1, date_fin = p_factures_lignes_non_facturees_c.date_debut, montant_encours = p_factures_lignes_non_facturees_c.montant_encours / p_factures_lignes_non_facturees_c.nb_rubrique FROM w_factures_lignes_non_facturees_c_jour WHERE p_factures_lignes_non_facturees_c.CTID = fromCTID ; DROP TABLE IF EXISTS w_factures_lignes_non_facturees_c_jour_to; CREATE TEMP TABLE w_factures_lignes_non_facturees_c_jour_to AS SELECT w_factures_lignes_non_facturees_c_jour.*, p_calendrier.date AS to_date FROM w_factures_lignes_non_facturees_c_jour JOIN base.p_calendrier ON p_calendrier.date > w_factures_lignes_non_facturees_c_jour.date_debut AND p_calendrier.date <= w_factures_lignes_non_facturees_c_jour.date_fin ; UPDATE w_factures_lignes_non_facturees_c_jour_to SET nb_rubrique = 1, date_debut = to_date, date_fin = to_date, montant_encours = montant_encours / nb_rubrique ; ALTER TABLE w_factures_lignes_non_facturees_c_jour_to DROP COLUMN fromCTID; ALTER TABLE w_factures_lignes_non_facturees_c_jour_to DROP COLUMN to_date; -- Dans la table w_factures_lignes_non_facturees_c_jour_to, les lignes sont maintenant ventilees jour/jour -- Pour les factures SSR (facturation intermediaires), il se peut que certaines lignes soient affectées à la mauvaise -- facture intermédiaire -- La sequence qui suit permet de reaffecter la bonne facture ANALYSE w_factures_lignes_non_facturees_c_jour_to ; DROP TABLE IF EXISTS w_factures_lignes_non_facturees_c_reaffect ; CREATE TEMP TABLE w_factures_lignes_non_facturees_c_reaffect AS SELECT w_factures_lignes_non_facturees_c_jour_to.no_facture, w_factures_lignes_non_facturees_c_jour_to.date_debut, MAX(p_factures_cible.no_facture) AS no_facture_cible FROM w_factures_lignes_non_facturees_c_jour_to JOIN activite.p_factures ON w_factures_lignes_non_facturees_c_jour_to.no_facture = p_factures.no_facture JOIN activite.t_lieux ON w_factures_lignes_non_facturees_c_jour_to.lieu_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid LEFT JOIN activite.p_factures p_factures_cible ON p_factures_cible.no_sejour = p_factures.no_sejour AND w_factures_lignes_non_facturees_c_jour_to.date_debut BETWEEN p_factures_cible.date_debut AND p_factures_cible.date_fin AND p_factures_cible.type_facture = 'E' WHERE avec_facturation_intermediaire = '1' AND w_factures_lignes_non_facturees_c_jour_to.date_debut NOT BETWEEN p_factures.date_debut AND p_factures.date_fin GROUP BY 1,2 ; ANALYSE w_factures_lignes_non_facturees_c_reaffect ; UPDATE w_factures_lignes_non_facturees_c_jour_to SET no_facture = no_facture_cible FROM w_factures_lignes_non_facturees_c_reaffect WHERE w_factures_lignes_non_facturees_c_jour_to.no_facture = w_factures_lignes_non_facturees_c_reaffect.no_facture AND w_factures_lignes_non_facturees_c_jour_to.date_debut = w_factures_lignes_non_facturees_c_reaffect.date_debut AND no_facture_cible IS NOT NULL ; -- Suppression des lignes sans facture cible DELETE FROM w_factures_lignes_non_facturees_c_jour_to USING w_factures_lignes_non_facturees_c_reaffect WHERE w_factures_lignes_non_facturees_c_jour_to.no_facture = w_factures_lignes_non_facturees_c_reaffect.no_facture AND w_factures_lignes_non_facturees_c_jour_to.date_debut = w_factures_lignes_non_facturees_c_reaffect.date_debut AND no_facture_cible IS NULL ; INSERT INTO activite.p_factures_lignes_non_facturees_c SELECT * FROM w_factures_lignes_non_facturees_c_jour_to ; SELECT base.cti_vacuum_table('activite','p_factures'); SELECT base.cti_vacuum_table('activite','p_sejours'); -- suppression des FJ pour les services maternite (idem encours CTI) DELETE FROM activite.p_factures_lignes_non_facturees_c USING activite.t_lieux, activite.t_services_facturation, activite.t_prestations WHERE lieu_id = t_lieux.oid AND t_services_facturation.oid = t_lieux.service_facturation_id AND t_services_facturation.particularites_encours = 'MAT' AND t_prestations.oid = prestation_id AND t_prestations.code IN ('FJ','FJA','FJS','FJR') ; -- Recalculer totaux facture UPDATE activite.p_factures SET montant_facture_c = subview.montant_facture, montant_facture_0_c = subview.montant_facture_0, montant_facture_1_c = subview.montant_facture_1, montant_facture_2_c = subview.montant_facture_2, montant_facture_22_c = subview.montant_facture_22, montant_comptabilise_budget_global_c = subview.montant_comptabilise_budget_global_c FROM ( SELECT p_factures.no_facture, SUM(COALESCE(CASE WHEN origine_facturation_id = 1 THEN p_factures_lignes_c.montant_facture ELSE 0 END,0)) AS montant_facture, MAX(p_factures.montant_facture_c), SUM(COALESCE(CASE WHEN origine_facturation_id = 1 THEN p_factures_lignes_c.montant_facture_0 ELSE 0 END,0)) AS montant_facture_0, MAX(p_factures.montant_facture_0_c), SUM(COALESCE(CASE WHEN origine_facturation_id = 1 THEN p_factures_lignes_c.montant_facture_1 ELSE 0 END,0)) AS montant_facture_1, MAX(p_factures.montant_facture_1_c), SUM(COALESCE(CASE WHEN origine_facturation_id = 1 THEN p_factures_lignes_c.montant_facture_2 ELSE 0 END,0)) AS montant_facture_2, MAX(p_factures.montant_facture_2_c), SUM(COALESCE(CASE WHEN origine_facturation_id = 1 THEN p_factures_lignes_c.montant_facture_22 ELSE 0 END,0)) AS montant_facture_22, MAX(p_factures.montant_facture_22_c), SUM(COALESCE(p_factures_lignes_c.montant_comptabilise_budget_global_1,0)) AS montant_comptabilise_budget_global_c, MAX(p_factures.montant_comptabilise_budget_global_c) FROM activite.p_factures LEFT JOIN activite.p_factures_lignes_c on p_factures_lignes_c.no_facture = p_factures.no_facture GROUP BY 1 HAVING ( SUM(COALESCE(CASE WHEN origine_facturation_id = 1 THEN p_factures_lignes_c.montant_facture ELSE 0 END,0)) <> MAX(p_factures.montant_facture_c) OR SUM(COALESCE(CASE WHEN origine_facturation_id = 1 THEN p_factures_lignes_c.montant_facture_0 ELSE 0 END,0)) <> MAX(p_factures.montant_facture_0_c) OR SUM(COALESCE(CASE WHEN origine_facturation_id = 1 THEN p_factures_lignes_c.montant_facture_1 ELSE 0 END,0)) <> MAX(p_factures.montant_facture_1_c) OR SUM(COALESCE(CASE WHEN origine_facturation_id = 1 THEN p_factures_lignes_c.montant_facture_2 ELSE 0 END,0)) <> MAX(p_factures.montant_facture_2_c) OR SUM(COALESCE(CASE WHEN origine_facturation_id = 1 THEN p_factures_lignes_c.montant_facture_22 ELSE 0 END,0)) <> MAX(p_factures.montant_facture_22_c) OR SUM(COALESCE(p_factures_lignes_c.montant_comptabilise_budget_global_1,0)) <> MAX(p_factures.montant_comptabilise_budget_global_c) ) ) subview WHERE p_factures.no_facture = subview.no_facture; -- Recalculer facture de 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 p_factures.no_facture NOT LIKE '%.DMA' AND 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( CASE WHEN p_factures.no_facture NOT LIKE '%.DMA' AND type_facture <> '1' AND type_facture <> 'X' AND type_facture <> 'P' AND (t_prestations.code IN ('GHS','GHT','PJ') OR (p_factures.no_facture LIKE '%BG' AND p_sejours.type_sejour IN ('1','2','5','6'))) THEN p_factures_lignes_c.taux_1 ELSE 0 END ,'FM00000'), CASE WHEN p_factures.no_facture NOT LIKE '%.DMA' AND type_facture <> '1' AND type_facture <> 'X' AND type_facture <> 'P' AND (t_prestations.code IN ('GHS','GHT','PJ') OR (p_factures.no_facture LIKE '%BG' AND p_sejours.type_sejour IN ('1','2','5','6'))) THEN p_factures.no_facture ELSE NULL END ] ))[2] AS no_facture_reference_sejour_last, COUNT(DISTINCT p_factures.no_facture) AS nb_factures, MAX(avec_facturation_intermediaire) AS avec_facturation_intermediaire FROM activite.p_factures JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite.t_lieux ON p_sejours.lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid LEFT JOIN activite.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','GHT','PJ') GROUP BY 1,2; CREATE INDEX w_sejours_facture_reference_i1 ON w_sejours_facture_reference USING btree (no_sejour); -- Cas d'une facture, d'un avoir et dune autre facture, il faut privilégier l'autre facture UPDATE w_sejours_facture_reference SET no_facture_reference_sejour_last = subview.no_facture_reference FROM ( SELECT p_factures.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, MAX(CASE WHEN type_facture <> '1' AND type_facture <> 'X' THEN no_facture ELSE NULL END) AS no_facture_reference FROM activite.p_factures JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite.t_lieux ON p_sejours.lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE p_factures.no_facture NOT LIKE '%.DMA' GROUP BY 1,2 HAVING SUM(CASE WHEN type_facture <> '1' AND type_facture <> 'X' THEN 1 ELSE 0 END) = 1 AND SUM(CASE WHEN type_facture = '1' THEN 1 ELSE 0 END) = SUM(CASE WHEN type_facture = 'X' THEN 1 ELSE 0 END) AND SUM(CASE WHEN type_facture = 'X' THEN 1 ELSE 0 END) > 0 ) subview WHERE w_sejours_facture_reference.no_sejour = subview.no_sejour AND w_sejours_facture_reference.date_fin = subview.date_fin AND no_facture_reference_sejour_last IS DISTINCT FROM subview.no_facture_reference ; UPDATE activite.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.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.p_factures SET facture_reference_id = p_factures_references.oid FROM activite.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; --Report Sur Encours UPDATE activite.p_factures_encours SET no_facture_reference = subview.no_facture_reference FROM (SELECT no_sejour, MAX(no_facture_reference) AS no_facture_reference FROM activite.p_factures GROUP BY 1 HAVING count(distinct no_facture_reference) = 1 ) subview WHERE p_factures_encours.no_sejour = subview.no_sejour AND p_factures_encours.no_facture_reference <> subview.no_facture_reference; -- Supprimer les factures de référence nulles sur séjours budget global DROP TABLE IF EXISTS w_factures_references; CREATE TEMP TABLE w_factures_references AS SELECT p_factures.no_facture_reference FROM activite.p_factures JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite.t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid JOIN activite.p_factures_reference ON p_factures_reference.no_facture_reference = p_factures.no_facture_reference WHERE p_factures_reference.nb_non_calcules > 0 AND t_services_facturation.est_sans_facturation = '2' GROUP BY 1 HAVING SUM(CASE WHEN p_factures.code_facture = '1' AND p_factures.no_facture LIKE '%BG' THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN p_factures.code_facture = '0' AND p_factures.montant_facture_c = 0 AND p_factures.montant_facture_h = 0 AND p_factures.montant_regle_c = 0 AND p_factures.montant_regle_h = 0 THEN 1 ELSE 0 END) > 0 ORDER BY 1; DELETE FROM activite.p_factures USING w_factures_references WHERE w_factures_references.no_facture_reference = p_factures.no_facture_reference AND p_factures.code_facture = '0' AND p_factures.montant_facture_c = 0 AND p_factures.montant_facture_h = 0 AND p_factures.montant_regle_c = 0 AND p_factures.montant_regle_h = 0; -- Reporter ghs sur factures UPDATE activite.p_factures SET ghs_id = p_sejours.ghs_id FROM activite.p_sejours WHERE p_factures.no_sejour = p_sejours.no_sejour AND p_factures.ghs_id IS DISTINCT FROM p_sejours.ghs_id; UPDATE activite.p_sejours SET date_groupage = date_facture WHERE (date_groupage IS null OR date_groupage = '20991231' OR date_groupage = '00010101') AND date_facture <> '2099-12-31' AND ghs_id > 0; -- Cas spécial de deux factures additives non facturées (pour génération encours) UPDATE activite.p_factures SET type_facture = '0' WHERE no_facture IN ( SELECT no_facture_reference FROM ( SELECT no_sejour, MAX(no_facture_reference) AS no_facture_reference FROM activite.p_factures WHERE code_facture = '0' GROUP BY 1 HAVING count(*) > 1 AND SUM(CASE WHEN type_facture = '2' AND code_facture = '0' THEN 1 ELSE 0 END) = count(*) ) subview ) ; ]]> = p_factures.date_debut WHERE no_facture LIKE '%BG' AND type_sejour = '5' AND COALESCE(t_ghm.code,'') NOT IN ('28Z19Z', '28Z20Z') AND date_trunc('month',p_factures.date_fin) > date_trunc('month',p_factures.date_debut) ; SELECT setval('activite.s_factures', COALESCE((SELECT MAX(oid) FROM activite.p_factures),0)+1, true) ; UPDATE w_factures_seances_bg SET date_debut = date_seance_debut, date_fin = date_seance_fin, no_facture = CASE WHEN w_factures_seances_bg.date_debut = date_seance_debut THEN w_factures_seances_bg.no_facture_original ELSE replace(no_facture_original,'BG','') || to_char(date_seance_fin,'YYMM') || '.BG' END, oid = CASE WHEN w_factures_seances_bg.date_debut = date_seance_debut THEN w_factures_seances_bg.oid ELSE nextval('activite.s_factures'::regclass) END ; UPDATE w_factures_seances_bg SET no_facture_reference = no_facture, facture_reference_id = oid ; ANALYSE w_factures_seances_bg; CREATE INDEX i_w_factures_seances_bg_1 ON w_factures_seances_bg USING btree (no_facture_original); CREATE INDEX i_w_factures_seances_bg_2 ON w_factures_seances_bg USING btree (no_sejour); UPDATE w_factures_seances_bg SET nb_seances = subview.nb_seances FROM ( SELECT no_facture, COUNT(DISTINCT date) AS nb_seances FROM activite.p_mouvements_sejour JOIN w_factures_seances_bg ON p_mouvements_sejour.no_sejour = w_factures_seances_bg.no_sejour AND p_mouvements_sejour.date BETWEEN w_factures_seances_bg.date_debut AND w_factures_seances_bg.date_fin AND p_mouvements_sejour.nb_seances > 0 GROUP BY 1 ) subview WHERE subview.no_facture = w_factures_seances_bg.no_facture AND subview.nb_seances > 0 ; UPDATE w_factures_seances_bg SET nb_seances_facturees = subview.nb_seances FROM ( SELECT w_factures_seances_bg.no_facture, COUNT(DISTINCT p_factures_lignes_c.date_debut) AS nb_seances FROM activite.p_factures_lignes_c JOIN w_factures_seances_bg ON p_factures_lignes_c.no_facture = w_factures_seances_bg.no_facture_original AND p_factures_lignes_c.date_debut BETWEEN w_factures_seances_bg.date_debut AND w_factures_seances_bg.date_fin AND p_factures_lignes_c.montant_facture > 0 GROUP BY 1 ) subview WHERE subview.no_facture = w_factures_seances_bg.no_facture AND subview.nb_seances > 0 ; UPDATE w_factures_seances_bg SET code_facture = CASE WHEN nb_seances_facturees > 0 THEN '1' WHEN nb_seances = 0 THEN '1' ELSE '0' END, date_facture = CASE WHEN nb_seances_facturees > 0 THEN date_fin WHEN nb_seances = 0 THEN date_fin ELSE '20991231' END, code_vente = CASE WHEN nb_seances_facturees > 0 THEN '1' WHEN nb_seances = 0 THEN '1' ELSE '0' END, date_vente = CASE WHEN nb_seances_facturees > 0 THEN date_fin WHEN nb_seances = 0 THEN date_fin ELSE '20991231' END, mois_vente = to_char(CASE WHEN nb_seances_facturees > 0 THEN date_fin WHEN nb_seances = 0 THEN date_fin ELSE '20991231' END,'YYYMM')::numeric ; UPDATE activite.p_factures_lignes_c SET no_facture = w_factures_seances_bg.no_facture, facture_id = w_factures_seances_bg.oid FROM w_factures_seances_bg WHERE p_factures_lignes_c.no_facture = w_factures_seances_bg.no_facture_original AND p_factures_lignes_c.date_debut BETWEEN w_factures_seances_bg.date_debut AND w_factures_seances_bg.date_fin AND p_factures_lignes_c.no_facture <> w_factures_seances_bg.no_facture ; UPDATE activite.p_factures_lignes_h SET no_facture = w_factures_seances_bg.no_facture, facture_id = w_factures_seances_bg.oid FROM w_factures_seances_bg WHERE p_factures_lignes_h.no_facture = w_factures_seances_bg.no_facture_original AND p_factures_lignes_h.date_debut BETWEEN w_factures_seances_bg.date_debut AND w_factures_seances_bg.date_fin AND p_factures_lignes_h.no_facture <> w_factures_seances_bg.no_facture ; UPDATE w_factures_seances_bg SET montant_facture_c = subview.montant_facture, montant_facture_1_c = subview.montant_facture, montant_comptabilise_budget_global_c = subview.montant_facture FROM ( SELECT w_factures_seances_bg.no_facture, SUM(COALESCE(montant_facture,0)) AS montant_facture FROM w_factures_seances_bg LEFT JOIN activite.p_factures_lignes_c ON p_factures_lignes_c.no_facture = w_factures_seances_bg.no_facture AND p_factures_lignes_c.date_debut BETWEEN w_factures_seances_bg.date_debut AND w_factures_seances_bg.date_fin AND p_factures_lignes_c.montant_facture > 0 GROUP BY 1 ) subview WHERE subview.no_facture = w_factures_seances_bg.no_facture AND w_factures_seances_bg.montant_facture_c <> subview.montant_facture ; DELETE FROM activite.p_factures WHERE no_facture IN (SELECT no_facture_original FROM w_factures_seances_bg) ; ALTER TABLE w_factures_seances_bg DROP COLUMN nb_seances; ALTER TABLE w_factures_seances_bg DROP COLUMN nb_seances_facturees; ALTER TABLE w_factures_seances_bg DROP COLUMN date_seance_debut; ALTER TABLE w_factures_seances_bg DROP COLUMN date_seance_fin; ALTER TABLE w_factures_seances_bg DROP COLUMN no_facture_original; INSERT INTO activite.p_factures SELECT * FROM w_factures_seances_bg ; UPDATE activite.p_factures SET no_facture_reference = p_factures_bg.no_facture, facture_reference_id = p_factures_bg.oid FROM activite.p_factures p_factures_bg JOIN activite.p_sejours ON p_factures_bg.no_sejour = p_sejours.no_sejour AND p_sejours.type_sejour = '5' WHERE p_factures.no_sejour = p_factures_bg.no_sejour AND p_factures.no_facture NOT LIKE '%BG' AND p_factures.no_facture_reference LIKE '%BG' AND p_factures_bg.no_facture LIKE '%BG' AND p_factures.date_fin BETWEEN p_factures_bg.date_debut AND p_factures_bg.date_fin AND p_factures.no_facture_reference <> p_factures_bg.no_facture ; ]]> '1' THEN Array[heure_fin, lieu_id] ELSE NULL END))[2] AS lieu_id, (MAX(Array[heure_fin, lieu_id]))[2] AS lieu_id_avec_absence FROM activite.p_mouvements_sejour JOIN activite.t_lieux ON lieu_id = t_lieux.oid JOIN activite.t_services_facturation On service_facturation_id = t_services_facturation.oid GROUP BY 1,2 HAVING (MAX(CASE WHEN est_absence <> '1' THEN Array[heure_fin, lieu_id] ELSE NULL END))[2] IS DISTINCT FROM (MAX(Array[heure_fin, lieu_id]))[2] ; UPDATE activite.p_factures_lignes_c SET lieu_id = COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence) FROM activite.p_factures, w_mouvements_sejour_lieu_jour WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND p_factures.no_sejour = w_mouvements_sejour_lieu_jour.no_sejour AND p_factures_lignes_c.date_fin = w_mouvements_sejour_lieu_jour.date AND p_factures_lignes_c.lieu_id <> COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence) ; UPDATE activite.p_factures_lignes_h SET lieu_id = COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence) FROM activite.p_factures, w_mouvements_sejour_lieu_jour WHERE p_factures_lignes_h.no_facture = p_factures.no_facture AND p_factures.no_sejour = w_mouvements_sejour_lieu_jour.no_sejour AND p_factures_lignes_h.date_fin = w_mouvements_sejour_lieu_jour.date AND p_factures_lignes_h.lieu_id <> COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence) ; -- Dans le cas des ESPIC les prestations peuvent être facturées en partie sur la facture BG (part AMO) et et partie dans la GAP (part AMC/PATIENT) -- Dans ce cas afin de ne pas doubler le nombre de prestations -> mise à 0 des coefficient (quantités) des prestations venant dans de la GAP si prestation identique venant de la facture BG WITH prestations_importees_pmsi as ( SELECT p_factures.no_facture_reference, t_prestations.oid as prestation_id FROM activite.p_factures_lignes_c JOIN activite.p_factures ON p_factures.no_facture = p_factures_lignes_c.no_facture JOIN activite.p_sejours ON p_sejours.no_sejour = p_factures.no_sejour -- Jointure sur séjour pour récupérer finess JOIN base.t_finess ON t_finess.code = p_sejours.finess -- Jointure sur finess pour limiter l'impact aux espics JOIN activite.t_prestations ON t_prestations.oid = p_factures_lignes_c.prestation_id AND t_prestations.code IN ('PJ', 'FJ', 'SSM', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO') -- filtre sur les prestations souhaitées WHERE p_factures.no_facture = no_facture_reference AND p_factures.no_facture ilike '%BG' -- ne conserver que les factures provenant du PMSI (BG) AND taux_1 < 100 -- Exclure les lignes à 100% BG -> 100% AMO AND type_etablissement IN ('2','3') -- Filtre sur espic GROUP BY 1,2 ) UPDATE activite.p_factures_lignes_c SET coefficient = 0 -- Mettre la quantité à 0 FROM activite.p_factures, prestations_importees_pmsi WHERE 1=1 AND p_factures.no_facture = p_factures_lignes_c.no_facture AND prestations_importees_pmsi.no_facture_reference = p_factures.no_facture_reference AND p_factures_lignes_c.prestation_id = prestations_importees_pmsi.prestation_id -- Si ligne avec prestation identique sur même facture de référence AND p_factures.no_facture NOT LIKE '%BG' -- Ne pas mettre à jour ce qui vient du PMSI AND ((taux_2 > 0 AND taux_2 < 100) OR (taux_0 > 0 AND taux_0 < 100)); -- Seulement si lignes n'est pas à 100% patient/AMC ]]> '1' THEN p_sejours.date_entree ELSE date_debut END) AS date_debut_facture, MAX(CASE WHEN p_sejours.type_sejour = '3' THEN p_sejours.date_sortie WHEN p_sejours.type_sejour IN ('5') AND no_facture_reference LIKE '%BG' THEN date_fin WHEN p_sejours.type_sejour IN ('1','2','5') AND type_t2a = '1' THEN p_sejours.date_sortie WHEN p_sejours.type_sejour IN ('1','2','5') AND avec_facturation_intermediaire <> '1' THEN p_sejours.date_sortie ELSE date_fin END) AS date_fin_facture, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.type_facture ELSE NULL END) AS type_facture, MAX(date_groupage) AS date_groupage, NULL::numeric AS delai_groupage, 0::numeric AS retard_groupage, 0::numeric AS nb_groupe, 0::numeric AS nb_non_groupe, 0::numeric AS nb_calculable, MAX(CASE WHEN no_facture = no_facture_reference THEN GREATEST(p_factures.ghs_id,0) ELSE 0 END) AS ghs_id, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.ghs_bebe1_id ELSE 0 END) AS ghs_bebe1_id, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.ghs_bebe2_id ELSE 0 END) AS ghs_bebe2_id, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.ghs_bebe3_id ELSE 0 END) AS ghs_bebe3_id, MAX(CASE WHEN no_facture = no_facture_reference THEN GREATEST(p_factures.gmt_id,0) ELSE 0 END) AS gmt_id, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.tiers_payant_0_id ELSE 0 END) AS tiers_payant_0_id, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.tiers_payant_1_id ELSE 0 END) AS tiers_payant_1_id, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.tiers_payant_2_id ELSE 0 END) AS tiers_payant_2_id, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.tiers_payant_22_id ELSE 0 END) AS tiers_payant_22_id, MAX(CASE WHEN no_facture = no_facture_reference AND p_factures.code_facture IN ('1', '2') THEN '1' ELSE '0' END) AS code_facture, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.date_facture ELSE '00010101' END) AS date_facture, NULL::numeric AS delai_facture, 0::numeric AS retard_facture, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.code_vente ELSE '0' END) AS code_vente, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.date_vente ELSE '00010101' END) AS date_vente, COUNT(*) AS nb_factures, MAX(CASE WHEN p_sejours.code_sorti <> '1' AND avec_facturation_intermediaire <> '1' THEN 0 WHEN p_factures.type_facture NOT IN ('P', 'G') AND p_factures.code_facture NOT IN ('1','2') THEN 1 ELSE 0 END) AS nb_non_calcules, COALESCE(MAX(CASE WHEN p_sejours.code_sorti <> '1' AND avec_facturation_intermediaire <> '1' THEN 0 WHEN p_factures.type_facture NOT IN ('P', 'G') AND p_factures.no_facture NOT LIKE '%BG' AND p_factures.code_facture NOT IN ('1','2') THEN 1 ELSE 0 END),0) AS nb_non_calcules_horsbg, COALESCE(MAX(CASE WHEN p_sejours.code_sorti <> '1' AND avec_facturation_intermediaire <> '1' THEN 0 WHEN p_factures.type_facture NOT IN ('P', 'G') AND p_factures.no_facture LIKE '%BG' AND p_factures.code_facture NOT IN ('1','2') THEN 1 ELSE 0 END),0) AS nb_non_calcules_bg, SUM(CASE WHEN p_factures.type_facture = '0'::bpchar THEN 0 WHEN p_factures.type_facture = 'P'::bpchar THEN 0 WHEN p_factures.type_facture = 'E'::bpchar THEN 0 WHEN p_factures.type_facture = 'X'::bpchar THEN 0 ELSE 1 END) AS nb_factures_regularisation, SUM(p_factures.nb_rejets) AS nb_rejets, '1'::text AS code_expedie_0, MAX(CASE WHEN no_facture = no_facture_reference AND p_factures.code_expedie_1 = '1' THEN p_factures.code_expedie_1 ELSE '0' END) AS code_expedie_1, MAX(p_factures.code_expedie_2) AS code_expedie_2, MAX(CASE WHEN no_facture = no_facture_reference THEN p_factures.date_expedition ELSE '00010101' END) AS date_expedition, MAX(CASE WHEN p_factures.code_expedie_0 = '1' AND p_factures.date_expedition_0 < '20991231' THEN p_factures.date_expedition_0 ELSE '00010101' END) AS date_expedition_0, MAX(CASE WHEN no_facture = no_facture_reference AND p_factures.code_expedie_1 = '1' THEN p_factures.date_expedition_1 ELSE '00010101' END) AS date_expedition_1, MAX(CASE WHEN p_factures.code_expedie_2 = '1' AND p_factures.date_expedition_2 < '20991231' THEN p_factures.date_expedition_2 ELSE '00010101' END) AS date_expedition_2, MAX(CASE WHEN p_factures.code_expedie_0 = '1' AND p_factures.date_expedition_0 < '20991231' THEN no_bordereau_0 ELSE '' END) AS no_bordereau_0, MAX(CASE WHEN no_facture = no_facture_reference AND code_expedie_1 = '1' THEN no_bordereau_1 ELSE '' END) AS no_bordereau_1, MAX(CASE WHEN p_factures.code_expedie_2 = '1' AND p_factures.date_expedition_2 < '20991231' THEN no_bordereau_2 ELSE '' END) AS no_bordereau_2, NULL::numeric AS delai_expedition, NULL::numeric AS delai_expedition_0, NULL::numeric AS delai_expedition_1, NULL::numeric AS delai_expedition_2, 0::numeric AS nb_non_expedie, 0::numeric AS nb_non_expedie_c, 0::numeric AS nb_non_expedie_h, 0::numeric AS nb_non_expedie_0, 0::numeric AS nb_non_expedie_0_c, 0::numeric AS nb_non_expedie_0_h, 0::numeric AS nb_non_expedie_1, 0::numeric AS nb_non_expedie_1_c, 0::numeric AS nb_non_expedie_1_h, 0::numeric AS nb_non_expedie_2, 0::numeric AS nb_non_expedie_2_c, 0::numeric AS nb_non_expedie_2_h, SUM(p_factures.montant_facture_c + p_factures.montant_facture_h) AS montant_facture, SUM(p_factures.montant_facture_c) AS montant_facture_c, SUM(p_factures.montant_facture_h) AS montant_facture_h, SUM(p_factures.montant_facture_0_c + p_factures.montant_facture_0_h) AS montant_facture_0, SUM(p_factures.montant_facture_0_c) AS montant_facture_0_c, SUM(p_factures.montant_facture_0_h) AS montant_facture_0_h, SUM(p_factures.montant_facture_1_c + p_factures.montant_facture_1_h) AS montant_facture_1, SUM(p_factures.montant_facture_1_c) AS montant_facture_1_c, SUM(p_factures.montant_facture_1_h) AS montant_facture_1_h, SUM(p_factures.montant_facture_2_c + p_factures.montant_facture_2_h + p_factures.montant_facture_22_c + p_factures.montant_facture_22_h) AS montant_facture_2, SUM(p_factures.montant_facture_2_c + p_factures.montant_facture_22_c) AS montant_facture_2_c, SUM(p_factures.montant_facture_2_h + p_factures.montant_facture_22_h) AS montant_facture_2_h, SUM(p_factures.montant_facture_c_actes_inclus_dans_sejour) AS montant_facture_c_actes_inclus_dans_sejour, SUM(p_factures.montant_facture_h_actes_inclus_dans_sejour) AS montant_facture_h_actes_inclus_dans_sejour, SUM(p_factures.montant_encours_c + p_factures.montant_encours_h) AS montant_encours, SUM(p_factures.montant_encours_c) AS montant_encours_c, SUM(p_factures.montant_encours_h) AS montant_encours_h, SUM(p_factures.montant_encours_0_c + p_factures.montant_encours_0_h) AS montant_encours_0, SUM(p_factures.montant_encours_0_c) AS montant_encours_0_c, SUM(p_factures.montant_encours_0_h) AS montant_encours_0_h, SUM(p_factures.montant_encours_1_c + p_factures.montant_encours_1_h) AS montant_encours_1, SUM(p_factures.montant_encours_1_c) AS montant_encours_1_c, SUM(p_factures.montant_encours_1_h) AS montant_encours_1_h, SUM(p_factures.montant_encours_2_c + p_factures.montant_encours_2_h + p_factures.montant_encours_22_c + p_factures.montant_encours_22_h) AS montant_encours_2, SUM(p_factures.montant_encours_2_c + p_factures.montant_encours_22_c) AS montant_encours_2_c, SUM(p_factures.montant_encours_2_h + p_factures.montant_encours_22_h) AS montant_encours_2_h, SUM(p_factures.montant_comptabilise_c + p_factures.montant_comptabilise_h) AS montant_comptabilise, SUM(p_factures.montant_comptabilise_c) AS montant_comptabilise_c, SUM(p_factures.montant_comptabilise_h) AS montant_comptabilise_h, SUM(p_factures.montant_comptabilise_0_c + p_factures.montant_comptabilise_0_h) AS montant_comptabilise_0, SUM(p_factures.montant_comptabilise_0_c) AS montant_comptabilise_0_c, SUM(p_factures.montant_comptabilise_0_h) AS montant_comptabilise_0_h, SUM(p_factures.montant_comptabilise_1_c + p_factures.montant_comptabilise_1_h) AS montant_comptabilise_1, SUM(p_factures.montant_comptabilise_1_c) AS montant_comptabilise_1_c, SUM(p_factures.montant_comptabilise_1_h) AS montant_comptabilise_1_h, SUM(p_factures.montant_comptabilise_2_c + p_factures.montant_comptabilise_2_h + p_factures.montant_comptabilise_22_c + p_factures.montant_comptabilise_22_h) AS montant_comptabilise_2, SUM(p_factures.montant_comptabilise_2_c + p_factures.montant_comptabilise_22_c) AS montant_comptabilise_2_c, SUM(p_factures.montant_comptabilise_2_h + p_factures.montant_comptabilise_22_h) AS montant_comptabilise_2_h, SUM(p_factures.montant_comptabilise_budget_global_c) AS montant_comptabilise_budget_global_c, SUM(p_factures.montant_regle_c + p_factures.montant_regle_h) AS montant_regle, SUM(p_factures.montant_regle_c) AS montant_regle_c, SUM(p_factures.montant_regle_h) AS montant_regle_h, SUM(p_factures.montant_regle_0_c + p_factures.montant_regle_0_h) AS montant_regle_0, SUM(p_factures.montant_regle_0_c) AS montant_regle_0_c, SUM(p_factures.montant_regle_0_h) AS montant_regle_0_h, SUM(p_factures.montant_regle_1_c + p_factures.montant_regle_1_h) AS montant_regle_1, SUM(p_factures.montant_regle_1_c) AS montant_regle_1_c, SUM(p_factures.montant_regle_1_h) AS montant_regle_1_h, SUM(p_factures.montant_regle_2_c + p_factures.montant_regle_2_h + p_factures.montant_regle_22_c + p_factures.montant_regle_22_h) AS montant_regle_2, SUM(p_factures.montant_regle_2_c + p_factures.montant_regle_22_c) AS montant_regle_2_c, SUM(p_factures.montant_regle_2_h + p_factures.montant_regle_22_h) AS montant_regle_2_h, COALESCE( CASE WHEN SUM(p_factures.montant_regle_c) >= SUM(p_factures.montant_comptabilise_c) AND SUM(p_factures.montant_regle_h) >= SUM(p_factures.montant_comptabilise_h) THEN MAX(CASE WHEN p_factures.date_solde < '20991231' AND p_factures.date_solde > '00010101' THEN p_factures.date_solde ELSE NULL END) ELSE NULL END ,'20991231') AS date_solde, COALESCE( CASE WHEN SUM(p_factures.montant_regle_c) >= SUM(p_factures.montant_comptabilise_c) THEN MAX(CASE WHEN p_factures.date_solde_c < '20991231' AND p_factures.date_solde_c > '00010101' THEN p_factures.date_solde_c ELSE NULL END) ELSE NULL END ,'20991231') AS date_solde_c, COALESCE( CASE WHEN SUM(p_factures.montant_regle_h) >= SUM(p_factures.montant_comptabilise_h) THEN MAX(CASE WHEN p_factures.date_solde_h < '20991231' AND p_factures.date_solde_h > '00010101' THEN p_factures.date_solde_h ELSE NULL END) ELSE NULL END ,'20991231') AS date_solde_h, NULL::date AS date_solde_0, COALESCE( CASE WHEN SUM(p_factures.montant_regle_0_c) >= SUM(p_factures.montant_comptabilise_0_c) THEN MAX(CASE WHEN p_factures.date_solde_0_c < '20991231' AND p_factures.date_solde_0_c > '00010101' THEN p_factures.date_solde_0_c ELSE NULL END) ELSE NULL END ,'20991231') AS date_solde_0_c, COALESCE( CASE WHEN SUM(p_factures.montant_regle_0_h) >= SUM(p_factures.montant_comptabilise_0_h) THEN MAX(CASE WHEN p_factures.date_solde_0_h < '20991231' AND p_factures.date_solde_0_h > '00010101' THEN p_factures.date_solde_0_h ELSE NULL END) ELSE NULL END ,'20991231') AS date_solde_0_h, NULL::date AS date_solde_1, COALESCE( CASE WHEN SUM(p_factures.montant_regle_1_c) >= SUM(p_factures.montant_comptabilise_1_c) THEN MAX(CASE WHEN p_factures.date_solde_1_c < '20991231' AND p_factures.date_solde_1_c > '00010101' THEN p_factures.date_solde_1_c ELSE NULL END) ELSE NULL END ,'20991231') AS date_solde_1_c, COALESCE( CASE WHEN SUM(p_factures.montant_regle_1_h) >= SUM(p_factures.montant_comptabilise_1_h) THEN MAX(CASE WHEN p_factures.date_solde_1_h < '20991231' AND p_factures.date_solde_1_h > '00010101' THEN p_factures.date_solde_1_h ELSE NULL END) ELSE NULL END ,'20991231') AS date_solde_1_h, NULL::date AS date_solde_2, COALESCE( CASE WHEN SUM(p_factures.montant_regle_2_c) >= SUM(p_factures.montant_comptabilise_2_c) THEN MAX(CASE WHEN p_factures.date_solde_2_c < '20991231' AND p_factures.date_solde_2_c > '00010101' THEN p_factures.date_solde_2_c ELSE NULL END) ELSE NULL END ,'20991231') AS date_solde_2_c, COALESCE( CASE WHEN SUM(p_factures.montant_regle_2_h) >= SUM(p_factures.montant_comptabilise_2_h) THEN MAX(CASE WHEN p_factures.date_solde_2_h < '20991231' AND p_factures.date_solde_2_h > '00010101' THEN p_factures.date_solde_2_h ELSE NULL END) ELSE NULL END ,'20991231') AS date_solde_2_h, 0::numeric AS delai_solde, 0::numeric AS delai_solde_c, 0::numeric AS delai_solde_h, 0::numeric AS delai_solde_0, 0::numeric AS delai_solde_0_c, 0::numeric AS delai_solde_0_h, 0::numeric AS delai_solde_1, 0::numeric AS delai_solde_1_c, 0::numeric AS delai_solde_1_h, 0::numeric AS delai_solde_2, 0::numeric AS delai_solde_2_c, 0::numeric AS delai_solde_2_h, 0::numeric AS nb_non_solde, 0::numeric AS nb_non_solde_c, 0::numeric AS nb_non_solde_h, 0::numeric AS nb_non_solde_0, 0::numeric AS nb_non_solde_0_c, 0::numeric AS nb_non_solde_0_h, 0::numeric AS nb_non_solde_1, 0::numeric AS nb_non_solde_1_c, 0::numeric AS nb_non_solde_1_h, 0::numeric AS nb_non_solde_2, 0::numeric AS nb_non_solde_2_c, 0::numeric AS nb_non_solde_2_h, MAX(CASE WHEN p_factures.montant_comptabilise_c <> p_factures.montant_regle_c OR p_factures.montant_comptabilise_h <> p_factures.montant_regle_h THEN 1 ELSE 0 END) AS nb_non_cloture, MAX(CASE WHEN p_factures.montant_comptabilise_c <> p_factures.montant_regle_c THEN 1 ELSE 0 END) AS nb_non_cloture_c, MAX(CASE WHEN p_factures.montant_comptabilise_h <> p_factures.montant_regle_h THEN 1 ELSE 0 END) AS nb_non_cloture_h, MAX(CASE WHEN p_factures.montant_comptabilise_0_c <> p_factures.montant_regle_0_c OR p_factures.montant_comptabilise_0_h <> p_factures.montant_regle_0_h THEN 1 ELSE 0 END) AS nb_non_cloture_0, MAX(CASE WHEN p_factures.montant_comptabilise_0_c <> p_factures.montant_regle_0_c THEN 1 ELSE 0 END) AS nb_non_cloture_0_c, MAX(CASE WHEN p_factures.montant_comptabilise_0_h <> p_factures.montant_regle_0_h THEN 1 ELSE 0 END) AS nb_non_cloture_0_h, MAX(CASE WHEN p_factures.montant_comptabilise_1_c <> p_factures.montant_regle_1_c OR p_factures.montant_comptabilise_1_h <> p_factures.montant_regle_1_h THEN 1 ELSE 0 END) AS nb_non_cloture_1, MAX(CASE WHEN p_factures.montant_comptabilise_1_c <> p_factures.montant_regle_1_c THEN 1 ELSE 0 END) AS nb_non_cloture_1_c, MAX(CASE WHEN p_factures.montant_comptabilise_1_h <> p_factures.montant_regle_1_h THEN 1 ELSE 0 END) AS nb_non_cloture_1_h, MAX(CASE WHEN p_factures.montant_comptabilise_2_c <> p_factures.montant_regle_2_c OR p_factures.montant_comptabilise_2_h <> p_factures.montant_regle_2_h OR p_factures.montant_comptabilise_22_c <> p_factures.montant_regle_22_c OR p_factures.montant_comptabilise_22_h <> p_factures.montant_regle_22_h THEN 1 ELSE 0 END) AS nb_non_cloture_2, MAX(CASE WHEN p_factures.montant_comptabilise_2_c <> p_factures.montant_regle_2_c OR p_factures.montant_comptabilise_22_c <> p_factures.montant_regle_22_c THEN 1 ELSE 0 END) AS nb_non_cloture_2_c, MAX(CASE WHEN p_factures.montant_comptabilise_2_h <> p_factures.montant_regle_2_h OR p_factures.montant_comptabilise_22_h <> p_factures.montant_regle_22_h THEN 1 ELSE 0 END) AS nb_non_cloture_2_h, 0::numeric AS nb_rubriques_c, 0::numeric AS nb_rubriques_h FROM activite.p_sejours JOIN activite.p_factures ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite.t_lieux ON p_sejours.lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE t_services_facturation.est_sans_facturation IS DISTINCT FROM '1' AND code_prevu <> 1 GROUP BY 1,2,3,4,5,6,7,8,9; -- Cas des seances avec un séjour sur l'année (découpées en mois au GHM Grenoble) UPDATE w_factures_reference SET date_debut_facture = p_factures.date_debut, date_fin_facture = p_factures.date_fin FROM activite.p_factures JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour WHERE w_factures_reference.no_facture_reference = p_factures.no_facture AND w_factures_reference.no_facture_reference LIKE '%BG' AND p_sejours.type_sejour = '5' ; -- Cas des séjours SSR avec plusieurs factures de references 'recuperationde la bonne date de debut de facture' UPDATE w_factures_reference SET date_debut_facture = p_factures.date_debut, date_fin_facture = p_factures.date_fin FROM activite.p_factures JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour WHERE w_factures_reference.no_facture_reference = p_factures.no_facture AND type_t2a = '2' ; -- comptage des rubriques dans les lignes clinique avant généaration des lignes cliniques 0ETS WITH w_fac AS ( SELECT p_factures.no_sejour, COUNT(DISTINCT p_factures_lignes_c.rubrique_facturation_id) as nb_rubriques_c FROM activite.p_factures JOIN activite.p_factures_lignes_c ON p_factures_lignes_c.no_facture = p_factures.no_facture GROUP BY 1 ) UPDATE w_factures_reference SET nb_rubriques_c = w_fac.nb_rubriques_c FROM w_fac WHERE w_fac.no_sejour = w_factures_reference.no_sejour; -- idem avec les lignes honoraires WITH w_fac AS ( SELECT p_factures.no_sejour, COUNT(DISTINCT p_factures_lignes_h.rubrique_facturation_id) as nb_rubriques_h FROM activite.p_factures JOIN activite.p_factures_lignes_h ON p_factures_lignes_h.no_facture = p_factures.no_facture GROUP BY 1 ) UPDATE w_factures_reference SET nb_rubriques_h = w_fac.nb_rubriques_h FROM w_fac WHERE w_fac.no_sejour = w_factures_reference.no_sejour; -- Mise à jour des dates UPDATE w_factures_reference SET date_facture = date_fin_facture WHERE date_facture < date_fin_facture; UPDATE w_factures_reference SET date_groupage = date_facture WHERE date_groupage < date_sortie AND date_groupage <> '20991231' AND code_sorti = '1' AND ghs_id <> 0; UPDATE w_factures_reference SET date_groupage = date_facture WHERE date_groupage > date_facture AND date_groupage <> '20991231' AND ghs_id <> 0; UPDATE w_factures_reference SET date_facture = '20991231' WHERE nb_non_calcules = 1 AND date_facture <> '20991231'; UPDATE w_factures_reference SET date_expedition = CASE WHEN date_expedition < '15000101' THEN '20991231' ELSE date_expedition END, date_expedition_0 = CASE WHEN date_expedition_0 < '15000101' THEN '20991231' ELSE date_expedition_0 END, date_expedition_1 = CASE WHEN date_expedition_1 < '15000101' THEN '20991231' ELSE date_expedition_1 END, date_expedition_2 = CASE WHEN date_expedition_2 < '15000101' THEN '20991231' ELSE date_expedition_2 END, date_solde = CASE WHEN date_solde < '15000101' THEN '20991231' ELSE date_solde END, date_solde_c = CASE WHEN date_solde_c < '15000101' THEN '20991231' ELSE date_solde_c END, date_solde_0_c = CASE WHEN date_solde_0_c < '15000101' THEN '20991231' ELSE date_solde_0_c END, date_solde_1_c = CASE WHEN date_solde_1_c < '15000101' THEN '20991231' ELSE date_solde_1_c END, date_solde_2_c = CASE WHEN date_solde_2_c < '15000101' THEN '20991231' ELSE date_solde_2_c END, date_solde_h = CASE WHEN date_solde_h < '15000101' THEN '20991231' ELSE date_solde_h END, date_solde_0_h = CASE WHEN date_solde_0_h < '15000101' THEN '20991231' ELSE date_solde_0_h END, date_solde_1_h = CASE WHEN date_solde_1_h < '15000101' THEN '20991231' ELSE date_solde_1_h END, date_solde_2_h = CASE WHEN date_solde_2_h < '15000101' THEN '20991231' ELSE date_solde_2_h END WHERE ( date_expedition < '15000101' OR date_expedition_0 < '15000101' OR date_expedition_1 < '15000101' OR date_expedition_2 < '15000101' OR date_solde < '15000101' OR date_solde_c < '15000101' OR date_solde_0_c < '15000101' OR date_solde_1_c < '15000101' OR date_solde_2_c < '15000101' OR date_solde_h < '15000101' OR date_solde_0_h < '15000101' OR date_solde_1_h < '15000101' OR date_solde_2_h < '15000101' ); UPDATE w_factures_reference SET date_expedition = CASE WHEN date_expedition < date_facture THEN date_facture ELSE date_expedition END, date_expedition_0 = CASE WHEN date_expedition_0 < date_facture AND code_expedie_0 = '1' THEN date_facture ELSE date_expedition_0 END, date_expedition_1 = CASE WHEN date_expedition_1 < date_facture AND code_expedie_1 = '1' THEN date_facture ELSE date_expedition_1 END, date_expedition_2 = CASE WHEN date_expedition_2 < date_facture AND code_expedie_2 = '1' THEN date_facture ELSE date_expedition_2 END WHERE date_expedition < date_facture OR date_expedition_0 < date_facture AND code_expedie_0 = '1' OR date_expedition_1 < date_facture AND code_expedie_1 = '1' OR date_expedition_2 < date_facture AND code_expedie_2 = '1' ; -- Ajustement dates de solde DROP TABLE IF EXISTS w_correction_date_c; CREATE TEMP TABLE w_correction_date_c AS SELECT p_factures.no_facture_reference, p_factures.no_sejour, MAX(p_factures_reference.date_solde_0_c) AS date_solde_0_c_old, MAX(p_factures_reference.date_solde_1_c) AS date_solde_1_c_old, MAX(p_factures_reference.date_solde_2_c) AS date_solde_2_c_old, MAX(CASE WHEN p_factures_reference.montant_comptabilise_0_c = 0 THEN '00010101' WHEN p_factures_reference.montant_comptabilise_0_c = p_factures_reference.montant_regle_0_c AND p_factures_reference.date_solde_0_c = '20991231' AND p_factures_reference.montant_comptabilise_0_c <> 0 AND p_factures_soldes_c.montant_regle_0 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_0_c_new, MAX(CASE WHEN p_factures_reference.montant_comptabilise_1_c = 0 THEN '00010101' WHEN p_factures_reference.montant_comptabilise_1_c = p_factures_reference.montant_regle_1_c AND p_factures_reference.date_solde_1_c = '20991231' AND p_factures_reference.montant_comptabilise_1_c <> 0 AND p_factures_reference.date_solde_1_c = '20991231' AND p_factures_soldes_c.montant_regle_1 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_1_c_new, MAX(CASE WHEN p_factures_reference.montant_comptabilise_2_c = 0 THEN '00010101' WHEN p_factures_reference.montant_comptabilise_2_c = p_factures_reference.montant_regle_2_c AND p_factures_reference.date_solde_2_c = '20991231' AND p_factures_reference.montant_comptabilise_2_c <> 0 AND p_factures_reference.date_solde_2_c = '20991231' AND p_factures_soldes_c.montant_regle_2 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_2_c_new FROM activite.p_factures JOIN w_factures_reference p_factures_reference ON p_factures.no_facture_reference = p_factures_reference.no_facture_reference LEFT JOIN activite.p_factures_soldes_c ON p_factures.no_facture = p_factures_soldes_c.no_facture AND p_factures_soldes_c.montant_regle <> 0 GROUP BY 1,2 ; UPDATE w_factures_reference p_factures_reference SET date_solde_c = CASE WHEN GREATEST(COALESCE(date_solde_0_c_new,date_solde_0_c),COALESCE(date_solde_1_c_new,date_solde_1_c),COALESCE(date_solde_2_c_new,date_solde_2_c)) <> '00010101' THEN GREATEST(COALESCE(date_solde_0_c_new,date_solde_0_c),COALESCE(date_solde_1_c_new,date_solde_1_c),COALESCE(date_solde_2_c_new,date_solde_2_c)) ELSE '20991231' END, date_solde_0_c = CASE WHEN COALESCE(date_solde_0_c_new,date_solde_0_c) <> '00010101' THEN COALESCE(date_solde_0_c_new,date_solde_0_c) ELSE '20991231' END, date_solde_1_c = CASE WHEN COALESCE(date_solde_1_c_new,date_solde_1_c) <> '00010101' THEN COALESCE(date_solde_1_c_new,date_solde_1_c) ELSE '20991231' END, date_solde_2_c = CASE WHEN COALESCE(date_solde_2_c_new,date_solde_2_c) <> '00010101' THEN COALESCE(date_solde_2_c_new,date_solde_2_c) ELSE '20991231' END FROM w_correction_date_c WHERE p_factures_reference.no_facture_reference = w_correction_date_c.no_facture_reference AND ( date_solde_c <> CASE WHEN GREATEST(COALESCE(date_solde_0_c_new,date_solde_0_c),COALESCE(date_solde_1_c_new,date_solde_1_c),COALESCE(date_solde_2_c_new,date_solde_2_c)) <> '00010101' THEN GREATEST(COALESCE(date_solde_0_c_new,date_solde_0_c),COALESCE(date_solde_1_c_new,date_solde_1_c),COALESCE(date_solde_2_c_new,date_solde_2_c)) ELSE '20991231' END OR date_solde_0_c <> CASE WHEN COALESCE(date_solde_0_c_new,date_solde_0_c) <> '00010101' THEN COALESCE(date_solde_0_c_new,date_solde_0_c) ELSE '20991231' END OR date_solde_1_c <> CASE WHEN COALESCE(date_solde_1_c_new,date_solde_1_c) <> '00010101' THEN COALESCE(date_solde_1_c_new,date_solde_1_c) ELSE '20991231' END OR date_solde_2_c <> CASE WHEN COALESCE(date_solde_2_c_new,date_solde_2_c) <> '00010101' THEN COALESCE(date_solde_2_c_new,date_solde_2_c) ELSE '20991231' END ) ; -- Ajustement dates de solde DROP TABLE IF EXISTS w_correction_date_h; CREATE TEMP TABLE w_correction_date_h AS SELECT p_factures.no_facture_reference, p_factures.no_sejour, MAX(p_factures_reference.date_solde_0_h) AS date_solde_0_h_old, MAX(p_factures_reference.date_solde_1_h) AS date_solde_1_h_old, MAX(p_factures_reference.date_solde_2_h) AS date_solde_2_h_old, MAX(CASE WHEN p_factures_reference.montant_comptabilise_0_h = 0 THEN '00010101' WHEN p_factures_reference.montant_comptabilise_0_h = p_factures_reference.montant_regle_0_h AND p_factures_reference.date_solde_0_h = '20991231' AND p_factures_reference.montant_comptabilise_0_h <> 0 AND p_factures_soldes_h.montant_regle_0 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_0_h_new, MAX(CASE WHEN p_factures_reference.montant_comptabilise_1_h = 0 THEN '00010101' WHEN p_factures_reference.montant_comptabilise_1_h = p_factures_reference.montant_regle_1_h AND p_factures_reference.date_solde_1_h = '20991231' AND p_factures_reference.montant_comptabilise_1_h <> 0 AND p_factures_reference.date_solde_1_h = '20991231' AND p_factures_soldes_h.montant_regle_1 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_1_h_new, MAX(CASE WHEN p_factures_reference.montant_comptabilise_2_h = 0 THEN '00010101' WHEN p_factures_reference.montant_comptabilise_2_h = p_factures_reference.montant_regle_2_h AND p_factures_reference.date_solde_2_h = '20991231' AND p_factures_reference.montant_comptabilise_2_h <> 0 AND p_factures_reference.date_solde_2_h = '20991231' AND p_factures_soldes_h.montant_regle_2 <> 0 THEN date_comptable ELSE NULL END) AS date_solde_2_h_new FROM activite.p_factures JOIN w_factures_reference p_factures_reference ON p_factures.no_facture_reference = p_factures_reference.no_facture_reference LEFT JOIN activite.p_factures_soldes_h ON p_factures.no_facture = p_factures_soldes_h.no_facture AND p_factures_soldes_h.montant_regle <> 0 GROUP BY 1,2 ; UPDATE w_factures_reference p_factures_reference SET date_solde_h = CASE WHEN GREATEST(COALESCE(date_solde_0_h_new,date_solde_0_h),COALESCE(date_solde_1_h_new,date_solde_1_h),COALESCE(date_solde_2_h_new,date_solde_2_h)) <> '00010101' THEN GREATEST(COALESCE(date_solde_0_h_new,date_solde_0_h),COALESCE(date_solde_1_h_new,date_solde_1_h),COALESCE(date_solde_2_h_new,date_solde_2_h)) ELSE '20991231' END, date_solde_0_h = CASE WHEN COALESCE(date_solde_0_h_new,date_solde_0_h) <> '00010101' THEN COALESCE(date_solde_0_h_new,date_solde_0_h) ELSE '20991231' END, date_solde_1_h = CASE WHEN COALESCE(date_solde_1_h_new,date_solde_1_h) <> '00010101' THEN COALESCE(date_solde_1_h_new,date_solde_1_h) ELSE '20991231' END, date_solde_2_h = CASE WHEN COALESCE(date_solde_2_h_new,date_solde_2_h) <> '00010101' THEN COALESCE(date_solde_2_h_new,date_solde_2_h) ELSE '20991231' END FROM w_correction_date_h WHERE p_factures_reference.no_facture_reference = w_correction_date_h.no_facture_reference AND ( date_solde_h <> CASE WHEN GREATEST(COALESCE(date_solde_0_h_new,date_solde_0_h),COALESCE(date_solde_1_h_new,date_solde_1_h),COALESCE(date_solde_2_h_new,date_solde_2_h)) <> '00010101' THEN GREATEST(COALESCE(date_solde_0_h_new,date_solde_0_h),COALESCE(date_solde_1_h_new,date_solde_1_h),COALESCE(date_solde_2_h_new,date_solde_2_h)) ELSE '20991231' END OR date_solde_0_h <> CASE WHEN COALESCE(date_solde_0_h_new,date_solde_0_h) <> '00010101' THEN COALESCE(date_solde_0_h_new,date_solde_0_h) ELSE '20991231' END OR date_solde_1_h <> CASE WHEN COALESCE(date_solde_1_h_new,date_solde_1_h) <> '00010101' THEN COALESCE(date_solde_1_h_new,date_solde_1_h) ELSE '20991231' END OR date_solde_2_h <> CASE WHEN COALESCE(date_solde_2_h_new,date_solde_2_h) <> '00010101' THEN COALESCE(date_solde_2_h_new,date_solde_2_h) ELSE '20991231' END ) ; UPDATE w_factures_reference SET date_solde_0 = COALESCE(GREATEST(CASE WHEN montant_facture_0_c <> 0 THEN date_solde_0_c ELSE NULL END,CASE WHEN montant_facture_0_h <> 0 THEN date_solde_0_h ELSE NULL END),'20991231'), date_solde_1 = COALESCE(GREATEST(CASE WHEN montant_facture_1_c <> 0 THEN date_solde_1_c ELSE NULL END,CASE WHEN montant_facture_1_h <> 0 THEN date_solde_1_h ELSE NULL END),'20991231'), date_solde_2 = COALESCE(GREATEST(CASE WHEN montant_facture_2_c <> 0 THEN date_solde_2_c ELSE NULL END,CASE WHEN montant_facture_2_h <> 0 THEN date_solde_2_h ELSE NULL END),'20991231'); UPDATE w_factures_reference SET nb_groupe = CASE WHEN type_t2a = '1' AND type_sejour IN ('1','2','5') AND ghs_id > 0 THEN 1 ELSE 0 END, nb_non_groupe = CASE WHEN type_t2a = '1' AND ghs_id = 0 AND nb_non_calcules = 1 THEN 1 ELSE 0 END, nb_calculable = CASE WHEN type_t2a = '1' AND ghs_id > 0 AND nb_non_calcules = 1 THEN 1 WHEN type_t2a <> '1' AND nb_non_calcules = 1 THEN 1 ELSE 0 END, nb_non_expedie = CASE WHEN montant_comptabilise_0 > montant_regle_0 AND code_expedie_0 <> '1' THEN 1 WHEN montant_comptabilise_1 > montant_regle_1 AND code_expedie_1 <> '1' THEN 1 WHEN montant_comptabilise_2 > montant_regle_2 AND code_expedie_2 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_c = CASE WHEN montant_comptabilise_0_c > montant_regle_0_c AND code_expedie_0 <> '1' THEN 1 WHEN montant_comptabilise_1_c > montant_regle_1_c AND code_expedie_1 <> '1' THEN 1 WHEN montant_comptabilise_2_c > montant_regle_2_c AND code_expedie_2 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_h = CASE WHEN montant_comptabilise_0_h > montant_regle_0_h AND code_expedie_0 <> '1' THEN 1 WHEN montant_comptabilise_1_h > montant_regle_1_h AND code_expedie_1 <> '1' THEN 1 WHEN montant_comptabilise_2_h > montant_regle_2_h AND code_expedie_2 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_0 = CASE WHEN montant_comptabilise_0 > montant_regle_0 AND code_expedie_0 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_0_c = CASE WHEN montant_comptabilise_0_c > montant_regle_0_c AND code_expedie_0 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_0_h = CASE WHEN montant_comptabilise_0_h > montant_regle_0_h AND code_expedie_0 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_1 = CASE WHEN montant_comptabilise_1 > montant_regle_1 AND code_expedie_1 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_1_c = CASE WHEN montant_comptabilise_1_c > montant_regle_1_c AND code_expedie_1 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_1_h = CASE WHEN montant_comptabilise_1_h > montant_regle_1_h AND code_expedie_1 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_2 = CASE WHEN montant_comptabilise_2 > montant_regle_2 AND code_expedie_2 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_2_c = CASE WHEN montant_comptabilise_2_c > montant_regle_2_c AND code_expedie_2 <> '1' THEN 1 ELSE 0 END, nb_non_expedie_2_h = CASE WHEN montant_comptabilise_2_h > montant_regle_2_h AND code_expedie_2 <> '1' THEN 1 ELSE 0 END ; UPDATE w_factures_reference SET delai_groupage = CASE WHEN type_t2a = '1' AND ghs_id > 0 AND date_groupage <> '2099-12-31' AND code_sorti = '1' THEN date_groupage - date_sortie ELSE NULL END, delai_facture = CASE WHEN date_facture <> '2099-12-31' THEN date_facture - date_fin_facture ELSE NULL END, delai_expedition = CASE WHEN montant_facture_c + montant_facture_c <> 0 AND date_expedition <> '2099-12-31' THEN date_expedition - date_fin_facture ELSE NULL END, delai_expedition_0 = CASE WHEN montant_facture_0_c + montant_facture_0_h <> 0 AND date_expedition_0 <> '2099-12-31'THEN date_expedition_0 - date_fin_facture ELSE NULL END, delai_expedition_1 = CASE WHEN montant_facture_1_c + montant_facture_1_h <> 0 AND date_expedition_1 <> '2099-12-31'THEN date_expedition_1 - date_fin_facture ELSE NULL END, delai_expedition_2 = CASE WHEN montant_facture_2_c + montant_facture_2_h <> 0 AND date_expedition_2 <> '2099-12-31'THEN date_expedition_2 - date_fin_facture ELSE NULL END, delai_solde = CASE WHEN montant_comptabilise_c + montant_comptabilise_h <> 0 AND date_solde <> '2099-12-31' THEN date_solde - date_fin_facture ELSE NULL END, delai_solde_c = CASE WHEN montant_comptabilise_c <> 0 AND date_solde_c <> '2099-12-31' THEN date_solde_c - date_fin_facture ELSE NULL END, delai_solde_h = CASE WHEN montant_comptabilise_h <> 0 AND date_solde_h <> '2099-12-31' THEN date_solde_h - date_fin_facture ELSE NULL END, delai_solde_0 = CASE WHEN montant_comptabilise_0 <> 0 AND date_solde_0 <> '2099-12-31' THEN date_solde_0 - date_fin_facture ELSE NULL END, delai_solde_0_c = CASE WHEN montant_comptabilise_0_c <> 0 AND date_solde_0_c <> '2099-12-31' THEN date_solde_0_c - date_fin_facture ELSE NULL END, delai_solde_0_h = CASE WHEN montant_comptabilise_0_h <> 0 AND date_solde_0_h <> '2099-12-31' THEN date_solde_0_h - date_fin_facture ELSE NULL END, delai_solde_1 = CASE WHEN montant_comptabilise_1 <> 0 AND date_solde_1 <> '2099-12-31' THEN date_solde_1 - date_fin_facture ELSE NULL END, delai_solde_1_c = CASE WHEN montant_comptabilise_1_c <> 0 AND date_solde_1_c <> '2099-12-31' THEN date_solde_1_c - date_fin_facture ELSE NULL END, delai_solde_1_h = CASE WHEN montant_comptabilise_1_h <> 0 AND date_solde_1_h <> '2099-12-31' THEN date_solde_1_h - date_fin_facture ELSE NULL END, delai_solde_2 = CASE WHEN montant_comptabilise_2 <> 0 AND date_solde_2 <> '2099-12-31' THEN date_solde_2 - date_fin_facture ELSE NULL END, delai_solde_2_c = CASE WHEN montant_comptabilise_2_c <> 0 AND date_solde_2_c <> '2099-12-31' THEN date_solde_2_c - date_fin_facture ELSE NULL END, delai_solde_2_h = CASE WHEN montant_comptabilise_2_h <> 0 AND date_solde_2_h <> '2099-12-31' THEN date_solde_2_h - date_fin_facture ELSE NULL END, nb_non_solde = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_0_c <> montant_regle_0_c THEN 1 WHEN montant_comptabilise_0_h <> montant_regle_0_h THEN 1 WHEN montant_comptabilise_1_c <> montant_regle_1_c THEN 1 WHEN montant_comptabilise_1_h <> montant_regle_1_h THEN 1 WHEN montant_comptabilise_2_c <> montant_regle_2_c THEN 1 WHEN montant_comptabilise_2_h <> montant_regle_2_h THEN 1 ELSE 0 END, nb_non_solde_c = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_0_c <> montant_regle_0_c THEN 1 WHEN montant_comptabilise_1_c <> montant_regle_1_c THEN 1 WHEN montant_comptabilise_2_c <> montant_regle_2_c THEN 1 ELSE 0 END, nb_non_solde_h = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_0_h <> montant_regle_0_h THEN 1 WHEN montant_comptabilise_1_h <> montant_regle_1_h THEN 1 WHEN montant_comptabilise_2_h <> montant_regle_2_h THEN 1 ELSE 0 END, nb_non_solde_0 = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_0_c <> montant_regle_0_c THEN 1 WHEN montant_comptabilise_0_h <> montant_regle_0_h THEN 1 ELSE 0 END, nb_non_solde_0_c = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_0_c <> montant_regle_0_c THEN 1 ELSE 0 END, nb_non_solde_0_h = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_0_h <> montant_regle_0_h THEN 1 ELSE 0 END, nb_non_solde_1 = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_1_c <> montant_regle_1_c THEN 1 WHEN montant_comptabilise_1_h <> montant_regle_1_h THEN 1 ELSE 0 END, nb_non_solde_1_c = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_1_c <> montant_regle_1_c THEN 1 ELSE 0 END, nb_non_solde_1_h = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_1_h <> montant_regle_1_h THEN 1 ELSE 0 END, nb_non_solde_2 = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_2_c <> montant_regle_2_c THEN 1 WHEN montant_comptabilise_2_h <> montant_regle_2_h THEN 1 ELSE 0 END, nb_non_solde_2_c = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_2_c <> montant_regle_2_c THEN 1 ELSE 0 END, nb_non_solde_2_h = CASE WHEN code_facture <> '1'::bpchar THEN 0 WHEN montant_comptabilise_2_h <> montant_regle_2_h THEN 1 ELSE 0 END; -- Retard de groupage et de facturation -- Période en semaine pleine pour calcul coefficients DROP TABLE IF EXISTS w_periode; CREATE TABLE w_periode AS SELECT MAX(CASE WHEN jour_semaine = 1 AND date <= date(t_divers.valeur_date - interval '1 year') THEN date ELSE NULL END) AS date_debut_periode, MAX(CASE WHEN jour_semaine = 7 AND date <= t_divers.valeur_date THEN date ELSE NULL END) AS date_fin_periode, (MAX(CASE WHEN jour_semaine = 7 AND date <= t_divers.valeur_date THEN date ELSE NULL END) - MAX(CASE WHEN jour_semaine = 1 AND date <= date(t_divers.valeur_date - interval '1 year') THEN date ELSE NULL END) + 1) AS duree_periode FROM base.p_calendrier JOIN activite.t_divers ON t_divers.code = 'NOW' AND p_calendrier.date <= t_divers.valeur_date; -- Calcul durée groupage par dossier (coeff journalier) DROP TABLE IF EXISTS w_retard_groupage_coefficient; CREATE TEMP TABLE w_retard_groupage_coefficient AS SELECT MAX(date_debut_periode) AS date_debut_periode, MAX(duree_periode) AS duree_periode, SUM(CASE WHEN type_sejour NOT IN ('2','5') THEN v_factures_reference_1.nb_groupe ELSE 0 END) AS nb_groupe_h, SUM(CASE WHEN type_sejour NOT IN ('2','5') THEN v_factures_reference_1.delai_groupage ELSE 0 END) AS delai_groupe_h, SUM(CASE WHEN type_sejour IN ('2','5') THEN v_factures_reference_1.nb_groupe ELSE 0 END) AS nb_groupe_a, SUM(CASE WHEN type_sejour IN ('2','5') THEN v_factures_reference_1.delai_groupage ELSE 0 END) AS delai_groupe_a, 0::numeric AS coefficient_groupage_h, 0::numeric AS coefficient_groupage_a FROM w_factures_reference v_factures_reference_1 JOIN w_periode ON ( v_factures_reference_1.date_groupage BETWEEN w_periode.date_debut_periode AND w_periode.date_fin_periode ) WHERE nb_groupe = 1; UPDATE w_retard_groupage_coefficient SET coefficient_groupage_h = base.cti_division(base.cti_division(duree_periode, nb_groupe_h + nb_groupe_a) * base.cti_division(delai_groupe_h, nb_groupe_h) , base.cti_division(delai_groupe_a + delai_groupe_h, nb_groupe_a + nb_groupe_h)), coefficient_groupage_a = base.cti_division(base.cti_division(duree_periode, nb_groupe_h + nb_groupe_a) * base.cti_division(delai_groupe_a, nb_groupe_a) , base.cti_division(delai_groupe_a + delai_groupe_h, nb_groupe_a + nb_groupe_h)) ; -- Code sortie uniquement sur dernière facture si facturations intermédiaires UPDATE w_factures_reference p_factures_reference SET code_sorti = '0' FROM activite.p_sejours JOIN (SELECT no_sejour, (MAX(Array[date_fin_facture::text,no_facture_reference]))[2] AS no_facture_last FROM activite.p_factures_reference WHERE code_sorti = '1' GROUP BY 1 HAVING count(*) > 1) subview ON p_sejours.no_sejour = subview.no_sejour WHERE p_factures_reference.no_sejour = p_sejours.no_sejour AND p_factures_reference.code_sorti = '1' AND p_sejours.type_sejour <> '3' AND p_factures_reference.no_facture_reference <> no_facture_last ; -- Mise à jour dans table UPDATE w_factures_reference SET retard_groupage = CASE WHEN type_sejour NOT IN ('2','5') THEN coefficient_groupage_h ELSE coefficient_groupage_a END FROM w_retard_groupage_coefficient WHERE nb_non_groupe = 1 AND date_sortie >= date_debut_periode; -- Calcul durée facturation par dossier (coeff journalier) DROP TABLE IF EXISTS w_retard_facture_coefficient; CREATE TEMP TABLE w_retard_facture_coefficient AS SELECT MAX(date_debut_periode) AS date_debut_periode, MAX(duree_periode) AS duree_periode, SUM(CASE WHEN type_sejour NOT IN ('2','3','5') THEN 1 ELSE 0 END) AS nb_facture_h, SUM(CASE WHEN type_sejour NOT IN ('2','3','5') THEN v_factures_reference_1.delai_facture ELSE 0 END) AS delai_facture_h, SUM(CASE WHEN type_sejour IN ('2','5') THEN 1 ELSE 0 END) AS nb_facture_a, SUM(CASE WHEN type_sejour IN ('2','5') THEN v_factures_reference_1.delai_facture ELSE 0 END) AS delai_facture_a, SUM(CASE WHEN type_sejour IN ('3') THEN 1 ELSE 0 END) AS nb_facture_x, SUM(CASE WHEN type_sejour IN ('3') THEN v_factures_reference_1.delai_facture ELSE 0 END) AS delai_facture_x, 0::numeric AS coefficient_facture_h, 0::numeric AS coefficient_facture_a, 0::numeric AS coefficient_facture_x FROM w_factures_reference v_factures_reference_1 JOIN w_periode ON ( v_factures_reference_1.date_facture BETWEEN w_periode.date_debut_periode AND w_periode.date_fin_periode ) WHERE v_factures_reference_1.nb_non_calcules = 0; UPDATE w_retard_facture_coefficient SET coefficient_facture_h = base.cti_division(base.cti_division(duree_periode, nb_facture_h + nb_facture_a + nb_facture_x) * base.cti_division(delai_facture_h, nb_facture_h) , base.cti_division(delai_facture_a + delai_facture_h + delai_facture_x, nb_facture_a + nb_facture_h + nb_facture_x)), coefficient_facture_a = base.cti_division(base.cti_division(duree_periode, nb_facture_h + nb_facture_a + nb_facture_x) * base.cti_division(delai_facture_a, nb_facture_a) , base.cti_division(delai_facture_a + delai_facture_h + delai_facture_x, nb_facture_a + nb_facture_h + nb_facture_x)), coefficient_facture_x = base.cti_division(duree_periode, nb_facture_h + nb_facture_a + nb_facture_x) * base.cti_division(base.cti_division(delai_facture_x, nb_facture_x), base.cti_division(delai_facture_a + delai_facture_h + delai_facture_x, nb_facture_a + nb_facture_h + nb_facture_x)) ; -- Mise à jour dans table UPDATE w_factures_reference SET retard_facture = CASE WHEN type_sejour IN ('2','5') THEN coefficient_facture_a WHEN type_sejour IN ('3') THEN coefficient_facture_x ELSE coefficient_facture_h END FROM w_retard_facture_coefficient WHERE nb_non_calcules = 1 AND date_sortie >= date_debut_periode; -- Validation données SELECT base.cti_disable_index('activite', 'i_factures_reference_1'); SELECT base.cti_disable_index('activite', 'i_factures_reference_2'); SELECT base.cti_disable_index('activite', 'i_factures_reference_3'); SELECT base.cti_disable_index('activite', 'i_factures_reference_4'); TRUNCATE activite.p_factures_reference; INSERT INTO activite.p_factures_reference ( sejour_id, no_sejour, date_entree, date_sortie, code_sorti, facture_reference_id, no_facture_reference, type_t2a, date_debut_facture, date_fin_facture, type_facture, date_groupage, retard_groupage, delai_groupage, nb_groupe, nb_non_groupe, nb_calculable, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, gmt_id, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_facture, date_facture, retard_facture, delai_facture, code_vente, date_vente, nb_factures, nb_non_calcules, nb_non_calcules_horsbg, nb_non_calcules_bg, nb_factures_regularisation, nb_rejets, code_expedie_0, code_expedie_1, code_expedie_2, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, no_bordereau_0, no_bordereau_1, no_bordereau_2, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, nb_non_expedie, nb_non_expedie_c, nb_non_expedie_h, nb_non_expedie_0, nb_non_expedie_0_c, nb_non_expedie_0_h, nb_non_expedie_1, nb_non_expedie_1_c, nb_non_expedie_1_h, nb_non_expedie_2, nb_non_expedie_2_c, nb_non_expedie_2_h, montant_facture, montant_facture_c, montant_facture_h, montant_facture_0, montant_facture_0_c, montant_facture_0_h, montant_facture_1, montant_facture_1_c, montant_facture_1_h, montant_facture_2, montant_facture_2_c, montant_facture_2_h, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_encours, montant_encours_c, montant_encours_h, montant_encours_0, montant_encours_0_c, montant_encours_0_h, montant_encours_1, montant_encours_1_c, montant_encours_1_h, montant_encours_2, montant_encours_2_c, montant_encours_2_h, montant_comptabilise, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_budget_global_c, montant_regle, montant_regle_c, montant_regle_h, montant_regle_0, montant_regle_0_c, montant_regle_0_h, montant_regle_1, montant_regle_1_c, montant_regle_1_h, montant_regle_2, montant_regle_2_c, montant_regle_2_h, date_solde, date_solde_c, date_solde_h, date_solde_0, date_solde_0_c, date_solde_0_h, date_solde_1, date_solde_1_c, date_solde_1_h, date_solde_2, date_solde_2_c, date_solde_2_h, delai_solde, delai_solde_c, delai_solde_h, delai_solde_0, delai_solde_0_c, delai_solde_0_h, delai_solde_1, delai_solde_1_c, delai_solde_1_h, delai_solde_2, delai_solde_2_c, delai_solde_2_h, nb_non_solde, nb_non_solde_c, nb_non_solde_h, nb_non_solde_0, nb_non_solde_0_c, nb_non_solde_0_h, nb_non_solde_1, nb_non_solde_1_c, nb_non_solde_1_h, nb_non_solde_2, nb_non_solde_2_c, nb_non_solde_2_h, nb_non_cloture, nb_non_cloture_c, nb_non_cloture_h, nb_non_cloture_0, nb_non_cloture_0_c, nb_non_cloture_0_h, nb_non_cloture_1, nb_non_cloture_1_c, nb_non_cloture_1_h, nb_non_cloture_2, nb_non_cloture_2_c, nb_non_cloture_2_h, nb_rubriques_c, nb_rubriques_h ) SELECT sejour_id, no_sejour, date_entree, date_sortie, code_sorti, facture_reference_id, no_facture_reference, type_t2a, date_debut_facture, date_fin_facture, type_facture, date_groupage, retard_groupage, delai_groupage, nb_groupe, nb_non_groupe, nb_calculable, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, gmt_id, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_facture, date_facture, retard_facture, delai_facture, code_vente, date_vente, nb_factures, nb_non_calcules, nb_non_calcules_horsbg, nb_non_calcules_bg, nb_factures_regularisation, nb_rejets, code_expedie_0, code_expedie_1, code_expedie_2, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, no_bordereau_0, no_bordereau_1, no_bordereau_2, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, nb_non_expedie, nb_non_expedie_c, nb_non_expedie_h, nb_non_expedie_0, nb_non_expedie_0_c, nb_non_expedie_0_h, nb_non_expedie_1, nb_non_expedie_1_c, nb_non_expedie_1_h, nb_non_expedie_2, nb_non_expedie_2_c, nb_non_expedie_2_h, montant_facture, montant_facture_c, montant_facture_h, montant_facture_0, montant_facture_0_c, montant_facture_0_h, montant_facture_1, montant_facture_1_c, montant_facture_1_h, montant_facture_2, montant_facture_2_c, montant_facture_2_h, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_encours, montant_encours_c, montant_encours_h, montant_encours_0, montant_encours_0_c, montant_encours_0_h, montant_encours_1, montant_encours_1_c, montant_encours_1_h, montant_encours_2, montant_encours_2_c, montant_encours_2_h, montant_comptabilise, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_budget_global_c, montant_regle, montant_regle_c, montant_regle_h, montant_regle_0, montant_regle_0_c, montant_regle_0_h, montant_regle_1, montant_regle_1_c, montant_regle_1_h, montant_regle_2, montant_regle_2_c, montant_regle_2_h, date_solde, date_solde_c, date_solde_h, date_solde_0, date_solde_0_c, date_solde_0_h, date_solde_1, date_solde_1_c, date_solde_1_h, date_solde_2, date_solde_2_c, date_solde_2_h, delai_solde, delai_solde_c, delai_solde_h, delai_solde_0, delai_solde_0_c, delai_solde_0_h, delai_solde_1, delai_solde_1_c, delai_solde_1_h, delai_solde_2, delai_solde_2_c, delai_solde_2_h, nb_non_solde, nb_non_solde_c, nb_non_solde_h, nb_non_solde_0, nb_non_solde_0_c, nb_non_solde_0_h, nb_non_solde_1, nb_non_solde_1_c, nb_non_solde_1_h, nb_non_solde_2, nb_non_solde_2_c, nb_non_solde_2_h, nb_non_cloture, nb_non_cloture_c, nb_non_cloture_h, nb_non_cloture_0, nb_non_cloture_0_c, nb_non_cloture_0_h, nb_non_cloture_1, nb_non_cloture_1_c, nb_non_cloture_1_h, nb_non_cloture_2, nb_non_cloture_2_c, nb_non_cloture_2_h, nb_rubriques_c, nb_rubriques_h FROM w_factures_reference; ANALYSE activite.p_factures_reference ; SELECT base.cti_enable_index('activite', 'i_factures_reference_1'); SELECT base.cti_enable_index('activite', 'i_factures_reference_2'); SELECT base.cti_enable_index('activite', 'i_factures_reference_3'); SELECT base.cti_enable_index('activite', 'i_factures_reference_4'); SELECT base.cti_disable_index('activite', 'i_factures_reference_tiers_1'); SELECT base.cti_disable_index('activite', 'i_factures_reference_tiers_2'); SELECT base.cti_disable_index('activite', 'i_factures_reference_tiers_3'); SELECT base.cti_disable_index('activite', 'i_factures_reference_tiers_4'); TRUNCATE activite.p_factures_reference_tiers; INSERT INTO activite.p_factures_reference_tiers ( sejour_id, no_sejour, date_entree, date_sortie, code_sorti, facture_reference_id, no_facture_reference, type_t2a, date_debut_facture, date_fin_facture, type_facture, date_groupage, retard_groupage, delai_groupage, nb_groupe, nb_non_groupe, nb_calculable, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, gmt_id, tiers_payant_id, code_facture, date_facture, retard_facture, delai_facture, code_vente, date_vente, nb_factures, nb_non_calcules, nb_non_calcules_horsbg, nb_non_calcules_bg, nb_factures_regularisation, nb_rejets, code_expedie_0, code_expedie_1, code_expedie_2, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, no_bordereau_0, no_bordereau_1, no_bordereau_2, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, nb_non_expedie, nb_non_expedie_c, nb_non_expedie_h, nb_non_expedie_0, nb_non_expedie_0_c, nb_non_expedie_0_h, nb_non_expedie_1, nb_non_expedie_1_c, nb_non_expedie_1_h, nb_non_expedie_2, nb_non_expedie_2_c, nb_non_expedie_2_h, montant_facture, montant_facture_c, montant_facture_h, montant_facture_0, montant_facture_0_c, montant_facture_0_h, montant_facture_1, montant_facture_1_c, montant_facture_1_h, montant_facture_2, montant_facture_2_c, montant_facture_2_h, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_encours, montant_encours_c, montant_encours_h, montant_encours_0, montant_encours_0_c, montant_encours_0_h, montant_encours_1, montant_encours_1_c, montant_encours_1_h, montant_encours_2, montant_encours_2_c, montant_encours_2_h, montant_comptabilise, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_budget_global_c, montant_regle, montant_regle_c, montant_regle_h, montant_regle_0, montant_regle_0_c, montant_regle_0_h, montant_regle_1, montant_regle_1_c, montant_regle_1_h, montant_regle_2, montant_regle_2_c, montant_regle_2_h, date_solde, date_solde_c, date_solde_h, date_solde_0, date_solde_0_c, date_solde_0_h, date_solde_1, date_solde_1_c, date_solde_1_h, date_solde_2, date_solde_2_c, date_solde_2_h, delai_solde, delai_solde_c, delai_solde_h, delai_solde_0, delai_solde_0_c, delai_solde_0_h, delai_solde_1, delai_solde_1_c, delai_solde_1_h, delai_solde_2, delai_solde_2_c, delai_solde_2_h, nb_non_solde, nb_non_solde_c, nb_non_solde_h, nb_non_solde_0, nb_non_solde_0_c, nb_non_solde_0_h, nb_non_solde_1, nb_non_solde_1_c, nb_non_solde_1_h, nb_non_solde_2, nb_non_solde_2_c, nb_non_solde_2_h, nb_non_cloture, nb_non_cloture_c, nb_non_cloture_h, nb_non_cloture_0, nb_non_cloture_0_c, nb_non_cloture_0_h, nb_non_cloture_1, nb_non_cloture_1_c, nb_non_cloture_1_h, nb_non_cloture_2, nb_non_cloture_2_c, nb_non_cloture_2_h ) SELECT sejour_id, no_sejour, date_entree, date_sortie, code_sorti, facture_reference_id, no_facture_reference, type_t2a, date_debut_facture, date_fin_facture, type_facture, date_groupage, CASE WHEN tiers_payant_1_id = 0 AND tiers_payant_2_id = 0 THEN retard_groupage ELSE 0 END, delai_groupage, nb_groupe, nb_non_groupe, nb_calculable, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, gmt_id, tiers_payant_0_id AS tiers_payant_id, code_facture, date_facture, CASE WHEN tiers_payant_1_id = 0 AND tiers_payant_2_id = 0 THEN retard_facture ELSE 0 END, delai_facture, code_vente, date_vente, nb_factures, nb_non_calcules, nb_non_calcules_horsbg, nb_non_calcules_bg, nb_factures_regularisation, nb_rejets, code_expedie_0 AS code_expedie_0, '0' AS code_expedie_1, '0' AS code_expedie_2, date_expedition_0 AS date_expedition, date_expedition_0, NULL::date AS date_expedition_1, NULL::date AS date_expedition_2, no_bordereau_0, '' AS no_bordereau_1, '' AS no_bordereau_2, delai_expedition_0 AS delai_expedition, delai_expedition_0, NULL::numeric AS delai_expedition_1, NULL::numeric AS delai_expedition_2, nb_non_expedie_0 AS nb_non_expedie, nb_non_expedie_0_c AS nb_non_expedie_c, nb_non_expedie_0_h AS nb_non_expedie_h, nb_non_expedie_0, nb_non_expedie_0_c, nb_non_expedie_0_h, 0 AS nb_non_expedie_1, 0 AS nb_non_expedie_1_c, 0 AS nb_non_expedie_1_h, 0 AS nb_non_expedie_2, 0 AS nb_non_expedie_2_c, 0 AS nb_non_expedie_2_h, montant_facture_0 AS montant_facture, montant_facture_0_c AS montant_facture_c, montant_facture_0_h AS montant_facture_h, montant_facture_0, montant_facture_0_c, montant_facture_0_h, 0 AS montant_facture_1, 0 AS montant_facture_1_c, 0 AS montant_facture_1_h, 0 AS montant_facture_2, 0 AS montant_facture_2_c, 0 AS montant_facture_2_h, 0 AS montant_facture_c_actes_inclus_dans_sejour, 0 AS montant_facture_h_actes_inclus_dans_sejour, montant_encours_0 AS montant_encours, montant_encours_0_c AS montant_encours_c, montant_encours_0_h AS montant_encours_h, montant_encours_0, montant_encours_0_c, montant_encours_0_h, 0 AS montant_encours_1, 0 AS montant_encours_1_c, 0 AS montant_encours_1_h, 0 AS montant_encours_2, 0 AS montant_encours_2_c, 0 AS montant_encours_2_h, montant_comptabilise_0 AS montant_comptabilise, montant_comptabilise_0_c AS montant_comptabilise_c, montant_comptabilise_0_h AS montant_comptabilise_h, montant_comptabilise_0, montant_comptabilise_0_c, montant_comptabilise_0_h, 0 AS montant_comptabilise_1, 0 AS montant_comptabilise_1_c, 0 AS montant_comptabilise_1_h, 0 AS montant_comptabilise_2, 0 AS montant_comptabilise_2_c, 0 AS montant_comptabilise_2_h, 0 AS montant_comptabilise_budget_global_c, montant_regle_0 AS montant_regle, montant_regle_0_c AS montant_regle_c, montant_regle_0_h AS montant_regle_h, montant_regle_0, montant_regle_0_c, montant_regle_0_h, 0 AS montant_regle_1, 0 AS montant_regle_1_c, 0 AS montant_regle_1_h, 0 AS montant_regle_2, 0 AS montant_regle_2_c, 0 AS montant_regle_2_h, date_solde_0 AS date_solde, date_solde_0_c AS date_solde_c, date_solde_0_h AS date_solde_h, date_solde_0, date_solde_0_c, date_solde_0_h, NULL::date AS date_solde_1, NULL::date AS date_solde_1_c, NULL::date AS date_solde_1_h, NULL::date AS date_solde_2, NULL::date AS date_solde_2_c, NULL::date AS date_solde_2_h, delai_solde_0 AS delai_solde, delai_solde_0_c AS delai_solde_c, delai_solde_0_h AS delai_solde_h, delai_solde_0, delai_solde_0_c, delai_solde_0_h, NULL::numeric AS delai_solde_1, NULL::numeric AS delai_solde_1_c, NULL::numeric AS delai_solde_1_h, NULL::numeric AS delai_solde_2, NULL::numeric AS delai_solde_2_c, NULL::numeric AS delai_solde_2_h, nb_non_solde_0 AS nb_non_solde, nb_non_solde_0_c AS nb_non_solde_c, nb_non_solde_0_h AS nb_non_solde_h, nb_non_solde_0, nb_non_solde_0_c, nb_non_solde_0_h, 0 AS nb_non_solde_1, 0 AS nb_non_solde_1_c, 0 AS nb_non_solde_1_h, 0 AS nb_non_solde_2, 0 AS nb_non_solde_2_c, 0 AS nb_non_solde_2_h, nb_non_cloture_0 AS nb_non_cloture, nb_non_cloture_0_c AS nb_non_cloture_c, nb_non_cloture_0_h AS nb_non_cloture_h, nb_non_cloture_0, nb_non_cloture_0_c, nb_non_cloture_0_h, 0 AS nb_non_cloture_1, 0 AS nb_non_cloture_1_c, 0 AS nb_non_cloture_1_h, 0 AS nb_non_cloture_2, 0 AS nb_non_cloture_2_c, 0 AS nb_non_cloture_2_h FROM w_factures_reference WHERE tiers_payant_0_id <> 0 AND ( montant_facture_0 <> 0 OR montant_comptabilise_0 <> 0 OR montant_regle_0 <> 0 OR montant_encours <> 0 ) ; INSERT INTO activite.p_factures_reference_tiers ( sejour_id, no_sejour, date_entree, date_sortie, code_sorti, facture_reference_id, no_facture_reference, type_t2a, date_debut_facture, date_fin_facture, type_facture, date_groupage, retard_groupage, delai_groupage, nb_groupe, nb_non_groupe, nb_calculable, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, gmt_id, tiers_payant_id, code_facture, date_facture, retard_facture, delai_facture, code_vente, date_vente, nb_factures, nb_non_calcules, nb_non_calcules_horsbg, nb_non_calcules_bg, nb_factures_regularisation, nb_rejets, code_expedie_0, code_expedie_1, code_expedie_2, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, no_bordereau_0, no_bordereau_1, no_bordereau_2, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, nb_non_expedie, nb_non_expedie_c, nb_non_expedie_h, nb_non_expedie_0, nb_non_expedie_0_c, nb_non_expedie_0_h, nb_non_expedie_1, nb_non_expedie_1_c, nb_non_expedie_1_h, nb_non_expedie_2, nb_non_expedie_2_c, nb_non_expedie_2_h, montant_facture, montant_facture_c, montant_facture_h, montant_facture_0, montant_facture_0_c, montant_facture_0_h, montant_facture_1, montant_facture_1_c, montant_facture_1_h, montant_facture_2, montant_facture_2_c, montant_facture_2_h, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_encours, montant_encours_c, montant_encours_h, montant_encours_0, montant_encours_0_c, montant_encours_0_h, montant_encours_1, montant_encours_1_c, montant_encours_1_h, montant_encours_2, montant_encours_2_c, montant_encours_2_h, montant_comptabilise, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_budget_global_c, montant_regle, montant_regle_c, montant_regle_h, montant_regle_0, montant_regle_0_c, montant_regle_0_h, montant_regle_1, montant_regle_1_c, montant_regle_1_h, montant_regle_2, montant_regle_2_c, montant_regle_2_h, date_solde, date_solde_c, date_solde_h, date_solde_0, date_solde_0_c, date_solde_0_h, date_solde_1, date_solde_1_c, date_solde_1_h, date_solde_2, date_solde_2_c, date_solde_2_h, delai_solde, delai_solde_c, delai_solde_h, delai_solde_0, delai_solde_0_c, delai_solde_0_h, delai_solde_1, delai_solde_1_c, delai_solde_1_h, delai_solde_2, delai_solde_2_c, delai_solde_2_h, nb_non_solde, nb_non_solde_c, nb_non_solde_h, nb_non_solde_0, nb_non_solde_0_c, nb_non_solde_0_h, nb_non_solde_1, nb_non_solde_1_c, nb_non_solde_1_h, nb_non_solde_2, nb_non_solde_2_c, nb_non_solde_2_h, nb_non_cloture, nb_non_cloture_c, nb_non_cloture_h, nb_non_cloture_0, nb_non_cloture_0_c, nb_non_cloture_0_h, nb_non_cloture_1, nb_non_cloture_1_c, nb_non_cloture_1_h, nb_non_cloture_2, nb_non_cloture_2_c, nb_non_cloture_2_h ) SELECT sejour_id, no_sejour, date_entree, date_sortie, code_sorti, facture_reference_id, no_facture_reference, type_t2a, date_debut_facture, date_fin_facture, type_facture, date_groupage, CASE WHEN tiers_payant_1_id <> 0 THEN retard_groupage ELSE 0 END, delai_groupage, nb_groupe, nb_non_groupe, nb_calculable, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, gmt_id, tiers_payant_1_id AS tiers_payant_id, code_facture, date_facture, CASE WHEN tiers_payant_1_id <> 0 THEN retard_facture ELSE 0 END, delai_facture, code_vente, date_vente, nb_factures, nb_non_calcules, nb_non_calcules_horsbg, nb_non_calcules_bg, nb_factures_regularisation, nb_rejets, '0' AS code_expedie_0, code_expedie_1, '0' AS code_expedie_2, date_expedition_1 AS date_expedition, NULL::date AS date_expedition_0, date_expedition_1, NULL::date AS date_expedition_2, '' AS no_bordereau_0, no_bordereau_1, '' AS no_bordereau_2, delai_expedition_1 AS delai_expedition, NULL::numeric AS delai_expedition_0, delai_expedition_1, NULL::numeric AS delai_expedition_2, nb_non_expedie_1 AS nb_non_expedie, nb_non_expedie_1_c AS nb_non_expedie_c, nb_non_expedie_1_h AS nb_non_expedie_h, 0 AS nb_non_expedie_0, 0 AS nb_non_expedie_0_c, 0 AS nb_non_expedie_0_h, nb_non_expedie_1, nb_non_expedie_1_c, nb_non_expedie_1_h, 0 AS nb_non_expedie_2, 0 AS nb_non_expedie_2_c, 0 AS nb_non_expedie_2_h, montant_facture_1 AS montant_facture, montant_facture_1_c AS montant_facture_c, montant_facture_1_h AS montant_facture_h, 0 AS montant_facture_0, 0 AS montant_facture_0_c, 0 AS montant_facture_0_h, montant_facture_1, montant_facture_1_c, montant_facture_1_h, 0 AS montant_facture_2, 0 AS montant_facture_2_c, 0 AS montant_facture_2_h, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_encours_1 AS montant_encours, montant_encours_1_c AS montant_encours_c, montant_encours_1_h AS montant_encours_h, 0 AS montant_encours_0, 0 AS montant_encours_0_c, 0 AS montant_encours_0_h, montant_encours_1, montant_encours_1_c, montant_encours_1_h, 0 AS montant_encours_2, 0 AS montant_encours_2_c, 0 AS montant_encours_2_h, montant_comptabilise_1 AS montant_comptabilise, montant_comptabilise_1_c AS montant_comptabilise_c, montant_comptabilise_1_h AS montant_comptabilise_h, 0 AS montant_comptabilise_0, 0 AS montant_comptabilise_0_c, 0 AS montant_comptabilise_0_h, montant_comptabilise_1, montant_comptabilise_1_c, montant_comptabilise_1_h, 0 AS montant_comptabilise_2, 0 AS montant_comptabilise_2_c, 0 AS montant_comptabilise_2_h, montant_comptabilise_budget_global_c, montant_regle_1 AS montant_regle, montant_regle_1_c AS montant_regle_c, montant_regle_1_h AS montant_regle_h, 0 AS montant_regle_0, 0 AS montant_regle_0_c, 0 AS montant_regle_0_h, montant_regle_1, montant_regle_1_c, montant_regle_1_h, 0 AS montant_regle_2, 0 AS montant_regle_2_c, 0 AS montant_regle_2_h, date_solde_1 AS date_solde, date_solde_1_c AS date_solde_c, date_solde_1_h AS date_solde_h, NULL::date AS date_solde_0, NULL::date AS date_solde_0_c, NULL::date AS date_solde_0_h, date_solde_1, date_solde_1_c, date_solde_1_h, NULL::date AS date_solde_2, NULL::date AS date_solde_2_c, NULL::date AS date_solde_2_h, delai_solde_1 AS delai_solde, delai_solde_1_c AS delai_solde_c, delai_solde_1_h AS delai_solde_h, NULL::numeric AS delai_solde_0, NULL::numeric AS delai_solde_0_c, NULL::numeric AS delai_solde_0_h, delai_solde_1, delai_solde_1_c, delai_solde_1_h, NULL::numeric AS delai_solde_2, NULL::numeric AS delai_solde_2_c, NULL::numeric AS delai_solde_2_h, nb_non_solde_1 AS nb_non_solde, nb_non_solde_1_c AS nb_non_solde_c, nb_non_solde_1_h AS nb_non_solde_h, 0 AS nb_non_solde_0, 0 AS nb_non_solde_0_c, 0 AS nb_non_solde_0_h, nb_non_solde_1, nb_non_solde_1_c, nb_non_solde_1_h, 0 AS nb_non_solde_2, 0 AS nb_non_solde_2_c, 0 AS nb_non_solde_2_h, nb_non_cloture_1 AS nb_non_cloture, nb_non_cloture_1_c AS nb_non_cloture_c, nb_non_cloture_1_h AS nb_non_cloture_h, 0 AS nb_non_cloture_0, 0 AS nb_non_cloture_0_c, 0 AS nb_non_cloture_0_h, nb_non_cloture_1, nb_non_cloture_1_c, nb_non_cloture_1_h, 0 AS nb_non_cloture_2, 0 AS nb_non_cloture_2_c, 0 AS nb_non_cloture_2_h FROM w_factures_reference WHERE tiers_payant_1_id <> 0 AND ( montant_facture_1 <> 0 OR montant_comptabilise_1 <> 0 OR montant_regle_1 <> 0 OR montant_encours <> 0 ) ; INSERT INTO activite.p_factures_reference_tiers ( sejour_id, no_sejour, date_entree, date_sortie, code_sorti, facture_reference_id, no_facture_reference, type_t2a, date_debut_facture, date_fin_facture, type_facture, date_groupage, retard_groupage, delai_groupage, nb_groupe, nb_non_groupe, nb_calculable, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, gmt_id, tiers_payant_id, code_facture, date_facture, retard_facture, delai_facture, code_vente, date_vente, nb_factures, nb_non_calcules, nb_non_calcules_horsbg, nb_non_calcules_bg, nb_factures_regularisation, nb_rejets, code_expedie_0, code_expedie_1, code_expedie_2, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, no_bordereau_0, no_bordereau_1, no_bordereau_2, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, nb_non_expedie, nb_non_expedie_c, nb_non_expedie_h, nb_non_expedie_0, nb_non_expedie_0_c, nb_non_expedie_0_h, nb_non_expedie_1, nb_non_expedie_1_c, nb_non_expedie_1_h, nb_non_expedie_2, nb_non_expedie_2_c, nb_non_expedie_2_h, montant_facture, montant_facture_c, montant_facture_h, montant_facture_0, montant_facture_0_c, montant_facture_0_h, montant_facture_1, montant_facture_1_c, montant_facture_1_h, montant_facture_2, montant_facture_2_c, montant_facture_2_h, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_encours, montant_encours_c, montant_encours_h, montant_encours_0, montant_encours_0_c, montant_encours_0_h, montant_encours_1, montant_encours_1_c, montant_encours_1_h, montant_encours_2, montant_encours_2_c, montant_encours_2_h, montant_comptabilise, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_budget_global_c, montant_regle, montant_regle_c, montant_regle_h, montant_regle_0, montant_regle_0_c, montant_regle_0_h, montant_regle_1, montant_regle_1_c, montant_regle_1_h, montant_regle_2, montant_regle_2_c, montant_regle_2_h, date_solde, date_solde_c, date_solde_h, date_solde_0, date_solde_0_c, date_solde_0_h, date_solde_1, date_solde_1_c, date_solde_1_h, date_solde_2, date_solde_2_c, date_solde_2_h, delai_solde, delai_solde_c, delai_solde_h, delai_solde_0, delai_solde_0_c, delai_solde_0_h, delai_solde_1, delai_solde_1_c, delai_solde_1_h, delai_solde_2, delai_solde_2_c, delai_solde_2_h, nb_non_solde, nb_non_solde_c, nb_non_solde_h, nb_non_solde_0, nb_non_solde_0_c, nb_non_solde_0_h, nb_non_solde_1, nb_non_solde_1_c, nb_non_solde_1_h, nb_non_solde_2, nb_non_solde_2_c, nb_non_solde_2_h, nb_non_cloture, nb_non_cloture_c, nb_non_cloture_h, nb_non_cloture_0, nb_non_cloture_0_c, nb_non_cloture_0_h, nb_non_cloture_1, nb_non_cloture_1_c, nb_non_cloture_1_h, nb_non_cloture_2, nb_non_cloture_2_c, nb_non_cloture_2_h ) SELECT sejour_id, no_sejour, date_entree, date_sortie, code_sorti, facture_reference_id, no_facture_reference, type_t2a, date_debut_facture, date_fin_facture, type_facture, date_groupage, CASE WHEN tiers_payant_1_id = 0 AND tiers_payant_2_id <> 0 THEN retard_groupage ELSE 0 END, delai_groupage, nb_groupe, nb_non_groupe, nb_calculable, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, gmt_id, tiers_payant_2_id AS tiers_payant_id, code_facture, date_facture, CASE WHEN tiers_payant_1_id = 0 AND tiers_payant_2_id <> 0 THEN retard_facture ELSE 0 END, delai_facture, code_vente, date_vente, nb_factures, nb_non_calcules, nb_non_calcules_horsbg, nb_non_calcules_bg, nb_factures_regularisation, nb_rejets, '0' AS code_expedie_0, '0' AS code_expedie_1, code_expedie_2, date_expedition_2 AS date_expedition, NULL::date AS date_expedition_0, NULL::date AS date_expedition_1, date_expedition_2, '' AS no_bordereau_0, '' AS no_bordereau_1, no_bordereau_2, delai_expedition_2 AS delai_expedition, NULL::numeric AS delai_expedition_0, NULL::numeric AS delai_expedition_1, delai_expedition_2, nb_non_expedie_2 AS nb_non_expedie, nb_non_expedie_2_c AS nb_non_expedie_c, nb_non_expedie_2_h AS nb_non_expedie_h, 0 AS nb_non_expedie_0, 0 AS nb_non_expedie_0_c, 0 AS nb_non_expedie_0_h, 0 AS nb_non_expedie_1, 0 AS nb_non_expedie_1_c, 0 AS nb_non_expedie_1_h, nb_non_expedie_2, nb_non_expedie_2_c, nb_non_expedie_2_h, montant_facture_2 AS montant_facture, montant_facture_2_c AS montant_facture_c, montant_facture_2_h AS montant_facture_h, 0 AS montant_facture_0, 0 AS montant_facture_0_c, 0 AS montant_facture_0_h, 0 AS montant_facture_1, 0 AS montant_facture_1_c, 0 AS montant_facture_1_h, montant_facture_2, montant_facture_2_c, montant_facture_2_h, 0 AS montant_facture_c_actes_inclus_dans_sejour, 0 AS montant_facture_h_actes_inclus_dans_sejour, montant_encours_2 AS montant_encours, montant_encours_2_c AS montant_encours_c, montant_encours_2_h AS montant_encours_h, 0 AS montant_encours_0, 0 AS montant_encours_0_c, 0 AS montant_encours_0_h, 0 AS montant_encours_1, 0 AS montant_encours_1_c, 0 AS montant_encours_1_h, montant_encours_2, montant_encours_2_c, montant_encours_2_h, montant_comptabilise_2 AS montant_comptabilise, montant_comptabilise_2_c AS montant_comptabilise_c, montant_comptabilise_2_h AS montant_comptabilise_h, 0 AS montant_comptabilise_0, 0 AS montant_comptabilise_0_c, 0 AS montant_comptabilise_0_h, 0 AS montant_comptabilise_1, 0 AS montant_comptabilise_1_c, 0 AS montant_comptabilise_1_h, montant_comptabilise_2, montant_comptabilise_2_c, montant_comptabilise_2_h, 0 AS montant_comptabilise_budget_global_c, montant_regle_2 AS montant_regle, montant_regle_2_c AS montant_regle_c, montant_regle_2_h AS montant_regle_h, 0 AS montant_regle_0, 0 AS montant_regle_0_c, 0 AS montant_regle_0_h, 0 AS montant_regle_1, 0 AS montant_regle_1_c, 0 AS montant_regle_1_h, montant_regle_2, montant_regle_2_c, montant_regle_2_h, date_solde_2 AS date_solde, date_solde_2_c AS date_solde_c, date_solde_2_h AS date_solde_h, NULL::date AS date_solde_0, NULL::date AS date_solde_0_c, NULL::date AS date_solde_0_h, NULL::date AS date_solde_1, NULL::date AS date_solde_1_c, NULL::date AS date_solde_1_h, date_solde_2, date_solde_2_c, date_solde_2_h, delai_solde_2 AS delai_solde, delai_solde_2_c AS delai_solde_c, delai_solde_2_h AS delai_solde_h, NULL::numeric AS delai_solde_0, NULL::numeric AS delai_solde_0_c, NULL::numeric AS delai_solde_0_h, NULL::numeric AS delai_solde_1, NULL::numeric AS delai_solde_1_c, NULL::numeric AS delai_solde_1_h, delai_solde_2, delai_solde_2_c, delai_solde_2_h, nb_non_solde_2 AS nb_non_solde, nb_non_solde_2_c AS nb_non_solde_c, nb_non_solde_2_h AS nb_non_solde_h, 0 AS nb_non_solde_0, 0 AS nb_non_solde_0_c, 0 AS nb_non_solde_0_h, 0 AS nb_non_solde_1, 0 AS nb_non_solde_1_c, 0 AS nb_non_solde_1_h, nb_non_solde_2, nb_non_solde_2_c, nb_non_solde_2_h, nb_non_cloture_2 AS nb_non_cloture, nb_non_cloture_2_c AS nb_non_cloture_c, nb_non_cloture_2_h AS nb_non_cloture_h, 0 AS nb_non_cloture_0, 0 AS nb_non_cloture_0_c, 0 AS nb_non_cloture_0_h, 0 AS nb_non_cloture_1, 0 AS nb_non_cloture_1_c, 0 AS nb_non_cloture_1_h, nb_non_cloture_2, nb_non_cloture_2_c, nb_non_cloture_2_h FROM w_factures_reference WHERE tiers_payant_2_id <> 0 AND ( montant_facture_2 <> 0 OR montant_comptabilise_2 <> 0 OR montant_regle_2 <> 0 OR montant_encours <> 0 ) ; ANALYSE activite.p_factures_reference_tiers ; SELECT base.cti_enable_index('activite', 'i_factures_reference_tiers_1'); SELECT base.cti_enable_index('activite', 'i_factures_reference_tiers_2'); SELECT base.cti_enable_index('activite', 'i_factures_reference_tiers_3'); SELECT base.cti_enable_index('activite', 'i_factures_reference_tiers_4'); UPDATE activite.p_factures SET date_fin = date_fin_facture FROM activite.p_factures_reference WHERE p_factures.no_facture_reference = p_factures_reference.no_facture_reference AND p_factures.date_fin <> p_factures_reference.date_fin_facture ; -- Suppression des tables de travail non utilisées après DROP TABLE IF EXISTS w_factures_reference CASCADE; -- Report motifs de non facturation -- Annulation si facture OK UPDATE activite.p_factures SET motif_non_facturation_id = 0, motif_non_facturation_comment = '' FROM activite.p_factures_reference WHERE p_factures_reference.no_facture_reference = p_factures.no_facture_reference AND p_factures.motif_non_facturation_id <> 0 AND nb_non_calcules = 0 ; UPDATE activite.p_factures_reference SET motif_non_facturation_id = subview.motif_non_facturation_id, motif_non_facturation_comment = subview.motif_non_facturation_comment FROM ( SELECT no_facture_reference, MAX(motif_non_facturation_id) AS motif_non_facturation_id, MAX(motif_non_facturation_comment) AS motif_non_facturation_comment FROM activite.p_factures WHERE motif_non_facturation_id <> 0 GROUP BY 1 ) subview WHERE p_factures_reference.no_facture_reference = subview.no_facture_reference AND nb_non_calcules = 1 ; UPDATE activite.p_factures_reference_tiers SET motif_non_facturation_id = subview.motif_non_facturation_id, motif_non_facturation_comment = subview.motif_non_facturation_comment FROM ( SELECT no_facture_reference, MAX(motif_non_facturation_id) AS motif_non_facturation_id, MAX(motif_non_facturation_comment) AS motif_non_facturation_comment FROM activite.p_factures WHERE motif_non_facturation_id <> 0 GROUP BY 1 ) subview WHERE p_factures_reference_tiers.no_facture_reference = subview.no_facture_reference AND nb_non_calcules = 1 ; UPDATE activite.p_factures_reference SET motif_non_facturation_id = t_motif_non_facturation.oid FROM activite.t_motif_non_facturation WHERE t_motif_non_facturation.code_original = '*CTING' AND nb_non_calcules = 1 AND nb_non_groupe = 1 AND motif_non_facturation_id = 0 ; UPDATE activite.p_factures SET motif_non_facturation_id = p_factures_reference.motif_non_facturation_id FROm activite.p_factures_reference WHERE p_factures_reference.no_facture_reference = p_factures.no_facture_reference AND p_factures.motif_non_facturation_id IS DISTINCT FROM p_factures_reference.motif_non_facturation_id ; UPDATE activite.p_factures_reference_tiers SET motif_non_facturation_id = p_factures_reference.motif_non_facturation_id FROM activite.p_factures_reference WHERE p_factures_reference.no_facture_reference = p_factures_reference_tiers.no_facture_reference AND p_factures_reference_tiers.motif_non_facturation_id IS DISTINCT FROM p_factures_reference.motif_non_facturation_id AND p_factures_reference_tiers.nb_non_calcules = 1 ; -- Pointer les journées facturées dans occupation DROP TABLE IF EXISTS w_sejours_non_factures; CREATE TEMP TABLE w_sejours_non_factures AS SELECT p_sejours.no_sejour, COALESCE(p_factures_reference.date_entree, p_sejours.date_entree) AS date_debut, COALESCE(p_factures_reference.date_sortie, p_sejours.date_sortie) AS date_fin FROM activite.p_sejours LEFT JOIN activite.p_factures_reference ON p_sejours.no_sejour = p_factures_reference.no_sejour WHERE p_factures_reference.nb_non_calcules <> 0 ORDER BY p_sejours.no_sejour, p_factures_reference.date_sortie; CREATE INDEX w_sejours_non_factures_i1 ON w_sejours_non_factures USING btree (no_sejour); UPDATE activite.p_mouvements_sejour SET est_facture = '0' WHERE p_mouvements_sejour.est_mouvement_previsionnel = '1' AND est_facture IS DISTINCT FROM '0'; UPDATE activite.p_mouvements_sejour SET est_facture = '0' FROM w_sejours_non_factures WHERE p_mouvements_sejour.no_sejour = w_sejours_non_factures.no_sejour AND p_mouvements_sejour.date BETWEEN w_sejours_non_factures.date_debut AND w_sejours_non_factures.date_fin; -- Code facture complet dans séjours DROP TABLE IF EXISTS w_sejours_etat_factures; CREATE TEMP TABLE w_sejours_etat_factures AS SELECT p_sejours.no_sejour, MIN(CASE WHEN nb_non_calcules = 0 THEN '1' ELSE '0' END) AS code_facture_reference, MAX(CASE WHEN nb_non_calcules = 0 THEN p_factures_reference.date_facture ELSE '20991231' END) AS date_facture_reference, MIN(CASE WHEN p_sejours.date_facture < '2099-12-31'THEN '1' ELSE '0' END) AS code_facture_sejour FROM activite.p_sejours LEFT JOIN activite.p_factures_reference ON p_sejours.no_sejour = p_factures_reference.no_sejour GROUP BY 1 HAVING MIN(CASE WHEN nb_non_calcules = 0 THEN '1' ELSE '0' END) <> MIN(CASE WHEN p_sejours.date_facture < '2099-12-31'THEN '1' ELSE '0' END) ORDER BY p_sejours.no_sejour; CREATE INDEX w_sejours_etat_factures_i1 ON w_sejours_etat_factures USING btree (no_sejour); UPDATE activite.p_sejours SET date_facture = date_facture_reference FROM w_sejours_etat_factures WHERE p_sejours.no_sejour = w_sejours_etat_factures.no_sejour; -- Actualisation facture de référence des encours UPDATE activite.p_factures_encours SET no_facture_reference = p_factures.no_facture FROM activite.p_factures WHERE p_factures_encours.no_sejour = p_factures.no_sejour AND p_factures_encours.date_debut BETWEEN p_factures.date_debut AND p_factures.date_fin AND p_factures.no_facture = p_factures.no_facture_reference AND p_factures_encours.no_facture_reference <> p_factures.no_facture; -- Etat des séjours DROP TABLE IF EXISTS w_sejours_1; CREATE TEMP TABLE w_sejours_1 as SELECT p_sejours.no_sejour, SUM(CASE WHEN p_factures_reference.date_facture != '2099-12-31' THEN 1 ELSE 0 END) AS nb_facturation_partielle, MAX(nb_non_groupe) AS nb_non_groupe, MAX(nb_non_calcules) AS nb_non_calcules, MAX(nb_non_solde) AS nb_non_solde FROM activite.p_sejours LEFT JOIN activite.p_factures_reference ON p_factures_reference.no_sejour = p_sejours.no_sejour GROUP BY 1; ANALYSE w_sejours_1 ; -- UPDATE Etat des séjours UPDATE activite.p_sejours SET etat_sejour = CASE WHEN type_sejour = 9 THEN '9' -- Fictif WHEN est_sans_facturation ='1' THEN '8' -- Non facturable ou recuse WHEN code_prevu = 1 THEN '0' -- prévu WHEN code_sorti <> 1 THEN CASE WHEN nb_facturation_partielle > 0 THEN '2' ELSE '1' END -- Présent(1) et présent avec faturation partielle (2) WHEN code_sorti = 1 AND nb_non_groupe = 1 THEN '3' -- sorti non groupé WHEN code_sorti = 1 AND nb_non_calcules = 1 AND date_groupage IS NULL THEN '3' -- Sorti non groupé dans le cas où il y a un pré-groupage mais pas de validation DIM WHEN code_sorti = 1 AND nb_non_calcules = 1 THEN CASE WHEN nb_facturation_partielle > 0 THEN '5' ELSE '4' END-- sorti non facturé(4) et sorti non facturé avec facturation partielle (5) WHEN nb_non_solde = 0 THEN '7' -- soldé WHEN nb_non_calcules = 0 AND nb_non_solde = 1 THEN '6' -- Facturé non soldé ELSE '?' END FROM w_sejours_1 WHERE w_sejours_1.no_sejour = p_sejours.no_sejour; ]]> 0 THEN '5' ELSE '4' END WHEN w_sejours.nb_non_solde = 0 THEN '7' WHEN w_sejours.nb_non_calcules = 0 AND w_sejours.nb_non_solde = 1 THEN '6' ELSE '0' END AS etat_new FROM w_sejours ) UPDATE pmsi.p_rss SET etat_sejour = w_sejours_cal.etat_new FROM w_sejours_cal WHERE p_rss.oid = w_sejours_cal.rss_id AND p_rss.etat_sejour IS DISTINCT FROM w_sejours_cal.etat_new ; UPDATE pmsi.p_rss SET etat_sejour = '8' WHERE etat_sejour is null or etat_sejour = '?'; -- Update champ transmission e-pmsi MCO,SSR,PSY,HAD,HORS PMSI WITH sej_pmsi AS ( SELECT DISTINCT no_sejour ,traitement_epmsi ,en_cours_pmsi FROM activite.p_sejour_pmsi ) UPDATE activite.p_sejours SET traitement_epmsi_id = CASE WHEN type_pmsi not in ('1','2','3','4') THEN 5 WHEN type_pmsi = '1' AND sej_pmsi.en_cours_pmsi = '0' AND sej_pmsi.traitement_epmsi in ('11', '12', '13', '14', '15', '21', '22', '23', '24', '25', '26', '30', '31', '32', '33') THEN 11 ELSE 10 END FROM sej_pmsi WHERE sej_pmsi.no_sejour = p_sejours.no_sejour; ]]> 0 ; -- MAJ p_sejours.ghmgme_id pour le champ gme UPDATE activite[PX].p_sejours SET ghmgme_id = t_ghmgme_c.ghmgme_id FROM activite[PX].t_ghmgme_c where t_ghmgme_c.ghmgme_id = p_sejours.gme_id + 10000 AND p_sejours.gme_id > 0 ; ]]> date entrée et nombre à 1 et date début = date entrée et date fin = date sortie alors date début = date fin' WHERE 'TRANSCPJS' NOT IN (SELECT code FROM activite.t_divers); ; UPDATE activite.p_factures_lignes_c SET date_debut = p_factures_lignes_c.date_fin FROM activite.p_factures JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite.t_divers ON t_divers.code = 'TRANSCPJS' AND t_divers.valeur = '1' WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND ( nb_rubrique = 1 OR nb_rubrique = -1 ) AND p_factures_lignes_c.date_fin > p_factures_lignes_c.date_debut AND p_factures_lignes_c.date_fin = date_sortie AND p_factures_lignes_c.date_debut = date_entree AND rubrique_facturation_id IN (SELECT to_id FROM activite.t_listes JOIN activite.t_listes_contenu ON liste_id = t_listes.oid WHERE code = 'CTI_SHO_R' ) ; -- Compte produit -- Forcage depuis parametrage UPDATE activite[PX].p_factures_lignes_c SET compte_produit_id = CASE WHEN est_compte_force = '1' THEN t_service_rubrique.compte_id WHEN p_factures_lignes_c.compte_produit_id = 0 THEN t_service_rubrique.compte_id ELSE p_factures_lignes_c.compte_produit_id END FROM activite[PX].t_lieux, activite[PX].t_service_rubrique WHERE lieu_id = t_lieux.oid AND t_service_rubrique.service_facturation_id = t_lieux.service_facturation_id AND t_service_rubrique.rubrique_facturation_id = p_factures_lignes_c.rubrique_facturation_id AND t_service_rubrique.compte_id <> 0 AND p_factures_lignes_c.compte_produit_id IS DISTINCT FROM CASE WHEN est_compte_force = '1' THEN t_service_rubrique.compte_id WHEN p_factures_lignes_c.compte_produit_id = 0 THEN t_service_rubrique.compte_id ELSE p_factures_lignes_c.compte_produit_id END ; -- Déduction depuis historique service rubrique DROP TABLE IF EXISTS w_factures_lignes_c_compte_serrub; CREATE TEMP TABLE w_factures_lignes_c_compte_serrub AS SELECT rubrique_facturation_id, service_facturation_id, (MAX(Array[date_vente::text || to_char(nb,'FM000000000000'), compte_produit_id::text]))[2]::bigint AS compte_produit_id FROM ( SELECT rubrique_facturation_id, service_facturation_id, date(date_trunc('month',date_vente)) AS date_vente, compte_produit_id, count(*) AS nb FROM activite.p_factures_lignes_c JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite.t_lieux ON p_factures_lignes_c.lieu_id = t_lieux.oid WHERE compte_produit_id <> 0 AND date_vente < '20991231' GROUP BY 1,2,3,4 ) subview GROUP BY 1,2; CREATE INDEX w_factures_lignes_c_compte_serrub_i1 ON w_factures_lignes_c_compte_serrub USING btree (rubrique_facturation_id); UPDATE activite.p_factures_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_serrub.compte_produit_id FROM w_factures_lignes_c_compte_serrub, activite.t_lieux WHERE p_factures_lignes_c.compte_produit_id = 0 AND p_factures_lignes_c.lieu_id = t_lieux.oid AND p_factures_lignes_c.rubrique_facturation_id = w_factures_lignes_c_compte_serrub.rubrique_facturation_id AND t_lieux.service_facturation_id = w_factures_lignes_c_compte_serrub.service_facturation_id; -- Déduction depuis historique service prestation DROP TABLE IF EXISTS w_factures_lignes_c_compte_serpre; CREATE TEMP TABLE w_factures_lignes_c_compte_serpre AS SELECT prestation_id, service_facturation_id, (MAX(Array[date_vente::text || to_char(nb,'FM000000000000'), compte_produit_id::text]))[2]::bigint AS compte_produit_id FROM ( SELECT prestation_id, service_facturation_id, date(date_trunc('month',date_vente)) AS date_vente, compte_produit_id, count(*) AS nb FROM activite.p_factures_lignes_c JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite.t_lieux ON p_factures_lignes_c.lieu_id = t_lieux.oid WHERE compte_produit_id <> 0 AND date_vente < '20991231' GROUP BY 1,2,3,4 ) subview GROUP BY 1,2; CREATE INDEX w_factures_lignes_c_compte_serpre_i1 ON w_factures_lignes_c_compte_serpre USING btree (prestation_id); UPDATE activite.p_factures_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_serpre.compte_produit_id FROM w_factures_lignes_c_compte_serpre, activite.t_lieux WHERE p_factures_lignes_c.compte_produit_id = 0 AND p_factures_lignes_c.lieu_id = t_lieux.oid AND p_factures_lignes_c.prestation_id = w_factures_lignes_c_compte_serpre.prestation_id AND t_lieux.service_facturation_id = w_factures_lignes_c_compte_serpre.service_facturation_id; -- Déduction depuis historique rubrique uniquement DROP TABLE IF EXISTS w_factures_lignes_c_compte_rub; CREATE TEMP TABLE w_factures_lignes_c_compte_rub AS SELECT rubrique_facturation_id, (MAX(Array[date_vente::text || to_char(nb,'FM000000000000'), compte_produit_id::text]))[2]::bigint AS compte_produit_id FROM ( SELECT rubrique_facturation_id, date(date_trunc('month',date_vente)) AS date_vente, compte_produit_id, count(*) AS nb FROM activite.p_factures_lignes_c JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture WHERE compte_produit_id <> 0 AND date_vente < '20991231' GROUP BY 1,2,3 ) subview GROUP BY 1; CREATE INDEX w_factures_lignes_c_compte_rub_i1 ON w_factures_lignes_c_compte_rub USING btree (rubrique_facturation_id); UPDATE activite.p_factures_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_rub.compte_produit_id FROM w_factures_lignes_c_compte_rub WHERE p_factures_lignes_c.compte_produit_id = 0 AND p_factures_lignes_c.rubrique_facturation_id = w_factures_lignes_c_compte_rub.rubrique_facturation_id; -- Forcage depuis parametrage UPDATE activite[PX].p_factures_encours_lignes_c SET compte_produit_id = CASE WHEN est_compte_force = '1' THEN t_service_rubrique.compte_id WHEN p_factures_encours_lignes_c.compte_produit_id = 0 THEN t_service_rubrique.compte_id ELSE p_factures_encours_lignes_c.compte_produit_id END FROM activite[PX].t_lieux, activite[PX].t_service_rubrique WHERE lieu_id = t_lieux.oid AND t_service_rubrique.service_facturation_id = t_lieux.service_facturation_id AND t_service_rubrique.rubrique_facturation_id = p_factures_encours_lignes_c.rubrique_facturation_id AND t_service_rubrique.compte_id <> 0 AND p_factures_encours_lignes_c.compte_produit_id IS DISTINCT FROM CASE WHEN est_compte_force = '1' THEN t_service_rubrique.compte_id WHEN p_factures_encours_lignes_c.compte_produit_id = 0 THEN t_service_rubrique.compte_id ELSE p_factures_encours_lignes_c.compte_produit_id END ; -- Déduction depuis historiques service rubrique UPDATE activite[PX].p_factures_encours_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_serrub.compte_produit_id FROM w_factures_lignes_c_compte_serrub, activite[PX].t_lieux WHERE (p_factures_encours_lignes_c.compte_produit_id = 0 OR p_factures_encours_lignes_c.compte_produit_id IS NULL) AND p_factures_encours_lignes_c.lieu_id = t_lieux.oid AND p_factures_encours_lignes_c.rubrique_facturation_id = w_factures_lignes_c_compte_serrub.rubrique_facturation_id AND t_lieux.service_facturation_id = w_factures_lignes_c_compte_serrub.service_facturation_id; -- Déduction depuis historiques service prestation UPDATE activite.p_factures_encours_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_serpre.compte_produit_id FROM w_factures_lignes_c_compte_serpre, activite.t_lieux WHERE p_factures_encours_lignes_c.compte_produit_id = 0 AND p_factures_encours_lignes_c.lieu_id = t_lieux.oid AND p_factures_encours_lignes_c.prestation_id = w_factures_lignes_c_compte_serpre.prestation_id AND t_lieux.service_facturation_id = w_factures_lignes_c_compte_serpre.service_facturation_id; -- Déduction depuis historiques rubrique uniquement UPDATE activite[PX].p_factures_encours_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_rub.compte_produit_id FROM w_factures_lignes_c_compte_rub WHERE (p_factures_encours_lignes_c.compte_produit_id = 0 OR p_factures_encours_lignes_c.compte_produit_id IS NULL) AND p_factures_encours_lignes_c.rubrique_facturation_id = w_factures_lignes_c_compte_rub.rubrique_facturation_id; -- Maintenance rubrique_facturation CTI SELECT activite[PX].cti_reorganize_rubrique_facture_c('activite[PX].p_factures_lignes_c'); SELECT activite[PX].cti_reorganize_rubrique_facture_c('activite[PX].p_factures_encours_lignes_c'); -- Valorisation des actes gratuits UPDATE activite.p_factures_lignes_h SET montant_non_facture = round(p_factures_lignes_h.prix_unitaire * p_factures_lignes_h.nb_prestation * p_factures_lignes_h.coefficient * p_factures_lignes_h.coefficient_mco, 2) FROM base.t_actes, activite.p_factures JOIN activite.p_sejours ON p_sejours.no_sejour = p_factures.no_sejour WHERE p_factures_lignes_h.no_facture = p_factures.no_facture AND p_factures_lignes_h.acte_id = t_actes.oid AND p_factures_lignes_h.montant_facture = 0 AND (p_sejours.est_budget_global IS DISTINCT FROM '1' OR p_factures.code_facture <> '0') AND COALESCE(p_factures_lignes_h.montant_facture_actes_inclus_dans_sejour, 0) = 0; -- Regroupement des lignes de CP (cas de rubriques facturées deux fois sur même date pour pb tarif patient/mutuelle DROP TABLE IF EXISTS w_cp_double; CREATE TEMP TABLE w_cp_double AS SELECT no_facture, date_debut, date_fin, prestation_id, rubrique_facturation_id, nb_rubrique, nb_prestation, coefficient, SUM(prix_unitaire) AS prix_unitaire, round(base.cti_division(SUM(montant_facture_1),SUM(montant_facture))*100.00,0) AS taux_1, round(base.cti_division(SUM(montant_facture_2),SUM(montant_facture))*100.00,0) AS taux_2, round(base.cti_division(SUM(montant_facture_22),SUM(montant_facture))*100.00,0) AS taux_22, round(base.cti_division(SUM(montant_facture_0),SUM(montant_facture))*100.00,0) AS taux_0, 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, MIN(p_factures_lignes_c.CTID) AS keepCTID FROM activite.p_factures_lignes_c WHERE rubrique_facturation_id IN (SELECT to_id FROM activite.v_listes_3 WHERE liste_code = 'CTI_SHO_R') AND montant_facture <> 0 GROUP BY 1,2,3,4,5,6,7,8 HAVING count(*) > 1; INSERT INTO w_cp_double SELECT no_facture, date_debut, date_fin, MAX(prestation_id) AS prestation_id, rubrique_facturation_id, 1 AS nb_rubrique, 1 AS nb_prestation, 1 AS coefficient, SUM(montant_encours) AS prix_unitaire, round(base.cti_division(SUM(montant_facture_1),SUM(montant_facture))*100.00,0) AS taux_1, round(base.cti_division(SUM(montant_facture_2),SUM(montant_facture))*100.00,0) AS taux_2, round(base.cti_division(SUM(montant_facture_22),SUM(montant_facture))*100.00,0) AS taux_22, round(base.cti_division(SUM(montant_facture_0),SUM(montant_facture))*100.00,0) AS taux_0, 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, MIN(p_factures_lignes_c.CTID) AS keepCTID FROM activite.p_factures_lignes_c WHERE rubrique_facturation_id IN (SELECT to_id FROM activite.v_listes_3 WHERE liste_code = 'CTI_SHO_R') AND montant_encours <> 0 GROUP BY 1,2,3,5,6,7 HAVING count(*) > 1; UPDATE w_cp_double SET taux_0 = CASE WHEN taux_0 < 0 THEN 0 WHEN taux_0 > 100 THEN 100 ELSE taux_0 END WHERE taux_0 <> CASE WHEN taux_0 < 0 THEN 0 WHEN taux_0 > 100 THEN 100 ELSE taux_0 END ; UPDATE w_cp_double SET taux_1 = CASE WHEN taux_1 < 0 THEN 0 WHEN taux_1 > 100 THEN 100 ELSE taux_1 END WHERE taux_1 <> CASE WHEN taux_1 < 0 THEN 0 WHEN taux_1 > 100 THEN 100 ELSE taux_1 END ; UPDATE w_cp_double SET taux_2 = CASE WHEN taux_2 < 0 THEN 0 WHEN taux_2 > 100 THEN 100 ELSE taux_2 END WHERE taux_2 <> CASE WHEN taux_2 < 0 THEN 0 WHEN taux_2 > 100 THEN 100 ELSE taux_2 END ; UPDATE w_cp_double SET taux_22 = CASE WHEN taux_22 < 0 THEN 0 WHEN taux_22 > 100 THEN 100 ELSE taux_22 END WHERE taux_22 <> CASE WHEN taux_22 < 0 THEN 0 WHEN taux_22 > 100 THEN 100 ELSE taux_22 END ; UPDATE w_cp_double SET prestation_id = subview.prestation_id FROM ( SELECT rubrique_facturation_id, (MAX(ARRAY[nb,prestation_id]))[2] AS prestation_id FROM ( SELECT rubrique_facturation_id, prestation_id, count(*) AS nb FROM w_cp_double GROUP BY 1,2) subview GROUP BY 1 ) subview WHERE w_cp_double.rubrique_facturation_id = subview.rubrique_facturation_id AND w_cp_double.prestation_id <> subview.prestation_id; CREATE INDEX w_cp_double_i1 ON w_cp_double USING btree (no_facture); DELETE FROM activite.p_factures_lignes_c USING w_cp_double WHERE p_factures_lignes_c.no_facture = w_cp_double.no_facture AND p_factures_lignes_c.date_debut = w_cp_double.date_debut AND p_factures_lignes_c.date_fin = w_cp_double.date_fin AND (p_factures_lignes_c.prestation_id = w_cp_double.prestation_id OR w_cp_double.montant_encours <> 0) AND p_factures_lignes_c.rubrique_facturation_id = w_cp_double.rubrique_facturation_id AND (p_factures_lignes_c.nb_rubrique = w_cp_double.nb_rubrique OR w_cp_double.montant_encours <> 0) AND (p_factures_lignes_c.nb_prestation = w_cp_double.nb_prestation OR w_cp_double.montant_encours <> 0) AND (p_factures_lignes_c.coefficient = w_cp_double.coefficient OR w_cp_double.montant_encours <> 0) AND p_factures_lignes_c.CTID <> keepCTID; UPDATE activite.p_factures_lignes_c SET prestation_id = w_cp_double.prestation_id, nb_rubrique = w_cp_double.nb_rubrique, nb_prestation = w_cp_double.nb_prestation, coefficient = w_cp_double.coefficient, prix_unitaire = w_cp_double.prix_unitaire, taux_0 = w_cp_double.taux_0, taux_1 = w_cp_double.taux_1, taux_2 = w_cp_double.taux_2, taux_22 = w_cp_double.taux_22, montant_facture = w_cp_double.montant_facture, montant_facture_0 = w_cp_double.montant_facture_0, montant_facture_1 = w_cp_double.montant_facture_1, montant_facture_2 = w_cp_double.montant_facture_2, montant_facture_22 = w_cp_double.montant_facture_22, montant_comptabilise = w_cp_double.montant_comptabilise, montant_comptabilise_0 = w_cp_double.montant_comptabilise_0, montant_comptabilise_1 = w_cp_double.montant_comptabilise_1, montant_comptabilise_2 = w_cp_double.montant_comptabilise_2, montant_comptabilise_22 = w_cp_double.montant_comptabilise_22, montant_encours = w_cp_double.montant_encours, montant_encours_0 = w_cp_double.montant_encours_0, montant_encours_1 = w_cp_double.montant_encours_1, montant_encours_2 = w_cp_double.montant_encours_2, montant_encours_22 = w_cp_double.montant_encours_22 FROM w_cp_double WHERE p_factures_lignes_c.no_facture = w_cp_double.no_facture AND p_factures_lignes_c.date_debut = w_cp_double.date_debut AND p_factures_lignes_c.date_fin = w_cp_double.date_fin AND (p_factures_lignes_c.prestation_id = w_cp_double.prestation_id OR w_cp_double.montant_encours <> 0) AND p_factures_lignes_c.rubrique_facturation_id = w_cp_double.rubrique_facturation_id AND (p_factures_lignes_c.nb_rubrique = w_cp_double.nb_rubrique OR w_cp_double.montant_encours <> 0) AND (p_factures_lignes_c.nb_prestation = w_cp_double.nb_prestation OR w_cp_double.montant_encours <> 0) AND (p_factures_lignes_c.coefficient = w_cp_double.coefficient OR w_cp_double.montant_encours <> 0); -- Report sur le lieu de sortie de sortie en cas d'absence UPDATE activite.p_factures_lignes_c SET lieu_id = p_sejours.lieu_sortie_id FROM activite.p_factures, activite.p_mouvements_sejour, activite.p_sejours WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND p_factures.no_sejour = p_mouvements_sejour.no_sejour AND p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND activite.p_factures_lignes_c.date_debut = p_mouvements_sejour.date AND (p_mouvements_sejour.heure_fin = 240000 OR p_mouvements_sejour.nb_sorties_directes = 1) AND p_factures_lignes_c.lieu_id IN (SELECT oid FROM activite.t_lieux_c WHERE unite_fonctionnelle_id IN (SELECT oid FROM activite.t_unites_fonctionnelles WHERE code = '*ABS')) ; ]]> 0 OR montant_facture_1_h <> 0) ; UPDATE activite.p_factures SET tiers_payant_2_id = t_tiers_payant.oid FROM activite.t_tiers_payant WHERE t_tiers_payant.code_original = '*CTINR2' AND tiers_payant_2_id = 0 AND (montant_facture_2_c <> 0 OR montant_facture_2_h <> 0) ; -- Nouvelle table des clients en attendant le dvp natif SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_c_1'); SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_c_2'); SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_c_3'); SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_c_4'); SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_c_5'); SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_c_8'); INSERT INTO activite.p_facture_solde_tiers_c ( facture_id, no_facture, date_comptable, rubrique_comptabilisation_id, prestation_id, tiers_payant_id, montant_comptabilise, montant_regle, montant_comptabilise_0, montant_regle_0, od_avoir, od_non_comptabilise ) SELECT facture_id, p_factures_soldes_c.no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, tiers_payant_0_id AS tiers_payant_id, montant_comptabilise_0, montant_regle_0, montant_comptabilise_0, montant_regle_0, od_avoir, od_non_comptabilise FROM activite.p_factures_soldes_c JOIN activite.p_factures ON p_factures_soldes_c.no_facture = p_factures.no_facture WHERE p_factures.tiers_payant_0_id > 0 AND ( p_factures_soldes_c.montant_comptabilise_0 <> 0 OR p_factures_soldes_c.montant_regle_0 <> 0 ); INSERT INTO activite.p_facture_solde_tiers_c ( facture_id, no_facture, date_comptable, rubrique_comptabilisation_id, prestation_id, tiers_payant_id, montant_comptabilise, montant_regle, montant_comptabilise_1, montant_regle_1, od_avoir, od_non_comptabilise ) SELECT facture_id, p_factures_soldes_c.no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, tiers_payant_1_id AS tiers_payant_id, montant_comptabilise_1, montant_regle_1, montant_comptabilise_1, montant_regle_1, od_avoir, od_non_comptabilise FROM activite.p_factures_soldes_c JOIN activite.p_factures ON p_factures_soldes_c.no_facture = p_factures.no_facture WHERE p_factures.tiers_payant_1_id > 0 AND ( p_factures_soldes_c.montant_comptabilise_1 <> 0 OR p_factures_soldes_c.montant_regle_1 <> 0 ); INSERT INTO activite.p_facture_solde_tiers_c ( facture_id, no_facture, date_comptable, rubrique_comptabilisation_id, prestation_id, tiers_payant_id, montant_comptabilise, montant_regle, montant_comptabilise_2, montant_regle_2, od_avoir, od_non_comptabilise ) SELECT facture_id, p_factures_soldes_c.no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, tiers_payant_2_id AS tiers_payant_id, montant_comptabilise_2, montant_regle_2, montant_comptabilise_2, montant_regle_2, od_avoir, od_non_comptabilise FROM activite.p_factures_soldes_c JOIN activite.p_factures ON p_factures_soldes_c.no_facture = p_factures.no_facture WHERE p_factures.tiers_payant_2_id > 0 AND ( p_factures_soldes_c.montant_comptabilise_2 <> 0 OR p_factures_soldes_c.montant_regle_2 <> 0 ); INSERT INTO activite.p_facture_solde_tiers_c ( facture_id, no_facture, date_comptable, rubrique_comptabilisation_id, prestation_id, tiers_payant_id, montant_comptabilise, montant_regle, montant_comptabilise_2, montant_regle_2, od_avoir, od_non_comptabilise ) SELECT facture_id, p_factures_soldes_c.no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, tiers_payant_22_id AS tiers_payant_id, montant_comptabilise_22, montant_regle_22, montant_comptabilise_22, montant_regle_22, od_avoir, od_non_comptabilise FROM activite.p_factures_soldes_c JOIN activite.p_factures ON p_factures_soldes_c.no_facture = p_factures.no_facture WHERE p_factures.tiers_payant_22_id > 0 AND ( p_factures_soldes_c.montant_comptabilise_22 <> 0 OR p_factures_soldes_c.montant_regle_22 <> 0 ); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_c_1'); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_c_2'); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_c_3'); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_c_4'); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_c_5'); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_c_8'); -- Nouvelle table des honoraires SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_h_1'); SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_h_2'); SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_h_3'); SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_h_4'); SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_h_5'); SELECT base.cti_disable_index('activite', 'i_facture_solde_tiers_h_8'); INSERT INTO activite.p_facture_solde_tiers_h ( facture_id, no_facture, date_comptable, rubrique_comptabilisation_id, prestation_id, tiers_payant_id, montant_comptabilise, montant_regle, montant_comptabilise_0, montant_regle_0, od_avoir, od_non_comptabilise ) SELECT facture_id, p_factures_soldes_h.no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, tiers_payant_0_id AS tiers_payant_id, montant_comptabilise_0, montant_regle_0, montant_comptabilise_0, montant_regle_0, od_avoir, od_non_comptabilise FROM activite.p_factures_soldes_h JOIN activite.p_factures ON p_factures_soldes_h.no_facture = p_factures.no_facture WHERE p_factures.tiers_payant_0_id > 0 AND ( p_factures_soldes_h.montant_comptabilise_0 <> 0 OR p_factures_soldes_h.montant_regle_0 <> 0 ); INSERT INTO activite.p_facture_solde_tiers_h ( facture_id, no_facture, date_comptable, rubrique_comptabilisation_id, prestation_id, tiers_payant_id, montant_comptabilise, montant_regle, montant_comptabilise_1, montant_regle_1, od_avoir, od_non_comptabilise ) SELECT facture_id, p_factures_soldes_h.no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, tiers_payant_1_id AS tiers_payant_id, montant_comptabilise_1, montant_regle_1, montant_comptabilise_1, montant_regle_1, od_avoir, od_non_comptabilise FROM activite.p_factures_soldes_h JOIN activite.p_factures ON p_factures_soldes_h.no_facture = p_factures.no_facture WHERE p_factures.tiers_payant_1_id > 0 AND ( p_factures_soldes_h.montant_comptabilise_1 <> 0 OR p_factures_soldes_h.montant_regle_1 <> 0 ); INSERT INTO activite.p_facture_solde_tiers_h ( facture_id, no_facture, date_comptable, rubrique_comptabilisation_id, prestation_id, tiers_payant_id, montant_comptabilise, montant_regle, montant_comptabilise_2, montant_regle_2, od_avoir, od_non_comptabilise ) SELECT facture_id, p_factures_soldes_h.no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, tiers_payant_2_id AS tiers_payant_id, montant_comptabilise_2, montant_regle_2, montant_comptabilise_2, montant_regle_2, od_avoir, od_non_comptabilise FROM activite.p_factures_soldes_h JOIN activite.p_factures ON p_factures_soldes_h.no_facture = p_factures.no_facture WHERE p_factures.tiers_payant_2_id > 0 AND ( p_factures_soldes_h.montant_comptabilise_2 <> 0 OR p_factures_soldes_h.montant_regle_2 <> 0 ); INSERT INTO activite.p_facture_solde_tiers_h ( facture_id, no_facture, date_comptable, rubrique_comptabilisation_id, prestation_id, tiers_payant_id, montant_comptabilise, montant_regle, montant_comptabilise_2, montant_regle_2, od_avoir, od_non_comptabilise ) SELECT facture_id, p_factures_soldes_h.no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id, tiers_payant_22_id AS tiers_payant_id, montant_comptabilise_22, montant_regle_22, montant_comptabilise_22, montant_regle_22, od_avoir, od_non_comptabilise FROM activite.p_factures_soldes_h JOIN activite.p_factures ON p_factures_soldes_h.no_facture = p_factures.no_facture WHERE p_factures.tiers_payant_22_id > 0 AND ( p_factures_soldes_h.montant_comptabilise_22 <> 0 OR p_factures_soldes_h.montant_regle_22 <> 0 ); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_h_1'); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_h_2'); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_h_3'); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_h_4'); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_h_5'); SELECT base.cti_enable_index('activite', 'i_facture_solde_tiers_h_8'); ]]> 0 AND SUM(nb_prestation) <> 0 ORDER BY 1,2,3; INSERT INTO w_intervention SELECT sejour_id, p_factures_lignes_non_facturees_h.date_debut, p_factures_lignes_non_facturees_h.heure_debut, (MAX(CASE WHEN t_prestations.code IN ('ADC','ACO') THEN Array[icr_1,COALESCE(acte_id,0)] ELSE null END))[2] AS acte_id, (MAX(CASE WHEN t_prestations.code IN ('ADC','ACO') THEN Array[icr_1,medecin_facture_id] ELSE NULL END))[2] AS medecin_chirurgien_id, (MAX(CASE WHEN t_prestations.code IN ('ADA') THEN Array[icr_1,medecin_facture_id] ELSE NULL END))[2] AS medecin_anesthesiste_id FROM activite.p_factures_lignes_non_facturees_h JOIN activite.p_factures ON p_factures_lignes_non_facturees_h.no_facture = p_factures.no_facture JOIN base.t_actes ON acte_id = t_actes.oid JOIN activite.t_prestations ON prestation_id = t_prestations.oid WHERE t_prestations.code IN ('ADC', 'ACO', 'ADA') AND t_actes.code NOT LIKE 'YYYY%' AND sejour_id NOT IN (SELECT sejour_id FROM w_intervention) GROUP BY 1,2,3 HAVING MAX(CASE WHEN t_prestations.code IN ('ADC','ACO') THEN acte_id ELSE 0 END) > 0 ORDER BY 1,2,3; TRUNCATE activite.p_intervention; -- Ajout des conditions "sejour_id != 0 AND date_debut IS DISTINCT FROM NULL" pour dégager les lignes sans date de début et sans référence à un séjour existant -- CLA 05/05/14 INSERT INTO activite.p_intervention ( sejour_id, date_debut, heure_debut, salle_id, medecin_chirurgien_id, medecin_anesthesiste_id, acte_id ) SELECT sejour_id, date_debut, heure_debut, 0::bigint AS salle_id, COALESCE(medecin_chirurgien_id,0), COALESCE(medecin_anesthesiste_id,0), acte_id FROM w_intervention WHERE sejour_id != 0 AND date_debut IS DISTINCT FROM NULL; -- Ventilation selon date intervention SELECT activite.cti_ventilation_lignes('activite.p_factures_lignes_c'); -- Suppression des tables de travail non utilisées après DROP TABLE IF EXISTS w_intervention CASCADE; ]]> 0 AND destination_id <> etablissement_destination_id AND length(t_etablissements.code) = 9 ., INSERT INTO activite.p_sejours_transferts(sejour_id, provenance_id, destination_id) SELECT sejour_id, MAX(etablissement_provenance_id), MAX(etablissement_destination_id) FROM activite.p_sejour_pmsi JOIN pmsi.p_rss_transferts ON p_sejour_pmsi.rss_id = p_rss_transferts.rss_id WHERE sejour_id NOT IN (SELECT sejour_id FROM activite.p_sejours_transferts) GROUP BY 1 HAVING ( MAX(etablissement_provenance_id) > 0 OR MAX(etablissement_destination_id) > 0 ) ',1) WHERE 'p_rss' IN (SELECT tablename FROM pg_tables WHERE schemaname = 'pmsi' AND tablename = 'p_rss') ; -- Ajustement chiffre d'affaire fil de l'eau PMSI SELECT activite.cti_ajust_fildeleau_rsf() ; ]]> 0 AND medecin_sejour_id = 0 AND activite_ccam <> '4' AND medecin_facture_id != 0 AND type_sejour IN ('2','3','4') GROUP BY 1; UPDATE activite.p_sejours SET medecin_sejour_id = w_executants.medecin_id FROM w_executants WHERE 1=1 AND w_executants.sejour_id = p_sejours.oid AND p_sejours.medecin_sejour_id = 0; UPDATE activite.p_mouvements_sejour SET medecin_sejour_id = p_sejours.medecin_sejour_id FROM activite.p_sejours WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND p_sejours.medecin_sejour_id <> p_mouvements_sejour.medecin_sejour_id ; ]]> = 20100101 AND to_char(date_sortie, 'YYYYMM')::numeric <= to_char(now() + interval '1 month', 'YYYYMM')::numeric ) subview ; DELETE FROM activite[PX].p_chiffrier WHERE mois > to_char(now() + interval '1 month', 'YYYYMM')::numeric ; ]]> = date_entree AND date_sortie < '2099-12-31'::date GROUP BY 2 ORDER BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'c_postaux', code_postal_id FROM activite[PX].p_sejours WHERE code_postal_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'c_postaux') GROUP BY 2; INSERT INTO activite.p_oids (code_table, oid) SELECT 'forme_activite', forme_activite_id FROM activite.p_sejours WHERE forme_activite_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'forme_activite') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'medecin_s', medecin_sejour_id FROM activite[PX].p_sejours WHERE medecin_sejour_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'medecin_s') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'medecin_s', medecin_sejour_id FROM activite[PX].p_mouvements_sejour WHERE medecin_sejour_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'medecin_s') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'ghs', ghs_id FROM activite[PX].p_sejours WHERE ghs_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'ghs') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'ghm', ghm_id FROM activite[PX].p_sejours WHERE ghm_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'ghm') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'ghs', ghs_id FROM activite[PX].p_factures WHERE ghs_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'ghs') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'medecin_x', medecin_facture_id FROM activite[PX].p_factures_lignes_h WHERE medecin_facture_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'medecin_x') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'gme', gme_id FROM activite[PX].p_sejours WHERE gme_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'gme') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'ghmgme', ghmgme_id FROM activite[PX].p_sejours WHERE ghmgme_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'ghmgme') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'rubrique_c', rubrique_facturation_id FROM activite[PX].p_factures_lignes_c WHERE rubrique_facturation_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'rubrique_c') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'rubrique_c', rubrique_comptabilisation_id FROM activite[PX].p_factures_lignes_c WHERE rubrique_comptabilisation_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'rubrique_c') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'rubrique_c', rubrique_facturation_id FROM activite[PX].p_factures_encours_lignes_c WHERE rubrique_facturation_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'rubrique_c') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'rubrique_c', rubrique_comptabilisee_id FROM activite[PX].p_factures_soldes_c WHERE rubrique_comptabilisee_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'rubrique_c') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'prestation_c', prestation_id FROM activite[PX].p_factures_lignes_c WHERE prestation_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'prestation_c') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'prestation_c', prestation_id FROM activite[PX].p_factures_encours_lignes_c WHERE prestation_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'prestation_c') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'lpp', lpp_id FROM activite[PX].p_factures_lignes_c WHERE lpp_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'lpp') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'ucd', ucd_id FROM activite[PX].p_factures_lignes_c WHERE ucd_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'ucd') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'prestation_c', prestation_id FROM activite[PX].p_factures_soldes_c WHERE prestation_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'prestation_c') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'prestation_h', prestation_id FROM activite[PX].p_factures_lignes_h WHERE prestation_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'prestation_h') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'acte_h', acte_id FROM activite[PX].p_factures_lignes_h WHERE acte_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'acte_h') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'protocole_h', protocole_id FROM activite[PX].p_factures_lignes_h WHERE protocole_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'protocole_h') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'tiers_payant', tiers_payant_0_id FROM activite[PX].p_factures WHERE tiers_payant_0_id <> 0 AND tiers_payant_0_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'tiers_payant') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'tiers_payant', tiers_payant_1_id FROM activite[PX].p_factures WHERE tiers_payant_1_id <> 0 AND tiers_payant_1_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'tiers_payant') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'tiers_payant', tiers_payant_2_id FROM activite[PX].p_factures WHERE tiers_payant_2_id <> 0 AND tiers_payant_2_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'tiers_payant') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'tiers_payant', tiers_payant_22_id FROM activite[PX].p_factures WHERE tiers_payant_22_id <> 0 AND tiers_payant_22_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'tiers_payant') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'mode_traitement', t_services_facturation.mode_traitement_id FROM activite[PX].t_lieux JOIN activite[PX].t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE t_services_facturation.mode_traitement_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'mode_traitement' AND oid IS NOT NULL) AND t_services_facturation.mode_traitement_id IS NOT NULL GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'lit', lit_id FROM activite[PX].t_lieux WHERE lit_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'lit') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'service', service_facturation_id FROM activite[PX].t_lieux WHERE service_facturation_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'service') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'activite', activite_id FROM activite[PX].t_lieux WHERE activite_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'activite') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'etage', etage_id FROM activite[PX].t_lieux, activite[PX].t_lits WHERE lit_id = t_lits.oid AND etage_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'etage') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'compte', compte_produit_id FROM activite[PX].p_factures_lignes_c WHERE compte_produit_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'compte') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'compte', compte_produit_analytique_id FROM activite[PX].p_factures_lignes_c WHERE compte_produit_analytique_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'compte') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'uf', unite_fonctionnelle_id FROM activite[PX].t_lieux WHERE unite_fonctionnelle_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'uf') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'um', unite_medicale_id FROM activite[PX].t_lieux WHERE unite_medicale_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'um') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'medecin_t', medecin_traitant_id FROM activite[PX].p_sejours WHERE medecin_traitant_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'medecin_t') GROUP BY 2; INSERT INTO activite[PX].p_oids (code_table, oid) SELECT 'filiere_soin', filiere_soin_principale_id FROM activite[PX].p_sejours WHERE filiere_soin_principale_id NOT IN (SELECT oid FROM activite[PX].p_oids WHERE code_table = 'filiere_soin') GROUP BY 2; ]]> '' ; ]]> 1 ) select keep_oid, unnest(all_oid) as all_oid from lieux ; ANALYSE w_lieux ; UPDATE activite[PX].p_factures_encours SET lieu_sortie_id = keep_oid FROM w_lieux WHERE 1=1 AND lieu_sortie_id = all_oid AND lieu_sortie_id != keep_oid ; UPDATE activite[PX].p_factures_encours_lignes_c SET lieu_id = keep_oid FROM w_lieux WHERE 1=1 AND lieu_id = all_oid AND lieu_id != keep_oid ; -- Report sur justificatif encours UPDATE activite.p_facture_encours_ligne_valorise_c SET lieu_id = p_factures_encours_lignes_c.lieu_id FROM activite.p_factures_encours_lignes_c WHERE p_facture_encours_ligne_valorise_c.no_facture = p_factures_encours_lignes_c.no_facture AND p_facture_encours_ligne_valorise_c.date_debut = p_factures_encours_lignes_c.date_debut AND p_facture_encours_ligne_valorise_c.prestation_id = p_factures_encours_lignes_c.prestation_id AND p_facture_encours_ligne_valorise_c.lieu_id <> p_factures_encours_lignes_c.lieu_id ; DELETE FROM activite[PX].t_lieux USING w_lieux WHERE 1=1 AND t_lieux.oid = w_lieux.all_oid AND w_lieux.keep_oid != t_lieux.oid ; --ALTER SEQUENCE activite[PX].s_lieux RESTART WITH 1; TRUNCATE activite[PX].p_factures; ALTER SEQUENCE activite[PX].s_factures RESTART WITH 1; TRUNCATE activite[PX].p_factures_lignes_non_facturees_c; TRUNCATE activite[PX].p_factures_lignes_non_facturees_h; TRUNCATE activite[PX].p_factures_lignes_c; TRUNCATE activite[PX].p_factures_lignes_h; TRUNCATE activite[PX].p_factures_rejets; TRUNCATE activite[PX].p_factures_soldes_c; TRUNCATE activite[PX].p_facture_solde_tiers_c; TRUNCATE activite[PX].p_factures_soldes_h; TRUNCATE activite[PX].p_facture_solde_tiers_h; TRUNCATE activite[PX].p_factures_comptables; TRUNCATE activite[PX].p_factures_reference; TRUNCATE activite[PX].p_factures_reference_tiers; TRUNCATE activite[PX].p_intervention; ]]>