'0' GROUP BY 1,2 HAVING count(*) > 1 ) subview WHERE FD_FAC_DETFAC.CTID = subview.toctid; -- Numéros de titres à 0 UPDATE prod_clinicom.FD_FAC_DETFAC SET CLI_DONN_NOOBJETFAC = (9 * (SELECT 10 ^ length(max(CLI_DONN_NOOBJETFAC)) FROM prod_clinicom.FD_FAC_DETFAC WHERE CLI_CODE_OBJETFACTURATION = 'T')) + CLI_CODE_NOINTERNEOBJET FROM w_ADMISSIONS_select WHERE cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT AND CLI_CODE_OBJETFACTURATION = 'T' AND CLI_DONN_NOOBJETFAC = '0'; -- Lit à la place de chambre dans mouvements DROP TABLE IF EXISTS w_MVTS_MICROMOUVEMENTS_lits; CREATE TEMP TABLE w_MVTS_MICROMOUVEMENTS_lits AS SELECT CLI_DONN_NOABSEPISODE, CLI_CODE_BOX, MAX(CLI_CODE_LIT) AS CLI_CODE_LIT FROM prod_clinicom.FD_MVTS_MICROMOUVEMENTS JOIN w_ADMISSIONS_select ON cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT WHERE CLI_CODE_LIT <> '' AND CLI_CODE_BOX <> '' GROUP BY 1,2; CREATE INDEX w_MVTS_MICROMOUVEMENTS_lits_i1 ON w_MVTS_MICROMOUVEMENTS_lits USING btree (CLI_DONN_NOABSEPISODE); UPDATE prod_clinicom.FD_MVTS_MOUVEMENTS SET CLI_DONN_CHAMBRE = CLI_CODE_LIT FROM w_MVTS_MICROMOUVEMENTS_lits WHERE FD_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE = w_MVTS_MICROMOUVEMENTS_lits.CLI_DONN_NOABSEPISODE AND CLI_DONN_CHAMBRE = CLI_CODE_BOX ; -- Chambre non renseignée (NR) UPDATE prod_clinicom.FD_MVTS_MOUVEMENTS SET CLI_DONN_CHAMBRE = '' FROM w_ADMISSIONS_select WHERE CLI_DONN_CHAMBRE = 'NR' AND cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT ]]> '' GROUP BY 1; ALTER TABLE w_MVTS_EPISODES_chambre ADD CONSTRAINT w_MVTS_EPISODES_chambre_pkey PRIMARY KEY(CLI_DONN_NOABSEPISODE); DROP TABLE IF EXISTS w_MVTS_EPISODES_medecinpmsi; CREATE TEMP TABLE w_MVTS_EPISODES_medecinpmsi AS SELECT FD_PMSI_RSS.CLI_DONN_NOABSEPISODE, (MAX(Array[CLI_Date_SortieUM::text,FD_PMSI_RUM.CLI_Code_MedecinResponsable]))[2] AS CLI_CODE_MEDECINPMSI FROM prod_clinicom.FD_PMSI_RSS JOIN w_ADMISSIONS_select ON cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN prod_clinicom.FD_PMSI_RUM ON FD_PMSI_RSS.CLI_Donn_NoRSS = FD_PMSI_RUM.CLI_Donn_NoRSS AND FD_PMSI_RSS.CLI_Donn_NoAbsEpisode = FD_PMSI_RUM.CLI_Donn_NoAbsEpisode WHERE (FD_PMSI_RUM.CLI_Code_MedecinResponsable <> '' AND FD_PMSI_RUM.CLI_Code_MedecinResponsable <> 'NR') GROUP BY 1; ALTER TABLE w_MVTS_EPISODES_medecinpmsi ADD CONSTRAINT w_MVTS_EPISODES_medecinpmsi_pkey PRIMARY KEY(CLI_DONN_NOABSEPISODE); UPDATE prod_clinicom.FD_MVTS_EPISODES SET CLI_CODE_MEDECINRESPONSABLE = CLI_CODE_MEDECINPMSI FROM w_MVTS_EPISODES_medecinpmsi WHERE w_MVTS_EPISODES_medecinpmsi.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE AND (CLI_CODE_MEDECINRESPONSABLE = '' OR CLI_CODE_MEDECINRESPONSABLE = 'NR'); DROP TABLE IF EXISTS w_MVTS_EPISODES_medecin; CREATE TEMP TABLE w_MVTS_EPISODES_medecin AS SELECT FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE, (MAX(Array[FD_ACTES_ENTETE.CLI_DATE_SAISIE::text, FD_ACTES_ENTETE.CLI_CODE_MEDECIN1]))[2] AS CLI_CODE_MEDECIN FROM prod_clinicom.FD_ACTES_ENTETE JOIN w_ADMISSIONS_select ON cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE AND (CLI_CODE_MEDECINRESPONSABLE = '' OR CLI_CODE_MEDECINRESPONSABLE = 'NR') WHERE (FD_ACTES_ENTETE.CLI_CODE_MEDECIN1 <> '' AND FD_ACTES_ENTETE.CLI_CODE_MEDECIN1 <> 'NR') GROUP BY 1; ALTER TABLE w_MVTS_EPISODES_medecin ADD CONSTRAINT w_MVTS_EPISODES_medecin_pkey PRIMARY KEY(CLI_DONN_NOABSEPISODE); UPDATE prod_clinicom.FD_MVTS_EPISODES SET CLI_CODE_MEDECINRESPONSABLE = CLI_CODE_MEDECIN FROM w_MVTS_EPISODES_medecin WHERE w_MVTS_EPISODES_medecin.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE AND (CLI_CODE_MEDECINRESPONSABLE = '' OR CLI_CODE_MEDECINRESPONSABLE = 'NR'); UPDATE prod_clinicom.FD_MVTS_EPISODES SET CLI_CODE_MEDECINRESPONSABLE = '' FROM w_ADMISSIONS_select WHERE cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT AND CLI_CODE_MEDECINRESPONSABLE = 'NR'; DROP TABLE IF EXISTS w_FB_MVTS_MOUVEMENTS_entree; CREATE TEMP TABLE w_FB_MVTS_MOUVEMENTS_entree AS SELECT CLI_CODE_MOUVEMENT FROM prod_clinicom.FD_MVTS_ADMISSIONS JOIN w_ADMISSIONS_select ON cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT GROUP BY 1; DROP TABLE IF EXISTS w_FB_MVTS_MOUVEMENTS_sortie; CREATE TEMP TABLE w_FB_MVTS_MOUVEMENTS_sortie AS SELECT CLI_CODE_MOUVEMENT FROM prod_clinicom.FD_MVTS_SORTIES JOIN w_ADMISSIONS_select ON cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT GROUP BY 1; DROP TABLE IF EXISTS w_FD_PMSI_RSS; CREATE TEMP TABLE w_FD_PMSI_RSS AS SELECT FD_PMSI_RSS.CLI_DONN_NOABSEPISODE, MAX(CLI_DATE_SIGNATURE) AS CLI_DATE_GROUPAGE, (MAX(Array[CLI_DATE_SIGNATURE::text, CLI_CODE_GHS::text]))[2]::numeric AS CLI_CODE_GHS, (MAX(Array[CLI_DATE_SIGNATURE::text, CLI_CODE_GHM::text]))[2]::text AS CLI_CODE_GHM FROM prod_clinicom.FD_PMSI_RSS JOIN w_ADMISSIONS_select ON cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN prod_clinicom.FD_PMSI_RUM ON FD_PMSI_RUM.CLI_DONN_NOABSEPISODE = FD_PMSI_RSS.CLI_DONN_NOABSEPISODE GROUP BY 1; ALTER TABLE w_FD_PMSI_RSS ADD CONSTRAINT w_FD_PMSI_RSS_pkey PRIMARY KEY(CLI_DONN_NOABSEPISODE); DROP TABLE IF EXISTS w_MVTS_EPISODES; CREATE TEMP TABLE w_MVTS_EPISODES AS SELECT FD_MVTS_ADMISSIONS.CLI_DONN_NOABSEPISODE, FD_MVTS_EPISODES.CLI_DONN_NOEXTEPISODE, FD_MVTS_EPISODES.CLI_CODE_NOIPP, FD_MVTS_PATIENTS.CLI_DONN_NOIPPEXTERNE, trim(FD_MVTS_PATIENTS.CLI_CODE_POSTAL) AS CLI_CODE_POSTAL, FD_MVTS_ADMISSIONS.CLI_CODE_MODEENTREE, FD_MVTS_ADMISSIONS.CLI_DATE_MOUVEMENT AS CLI_DATE_ENTREE, CLI_CODE_MODESORTIE, FD_MVTS_SORTIES.CLI_DATE_SORTIE, FD_MVTS_EPISODES.CLI_CODE_MEDECINRESPONSABLE, COALESCE(w_MVTS_EPISODES_chambre.CLI_CODE_US, FD_MVTS_SORTIES.CLI_CODE_US, FD_MVTS_ADMISSIONS.CLI_CODE_US) AS CLI_CODE_US, COALESCE(FD_MVTS_SORTIES.CLI_CODE_UF, FD_MVTS_ADMISSIONS.CLI_CODE_UF) AS CLI_CODE_UF, CASE WHEN COALESCE(CLI_DONN_CHAMBRE,'') <> '' THEN CLI_DONN_CHAMBRE ELSE '0' END AS CLI_DONN_CHAMBRE, FD_MVTS_ADMISSIONS.CLI_CODE_MOUVEMENT AS CLI_CODE_MOUVEMENT_ENTREE, FD_MVTS_SORTIES.CLI_CODE_MOUVEMENT AS CLI_CODE_MOUVEMENT_SORTIE, FD_MVTS_ADMISSIONS.CLI_FLAG_CHAMBREPARTICULIERE, CASE WHEN FD_MVTS_URGENCE.CLI_DONN_NOABSEPISODE IS NOT NULL THEN '1' ELSE '0' END AS CLI_FLAG_URGENCE, COALESCE(w_FD_PMSI_RSS.CLI_DATE_GROUPAGE, '20991231') AS CLI_DATE_GROUPAGE, COALESCE(w_FD_PMSI_RSS.CLI_CODE_GHS, 0) AS CLI_CODE_GHS, COALESCE(w_FD_PMSI_RSS.CLI_CODE_GHM, '') AS CLI_CODE_GHM, ( COALESCE(w_MVTS_EPISODES_chambre.CLI_CODE_US, FD_MVTS_SORTIES.CLI_CODE_US, FD_MVTS_ADMISSIONS.CLI_CODE_US) || '|' || COALESCE(FD_MVTS_SORTIES.CLI_CODE_UF, FD_MVTS_ADMISSIONS.CLI_CODE_UF) || '|' || CASE WHEN COALESCE(CLI_DONN_CHAMBRE,'') <> '' THEN CLI_DONN_CHAMBRE ELSE '0' END || '|' || FD_MVTS_EPISODES.CLI_CODE_MEDECINRESPONSABLE || '|' || COALESCE(w_FD_PMSI_RSS.CLI_CODE_GHS, 0) || '|' || COALESCE(w_FD_PMSI_RSS.CLI_CODE_GHM, '') || '|' || trim(FD_MVTS_PATIENTS.CLI_CODE_POSTAL) ) AS key, CASE WHEN date(FD_MVTS_ADMISSIONS.CLI_DATE_MOUVEMENT) >= '[ENV_ADM_ANNEEDEBUT]0101' THEN '1' WHEN date(FD_MVTS_SORTIES.CLI_DATE_ENTREE) >= '[ENV_ADM_ANNEEDEBUT]0101' THEN '1' WHEN date(FD_MVTS_SORTIES.CLI_DATE_SORTIE) >= '[ENV_ADM_ANNEEDEBUT]0101' THEN '1' WHEN FD_MVTS_SORTIES.CLI_DATE_SORTIE IS NULL THEN '1' ELSE '0' END AS CTI_OK FROM prod_clinicom.FD_MVTS_ADMISSIONS JOIN w_ADMISSIONS_select ON FD_MVTS_ADMISSIONS.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_MVTS_ADMISSIONS.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE JOIN prod_clinicom.FD_MVTS_PATIENTS ON FD_MVTS_EPISODES.CLI_CODE_NOIPP = FD_MVTS_PATIENTS.CLI_CODE_NOIPP LEFT JOIN prod_clinicom.FD_MVTS_SORTIES ON FD_MVTS_ADMISSIONS.CLI_DONN_NOABSEPISODE = FD_MVTS_SORTIES.CLI_DONN_NOABSEPISODE AND FD_MVTS_SORTIES.CLI_DATE_ENTREE IS NOT NULL LEFT JOIN prod_clinicom.FD_MVTS_URGENCE ON FD_MVTS_ADMISSIONS.CLI_DONN_NOABSEPISODE = FD_MVTS_URGENCE.CLI_DONN_NOABSEPISODE LEFT JOIN w_FD_PMSI_RSS ON FD_MVTS_ADMISSIONS.CLI_DONN_NOABSEPISODE = w_FD_PMSI_RSS.CLI_DONN_NOABSEPISODE LEFT JOIN w_MVTS_EPISODES_chambre ON FD_MVTS_ADMISSIONS.CLI_DONN_NOABSEPISODE = w_MVTS_EPISODES_chambre.CLI_DONN_NOABSEPISODE ; UPDATE w_MVTS_EPISODES SET CTI_OK = '1' WHERE CTI_OK <> '1' AND CLI_DONN_NOABSEPISODE IN (SELECT CLI_DONN_NOABSEPISODE FROM prod_clinicom.FD_FAC_DETFAC WHERE CLI_DONN_EXERCOMPTA >= [ENV_ADM_ANNEEDEBUT]); ALTER TABLE w_MVTS_EPISODES ADD CONSTRAINT w_MVTS_EPISODES_pkey PRIMARY KEY(CLI_DONN_NOABSEPISODE); ]]> COALESCE(t_services_facturation.oid,0) OR t_lieux.mode_traitement_id <> COALESCE(t_services_facturation.mode_traitement_id,0) ) ; UPDATE activite[PX].t_lieux SET activite_id = COALESCE(t_activites.oid,0) FROM activite[PX].t_activites WHERE code_original_2 = t_activites.code_original AND activite_id <> COALESCE(t_activites.oid,0); UPDATE activite[PX].t_lieux SET lit_id = COALESCE(t_lits.oid,0) FROM activite[PX].t_lits WHERE code_original_4 = t_lits.code_original AND t_lieux.lit_id <> COALESCE(t_lits.oid,0) ; UPDATE activite[PX].t_lieux SET unite_medicale_id = COALESCE(t_unites_medicales.oid,0) FROM activite[PX].t_unites_medicales WHERE code_original_5 = t_unites_medicales.code_original AND unite_medicale_id <> COALESCE(t_unites_medicales.oid,0); UPDATE activite[PX].t_lieux SET unite_fonctionnelle_id = COALESCE(t_unites_fonctionnelles.oid,0) FROM activite[PX].t_unites_fonctionnelles WHERE code_original_6 = t_unites_fonctionnelles.code_original AND unite_fonctionnelle_id <> COALESCE(t_unites_fonctionnelles.oid,0); UPDATE w_MVTS_EPISODES_keys set lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE code_original_1 = service_facturation_code AND code_original_2 = activite_code AND code_original_3 = etage_code AND code_original_4 = lit_code AND code_original_5 = unite_medicale_code AND code_original_6 = unite_fonctionnelle_code; DROP TABLE IF EXISTS w_MVTS_EPISODES_debiteurs; CREATE TEMP TABLE w_MVTS_EPISODES_debiteurs AS SELECT FD_FAC_DEBITEURS.CLI_DONN_NOABSEPISODE, MAX(w_FB_FAC_DEBITEURS.est_budget_global) AS est_budget_global, (SELECT oid FROM activite[PX].t_tiers_payant WHERE code_original = '0') AS tiers_payant_0_id, (MAX(CASE WHEN FD_FAC_DEBITEURS.CLI_CODE_ORGANISME <> '' AND FD_FAC_DEBITEURS.CLI_CODE_TYPEDEBITEUR IN (1) THEN ARRAY[FD_FAC_DEBITEURS.CLI_DONN_NUMSEQUENCE,COALESCE(tiers_payant_1_id,0)] ELSE NULL END))[2] AS tiers_payant_1_id, (MAX(CASE WHEN FD_FAC_DEBITEURS.CLI_CODE_ORGANISME <> '' AND FD_FAC_DEBITEURS.CLI_CODE_TYPEDEBITEUR NOT IN (1) THEN ARRAY[FD_FAC_DEBITEURS.CLI_DONN_NUMSEQUENCE,COALESCE(tiers_payant_2_id,0)] ELSE NULL END))[2] AS tiers_payant_2_id FROM prod_clinicom.FD_FAC_DEBITEURS JOIN w_ADMISSIONS_select ON FD_FAC_DEBITEURS.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN w_MVTS_EPISODES ON w_MVTS_EPISODES.CLI_DONN_NOABSEPISODE = FD_FAC_DEBITEURS.CLI_DONN_NOABSEPISODE AND CTI_OK = '1' LEFT JOIN w_FB_FAC_DEBITEURS ON FD_FAC_DEBITEURS.CLI_CODE_ORGANISME = w_FB_FAC_DEBITEURS.CLI_CODE_ORGANISME GROUP BY 1 ORDER BY 1; -- Sur les enfants, prendre eventuellement les débiteurs de la mere INSERT INTO w_MVTS_EPISODES_debiteurs SELECT FD_MVTS_NAISSANCE.CLI_DONN_NOABSEPISODEENFANT, MAX(w_FB_FAC_DEBITEURS.est_budget_global) AS est_budget_global, (SELECT oid FROM activite.t_tiers_payant WHERE code_original = '0') AS tiers_payant_0_id, (MAX(CASE WHEN FD_FAC_DEBITEURS.CLI_CODE_ORGANISME <> '' AND FD_FAC_DEBITEURS.CLI_CODE_TYPEDEBITEUR IN (1) THEN ARRAY[FD_FAC_DEBITEURS.CLI_DONN_NUMSEQUENCE,COALESCE(tiers_payant_1_id,0)] ELSE NULL END))[2] AS tiers_payant_1_id, (MAX(CASE WHEN FD_FAC_DEBITEURS.CLI_CODE_ORGANISME <> '' AND FD_FAC_DEBITEURS.CLI_CODE_TYPEDEBITEUR NOT IN (1) THEN ARRAY[FD_FAC_DEBITEURS.CLI_DONN_NUMSEQUENCE,COALESCE(tiers_payant_2_id,0)] ELSE NULL END))[2] AS tiers_payant_2_id FROM prod_clinicom.FD_FAC_DEBITEURS JOIN w_ADMISSIONS_select ON FD_FAC_DEBITEURS.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN prod_clinicom.FD_MVTS_NAISSANCE ON FD_FAC_DEBITEURS.CLI_DONN_NOABSEPISODE = FD_MVTS_NAISSANCE.CLI_DONN_NOABSEPISODE JOIN w_MVTS_EPISODES ON w_MVTS_EPISODES.CLI_DONN_NOABSEPISODE = FD_MVTS_NAISSANCE.CLI_DONN_NOABSEPISODEENFANT AND CTI_OK = '1' LEFT JOIN w_FB_FAC_DEBITEURS ON FD_FAC_DEBITEURS.CLI_CODE_ORGANISME = w_FB_FAC_DEBITEURS.CLI_CODE_ORGANISME WHERE FD_MVTS_NAISSANCE.CLI_DONN_NOABSEPISODEENFANT NOT IN (SELECT CLI_DONN_NOABSEPISODE from w_MVTS_EPISODES_debiteurs) GROUP BY 1 ORDER BY 1 ; DROP TABLE IF EXISTS w_MVTS_MOUVEMENTS_type_sejour; CREATE TEMP TABLE w_MVTS_MOUVEMENTS_type_sejour AS SELECT FD_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE, MAX(CASE WHEN CLI_CODE_MOUVEMENT IN ('1','2') THEN '5' WHEN CLI_CODE_MOUVEMENT IN ('13') THEN '3' ELSE NULL END) AS type_sejour_force FROM prod_clinicom.FD_MVTS_MOUVEMENTS JOIN w_ADMISSIONS_select ON cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT WHERE CLI_CODE_MOUVEMENT NOT IN ('7','11','12','15','52','53') GROUP BY 1 ORDER BY 1; DROP TABLE IF EXISTS w_sejours; CREATE TEMP TABLE w_sejours AS SELECT CLI_DONN_NOEXTEPISODE as no_sejour, w_MVTS_EPISODES.CLI_DONN_NOABSEPISODE as code_original, CLI_DONN_NOIPPEXTERNE as no_patient, date(CLI_DATE_ENTREE) as date_entree, extract('hour' FROM CLI_DATE_ENTREE) * 10000 + extract('minute' FROM CLI_DATE_ENTREE) * 100 + extract('second' FROM CLI_DATE_ENTREE) as heure_entree, CASE WHEN CLI_DATE_SORTIE IS NOT NULL THEN date(CLI_DATE_SORTIE) ELSE '20991231' END::date as date_sortie, CASE WHEN CLI_DATE_SORTIE IS NOT NULL THEN extract('hour' FROM CLI_DATE_SORTIE) * 10000 + extract('minute' FROM CLI_DATE_SORTIE) * 100 + extract('second' FROM CLI_DATE_SORTIE) ELSE 0 END as heure_sortie, p_patients.code_sexe, 0 AS age, CASE WHEN CLI_DATE_SORTIE IS NOT NULL THEN 1 ELSE 0 END as code_sorti, 0 as code_prevu, CASE WHEN w_MVTS_EPISODES_keys.type_sejour_force <> '0' THEN w_MVTS_EPISODES_keys.type_sejour_force WHEN w_MVTS_MOUVEMENTS_type_sejour.type_sejour_force IS NOT NULL THEN w_MVTS_MOUVEMENTS_type_sejour.type_sejour_force WHEN mode_traitement_code IN ('07') OR dmt_code IN ('958') THEN '3' WHEN mode_traitement_code IN ('19', '23') THEN '2' WHEN mode_traitement_code IN ('04') AND date(CLI_DATE_SORTIE) = date(CLI_DATE_ENTREE) THEN '2' WHEN mode_traitement_code IN ('03') AND date(CLI_DATE_SORTIE) = date(CLI_DATE_ENTREE) THEN '2' WHEN mode_traitement_code IN ('10') AND date(CLI_DATE_SORTIE) <= date(CLI_DATE_ENTREE) + interval '1 day' THEN '3' WHEN mode_traitement_code IN ('03') THEN '1' ELSE '1' END as type_sejour, medecin_sejour_id, lieu_id AS lieu_sortie_id, CASE WHEN CLI_FLAG_CHAMBREPARTICULIERE > 0 THEN '1' ELSE '0' END as code_cp_demandee, mode_traitement_id, COALESCE(CLI_CODE_MODE_ENTREEPMSI,'8') as mode_entree, '0'::text AS provenance, COALESCE(CLI_CODE_MODESORTIEPMSI,'8') as mode_sortie, '0'::text AS destination, COALESCE(tiers_payant_0_id,0) AS tiers_payant_0_id, COALESCE(tiers_payant_1_id,0) AS tiers_payant_1_id, COALESCE(tiers_payant_2_id,0) AS tiers_payant_2_id, 0 AS tiers_payant_22_id, 1 AS est_budget_global, w_MVTS_EPISODES_keys.ghs_id, w_MVTS_EPISODES_keys.ghm_id, w_MVTS_EPISODES.CLI_DATE_GROUPAGE AS date_groupage, 0::bigint AS ghs_bebe1_id, 0::bigint AS ghs_bebe2_id, 0::bigint AS ghs_bebe3_id, w_MVTS_EPISODES_keys.code_postal_id FROM w_MVTS_EPISODES JOIN activite[PX].p_patients ON CLI_DONN_NOIPPEXTERNE = p_patients.no_patient JOIN w_MVTS_EPISODES_keys ON w_MVTS_EPISODES.key = w_MVTS_EPISODES_keys.key LEFT JOIN w_MVTS_EPISODES_debiteurs ON w_MVTS_EPISODES.CLI_DONN_NOABSEPISODE = w_MVTS_EPISODES_debiteurs.CLI_DONN_NOABSEPISODE LEFT JOIN w_MVTS_MOUVEMENTS_type_sejour ON w_MVTS_EPISODES.CLI_DONN_NOABSEPISODE = w_MVTS_MOUVEMENTS_type_sejour.CLI_DONN_NOABSEPISODE LEFT JOIN prod_clinicom.FB_MVTS_MODESENTREE ON FB_MVTS_MODESENTREE.CLI_CODE_MODEENTREE = w_MVTS_EPISODES.CLI_CODE_MODEENTREE LEFT JOIN prod_clinicom.FB_MVTS_MODESSORTIE ON FB_MVTS_MODESSORTIE.CLI_CODE_MODESORTIE = w_MVTS_EPISODES.CLI_CODE_MODESORTIE WHERE CTI_OK = '1'; -- Forcage type selon séjour UPDATE w_sejours SET type_sejour = t_sejour.type_sejour FROM activite.t_sejour WHERE t_sejour.no_sejour = w_sejours.no_sejour AND t_sejour.type_sejour IN ('1','2','3','4','5','6','9'); -- Ajustement dates externes pour externes sur plusieurs jours UPDATE w_sejours SET date_entree = subview.date_entree, heure_entree = subview.heure_entree, date_sortie = subview.date_sortie, heure_sortie = 235900 FROM ( SELECT no_sejour, date_entree AS date_entree_sejour, date_sortie AS date_sortie_sejour, MIN(date(CLI_DATE_SAISIE)) AS date_entree, MAX(date(CLI_DATE_SAISIE)) AS date_sortie, extract('hour' FROM MIN(CLI_DATE_SAISIE)) * 10000 + extract('minute' FROM MIN(CLI_DATE_SAISIE)) * 100 + extract('second' FROM MIN(CLI_DATE_SAISIE)) AS heure_entree FROM prod_clinicom.fd_actes_entete JOIN w_sejours ON cli_donn_noabsepisode = code_original AND w_sejours.type_sejour = '3' AND w_sejours.code_sorti = '1' AND w_sejours.date_entree <> w_sejours.date_sortie GROUP BY 1,2,3 HAVING MIN(date(CLI_DATE_SAISIE)) > date_entree OR MAX(date(CLI_DATE_SAISIE)) < date_sortie ) subview WHERE w_sejours.no_sejour = subview.no_sejour; -- Ajustement heure sortie externe positionnée à 23h59 par défaut par clinicom DROP TABLE IF EXISTS w_duree; CREATE TEMP TABLE w_duree AS SELECT medecin_sejour_id, GREATEST(round((avg(heure_sortie - heure_entree) / 10000)::numeric,0) * 10000,10000) AS duree_moyenne FROM w_sejours WHERE type_sejour = '3' AND heure_sortie <> 235900 AND code_sorti = '1' AND date_entree = date_sortie AND heure_sortie > heure_entree GROUP BY 1; UPDATE w_sejours SET heure_sortie = heure_entree + duree_moyenne FROM w_duree WHERE w_sejours.medecin_sejour_id = w_duree.medecin_sejour_id AND type_sejour = '3' AND code_sorti = '1' AND heure_sortie = 235900 AND heure_entree + duree_moyenne <= 240000; UPDATE w_sejours SET code_sorti = '1', date_sortie = date_entree, heure_sortie = heure_entree + duree_moyenne FROM w_duree WHERE w_sejours.medecin_sejour_id = w_duree.medecin_sejour_id AND type_sejour = '3' AND code_sorti <> '1' AND date_entree < date(now()) AND heure_entree + duree_moyenne <= 240000; UPDATE w_sejours SET date_sortie = date(date_entree + interval '1 day'), heure_sortie = heure_entree + duree_moyenne - 240000 FROM w_duree WHERE w_sejours.medecin_sejour_id = w_duree.medecin_sejour_id AND type_sejour = '3' AND code_sorti = '1' AND heure_sortie = 235900 AND heure_entree + duree_moyenne > 240000; UPDATE w_sejours SET code_sorti = '1', date_sortie = date(date_entree + interval '1 day'), heure_sortie = heure_entree + duree_moyenne - 240000 FROM w_duree WHERE w_sejours.medecin_sejour_id = w_duree.medecin_sejour_id AND type_sejour = '3' AND code_sorti <> '1' AND date_entree < date(now()) AND heure_entree + duree_moyenne > 240000; DROP TABLE IF EXISTS w_duree; CREATE TEMP TABLE w_duree AS SELECT GREATEST(round((avg(heure_sortie - heure_entree) / 10000)::numeric,0) * 10000,10000) AS duree_moyenne FROM w_sejours WHERE type_sejour = '3' AND heure_sortie <> 235900 AND code_sorti = '1' AND date_entree = date_sortie AND heure_sortie > heure_entree; UPDATE w_sejours SET heure_sortie = heure_entree + duree_moyenne FROM w_duree WHERE type_sejour = '3' AND code_sorti = '1' AND heure_sortie = 235900 AND heure_entree + duree_moyenne <= 240000; UPDATE w_sejours SET code_sorti = '1', date_sortie = date_entree, heure_sortie = heure_entree + duree_moyenne FROM w_duree WHERE type_sejour = '3' AND code_sorti <> '1' AND date_entree < date(now()) AND heure_entree + duree_moyenne <= 240000; UPDATE w_sejours SET date_sortie = date(date_entree + interval '1 day'), heure_sortie = heure_entree + duree_moyenne - 240000 FROM w_duree WHERE type_sejour = '3' AND code_sorti = '1' AND heure_sortie = 235900 AND heure_entree + duree_moyenne > 240000; UPDATE w_sejours SET code_sorti = '1', date_sortie = date(date_entree + interval '1 day'), heure_sortie = heure_entree + duree_moyenne - 240000 FROM w_duree WHERE type_sejour = '3' AND code_sorti <> '1' AND date_entree < date(now()) AND heure_entree + duree_moyenne > 240000; -- Génération séjours SELECT base.cti_disable_index('activite', 'i_sejours_2'); SELECT base.cti_disable_index('activite', 'i_sejours_3'); SELECT base.cti_disable_index('activite', 'i_sejours_4'); SELECT base.cti_disable_index('activite', 'i_sejours_5'); SELECT base.cti_disable_index('activite', 'i_sejours_6'); SELECT base.cti_disable_index('activite', 'i_sejours_7'); SELECT base.cti_disable_index('activite', 'i_sejours_8'); SELECT base.cti_disable_index('activite', 'i_sejours_9'); SELECT base.cti_disable_index('activite', 'i_sejours_10'); SELECT base.cti_disable_index('activite', 'i_sejours_11'); SELECT base.cti_disable_index('activite', 'i_sejours_12'); SELECT base.cti_disable_index('activite', 'i_sejours_13'); UPDATE activite[PX].p_sejours SET code_original = w_sejours.code_original, no_patient = w_sejours.no_patient, date_entree = w_sejours.date_entree, heure_entree = w_sejours.heure_entree, date_sortie = w_sejours.date_sortie, heure_sortie = w_sejours.heure_sortie, code_sexe = w_sejours.code_sexe, age = w_sejours.age, code_sorti = w_sejours.code_sorti, code_prevu = w_sejours.code_prevu, type_sejour = w_sejours.type_sejour, lieu_sortie_id = w_sejours.lieu_sortie_id, medecin_sejour_id = w_sejours.medecin_sejour_id, code_cp_demandee = w_sejours.code_cp_demandee, mode_traitement_id = w_sejours.mode_traitement_id, mode_entree = w_sejours.mode_entree, provenance = w_sejours.provenance, mode_sortie = w_sejours.mode_sortie, destination = w_sejours.destination, tiers_payant_0_id = w_sejours.tiers_payant_0_id, tiers_payant_1_id = w_sejours.tiers_payant_1_id, tiers_payant_2_id = w_sejours.tiers_payant_2_id, tiers_payant_22_id = w_sejours.tiers_payant_22_id, est_budget_global = w_sejours.est_budget_global, date_groupage = w_sejours.date_groupage, ghs_id = w_sejours.ghs_id, ghm_id = w_sejours.ghm_id, ghs_bebe1_id = w_sejours.ghs_bebe1_id, ghs_bebe2_id = w_sejours.ghs_bebe2_id, ghs_bebe3_id = w_sejours.ghs_bebe3_id, code_postal_id = w_sejours.code_postal_id FROM w_sejours WHERE w_sejours.no_sejour = p_sejours.no_sejour AND ( w_sejours.code_original IS DISTINCT FROM p_sejours.code_original OR w_sejours.no_patient IS DISTINCT FROM p_sejours.no_patient OR w_sejours.date_entree IS DISTINCT FROM p_sejours.date_entree OR w_sejours.heure_entree IS DISTINCT FROM p_sejours.heure_entree OR w_sejours.date_sortie IS DISTINCT FROM p_sejours.date_sortie OR w_sejours.heure_sortie IS DISTINCT FROM p_sejours.heure_sortie OR w_sejours.code_sexe IS DISTINCT FROM p_sejours.code_sexe OR w_sejours.age IS DISTINCT FROM p_sejours.age OR w_sejours.code_sorti IS DISTINCT FROM p_sejours.code_sorti OR w_sejours.code_prevu IS DISTINCT FROM p_sejours.code_prevu OR w_sejours.type_sejour IS DISTINCT FROM p_sejours.type_sejour OR w_sejours.lieu_sortie_id IS DISTINCT FROM p_sejours.lieu_sortie_id OR w_sejours.medecin_sejour_id IS DISTINCT FROM p_sejours.medecin_sejour_id OR w_sejours.code_cp_demandee IS DISTINCT FROM p_sejours.code_cp_demandee OR w_sejours.mode_traitement_id IS DISTINCT FROM p_sejours.mode_traitement_id OR w_sejours.mode_entree IS DISTINCT FROM p_sejours.mode_entree OR w_sejours.provenance IS DISTINCT FROM p_sejours.provenance OR w_sejours.mode_sortie IS DISTINCT FROM p_sejours.mode_sortie OR w_sejours.destination IS DISTINCT FROM p_sejours.destination OR w_sejours.tiers_payant_0_id IS DISTINCT FROM p_sejours.tiers_payant_0_id OR w_sejours.tiers_payant_1_id IS DISTINCT FROM p_sejours.tiers_payant_1_id OR w_sejours.tiers_payant_2_id IS DISTINCT FROM p_sejours.tiers_payant_2_id OR w_sejours.tiers_payant_22_id IS DISTINCT FROM p_sejours.tiers_payant_22_id OR w_sejours.est_budget_global IS DISTINCT FROM p_sejours.est_budget_global OR w_sejours.date_groupage IS DISTINCT FROM p_sejours.date_groupage OR w_sejours.ghs_id IS DISTINCT FROM p_sejours.ghs_id OR w_sejours.ghm_id IS DISTINCT FROM p_sejours.ghm_id OR w_sejours.ghs_bebe1_id IS DISTINCT FROM p_sejours.ghs_bebe1_id OR w_sejours.ghs_bebe2_id IS DISTINCT FROM p_sejours.ghs_bebe2_id OR w_sejours.ghs_bebe3_id IS DISTINCT FROM p_sejours.ghs_bebe3_id OR w_sejours.code_postal_id IS DISTINCT FROM p_sejours.code_postal_id ); INSERT INTO activite[PX].p_sejours ( no_sejour, code_original, no_patient, date_entree, heure_entree, date_sortie, heure_sortie, code_sexe, age, code_sorti, code_prevu, type_sejour, lieu_sortie_id, medecin_sejour_id, ghm_id, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, date_groupage, code_cp_demandee, mode_traitement_id, mode_entree, provenance, mode_sortie, destination, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, est_budget_global, code_postal_id ) SELECT w_sejours.no_sejour, w_sejours.code_original, w_sejours.no_patient, w_sejours.date_entree, w_sejours.heure_entree, w_sejours.date_sortie, w_sejours.heure_sortie, w_sejours.code_sexe, w_sejours.age, w_sejours.code_sorti, w_sejours.code_prevu, w_sejours.type_sejour, w_sejours.lieu_sortie_id, w_sejours.medecin_sejour_id, w_sejours.ghm_id, w_sejours.ghs_id, w_sejours.ghs_bebe1_id, w_sejours.ghs_bebe2_id, w_sejours.ghs_bebe3_id, w_sejours.date_groupage, w_sejours.code_cp_demandee, w_sejours.mode_traitement_id, w_sejours.mode_entree, w_sejours.provenance, w_sejours.mode_sortie, w_sejours.destination, w_sejours.tiers_payant_0_id, w_sejours.tiers_payant_1_id, w_sejours.tiers_payant_2_id, w_sejours.tiers_payant_22_id, w_sejours.est_budget_global, w_sejours.code_postal_id FROM w_sejours LEFT JOIN activite[PX].p_sejours ON (w_sejours.no_sejour = p_sejours.no_sejour) WHERE p_sejours.no_sejour IS NULL; DELETE FROM activite[PX].p_sejours WHERE no_sejour NOT IN (SELECT no_sejour FROM w_sejours); -- Séjours ignorés UPDATE activite[PX].p_sejours SET etat = 'I' FROM activite.t_sejour WHERE t_sejour.no_sejour = p_sejours.no_sejour AND est_ignore = '1' AND etat <> 'I' AND '[PX]' = ''; UPDATE activite[PX].p_sejours SET etat = '' WHERE etat = 'I' AND no_sejour NOT IN (SELECT no_sejour FROM activite.t_sejour WHERE est_ignore = '1') AND '[PX]' = ''; -- Médecin séjour forcé UPDATE activite[PX].p_sejours SET medecin_sejour_id = t_sejour.medecin_sejour_id FROM activite.t_sejour WHERE t_sejour.no_sejour = p_sejours.no_sejour AND t_sejour.medecin_sejour_id <> 0 AND p_sejours.medecin_sejour_id IS DISTINCT FROM t_sejour.medecin_sejour_id AND '[PX]' = ''; -- recréation index SELECT base.cti_enable_index('activite', 'i_sejours_2'); SELECT base.cti_enable_index('activite', 'i_sejours_3'); SELECT base.cti_enable_index('activite', 'i_sejours_4'); SELECT base.cti_enable_index('activite', 'i_sejours_5'); SELECT base.cti_enable_index('activite', 'i_sejours_6'); SELECT base.cti_enable_index('activite', 'i_sejours_7'); SELECT base.cti_enable_index('activite', 'i_sejours_8'); SELECT base.cti_enable_index('activite', 'i_sejours_9'); SELECT base.cti_enable_index('activite', 'i_sejours_10'); SELECT base.cti_enable_index('activite', 'i_sejours_11'); SELECT base.cti_enable_index('activite', 'i_sejours_12'); SELECT base.cti_enable_index('activite', 'i_sejours_13'); ]]> ''''',100); SELECT base.cti_execute(' UPDATE w_MVTS_MOUVEMENTS SET CLI_DONN_CHAMBRE = w_MVTS_MOUVEMENTS_before.CLI_DONN_CHAMBRE FROM w_MVTS_MOUVEMENTS w_MVTS_MOUVEMENTS_before WHERE w_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE = w_MVTS_MOUVEMENTS_before.CLI_DONN_NOABSEPISODE AND w_MVTS_MOUVEMENTS.sequence = w_MVTS_MOUVEMENTS_before.sequence + 1 AND w_MVTS_MOUVEMENTS.CLI_DONN_CHAMBRE = '''' AND w_MVTS_MOUVEMENTS_before.CLI_DONN_CHAMBRE <> ''''',100); -- Admission suspendue UPDATE w_MVTS_MOUVEMENTS SET CLI_CODE_US = 'ADMSUSP', CLI_DONN_CHAMBRE = '0' WHERE CLI_CODE_MOUVEMENT IN ('8'); -- analyse mouvement suivant UPDATE w_MVTS_MOUVEMENTS SET CLI_DATEHEURE_MOUVEMENT_fin = w_MVTS_MOUVEMENTS_next.CLI_DATEHEURE_MOUVEMENT_debut - interval '1 second', CLI_DATE_MOUVEMENT_fin = date(w_MVTS_MOUVEMENTS_next.CLI_DATEHEURE_MOUVEMENT_debut - interval '1 second'), CLI_HEURE_MOUVEMENT_fin = extract('hour' FROM w_MVTS_MOUVEMENTS_next.CLI_DATEHEURE_MOUVEMENT_debut - interval '1 second') * 10000 + extract('minute' FROM w_MVTS_MOUVEMENTS_next.CLI_DATEHEURE_MOUVEMENT_debut - interval '1 second') * 100 + extract('second' FROM w_MVTS_MOUVEMENTS_next.CLI_DATEHEURE_MOUVEMENT_debut - interval '1 second'), CLI_CODE_MOUVEMENT_next = w_MVTS_MOUVEMENTS_next.CLI_CODE_MOUVEMENT, CLI_CODE_UF_next = w_MVTS_MOUVEMENTS_next.CLI_CODE_UF, CLI_CODE_UM_next = w_MVTS_MOUVEMENTS_next.CLI_CODE_UM, CLI_CODE_SERVICE_next = w_MVTS_MOUVEMENTS_next.CLI_CODE_SERVICE, CLI_CODE_US_next = w_MVTS_MOUVEMENTS_next.CLI_CODE_US, CLI_DONN_CHAMBRE_next = w_MVTS_MOUVEMENTS_next.CLI_DONN_CHAMBRE, est_sortie = CASE WHEN w_MVTS_MOUVEMENTS_next.CLI_CODE_MOUVEMENT IN (SELECT CLI_CODE_MOUVEMENT FROM w_FB_MVTS_MOUVEMENTS_sortie) THEN '1' ELSE '0' END FROM w_MVTS_MOUVEMENTS w_MVTS_MOUVEMENTS_next WHERE w_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE = w_MVTS_MOUVEMENTS_next.CLI_DONN_NOABSEPISODE AND w_MVTS_MOUVEMENTS.sequence + 1 = w_MVTS_MOUVEMENTS_next.sequence ; DELETE FROM w_MVTS_MOUVEMENTS WHERE CLI_CODE_MOUVEMENT IN (SELECT CLI_CODE_MOUVEMENT FROM w_FB_MVTS_MOUVEMENTS_sortie); UPDATE w_MVTS_MOUVEMENTS SET CLI_DATEHEURE_MOUVEMENT_fin = CLI_DATEHEURE_MOUVEMENT_fin + interval '1 second', CLI_DATE_MOUVEMENT_fin = date(CLI_DATEHEURE_MOUVEMENT_fin + interval '1 second'), CLI_HEURE_MOUVEMENT_fin = extract('hour' FROM CLI_DATEHEURE_MOUVEMENT_fin + interval '1 second') * 10000 + extract('minute' FROM CLI_DATEHEURE_MOUVEMENT_fin + interval '1 second') * 100 + extract('second' FROM CLI_DATEHEURE_MOUVEMENT_fin + interval '1 second') WHERE est_sortie = '1'; -- analyse mouvement precedent UPDATE w_MVTS_MOUVEMENTS SET CLI_CODE_MOUVEMENT_before = w_MVTS_MOUVEMENTS_before.CLI_CODE_MOUVEMENT, CLI_CODE_UF_before = w_MVTS_MOUVEMENTS_before.CLI_CODE_UF, CLI_CODE_UM_before = w_MVTS_MOUVEMENTS_before.CLI_CODE_UM, CLI_CODE_SERVICE_before = w_MVTS_MOUVEMENTS_before.CLI_CODE_SERVICE, CLI_CODE_US_before = w_MVTS_MOUVEMENTS_before.CLI_CODE_US, CLI_DONN_CHAMBRE_before = w_MVTS_MOUVEMENTS_before.CLI_DONN_CHAMBRE FROM w_MVTS_MOUVEMENTS w_MVTS_MOUVEMENTS_before WHERE w_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE = w_MVTS_MOUVEMENTS_before.CLI_DONN_NOABSEPISODE AND w_MVTS_MOUVEMENTS.sequence = w_MVTS_MOUVEMENTS_before.sequence + 1; -- Externes non sortis -> forcer la sortie UPDATE w_MVTS_MOUVEMENTS SET CLI_DATEHEURE_MOUVEMENT_fin = w_sejours.date_sortie + to_char(w_sejours.heure_sortie,'FM000000')::time, CLI_DATE_MOUVEMENT_fin = w_sejours.date_sortie, CLI_HEURE_MOUVEMENT_fin = w_sejours.heure_sortie, CLI_CODE_MOUVEMENT_next = '15', est_sortie = '1' FROM w_sejours WHERE w_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE = w_sejours.code_original AND type_sejour = '3' AND cli_code_mouvement_next <> 15 AND w_sejours.code_sorti = '1'; UPDATE w_MVTS_MOUVEMENTS SET CLI_DONN_CHAMBRE = '0' WHERE CLI_DONN_CHAMBRE = ''; UPDATE w_MVTS_MOUVEMENTS SET key = CLI_CODE_UF || '|' || CLI_CODE_UM || '|' || CLI_CODE_SERVICE || '|' || CLI_CODE_US || '|' || CLI_DONN_CHAMBRE; VACUUM FULL w_MVTS_MOUVEMENTS; CREATE INDEX w_MVTS_MOUVEMENTS_i3 ON w_MVTS_MOUVEMENTS USING btree (key); DROP TABLE IF EXISTS w_MVTS_MOUVEMENTS_keys; CREATE TEMP TABLE w_MVTS_MOUVEMENTS_keys AS SELECT key, CLI_CODE_UF, CLI_CODE_UM, CLI_CODE_SERVICE, CLI_CODE_US, CLI_DONN_CHAMBRE, ''::text AS mode_traitement_code, ''::text AS dmt_code, '0'::text AS type_sejour_force, '0'::text AS chambre_particuliere, 0::bigint AS service_facturation_id, 0::bigint AS mode_traitement_id, 0::bigint AS unite_fonctionnelle_id, 0::bigint AS unite_medicale_id, 0::bigint AS activite_id, 0::bigint AS etage_id, 0::bigint AS lit_id, 0::bigint AS lieu_id FROM w_MVTS_MOUVEMENTS GROUP BY 1,2,3,4,5,6,7; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court) SELECT CLI_CODE_US, CLI_CODE_US, CLI_CODE_US, CLI_CODE_US FROM w_MVTS_MOUVEMENTS WHERE CLI_CODE_US NOT IN (SELECT code_original FROM activite[PX].t_etages) AND CLI_CODE_US <> '' GROUP BY 1 ORDER BY 1; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT code_original || '|0' , '', 'Non renseigné', 'Non renseigné', oid, 'N' FROM activite[PX].t_etages WHERE oid > 0 AND code_original || '|0' NOT IN (SELECT code_original FROM activite[PX].t_lits ); UPDATE activite[PX].t_lits SET code = '*****' WHERE oid = 0; UPDATE activite[PX].t_lits SET code = t_etages.code || '***' FROM activite[PX].t_etages WHERE etage_id = t_etages.oid AND t_lits.code = '' ; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT CLI_CODE_US || '|' || CLI_DONN_CHAMBRE, CLI_DONN_CHAMBRE, 'Chambre ' || CLI_DONN_CHAMBRE, 'Chambre ' || CLI_DONN_CHAMBRE, t_etages.oid, 'N' FROM w_MVTS_MOUVEMENTS JOIN activite[PX].t_etages ON CLI_CODE_US = t_etages.code_original WHERE CLI_DONN_CHAMBRE <> '' AND CLI_DONN_CHAMBRE <> '0' AND CLI_CODE_US || '|' || CLI_DONN_CHAMBRE NOT IN (SELECT code_original FROM activite[PX].t_lits) GROUP BY 1,2,3,4,5; UPDATE w_MVTS_MOUVEMENTS_keys SET service_facturation_id = COALESCE(t_services_facturation.oid,0), mode_traitement_id = t_modes_traitement.oid, mode_traitement_code = t_modes_traitement.code, dmt_code = t_dmt.code, type_sejour_force = CASE WHEN t_services_facturation.type_sejour IN ('1', '2', '3', '4', '5') THEN t_services_facturation.type_sejour ELSE '0' END FROM activite[PX].t_services_facturation JOIN base.t_modes_traitement ON t_services_facturation.mode_traitement_id = t_modes_traitement.oid JOIN base.t_dmt ON t_services_facturation.dmt_id = t_dmt.oid WHERE t_services_facturation.code_original = CLI_CODE_UF; UPDATE w_MVTS_MOUVEMENTS_keys SET unite_fonctionnelle_id = COALESCE(t_unites_fonctionnelles.oid,0) FROM activite[PX].t_unites_fonctionnelles WHERE t_unites_fonctionnelles.code_original = CLI_CODE_UF; UPDATE w_MVTS_MOUVEMENTS_keys SET unite_medicale_id = COALESCE(t_unites_medicales.oid,0) FROM activite[PX].t_unites_medicales WHERE t_unites_medicales.code_original = CLI_CODE_UM; UPDATE w_MVTS_MOUVEMENTS_keys SET activite_id = COALESCE(t_activites.oid,0) FROM activite[PX].t_activites WHERE t_activites.code_original = CLI_CODE_SERVICE; UPDATE w_MVTS_MOUVEMENTS_keys SET lit_id = COALESCE(t_lits.oid,0), CLI_CODE_US = CASE WHEN t_lits.etage_id <> 0 THEN COALESCE(t_etages.code_original,'') ELSE '' END, etage_id = COALESCE(t_lits.etage_id,0), chambre_particuliere = t_lits.chambre_particuliere FROM activite[PX].t_lits JOIN activite[PX].t_etages ON t_lits.etage_id = t_etages.oid WHERE t_lits.code_original = CLI_CODE_US || '|' || CLI_DONN_CHAMBRE; INSERT INTO activite[PX].t_lieux( code_original_1, code_original_2, code_original_3, code_original_4, code_original_5, code_original_6) SELECT CLI_CODE_UF, CLI_CODE_SERVICE, CLI_CODE_US, CLI_CODE_US || '|' || CLI_DONN_CHAMBRE, CLI_CODE_UM, CLI_CODE_UF FROM w_MVTS_MOUVEMENTS_keys LEFT JOIN activite[PX].t_lieux ON ( code_original_1 = CLI_CODE_UF AND code_original_2 = CLI_CODE_SERVICE AND code_original_3 = CLI_CODE_US AND code_original_4 = CLI_CODE_US || '|' || CLI_DONN_CHAMBRE AND code_original_5 = CLI_CODE_UM AND code_original_6 = CLI_CODE_UF ) WHERE t_lieux.oid IS NULL GROUP BY 1,2,3,4,5,6; UPDATE activite[PX].t_lieux SET service_facturation_id = COALESCE(t_services_facturation.oid,0), mode_traitement_id = COALESCE(t_services_facturation.mode_traitement_id,0) FROM activite[PX].t_services_facturation WHERE code_original_1 = t_services_facturation.code_original AND (t_lieux.service_facturation_id <> COALESCE(t_services_facturation.oid,0) OR t_lieux.mode_traitement_id <> COALESCE(t_services_facturation.mode_traitement_id,0) ) ; UPDATE activite[PX].t_lieux SET activite_id = COALESCE(t_activites.oid,0) FROM activite[PX].t_activites WHERE code_original_2 = t_activites.code_original AND activite_id <> COALESCE(t_activites.oid,0); UPDATE activite[PX].t_lieux SET lit_id = COALESCE(t_lits.oid,0) FROM activite[PX].t_lits WHERE code_original_4 = t_lits.code_original AND t_lieux.lit_id <> COALESCE(t_lits.oid,0) ; UPDATE activite[PX].t_lieux SET unite_medicale_id = COALESCE(t_unites_medicales.oid,0) FROM activite[PX].t_unites_medicales WHERE code_original_5 = t_unites_medicales.code_original AND unite_medicale_id <> COALESCE(t_unites_medicales.oid,0); UPDATE activite[PX].t_lieux SET unite_fonctionnelle_id = COALESCE(t_unites_fonctionnelles.oid,0) FROM activite[PX].t_unites_fonctionnelles WHERE code_original_6 = t_unites_fonctionnelles.code_original AND unite_fonctionnelle_id <> COALESCE(t_unites_fonctionnelles.oid,0); UPDATE w_MVTS_MOUVEMENTS_keys set lieu_id = t_lieux.oid FROM activite[PX].t_lieux WHERE code_original_1 = CLI_CODE_UF AND code_original_2 = CLI_CODE_SERVICE AND code_original_3 = CLI_CODE_US AND code_original_4 = CLI_CODE_US || '|' || CLI_DONN_CHAMBRE AND code_original_5 = CLI_CODE_UM AND code_original_6 = CLI_CODE_UF; VACUUM FULL w_MVTS_MOUVEMENTS_keys; ALTER TABLE w_MVTS_MOUVEMENTS_keys ADD CONSTRAINT w_MVTS_MOUVEMENTS_keys_pkey PRIMARY KEY(key); DROP TABLE IF EXISTS w_mouvements_sejour; CREATE TEMP TABLE w_mouvements_sejour AS SELECT w_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE, p_sejours.no_sejour AS no_sejour, p_sejours.oid AS sejour_id, sequence, p_calendrier.date, p_calendrier.jour_semaine, p_calendrier.is_weekend, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_debut THEN CLI_HEURE_MOUVEMENT_debut ELSE 0 END AS heure_debut, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_fin THEN CLI_HEURE_MOUVEMENT_fin ELSE 240000 END AS heure_fin, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_debut AND est_entree = '1' AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_entrees_directes, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_fin AND est_sortie = '1' AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_sorties_directes, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_debut AND est_entree = '1' AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_entree, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_fin AND est_sortie = '1' AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_sortie, CASE WHEN p_sejours.type_sejour = '1' AND est_hospitalisation_jour <> '1' THEN '1' WHEN p_sejours.type_sejour = '1' AND est_hospitalisation_jour = '1' AND CLI_CODE_MOUVEMENT = '1' THEN '1' ELSE '0' END AS est_jour_hospitalisation, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_debut AND est_entree = '1' AND p_sejours.type_sejour = '2' THEN 1 ELSE 0 END AS nb_ambulatoires, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_debut AND est_entree = '1' AND p_sejours.type_sejour = '3' THEN 1 ELSE 0 END AS nb_externes, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_debut AND est_entree = '1' AND p_sejours.type_sejour <> '9' AND (dmt_code IN ('303', '307', '308', '401', '402', '403', '404', '405', '406', '407', '408', '409') OR CLI_FLAG_URGENCE = '1') THEN 1 ELSE 0 END AS nb_urgences, CASE WHEN p_sejours.type_sejour = '5' AND CLI_CODE_MOUVEMENT = '1' THEN 1 ELSE 0 END AS nb_seances, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_debut AND p_sejours.type_sejour = '1' AND est_entree <> '1' AND w_MVTS_MOUVEMENTS.CLI_CODE_UF <> CLI_CODE_UF_before THEN 1 ELSE 0 END AS nb_entrees_mutation_service, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_fin AND p_sejours.type_sejour = '1' AND est_sortie <> '1' AND w_MVTS_MOUVEMENTS.CLI_CODE_UF <> CLI_CODE_UF_next THEN 1 ELSE 0 END AS nb_sorties_mutation_service, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_debut AND p_sejours.type_sejour = '1' AND est_entree <> '1' AND w_MVTS_MOUVEMENTS.CLI_CODE_US <> CLI_CODE_US_before THEN 1 ELSE 0 END AS nb_entrees_mutation_etage, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_fin AND p_sejours.type_sejour = '1' AND est_sortie <> '1' AND w_MVTS_MOUVEMENTS.CLI_CODE_US <> CLI_CODE_US_next THEN 1 ELSE 0 END AS nb_sorties_mutation_etage, 0 AS nb_entrees_mutation_activite, 0 AS nb_sorties_mutation_activite, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_debut AND p_sejours.type_sejour = '1' AND est_entree <> '1' AND w_MVTS_MOUVEMENTS.CLI_CODE_UM <> CLI_CODE_UM_before THEN 1 ELSE 0 END AS nb_entrees_mutation_unite_medicale, CASE WHEN p_calendrier.date = CLI_DATE_MOUVEMENT_fin AND p_sejours.type_sejour = '1' AND est_sortie <> '1' AND w_MVTS_MOUVEMENTS.CLI_CODE_UM <> CLI_CODE_UM_next THEN 1 ELSE 0 END AS nb_sorties_mutation_unite_medicale, CASE WHEN p_sejours.type_sejour = '1' AND (p_calendrier.date <> CLI_DATE_MOUVEMENT_debut OR est_sortie = '1') AND est_hospitalisation_jour <> '1' THEN '1' WHEN p_sejours.type_sejour = '1' AND est_hospitalisation_jour = '1' AND CLI_CODE_MOUVEMENT = '1' THEN 1 ELSE 0 END AS nb_jours_js_inclus, CASE WHEN p_sejours.type_sejour = '1' AND p_calendrier.date <> CLI_DATE_MOUVEMENT_debut AND est_hospitalisation_jour <> '1' THEN '1' WHEN p_sejours.type_sejour = '1' AND est_hospitalisation_jour = '1' AND CLI_CODE_MOUVEMENT = '1' THEN 1 ELSE 0 END AS nb_jours_js_non_inclus, CASE WHEN p_sejours.type_sejour = '1' AND CLI_CODE_MOUVEMENT <> '8' AND chambre_particuliere = 'O' AND est_hospitalisation_jour <> '1' THEN '1' WHEN p_sejours.type_sejour = '1' AND est_hospitalisation_jour = '1' AND chambre_particuliere = 'O' AND CLI_CODE_MOUVEMENT = '1' THEN '1' ELSE '0' END AS est_chambre_particuliere, CASE WHEN p_sejours.type_sejour = '1' AND CLI_CODE_MOUVEMENT <> '8' AND chambre_particuliere = 'O' AND (p_calendrier.date <> CLI_DATE_MOUVEMENT_fin OR est_sortie = '1') AND est_hospitalisation_jour <> '1' THEN 1 WHEN p_sejours.type_sejour = '1' AND est_hospitalisation_jour = '1' AND chambre_particuliere = 'O' AND p_calendrier.date <> CLI_DATE_MOUVEMENT_fin AND CLI_CODE_MOUVEMENT = '1' THEN 1 ELSE 0 END AS nb_chambres_particulieres, 0::numeric AS nb_bebes, est_hospitalisation_jour, '0'::text AS est_dernier_mouvement_jour, '0'::text AS est_premier_mouvement_jour, lieu_id, p_sejours.medecin_sejour_id as medecin_sejour_id FROM w_MVTS_MOUVEMENTS JOIN activite[PX].p_sejours ON w_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE = p_sejours.code_original AND p_sejours.etat = '' JOIN w_MVTS_MOUVEMENTS_keys ON w_MVTS_MOUVEMENTS.key = w_MVTS_MOUVEMENTS_keys.key JOIN base.p_calendrier ON (p_calendrier.date BETWEEN CLI_DATE_MOUVEMENT_debut AND CLI_DATE_MOUVEMENT_fin AND p_calendrier.date <= now() OR (p_calendrier.date = p_sejours.date_entree AND est_entree = '1')) WHERE (p_sejours.type_sejour NOT IN ('2', '3') OR (p_sejours.type_sejour IN ('2', '3') AND est_entree = '1' AND p_calendrier.date = CLI_DATE_MOUVEMENT_debut)) AND p_sejours.code_prevu <> '1' ORDER BY sequence, p_calendrier.date; CREATE INDEX w_mouvements_sejour_i1 ON w_mouvements_sejour USING btree (CLI_DONN_NOABSEPISODE); CREATE INDEX w_mouvements_sejour_i2 ON w_mouvements_sejour USING btree (no_sejour); -- bébés UPDATE w_mouvements_sejour SET nb_bebes = 1 FROM prod_clinicom.FD_MVTS_NAISSANCE JOIN activite[PX].p_sejours ON FD_MVTS_NAISSANCE.CLI_Donn_NoAbsEpisodeEnfant = p_sejours.code_original WHERE w_mouvements_sejour.no_sejour = p_sejours.no_sejour AND date = date(CLI_DATE_NAISSANCE); -- Séances selon ACTES DROP TABLE IF EXISTS w_FD_ACTES_CCAM_seances; CREATE TEMP TABLE w_FD_ACTES_CCAM_seances AS SELECT FD_ACTES_CCAM.CLI_DONN_NOABSEPISODE, date(CLI_DATE_SAISIE) AS date_seance, extract('hour' FROM CLI_DATE_SAISIE) * 10000 + extract('minute' FROM CLI_DATE_SAISIE) * 100 + extract('second' FROM CLI_DATE_SAISIE) AS heure_seance, 1 AS nb_seances FROM prod_clinicom.FD_ACTES_CCAM JOIN w_ADMISSIONS_select ON FD_ACTES_CCAM.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN prod_clinicom.FD_ACTES_ENTETE ON FD_ACTES_CCAM.CLI_DONN_NOABSEPISODE = FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE AND FD_ACTES_CCAM.CLI_DONN_LIEN = FD_ACTES_ENTETE.CLI_DONN_LIEN JOIN base.t_actes ON substring(CLI_CODE_CCAM, 1, 7) = t_actes.code WHERE (CLI_CODE_CCAM LIKE 'ZZMK%' OR CLI_CODE_CCAM LIKE 'ZZMP%' OR (t_actes.texte ILIKE '%séance%' AND t_actes.code LIKE 'JV%')) GROUP BY 1,2,3 ORDER BY 1,2,3; CREATE INDEX w_FD_ACTES_CCAM_seances_i1 ON w_FD_ACTES_CCAM_seances USING btree (CLI_DONN_NOABSEPISODE); UPDATE w_mouvements_sejour SET nb_seances = w_FD_ACTES_CCAM_seances.nb_seances FROM w_FD_ACTES_CCAM_seances WHERE w_FD_ACTES_CCAM_seances.CLI_DONN_NOABSEPISODE = w_mouvements_sejour.CLI_DONN_NOABSEPISODE AND date = date_seance AND heure_seance BETWEEN heure_debut AND heure_fin AND w_mouvements_sejour.nb_seances IS DISTINCT FROM w_FD_ACTES_CCAM_seances.nb_seances; -- Séances selon GHS et DIAG DROP TABLE IF EXISTS w_FD_PMSI_RSS_seances; CREATE TEMP TABLE w_FD_PMSI_RSS_seances AS SELECT FD_PMSI_RSS.CLI_DONN_NOABSEPISODE, date(CLI_DATE_ENTREE) AS date_seance, extract('hour' FROM CLI_DATE_ENTREE) * 10000 + extract('minute' FROM CLI_DATE_ENTREE) * 100 + extract('second' FROM CLI_DATE_ENTREE) AS heure_seance, 1 AS nb_seances FROM prod_clinicom.FD_PMSI_RSS JOIN w_ADMISSIONS_select ON FD_PMSI_RSS.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT LEFT JOIN prod_clinicom.FD_PMSI_DIAG ON FD_PMSI_DIAG.CLI_DONN_NOABSEPISODE = FD_PMSI_RSS.CLI_DONN_NOABSEPISODE AND CLI_CODE_TYPEDIAGNOSTIC = '1' AND CLI_CODE_DIAG IN ('Z510', 'Z5100', 'Z5101', 'Z511', 'Z512', 'Z5130', 'Z5131') JOIN base.t_ghs ON CLI_CODE_GHS = t_ghs.code WHERE t_ghs.texte ILIKE '%séance%' OR CLI_CODE_GHM LIKE '28%' OR FD_PMSI_DIAG.CLI_DONN_NOABSEPISODE IS NOT NULL GROUP BY 1,2,3 ORDER BY 1,2,3; CREATE INDEX w_FD_PMSI_RSS_seances_i1 ON w_FD_PMSI_RSS_seances USING btree (CLI_DONN_NOABSEPISODE); UPDATE w_mouvements_sejour SET nb_seances = w_FD_PMSI_RSS_seances.nb_seances FROM w_FD_PMSI_RSS_seances WHERE w_FD_PMSI_RSS_seances.CLI_DONN_NOABSEPISODE = w_mouvements_sejour.CLI_DONN_NOABSEPISODE AND date = date_seance AND heure_seance BETWEEN heure_debut AND heure_fin AND w_mouvements_sejour.nb_seances IS DISTINCT FROM w_FD_PMSI_RSS_seances.nb_seances; -- Si hopital de jour : Date entree dans mouvements = premier mouvement UPDATE w_mouvements_sejour SET nb_entrees_directes = CASE WHEN w_mouvements_sejour.heure_debut = heure_entree THEN 0 WHEN w_mouvements_sejour.heure_debut = subview.heure_debut THEN 1 ELSE 0 END FROM ( SELECT w_mouvements_sejour.no_sejour, date, MIN(CASE WHEN est_jour_hospitalisation = '1' THEN heure_debut ELSE 999999 END) AS heure_debut, MIN(CASE WHEN nb_entrees_directes = 1 THEN heure_debut ELSE 999999 END) AS heure_entree FROM w_mouvements_sejour JOIN activite[PX].p_sejours ON w_mouvements_sejour.no_sejour = p_sejours.no_sejour AND w_mouvements_sejour.date = p_sejours.date_entree WHERE est_hospitalisation_jour = '1' GROUP BY 1,2 HAVING MIN(CASE WHEN est_jour_hospitalisation = '1' THEN heure_debut ELSE 999999 END) IS DISTINCT FROM MIN(CASE WHEN nb_entrees_directes = 1 THEN heure_debut ELSE 999999 END) ORDER BY 1 ) subview WHERE est_hospitalisation_jour = '1' AND w_mouvements_sejour.no_sejour = subview.no_sejour AND w_mouvements_sejour.date = subview.date; UPDATE w_mouvements_sejour SET nb_sorties_directes = CASE WHEN w_mouvements_sejour.heure_fin = heure_sortie THEN 0 WHEN w_mouvements_sejour.heure_fin = subview.heure_fin THEN 1 ELSE 0 END FROM ( SELECT w_mouvements_sejour.no_sejour, date, MAX(CASE WHEN est_jour_hospitalisation = '1' THEN heure_fin ELSE 0 END) AS heure_fin, MAX(CASE WHEN nb_sorties_directes = 1 THEN heure_fin ELSE 0 END) AS heure_sortie FROM w_mouvements_sejour JOIN activite[PX].p_sejours ON w_mouvements_sejour.no_sejour = p_sejours.no_sejour AND w_mouvements_sejour.date = p_sejours.date_sortie WHERE est_hospitalisation_jour = '1' GROUP BY 1,2 HAVING MAX(CASE WHEN est_jour_hospitalisation = '1' THEN heure_fin ELSE 0 END) IS DISTINCT FROM MAX(CASE WHEN nb_sorties_directes = 1 THEN heure_fin ELSE 0 END) ORDER BY 1 ) subview WHERE est_hospitalisation_jour = '1' AND w_mouvements_sejour.no_sejour = subview.no_sejour AND w_mouvements_sejour.date = subview.date; -- Génération DELETE FROM w_mouvements_sejour WHERE nb_entrees_directes = 0 AND nb_sorties_directes = 0 AND est_jour_hospitalisation <> '1' AND nb_ambulatoires = 0 AND nb_externes = 0 AND nb_urgences = 0 AND nb_seances = 0 AND nb_entrees_mutation_service = 0 AND nb_sorties_mutation_service = 0 AND nb_entrees_mutation_etage = 0 AND nb_sorties_mutation_etage = 0 AND nb_entrees_mutation_activite = 0 AND nb_sorties_mutation_activite = 0 AND nb_entrees_mutation_unite_medicale = 0 AND nb_sorties_mutation_unite_medicale = 0 AND nb_jours_js_inclus = 0 AND nb_jours_js_non_inclus = 0 AND est_chambre_particuliere <> '1' AND nb_chambres_particulieres = 0 AND nb_bebes = 0; UPDATE w_mouvements_sejour SET est_premier_mouvement_jour = '1' FROM ( SELECT no_sejour, date, MIN(heure_debut) AS heure_debut FROM w_mouvements_sejour GROUP BY 1,2 HAVING MIN(heure_debut) <> 0 ) subview WHERE w_mouvements_sejour.no_sejour = subview.no_sejour AND w_mouvements_sejour.heure_debut = subview.heure_debut; UPDATE w_mouvements_sejour SET est_dernier_mouvement_jour = '1' FROM ( SELECT no_sejour, date, MAX(heure_fin) AS heure_fin FROM w_mouvements_sejour GROUP BY 1,2 HAVING MAX(heure_fin) <> 240000 ) subview WHERE w_mouvements_sejour.no_sejour = subview.no_sejour AND w_mouvements_sejour.heure_fin = subview.heure_fin; -- Mise en production des mouvements SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_1'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_2'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_3'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_4'); SELECT base.cti_disable_index('activite', 'i_mouvements_sejour_5'); INSERT INTO activite[PX].p_mouvements_sejour( sejour_id, no_sejour, date, nb_jours_js_non_inclus, lieu_id, nb_entrees_directes, nb_sorties_directes, nb_urgences, nb_externes, nb_ambulatoires, medecin_sejour_id, nb_jours_js_inclus, nb_seances, nb_entrees_mutation_service, nb_sorties_mutation_service, nb_entrees_mutation_activite, nb_sorties_mutation_activite, nb_entrees_mutation_etage, nb_sorties_mutation_etage, nb_chambres_particulieres, heure_debut, heure_fin, est_jour_entree, est_jour_sortie, est_jour_hospitalisation, est_chambre_particuliere, nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes, est_premier_mouvement_jour,est_dernier_mouvement_jour, jour_semaine, is_weekend) SELECT sejour_id, no_sejour, date,nb_jours_js_non_inclus, lieu_id, nb_entrees_directes, nb_sorties_directes, nb_urgences, nb_externes, nb_ambulatoires, medecin_sejour_id, nb_jours_js_inclus, nb_seances, nb_entrees_mutation_service, nb_sorties_mutation_service, nb_entrees_mutation_activite, nb_sorties_mutation_activite, nb_entrees_mutation_etage, nb_sorties_mutation_etage, nb_chambres_particulieres, heure_debut, heure_fin, est_jour_entree, est_jour_sortie, est_jour_hospitalisation, est_chambre_particuliere, nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes, est_premier_mouvement_jour,est_dernier_mouvement_jour, jour_semaine, is_weekend FROM w_mouvements_sejour WHERE heure_fin >= heure_debut ORDER BY no_sejour, sequence; SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_1'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_2'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_3'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_4'); SELECT base.cti_enable_index('activite', 'i_mouvements_sejour_5'); UPDATE activite[PX].p_sejours SET code_sorti = '1' FROM activite[PX].p_mouvements_sejour WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND code_sorti = '0' AND (nb_ambulatoires > 0 OR nb_externes > 0) AND date_sortie <= now(); UPDATE activite[PX].p_sejours SET type_sejour = '5' WHERE type_sejour <> '5' AND type_sejour <> '1' AND no_sejour IN ( SELECT no_sejour FROM activite[PX].p_mouvements_sejour WHERE nb_seances > 0); UPDATE activite[PX].p_mouvements_sejour SET nb_externes = 0, nb_ambulatoires = 0 FROM activite[PX].p_sejours WHERE p_mouvements_sejour.no_sejour = p_sejours.no_sejour AND p_sejours.type_sejour = '5' AND ( nb_externes <> 0 OR nb_ambulatoires <> 0 ); ]]> 0 THEN SUBSTR(CLI_DONN_EXERCTX,3,2) || '_' || FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION || CLI_DONN_NOOBJETCTX ELSE '' END::text AS no_facture_avoir, p_sejours.ghs_id AS ghs_id, CASE WHEN FD_FAC_DETFAC.CLI_CODE_TYPEDEBITEUR IN (1) THEN '1' WHEN FD_FAC_DETFAC.CLI_CODE_TYPEDEBITEUR = 7 THEN '0' ELSE '2' END::text AS type_tiers_payant, w_MVTS_EPISODES_debiteurs.tiers_payant_0_id, CASE WHEN FD_FAC_DETFAC.CLI_CODE_TYPEDEBITEUR IN (1) THEN COALESCE(w_FB_FAC_DEBITEURS.tiers_payant_1_id,0) ELSE COALESCE(w_MVTS_EPISODES_debiteurs.tiers_payant_1_id,0) END AS tiers_payant_1_id, CASE WHEN FD_FAC_DETFAC.CLI_CODE_TYPEDEBITEUR NOT IN (1,2) AND FD_FAC_DETFAC.CLI_CODE_TYPEDEBITEUR <> 7 THEN COALESCE(w_FB_FAC_DEBITEURS.tiers_payant_2_id,0) ELSE COALESCE(w_MVTS_EPISODES_debiteurs.tiers_payant_2_id,0) END AS tiers_payant_2_id, CASE WHEN FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION = 'I' THEN '1'::text ELSE '0'::text END AS est_budget_global, '0'::text AS est_pmsi, 0::bigint AS rss_id, FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, FD_FAC_DETFAC.CLI_CODE_TYPEDEBITEUR, FD_FAC_DETFAC.CLI_CODE_ORGANISME, FD_FAC_DETFAC.CLI_FLAG_SENS, FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, FD_FAC_DETFAC.CLI_DATE_OBJETFAC, date(FD_FAC_DETFAC.CLI_DATE_DEBPERIODE) AS CLI_DATE_DEBPERIODE, date(FD_FAC_DETFAC.CLI_DATE_FINPERIODE) AS CLI_DATE_FINPERIODE, FD_FAC_DETFAC.CLI_CODE_ETAT, CASE WHEN CLI_FLAG_SENS = 1 THEN FD_FAC_DETFAC.CLI_DONN_MONTANT ELSE 0 - FD_FAC_DETFAC.CLI_DONN_MONTANT END AS CLI_DONN_MONTANT, FD_FAC_DETFAC.CLI_DONN_EXERCTX, FD_FAC_DETFAC.CLI_DONN_NOOBJETCTX, FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET FROM prod_clinicom.FD_FAC_DETFAC JOIN activite[PX].p_sejours ON FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE = p_sejours.code_original AND p_sejours.etat = '' JOIN w_MVTS_EPISODES_debiteurs ON w_MVTS_EPISODES_debiteurs.CLI_DONN_NOABSEPISODE = FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE LEFT JOIN w_FB_FAC_DEBITEURS ON FD_FAC_DETFAC.CLI_CODE_ORGANISME = w_FB_FAC_DEBITEURS.CLI_CODE_ORGANISME LEFT JOIN w_FD_FAC_DETFAC_horspmsi ON w_FD_FAC_DETFAC_horspmsi.CLI_DONN_NOABSEPISODE = FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE AND w_FD_FAC_DETFAC_horspmsi.CLI_CODE_NOINTERNEOBJET = FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET AND w_FD_FAC_DETFAC_horspmsi.CLI_DONN_EXERCOMPTA = FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA WHERE FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION <> 'P' AND (FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION <> 'I' OR w_FD_FAC_DETFAC_horspmsi.CLI_DONN_NOABSEPISODE IS NOT NULL); DROP SEQUENCE IF EXISTS w_FD_FAC_DETFACLIG_sequence; CREATE TEMP SEQUENCE w_FD_FAC_DETFACLIG_sequence; DROP TABLE IF EXISTS w_FD_FAC_DETFACLIG; CREATE TEMP TABLE w_FD_FAC_DETFACLIG AS SELECT nextval('w_FD_FAC_DETFACLIG_sequence'::regclass) AS oid, 0::bigint AS FD_ACTES_CCAM_id, w_FD_FAC_DETFAC.no_sejour, w_FD_FAC_DETFAC.sejour_id, w_FD_FAC_DETFAC.no_facture, 0::bigint AS rss_id, 0::bigint AS no_rss, 0::bigint AS ghs_id, '0'::text AS inclus_dans_sejour, w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, w_FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET, w_FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, w_FD_FAC_DETFAC.CLI_CODE_ETAT, w_FD_FAC_DETFAC.CLI_FLAG_SENS, w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, ''::text AS CLI_CODE_MEDECINREALISATEUR, ''::text AS CLI_CODE_CCAM, ''::text AS CLI_CODE_PHASE, ''::text AS CLI_CODE_ACTIVITE, ''::text AS CLI_DONN_EXTDOC, ''::text AS CLI_DONN_MODIFICATEUR, CLI_SEQUENCE1ACTE, CLI_SEQUENCE2ACTE, CLI_CODE_ORDONNATEUR::text, CASE WHEN CLI_CODE_PRESTATIONEXTERNE = '' THEN CLI_DONN_DESCRIPTIONCOURTE ELSE CLI_CODE_PRESTATIONEXTERNE END AS CLI_CODE_PRESTATION, date(CLI_DATE_DEBPREST) AS CLI_DATE_DEBPREST, date(COALESCE(CLI_DATE_FINPREST,CLI_DATE_DEBPREST)) AS CLI_DATE_FINPREST, CASE WHEN CLI_CODE_PRESTATIONEXTERNE = '' THEN CLI_DONN_QTE ELSE 1 END * (CASE WHEN CLI_FLAG_SENS = 1 THEN 1 ELSE -1 END) AS CLI_DONN_QTE, CASE WHEN CLI_CODE_PRESTATIONEXTERNE <> '' THEN CLI_DONN_QTE ELSE 1 END AS CLI_DONN_COEFF, CLI_DONN_TAUX, CLI_DONN_TU, CASE WHEN CLI_FLAG_SENS = 1 THEN CLI_DONN_MONTANTLIG ELSE 0 - CLI_DONN_MONTANTLIG END AS CLI_DONN_MONTANTLIG, CLI_CODE_PRATICIEN, CLI_CODE_PRATICIENINTERNE, CLI_DONN_NOOBJINTFAC FROM prod_clinicom.FD_FAC_DETFACLIG JOIN w_ADMISSIONS_select ON FD_FAC_DETFACLIG.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN w_FD_FAC_DETFAC ON FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE = w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE AND FD_FAC_DETFACLIG.CLI_DONN_NOOBJINTFAC = w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET AND FD_FAC_DETFACLIG.CLI_DONN_EXERCOMPTA = w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA JOIN prod_clinicom.FB_FAC_PRESTATION ON FD_FAC_DETFACLIG.CLI_CODE_PRESTATION = FB_FAC_PRESTATION.CLI_CODE_PRESTATION; -- Suppression des lignes de forfait journalier en trop DELETE FROM w_FD_FAC_DETFACLIG USING ( SELECT w_FD_FAC_DETFAC.no_facture, CLI_DONN_MONTANTLIG , CLI_DONN_MONTANT, CLI_DONN_MONTANTLIG - CLI_DONN_MONTANT AS CLI_DONN_MONTANTDIFF FROM w_FD_FAC_DETFAC JOIN ( SELECT no_facture, SUM(CLI_DONN_MONTANTLIG) AS CLI_DONN_MONTANTLIG FROM w_FD_FAC_DETFACLIG GROUP BY 1 ) subview ON subview.no_facture = w_FD_FAC_DETFAC.no_facture WHERE CLI_DONN_MONTANTLIG <> CLI_DONN_MONTANT ) subview WHERE subview.no_facture = w_FD_FAC_DETFACLIG.no_facture AND subview.CLI_DONN_MONTANTDIFF = w_FD_FAC_DETFACLIG.CLI_DONN_MONTANTLIG; ]]> 0 JOIN pmsi.t_prestations t_prestations_pmsi ON prestation_id = t_prestations_pmsi.oid AND t_prestations_pmsi.code NOT IN ('BHN', 'PHN', 'ELMA', 'HYP', 'PB', 'PB F', 'PHU', 'PNDL', 'SAP', 'SCOL', 'SIND') LEFT JOIN pmsi.t_ghs t_ghs_pmsi ON p_rss.ghs_id = t_ghs_pmsi.oid LEFT JOIN base.t_ghs ON t_ghs_pmsi.code = t_ghs.code; -- Plusieurs RSS pour le meme sejour SELECT base.cti_execute(' UPDATE w_FD_FAC_DETFACLIG SET no_facture = w_FD_FAC_DETFACLIG.no_facture || ''-'' || suffixe FROM ( SELECT no_facture, MAX(rss_id) AS rss_id, count(*) AS suffixe FROM w_FD_FAC_DETFACLIG WHERE CLI_CODE_OBJETFACTURATION = ''PMSI'' GROUP BY 1 HAVING COUNT(DISTINCT rss_id) > 1 ) subview WHERE w_FD_FAC_DETFACLIG.no_facture = subview.no_facture AND w_FD_FAC_DETFACLIG.rss_id = subview.rss_id',50); UPDATE activite[PX].p_sejours SET ghs_id = w_FD_FAC_DETFACLIG.ghs_id FROM w_FD_FAC_DETFACLIG WHERE p_sejours.no_sejour = w_FD_FAC_DETFACLIG.no_sejour AND CLI_CODE_OBJETFACTURATION = 'PMSI' AND w_FD_FAC_DETFACLIG.ghs_id <> 0 AND CLI_CODE_PRESTATION = 'GHS' AND p_sejours.ghs_id IS DISTINCT FROM w_FD_FAC_DETFACLIG.ghs_id; INSERT INTO w_FD_FAC_DETFAC SELECT w_FD_FAC_DETFACLIG.no_sejour, w_FD_FAC_DETFACLIG.sejour_id, w_FD_FAC_DETFACLIG.no_facture, ''::text AS no_facture_avoir, MAX(w_FD_FAC_DETFACLIG.ghs_id), '1'::text AS type_tiers_payant, MAX(w_MVTS_EPISODES_debiteurs.tiers_payant_0_id), MAX(w_MVTS_EPISODES_debiteurs.tiers_payant_1_id), MAX(w_MVTS_EPISODES_debiteurs.tiers_payant_2_id), '1'::text AS est_budget_global, '1'::text AS est_pmsi, rss_id, w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE, MAX(CLI_DONN_EXERCOMPTA), MAX(CLI_DONN_NOOBJETFAC), 1::numeric AS CLI_CODE_TYPEDEBITEUR, ''::text AS CLI_CODE_ORGANISME, MAX(CLI_FLAG_SENS), MAX(CLI_CODE_OBJETFACTURATION), MAX(date_trunc('month',CLI_DATE_FINPREST) + interval '2 months' - interval '1 day') AS CLI_DATE_OBJETFAC, MIN(CLI_DATE_DEBPREST) AS CLI_DATE_DEBPERIODE, MAX(CLI_DATE_FINPREST) AS CLI_DATE_FINPERIODE, MAX(CLI_CODE_ETAT), SUM(CLI_DONN_MONTANTLIG), 0::numeric AS CLI_DONN_EXERCTX, 0::numeric AS CLI_DONN_NOOBJETCTX, MAX(CLI_CODE_NOINTERNEOBJET) FROM w_FD_FAC_DETFACLIG JOIN w_MVTS_EPISODES_debiteurs ON w_MVTS_EPISODES_debiteurs.CLI_DONN_NOABSEPISODE = w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE WHERE CLI_CODE_OBJETFACTURATION= 'PMSI' GROUP BY 1,2,3,12,13; ]]> 0; DROP TABLE IF EXISTS w_FD_ACTES_CCAM; CREATE TEMP TABLE w_FD_ACTES_CCAM AS SELECT no_sejour, ''::text AS no_facture_1, ''::text AS no_facture_2, ''::text AS no_facture_0, FD_ACTES_CCAM.CLI_DONN_NOABSEPISODE, FD_ACTES_CCAM.CLI_DONN_LIEN, FD_ACTES_CCAM.CLI_DONN_NUMSEQUENCE, FD_ACTES_ENTETE.CLI_DATE_SAISIE, FD_ACTES_CCAM.CLI_CODE_CCAM, FD_ACTES_CCAM.CLI_CODE_TABLECCAM, FD_ACTES_CCAM.CLI_DONN_NOMBRE, FD_ACTES_CCAM.CLI_CODE_PHASE, FD_ACTES_CCAM.CLI_CODE_ACTIVITE, FD_ACTES_CCAM.CLI_CODE_MEDECINREALISATEUR, FD_ACTES_CCAM.CLI_DONN_EXTDOC, FD_ACTES_CCAM.CLI_CODE_ASSNP, FD_ACTES_CCAM.CLI_FLAG_REMBEXC, FD_ACTES_CCAM.CLI_FLAG_PRIVE, FD_ACTES_CCAM.CLI_DONN_TAUXSECU, FD_ACTES_CCAM.CLI_FLAG_ACTEGRATUIT, FD_ACTES_CCAM.CLI_DONN_MODIFICATEUR, FD_ACTES_CCAM.CLI_FLAG_REGIE, FD_ACTES_CCAM.CLI_DONN_MNTDEPHONORAIRE, FD_ACTES_CCAM.CLI_FLAG_DISPOSITIFPREV, FD_ACTES_CCAM.CLI_CODE_CODEASSOC, FD_ACTES_CCAM.CLI_CODE_REGROUPEMENTFACTURATION, FD_ACTES_CCAM.CLI_FLAG_DEPASSEMENTAUTORISE, COALESCE(FB_FAC_ACTECCAMPHASEHISTO.CLI_DONN_PRIXUNITAIRE,0) AS CLI_DONN_PRIXUNITAIRE, CASE WHEN FD_ACTES_CCAM.CLI_CODE_CODEASSOC <> 'X' THEN COALESCE(FB_FAC_ASSONPCOEFF.CLI_DONN_COEFFICIENT,1) ELSE 0 END AS CLI_DONN_COEFFICIENT_ANP, COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_1.CLI_DONN_FORFAIT,0) AS CLI_DONN_FORFAIT_M1, COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_1.CLI_DONN_COEFFICIENT,1) AS CLI_DONN_COEFFICIENT_M1, COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_2.CLI_DONN_FORFAIT,0) AS CLI_DONN_FORFAIT_M2, COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_2.CLI_DONN_COEFFICIENT,1) AS CLI_DONN_COEFFICIENT_M2, COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_3.CLI_DONN_FORFAIT,0) AS CLI_DONN_FORFAIT_M3, COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_3.CLI_DONN_COEFFICIENT,1) AS CLI_DONN_COEFFICIENT_M3, COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_4.CLI_DONN_FORFAIT,0) AS CLI_DONN_FORFAIT_M4, COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_4.CLI_DONN_COEFFICIENT,1) AS CLI_DONN_COEFFICIENT_M4, 1::numeric AS coefficient, CLI_DONN_PRIXUNITAIRE AS prix_unitaire, 0::numeric AS taux_1, 0::numeric AS taux_2, 0::numeric AS taux_0, '0'::text AS acte_inclus_dans_sejour_0, '0'::text AS acte_inclus_dans_sejour_1, '0'::text AS acte_inclus_dans_sejour_2, 0::numeric AS montant_facture, 0::numeric AS montant_facture_0, 0::numeric AS montant_facture_1, 0::numeric AS montant_facture_2, 0::numeric AS montant_facture_actes_inclus_dans_sejour, 0::numeric AS montant_facture_0_actes_inclus_dans_sejour, 0::numeric AS montant_facture_1_actes_inclus_dans_sejour, 0::numeric AS montant_facture_2_actes_inclus_dans_sejour FROM prod_clinicom.FD_ACTES_CCAM JOIN w_ADMISSIONS_select ON FD_ACTES_CCAM.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN prod_clinicom.FD_ACTES_ENTETE ON FD_ACTES_CCAM.CLI_DONN_NOABSEPISODE = FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE AND FD_ACTES_CCAM.CLI_DONN_LIEN = FD_ACTES_ENTETE.CLI_DONN_LIEN LEFT JOIN prod_clinicom.FB_FAC_ACTECCAMPHASEHISTO ON FD_ACTES_CCAM.CLI_CODE_CCAM = FB_FAC_ACTECCAMPHASEHISTO.CLI_CODE_ACTE AND FD_ACTES_CCAM.CLI_CODE_ACTIVITE = FB_FAC_ACTECCAMPHASEHISTO.CLI_CODE_ACTIVITE AND FD_ACTES_CCAM.CLI_CODE_PHASE = FB_FAC_ACTECCAMPHASEHISTO.CLI_CODE_PHASE AND FD_ACTES_ENTETE.CLI_DATE_SAISIE BETWEEN CLI_DATE_EFFET AND COALESCE(CLI_DATE_FINEFFET,'2099-12-31 00:00:00') - interval '1 second' LEFT JOIN prod_clinicom.FB_FAC_ASSONPCOEFF ON FD_ACTES_CCAM.CLI_CODE_CODEASSOC = FB_FAC_ASSONPCOEFF.CLI_CODE_ASSOCIATIONACTE AND FD_ACTES_ENTETE.CLI_DATE_SAISIE BETWEEN FB_FAC_ASSONPCOEFF.CLI_DATE_DEBUT AND COALESCE(FB_FAC_ASSONPCOEFF.CLI_DATE_FIN,'2099-12-31 00:00:00') - interval '1 second' LEFT JOIN prod_clinicom.FB_FAC_ASSOMODIFICATEURCOEFF FB_FAC_ASSOMODIFICATEURCOEFF_1 ON SUBSTR(FD_ACTES_CCAM.CLI_DONN_MODIFICATEUR,1,1) = FB_FAC_ASSOMODIFICATEURCOEFF_1.CLI_CODE_MODIFICATEUR AND FD_ACTES_ENTETE.CLI_DATE_SAISIE BETWEEN FB_FAC_ASSOMODIFICATEURCOEFF_1.CLI_DATE_DEBUT AND COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_1.CLI_DATE_FIN,'2099-12-31 00:00:00') - interval '1 second' LEFT JOIN prod_clinicom.FB_FAC_ASSOMODIFICATEURCOEFF FB_FAC_ASSOMODIFICATEURCOEFF_2 ON SUBSTR(FD_ACTES_CCAM.CLI_DONN_MODIFICATEUR,2,1) = FB_FAC_ASSOMODIFICATEURCOEFF_2.CLI_CODE_MODIFICATEUR AND FD_ACTES_ENTETE.CLI_DATE_SAISIE BETWEEN FB_FAC_ASSOMODIFICATEURCOEFF_2.CLI_DATE_DEBUT AND COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_2.CLI_DATE_FIN,'2099-12-31 00:00:00') - interval '1 second' LEFT JOIN prod_clinicom.FB_FAC_ASSOMODIFICATEURCOEFF FB_FAC_ASSOMODIFICATEURCOEFF_3 ON SUBSTR(FD_ACTES_CCAM.CLI_DONN_MODIFICATEUR,3,1) = FB_FAC_ASSOMODIFICATEURCOEFF_3.CLI_CODE_MODIFICATEUR AND FD_ACTES_ENTETE.CLI_DATE_SAISIE BETWEEN FB_FAC_ASSOMODIFICATEURCOEFF_3.CLI_DATE_DEBUT AND COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_3.CLI_DATE_FIN,'2099-12-31 00:00:00') - interval '1 second' LEFT JOIN prod_clinicom.FB_FAC_ASSOMODIFICATEURCOEFF FB_FAC_ASSOMODIFICATEURCOEFF_4 ON SUBSTR(FD_ACTES_CCAM.CLI_DONN_MODIFICATEUR,4,1) = FB_FAC_ASSOMODIFICATEURCOEFF_4.CLI_CODE_MODIFICATEUR AND FD_ACTES_ENTETE.CLI_DATE_SAISIE BETWEEN FB_FAC_ASSOMODIFICATEURCOEFF_4.CLI_DATE_DEBUT AND COALESCE(FB_FAC_ASSOMODIFICATEURCOEFF_4.CLI_DATE_FIN,'2099-12-31 00:00:00') - interval '1 second' JOIN activite[PX].p_sejours ON FD_ACTES_CCAM.CLI_DONN_NOABSEPISODE = p_sejours.code_original AND p_sejours.etat = ''; CREATE INDEX w_FD_ACTES_CCAM_i1 ON w_FD_ACTES_CCAM USING btree (no_sejour); CREATE INDEX w_FD_ACTES_CCAM_i2 ON w_FD_ACTES_CCAM USING btree (CLI_DATE_SAISIE); UPDATE w_FD_ACTES_CCAM SET prix_unitaire = round( CLI_DONN_COEFFICIENT_ANP * (CLI_DONN_PRIXUNITAIRE + (CLI_DONN_PRIXUNITAIRE * CLI_DONN_COEFFICIENT_M1) - CLI_DONN_PRIXUNITAIRE + (CLI_DONN_PRIXUNITAIRE * CLI_DONN_COEFFICIENT_M2) - CLI_DONN_PRIXUNITAIRE + (CLI_DONN_PRIXUNITAIRE * CLI_DONN_COEFFICIENT_M3) - CLI_DONN_PRIXUNITAIRE + (CLI_DONN_PRIXUNITAIRE * CLI_DONN_COEFFICIENT_M4) - CLI_DONN_PRIXUNITAIRE) + CLI_DONN_FORFAIT_M1 + CLI_DONN_FORFAIT_M2 + CLI_DONN_FORFAIT_M3 + CLI_DONN_FORFAIT_M4 ,2) WHERE CLI_DONN_PRIXUNITAIRE <> 0 AND (CLI_DONN_COEFFICIENT_ANP <> 1 OR CLI_DONN_COEFFICIENT_M1 <> 1 OR CLI_DONN_COEFFICIENT_M2 <> 1 OR CLI_DONN_COEFFICIENT_M3 <> 1 OR CLI_DONN_COEFFICIENT_M4 <> 1 OR CLI_DONN_FORFAIT_M1 <> 0 OR CLI_DONN_FORFAIT_M2 <> 0 OR CLI_DONN_FORFAIT_M3 <> 0 OR CLI_DONN_FORFAIT_M4 <> 0) ; DROP TABLE IF EXISTS w_FD_FAC_DETFAC_inclus; CREATE TEMP TABLE w_FD_FAC_DETFAC_inclus AS SELECT w_FD_FAC_DETFACLIG.no_sejour, CLI_DATE_DEBPERIODE, CLI_DATE_FINPERIODE, MAX(CASE WHEN CLI_CODE_PRESTATION IN ('GHS', 'TM', 'ESTH') AND CLI_DONN_TAUX > 0 THEN '1' ELSE '0' END) AS q_ghs, MAX(CASE WHEN type_tiers_payant = '0' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_0, MAX(CASE WHEN type_tiers_payant = '1' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_1, MAX(CASE WHEN type_tiers_payant = '2' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_2, MAX(CASE WHEN type_tiers_payant = '0' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_0, MAX(CASE WHEN type_tiers_payant = '1' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_1, MAX(CASE WHEN type_tiers_payant = '2' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_2, MAX(CASE WHEN type_tiers_payant = '0' THEN '1' ELSE '0' END) AS acte_inclus_dans_sejour_0, MAX(CASE WHEN type_tiers_payant = '1' THEN '1' ELSE '0' END) AS acte_inclus_dans_sejour_1, MAX(CASE WHEN type_tiers_payant = '2' THEN '1' ELSE '0' END) AS acte_inclus_dans_sejour_2 FROM w_FD_FAC_DETFACLIG JOIN w_FD_FAC_DETFAC ON w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE = w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE AND w_FD_FAC_DETFACLIG.CLI_Donn_NoObjIntFac = w_FD_FAC_DETFAC.CLI_Code_NoInterneObjet WHERE CLI_CODE_PRESTATION IN ('GHS', 'TM', 'ESTH', 'ACO', 'ADA', 'ADC', 'ADE', 'ADI', 'ATM', 'DEN') AND CLI_DONN_TAUX > 0 GROUP BY 1,2,3; CREATE INDEX w_FD_FAC_DETFAC_inclus_i1 ON w_FD_FAC_DETFAC_inclus USING btree (no_sejour); CREATE INDEX w_FD_FAC_DETFAC_inclus_i2 ON w_FD_FAC_DETFAC_inclus USING btree (CLI_DATE_DEBPERIODE); -- Actes inclus dans séjours (budget global) UPDATE w_FD_ACTES_CCAM SET no_facture_1 = w_FD_FAC_DETFAC_inclus.no_facture_1, taux_1 = 100, acte_inclus_dans_sejour_1 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_CCAM.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND CLI_DATE_DEBPERIODE = CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_1 = '1' AND w_FD_ACTES_CCAM.no_facture_1 = '' AND w_FD_ACTES_CCAM.no_facture_2 = '' AND w_FD_ACTES_CCAM.no_facture_0 = ''; UPDATE w_FD_ACTES_CCAM SET no_facture_2 = w_FD_FAC_DETFAC_inclus.no_facture_2, taux_2 = 100, acte_inclus_dans_sejour_2 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_CCAM.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND CLI_DATE_DEBPERIODE = CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_2 = '1' AND w_FD_ACTES_CCAM.no_facture_1 = '' AND w_FD_ACTES_CCAM.no_facture_2 = '' AND w_FD_ACTES_CCAM.no_facture_0 = ''; UPDATE w_FD_ACTES_CCAM SET no_facture_0 = w_FD_FAC_DETFAC_inclus.no_facture_0, taux_0 = 100, acte_inclus_dans_sejour_0 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_CCAM.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND CLI_DATE_DEBPERIODE = CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_0 = '1' AND w_FD_ACTES_CCAM.no_facture_1 = '' AND w_FD_ACTES_CCAM.no_facture_2 = '' AND w_FD_ACTES_CCAM.no_facture_0 = ''; UPDATE w_FD_ACTES_CCAM SET no_facture_1 = w_FD_FAC_DETFAC_inclus.no_facture_1, taux_1 = 100, acte_inclus_dans_sejour_1 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_CCAM.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_1 = '1' AND w_FD_ACTES_CCAM.no_facture_1 = '' AND w_FD_ACTES_CCAM.no_facture_2 = '' AND w_FD_ACTES_CCAM.no_facture_0 = ''; UPDATE w_FD_ACTES_CCAM SET no_facture_2 = w_FD_FAC_DETFAC_inclus.no_facture_2, taux_2 = 100, acte_inclus_dans_sejour_2 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_CCAM.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_2 = '1' AND w_FD_ACTES_CCAM.no_facture_1 = '' AND w_FD_ACTES_CCAM.no_facture_2 = '' AND w_FD_ACTES_CCAM.no_facture_0 = ''; UPDATE w_FD_ACTES_CCAM SET no_facture_0 = w_FD_FAC_DETFAC_inclus.no_facture_0, taux_0 = 100, acte_inclus_dans_sejour_0 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_CCAM.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_0 = '1' AND w_FD_ACTES_CCAM.no_facture_1 = '' AND w_FD_ACTES_CCAM.no_facture_2 = '' AND w_FD_ACTES_CCAM.no_facture_0 = ''; UPDATE w_FD_ACTES_CCAM SET montant_facture_actes_inclus_dans_sejour = round(CLI_DONN_NOMBRE * prix_unitaire * taux_1 / 100,2), montant_facture_1_actes_inclus_dans_sejour = round(CLI_DONN_NOMBRE * prix_unitaire * taux_1 / 100,2) WHERE acte_inclus_dans_sejour_1 = '1'; UPDATE w_FD_ACTES_CCAM SET montant_facture_actes_inclus_dans_sejour = montant_facture_actes_inclus_dans_sejour + round(CLI_DONN_NOMBRE * prix_unitaire * taux_2 / 100,2), montant_facture_2_actes_inclus_dans_sejour = round(CLI_DONN_NOMBRE * prix_unitaire * taux_2 / 100,2) WHERE acte_inclus_dans_sejour_2 = '1'; UPDATE w_FD_ACTES_CCAM SET montant_facture_actes_inclus_dans_sejour = montant_facture_actes_inclus_dans_sejour + round(CLI_DONN_NOMBRE * prix_unitaire * taux_0 / 100,2), montant_facture_2_actes_inclus_dans_sejour = round(CLI_DONN_NOMBRE * prix_unitaire * taux_0 / 100,2) WHERE acte_inclus_dans_sejour_0 = '1'; DROP TABLE IF EXISTS w_FD_FAC_DETFACLIG_taux; CREATE TEMP TABLE w_FD_FAC_DETFACLIG_taux AS SELECT w_FD_FAC_DETFACLIG.no_sejour, CLI_CODE_PRESTATION, CLI_DONN_TU, MAX(CASE WHEN type_tiers_payant = '1' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_1, MAX(CASE WHEN type_tiers_payant = '2' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_2, MAX(CASE WHEN type_tiers_payant = '0' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_0, MAX(CASE WHEN type_tiers_payant = '1' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_1, MAX(CASE WHEN type_tiers_payant = '2' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_2, MAX(CASE WHEN type_tiers_payant = '0' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_0 FROM w_FD_FAC_DETFACLIG JOIN w_FD_FAC_DETFAC ON w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE = w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE AND w_FD_FAC_DETFACLIG.CLI_Donn_NoObjIntFac = w_FD_FAC_DETFAC.CLI_Code_NoInterneObjet AND CLI_DONN_NOOBJETCTX = 0 WHERE CLI_CODE_PRESTATION IN (SELECT CLI_CODE_REGROUPEMENTFACTURATION FROM w_FD_ACTES_CCAM) GROUP BY 1,2,3 ORDER BY 1,2,3; DROP TABLE IF EXISTS w_FD_FAC_DETFACLIG_tauxb; CREATE TEMP TABLE w_FD_FAC_DETFACLIG_tauxb AS SELECT w_FD_FAC_DETFACLIG.no_sejour, CLI_CODE_PRESTATION, MAX(CASE WHEN type_tiers_payant = '1' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_1, MAX(CASE WHEN type_tiers_payant = '2' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_2, MAX(CASE WHEN type_tiers_payant = '0' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_0, MAX(CASE WHEN type_tiers_payant = '1' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_1, MAX(CASE WHEN type_tiers_payant = '2' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_2, MAX(CASE WHEN type_tiers_payant = '0' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_0 FROM w_FD_FAC_DETFACLIG JOIN w_FD_FAC_DETFAC ON w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE = w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE AND w_FD_FAC_DETFACLIG.CLI_Donn_NoObjIntFac = w_FD_FAC_DETFAC.CLI_Code_NoInterneObjet AND CLI_DONN_NOOBJETCTX = 0 WHERE CLI_CODE_PRESTATION IN (SELECT CLI_CODE_REGROUPEMENTFACTURATION FROM w_FD_ACTES_CCAM) GROUP BY 1,2 ORDER BY 1,2; UPDATE w_FD_ACTES_CCAM SET no_facture_0 = w_FD_FAC_DETFACLIG_taux.no_facture_0, taux_0 = w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_0 FROM w_FD_FAC_DETFACLIG_taux WHERE w_FD_FAC_DETFACLIG_taux.no_sejour = w_FD_ACTES_CCAM.no_sejour AND CLI_CODE_REGROUPEMENTFACTURATION = CLI_CODE_PRESTATION AND w_FD_ACTES_CCAM.prix_unitaire = CLI_DONN_TU AND w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_0 <> 0 AND w_FD_ACTES_CCAM.no_facture_0 = '' ; UPDATE w_FD_ACTES_CCAM SET no_facture_1 = w_FD_FAC_DETFACLIG_taux.no_facture_1, taux_1 = w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_1 FROM w_FD_FAC_DETFACLIG_taux WHERE w_FD_FAC_DETFACLIG_taux.no_sejour = w_FD_ACTES_CCAM.no_sejour AND CLI_CODE_REGROUPEMENTFACTURATION = CLI_CODE_PRESTATION AND w_FD_ACTES_CCAM.prix_unitaire = CLI_DONN_TU AND w_FD_ACTES_CCAM.no_facture_1 = '' AND w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_1 <> 0; UPDATE w_FD_ACTES_CCAM SET no_facture_1 = w_FD_FAC_DETFACLIG_taux.no_facture_1, taux_1 = w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_1 FROM w_FD_FAC_DETFACLIG_taux WHERE w_FD_FAC_DETFACLIG_taux.no_sejour = w_FD_ACTES_CCAM.no_sejour AND CLI_CODE_REGROUPEMENTFACTURATION = CLI_CODE_PRESTATION AND w_FD_ACTES_CCAM.no_facture_1 = '' AND w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_1 <> 0 AND taux_0 + taux_1 + taux_2 <> 100; UPDATE w_FD_ACTES_CCAM SET no_facture_0 = w_FD_FAC_DETFACLIG_taux.no_facture_0, taux_0 = w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_0 FROM w_FD_FAC_DETFACLIG_tauxb w_FD_FAC_DETFACLIG_taux WHERE w_FD_FAC_DETFACLIG_taux.no_sejour = w_FD_ACTES_CCAM.no_sejour AND CLI_CODE_REGROUPEMENTFACTURATION = CLI_CODE_PRESTATION AND w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_0 <> 0 AND taux_0 + taux_1 + taux_2 <> 100 AND w_FD_ACTES_CCAM.no_facture_0 = ''; UPDATE w_FD_ACTES_CCAM SET no_facture_2 = w_FD_FAC_DETFACLIG_taux.no_facture_2, taux_2 = w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_2 FROM w_FD_FAC_DETFACLIG_taux WHERE w_FD_FAC_DETFACLIG_taux.no_sejour = w_FD_ACTES_CCAM.no_sejour AND CLI_CODE_REGROUPEMENTFACTURATION = CLI_CODE_PRESTATION AND w_FD_ACTES_CCAM.prix_unitaire = CLI_DONN_TU AND w_FD_ACTES_CCAM.no_facture_2 = '' AND w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_2 <> 0 ; UPDATE w_FD_ACTES_CCAM SET no_facture_2 = w_FD_FAC_DETFACLIG_taux.no_facture_2, taux_2 = w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_2 FROM w_FD_FAC_DETFACLIG_tauxb w_FD_FAC_DETFACLIG_taux WHERE w_FD_FAC_DETFACLIG_taux.no_sejour = w_FD_ACTES_CCAM.no_sejour AND CLI_CODE_REGROUPEMENTFACTURATION = CLI_CODE_PRESTATION AND w_FD_ACTES_CCAM.no_facture_2 = '' AND w_FD_FAC_DETFACLIG_taux.CLI_DONN_TAUX_2 <> 0 AND taux_0 + taux_1 + taux_2 <> 100; -- mise à jour actes facturés (externes) UPDATE w_FD_FAC_DETFACLIG SET CLI_CODE_MEDECINREALISATEUR = w_FD_ACTES_CCAM.CLI_CODE_MEDECINREALISATEUR, CLI_CODE_CCAM = w_FD_ACTES_CCAM.CLI_CODE_CCAM, CLI_CODE_PHASE = w_FD_ACTES_CCAM.CLI_CODE_PHASE, CLI_CODE_ACTIVITE = w_FD_ACTES_CCAM.CLI_CODE_ACTIVITE, CLI_DONN_EXTDOC = w_FD_ACTES_CCAM.CLI_DONN_EXTDOC, CLI_DONN_MODIFICATEUR = w_FD_ACTES_CCAM.CLI_DONN_MODIFICATEUR FROM w_FD_ACTES_CCAM WHERE w_FD_ACTES_CCAM.CLI_DONN_NOABSEPISODE = w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE AND w_FD_ACTES_CCAM.CLI_DONN_LIEN = w_FD_FAC_DETFACLIG.CLI_SEQUENCE1ACTE AND w_FD_ACTES_CCAM.CLI_DONN_NUMSEQUENCE = w_FD_FAC_DETFACLIG.CLI_SEQUENCE2ACTE AND w_FD_FAC_DETFACLIG.CLI_CODE_PRATICIENINTERNE <> '' AND w_FD_FAC_DETFACLIG.CLI_CODE_PRESTATION IN ('ACO', 'ADA', 'ADC', 'ADE', 'ADI', 'ATM', 'DEN'); -- Ajout inclus dans sejour INSERT INTO w_FD_FAC_DETFACLIG SELECT nextval('w_FD_FAC_DETFACLIG_sequence'::regclass) AS oid, 0::bigint AS FD_ACTES_CCAM_id, w_FD_FAC_DETFAC.no_sejour, w_FD_FAC_DETFAC.sejour_id, w_FD_FAC_DETFAC.no_facture, 0::bigint AS rss_id, 0::bigint AS no_rss, 0::bigint AS ghs_id, '1'::text AS inclus_dans_sejour, w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, w_FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET, w_FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, w_FD_FAC_DETFAC.CLI_CODE_ETAT, w_FD_FAC_DETFAC.CLI_FLAG_SENS, w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, CLI_CODE_MEDECINREALISATEUR, CLI_CODE_CCAM, CLI_CODE_PHASE, CLI_CODE_ACTIVITE, CLI_DONN_EXTDOC, CLI_DONN_MODIFICATEUR, ''::text AS CLI_SEQUENCE1ACTE, ''::text AS CLI_SEQUENCE2ACTE, ''::text AS CLI_CODE_ORDONNATEUR, CLI_CODE_REGROUPEMENTFACTURATION AS CLI_CODE_PRESTATION, date(CLI_DATE_SAISIE) AS CLI_DATE_DEBPREST, date(CLI_DATE_SAISIE) AS CLI_DATE_FINPREST, CLI_DONN_NOMBRE AS CLI_DONN_QTE, 1 AS CLI_DONN_COEFF, w_FD_ACTES_CCAM.taux_1, w_FD_ACTES_CCAM.prix_unitaire, round(w_FD_ACTES_CCAM.prix_unitaire * w_FD_ACTES_CCAM.taux_1 * CLI_DONN_NOMBRE / 100,2) AS CLI_DONN_MONTANTLIG, 0::numeric AS CLI_CODE_PRATICIEN, '' AS CLI_CODE_PRATICIENINTERNE, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET FROM w_FD_ACTES_CCAM JOIN w_FD_FAC_DETFAC ON w_FD_ACTES_CCAM.no_facture_1 = w_FD_FAC_DETFAC.no_facture WHERE w_FD_ACTES_CCAM.no_facture_1 <> '' AND acte_inclus_dans_sejour_1 = '1'; INSERT INTO w_FD_FAC_DETFACLIG SELECT nextval('w_FD_FAC_DETFACLIG_sequence'::regclass) AS oid, 0::bigint AS FD_ACTES_CCAM_id, w_FD_FAC_DETFAC.no_sejour, w_FD_FAC_DETFAC.sejour_id, w_FD_FAC_DETFAC.no_facture, 0::bigint AS rss_id, 0::bigint AS no_rss, 0::bigint AS ghs_id, '1'::text AS inclus_dans_sejour, w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, w_FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET, w_FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, w_FD_FAC_DETFAC.CLI_CODE_ETAT, w_FD_FAC_DETFAC.CLI_FLAG_SENS, w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, CLI_CODE_MEDECINREALISATEUR, CLI_CODE_CCAM, CLI_CODE_PHASE, CLI_CODE_ACTIVITE, CLI_DONN_EXTDOC, CLI_DONN_MODIFICATEUR, ''::text AS CLI_SEQUENCE1ACTE, ''::text AS CLI_SEQUENCE2ACTE, ''::text AS CLI_CODE_ORDONNATEUR, CLI_CODE_REGROUPEMENTFACTURATION AS CLI_CODE_PRESTATION, date(CLI_DATE_SAISIE) AS CLI_DATE_DEBPREST, date(CLI_DATE_SAISIE) AS CLI_DATE_FINPREST, CLI_DONN_NOMBRE AS CLI_DONN_QTE, 1 AS CLI_DONN_COEFF, w_FD_ACTES_CCAM.taux_2, w_FD_ACTES_CCAM.prix_unitaire, round(w_FD_ACTES_CCAM.prix_unitaire * w_FD_ACTES_CCAM.taux_2 * CLI_DONN_NOMBRE / 100,2) AS CLI_DONN_MONTANTLIG, 0::numeric AS CLI_CODE_PRATICIEN, '' AS CLI_CODE_PRATICIENINTERNE, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET FROM w_FD_ACTES_CCAM JOIN w_FD_FAC_DETFAC ON w_FD_ACTES_CCAM.no_facture_2 = w_FD_FAC_DETFAC.no_facture WHERE w_FD_ACTES_CCAM.no_facture_2 <> '' AND acte_inclus_dans_sejour_2 = '1'; INSERT INTO w_FD_FAC_DETFACLIG SELECT nextval('w_FD_FAC_DETFACLIG_sequence'::regclass) AS oid, 0::bigint AS FD_ACTES_CCAM_id, w_FD_FAC_DETFAC.no_sejour, w_FD_FAC_DETFAC.sejour_id, w_FD_FAC_DETFAC.no_facture, 0::bigint AS rss_id, 0::bigint AS no_rss, 0::bigint AS ghs_id, '1'::text AS inclus_dans_sejour, w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, w_FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET, w_FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, w_FD_FAC_DETFAC.CLI_CODE_ETAT, w_FD_FAC_DETFAC.CLI_FLAG_SENS, w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, CLI_CODE_MEDECINREALISATEUR, CLI_CODE_CCAM, CLI_CODE_PHASE, CLI_CODE_ACTIVITE, CLI_DONN_EXTDOC, CLI_DONN_MODIFICATEUR, ''::text AS CLI_SEQUENCE1ACTE, ''::text AS CLI_SEQUENCE2ACTE, ''::text AS CLI_CODE_ORDONNATEUR, CLI_CODE_REGROUPEMENTFACTURATION AS CLI_CODE_PRESTATION, date(CLI_DATE_SAISIE) AS CLI_DATE_DEBPREST, date(CLI_DATE_SAISIE) AS CLI_DATE_FINPREST, CLI_DONN_NOMBRE AS CLI_DONN_QTE, 1 AS CLI_DONN_COEFF, w_FD_ACTES_CCAM.taux_0, w_FD_ACTES_CCAM.prix_unitaire, round(w_FD_ACTES_CCAM.prix_unitaire * w_FD_ACTES_CCAM.taux_0 * CLI_DONN_NOMBRE / 100,2) AS CLI_DONN_MONTANTLIG, 0::numeric AS CLI_CODE_PRATICIEN, '' AS CLI_CODE_PRATICIENINTERNE, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET FROM w_FD_ACTES_CCAM JOIN w_FD_FAC_DETFAC ON w_FD_ACTES_CCAM.no_facture_0 = w_FD_FAC_DETFAC.no_facture WHERE w_FD_ACTES_CCAM.no_facture_0 <> '' AND acte_inclus_dans_sejour_0 = '1'; ]]> 0 GROUP BY 1,2,3; -- Actes inclus dans séjours (budget global) UPDATE w_FD_ACTES_ACTRHS SET no_facture_1 = w_FD_FAC_DETFAC_inclus.no_facture_1, taux_1 = 100, acte_inclus_dans_sejour_1 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_ACTRHS.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND CLI_DATE_DEBPERIODE = CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_1 = '1' AND w_FD_ACTES_ACTRHS.no_facture_1 = '' AND w_FD_ACTES_ACTRHS.no_facture_2 = '' AND w_FD_ACTES_ACTRHS.no_facture_0 = ''; UPDATE w_FD_ACTES_ACTRHS SET no_facture_2 = w_FD_FAC_DETFAC_inclus.no_facture_2, taux_2 = 100, acte_inclus_dans_sejour_2 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_ACTRHS.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND CLI_DATE_DEBPERIODE = CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_2 = '1' AND w_FD_ACTES_ACTRHS.no_facture_1 = '' AND w_FD_ACTES_ACTRHS.no_facture_2 = '' AND w_FD_ACTES_ACTRHS.no_facture_0 = ''; UPDATE w_FD_ACTES_ACTRHS SET no_facture_0 = w_FD_FAC_DETFAC_inclus.no_facture_0, taux_0 = 100, acte_inclus_dans_sejour_0 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_ACTRHS.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND CLI_DATE_DEBPERIODE = CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_0 = '1' AND w_FD_ACTES_ACTRHS.no_facture_1 = '' AND w_FD_ACTES_ACTRHS.no_facture_2 = '' AND w_FD_ACTES_ACTRHS.no_facture_0 = ''; UPDATE w_FD_ACTES_ACTRHS SET no_facture_1 = w_FD_FAC_DETFAC_inclus.no_facture_1, taux_1 = 100, acte_inclus_dans_sejour_1 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_ACTRHS.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_1 = '1' AND w_FD_ACTES_ACTRHS.no_facture_1 = '' AND w_FD_ACTES_ACTRHS.no_facture_2 = '' AND w_FD_ACTES_ACTRHS.no_facture_0 = ''; UPDATE w_FD_ACTES_ACTRHS SET no_facture_2 = w_FD_FAC_DETFAC_inclus.no_facture_2, taux_2 = 100, acte_inclus_dans_sejour_2 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_ACTRHS.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_2 = '1' AND w_FD_ACTES_ACTRHS.no_facture_1 = '' AND w_FD_ACTES_ACTRHS.no_facture_2 = '' AND w_FD_ACTES_ACTRHS.no_facture_0 = ''; UPDATE w_FD_ACTES_ACTRHS SET no_facture_0 = w_FD_FAC_DETFAC_inclus.no_facture_0, taux_0 = 100, acte_inclus_dans_sejour_0 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_ACTRHS.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_0 = '1' AND w_FD_ACTES_ACTRHS.no_facture_1 = '' AND w_FD_ACTES_ACTRHS.no_facture_2 = '' AND w_FD_ACTES_ACTRHS.no_facture_0 = ''; -- mise à jour actes facturés (externes) UPDATE w_FD_FAC_DETFACLIG SET CLI_CODE_MEDECINREALISATEUR = CASE WHEN w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR = '' THEN w_FD_ACTES_ACTRHS.CLI_CODE_INTERVENANT ELSE w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR END, CLI_CODE_CCAM = CASE WHEN w_FD_FAC_DETFACLIG.CLI_CODE_CCAM = '' THEN w_FD_ACTES_ACTRHS.CLI_CODE_ACTE ELSE w_FD_FAC_DETFACLIG.CLI_CODE_CCAM END FROM w_FD_ACTES_ACTRHS WHERE w_FD_ACTES_ACTRHS.CLI_DONN_NOABSEPISODE = w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE AND w_FD_ACTES_ACTRHS.CLI_DONN_LIEN = w_FD_FAC_DETFACLIG.CLI_SEQUENCE1ACTE AND w_FD_ACTES_ACTRHS.CLI_DONN_NUMSEQUENCE = w_FD_FAC_DETFACLIG.CLI_SEQUENCE2ACTE AND w_FD_FAC_DETFACLIG.CLI_CODE_PRATICIENINTERNE <> '' AND w_FD_FAC_DETFACLIG.CLI_CODE_PRESTATION NOT IN ('ACO', 'ADA', 'ADC', 'ADE', 'ADI', 'ATM', 'DEN'); -- Ajout inclus dans sejour INSERT INTO w_FD_FAC_DETFACLIG SELECT nextval('w_FD_FAC_DETFACLIG_sequence'::regclass) AS oid, 0::bigint AS FD_ACTES_ACTRHS_id, w_FD_FAC_DETFAC.no_sejour, w_FD_FAC_DETFAC.sejour_id, w_FD_FAC_DETFAC.no_facture, 0::bigint AS rss_id, 0::bigint AS no_rss, 0::bigint AS ghs_id, '1'::text AS inclus_dans_sejour, w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, w_FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET, w_FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, w_FD_FAC_DETFAC.CLI_CODE_ETAT, w_FD_FAC_DETFAC.CLI_FLAG_SENS, w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, CLI_CODE_MEDECINREALISATEUR, CLI_CODE_ACTE, ''::text AS CLI_CODE_PHASE, ''::text AS CLI_CODE_ACTIVITE, ''::text AS CLI_DONN_EXTDOC, ''::text AS CLI_DONN_MODIFICATEUR, ''::text AS CLI_SEQUENCE1ACTE, ''::text AS CLI_SEQUENCE2ACTE, ''::text AS CLI_CODE_ORDONNATEUR, CLI_CODE_ACTIVITESSR AS CLI_CODE_PRESTATION, date(CLI_DATE_SAISIE) AS CLI_DATE_DEBPREST, date(CLI_DATE_SAISIE) AS CLI_DATE_FINPREST, CLI_DONN_NOMBRE AS CLI_DONN_QTE, 1 AS CLI_DONN_COEFF, w_FD_ACTES_ACTRHS.taux_1, w_FD_ACTES_ACTRHS.prix_unitaire, round(w_FD_ACTES_ACTRHS.prix_unitaire * w_FD_ACTES_ACTRHS.taux_1 * CLI_DONN_NOMBRE / 100,2) AS CLI_DONN_MONTANTLIG, 0::numeric AS CLI_CODE_PRATICIEN, '' AS CLI_CODE_PRATICIENINTERNE, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET FROM w_FD_ACTES_ACTRHS JOIN w_FD_FAC_DETFAC ON w_FD_ACTES_ACTRHS.no_facture_1 = w_FD_FAC_DETFAC.no_facture WHERE w_FD_ACTES_ACTRHS.no_facture_1 <> '' AND acte_inclus_dans_sejour_1 = '1'; INSERT INTO w_FD_FAC_DETFACLIG SELECT nextval('w_FD_FAC_DETFACLIG_sequence'::regclass) AS oid, 0::bigint AS FD_ACTES_ACTRHS_id, w_FD_FAC_DETFAC.no_sejour, w_FD_FAC_DETFAC.sejour_id, w_FD_FAC_DETFAC.no_facture, 0::bigint AS rss_id, 0::bigint AS no_rss, 0::bigint AS ghs_id, '1'::text AS inclus_dans_sejour, w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, w_FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET, w_FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, w_FD_FAC_DETFAC.CLI_CODE_ETAT, w_FD_FAC_DETFAC.CLI_FLAG_SENS, w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, CLI_CODE_MEDECINREALISATEUR, CLI_CODE_ACTE, ''::text AS CLI_CODE_PHASE, ''::text AS CLI_CODE_ACTIVITE, ''::text AS CLI_DONN_EXTDOC, ''::text AS CLI_DONN_MODIFICATEUR, ''::text AS CLI_SEQUENCE1ACTE, ''::text AS CLI_SEQUENCE2ACTE, ''::text AS CLI_CODE_ORDONNATEUR, CLI_CODE_ACTIVITESSR AS CLI_CODE_PRESTATION, date(CLI_DATE_SAISIE) AS CLI_DATE_DEBPREST, date(CLI_DATE_SAISIE) AS CLI_DATE_FINPREST, CLI_DONN_NOMBRE AS CLI_DONN_QTE, 1 AS CLI_DONN_COEFF, w_FD_ACTES_ACTRHS.taux_2, w_FD_ACTES_ACTRHS.prix_unitaire, round(w_FD_ACTES_ACTRHS.prix_unitaire * w_FD_ACTES_ACTRHS.taux_2 * CLI_DONN_NOMBRE / 100,2) AS CLI_DONN_MONTANTLIG, 0::numeric AS CLI_CODE_PRATICIEN, '' AS CLI_CODE_PRATICIENINTERNE, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET FROM w_FD_ACTES_ACTRHS JOIN w_FD_FAC_DETFAC ON w_FD_ACTES_ACTRHS.no_facture_2 = w_FD_FAC_DETFAC.no_facture WHERE w_FD_ACTES_ACTRHS.no_facture_2 <> '' AND acte_inclus_dans_sejour_2 = '1'; INSERT INTO w_FD_FAC_DETFACLIG SELECT nextval('w_FD_FAC_DETFACLIG_sequence'::regclass) AS oid, 0::bigint AS FD_ACTES_ACTRHS_id, w_FD_FAC_DETFAC.no_sejour, w_FD_FAC_DETFAC.sejour_id, w_FD_FAC_DETFAC.no_facture, 0::bigint AS rss_id, 0::bigint AS no_rss, 0::bigint AS ghs_id, '1'::text AS inclus_dans_sejour, w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, w_FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET, w_FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, w_FD_FAC_DETFAC.CLI_CODE_ETAT, w_FD_FAC_DETFAC.CLI_FLAG_SENS, w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, CLI_CODE_MEDECINREALISATEUR, CLI_CODE_ACTE, ''::text AS CLI_CODE_PHASE, ''::text AS CLI_CODE_ACTIVITE, ''::text AS CLI_DONN_EXTDOC, ''::text AS CLI_DONN_MODIFICATEUR, ''::text AS CLI_SEQUENCE1ACTE, ''::text AS CLI_SEQUENCE2ACTE, ''::text AS CLI_CODE_ORDONNATEUR, CLI_CODE_ACTIVITESSR AS CLI_CODE_PRESTATION, date(CLI_DATE_SAISIE) AS CLI_DATE_DEBPREST, date(CLI_DATE_SAISIE) AS CLI_DATE_FINPREST, CLI_DONN_NOMBRE AS CLI_DONN_QTE, 1 AS CLI_DONN_COEFF, w_FD_ACTES_ACTRHS.taux_0, w_FD_ACTES_ACTRHS.prix_unitaire, round(w_FD_ACTES_ACTRHS.prix_unitaire * w_FD_ACTES_ACTRHS.taux_0 * CLI_DONN_NOMBRE / 100,2) AS CLI_DONN_MONTANTLIG, 0::numeric AS CLI_CODE_PRATICIEN, '' AS CLI_CODE_PRATICIENINTERNE, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET FROM w_FD_ACTES_ACTRHS JOIN w_FD_FAC_DETFAC ON w_FD_ACTES_ACTRHS.no_facture_0 = w_FD_FAC_DETFAC.no_facture WHERE w_FD_ACTES_ACTRHS.no_facture_0 <> '' AND acte_inclus_dans_sejour_0 = '1'; ]]> '' THEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION ELSE FD_ACTES_NGAP.CLI_DONN_LETTRECLE END AS CLI_CODE_PRESTATION, 1::numeric AS CLI_DONN_NOMBRE, FD_ACTES_ENTETE.CLI_CODE_MEDECIN1 AS CLI_CODE_MEDECINREALISATEUR, FD_ACTES_NGAP.CLI_DONN_TAUXPEC AS CLI_DONN_TAUXSECU, FD_ACTES_NGAP.CLI_FLAG_ACTEGRATUIT, FD_ACTES_NGAP.CLI_FLAG_REGIE, GREATEST(FD_ACTES_NGAP.CLI_DONN_COEFF,0) AS CLI_DONN_COEFF, CASE WHEN FD_ACTES_NGAP.CLI_DONN_TARIF <> 0 THEN FD_ACTES_NGAP.CLI_DONN_TARIF ELSE COALESCE(FB_FAC_HISTOLETTRECLE.CLI_DONN_TARIF,0) END AS prix_unitaire, 0::numeric AS taux_1, 0::numeric AS taux_2, 0::numeric AS taux_0, '0'::text AS acte_inclus_dans_sejour_0, '0'::text AS acte_inclus_dans_sejour_1, '0'::text AS acte_inclus_dans_sejour_2, 0::numeric AS montant_facture, 0::numeric AS montant_facture_0, 0::numeric AS montant_facture_1, 0::numeric AS montant_facture_2, 0::numeric AS montant_facture_actes_inclus_dans_sejour, 0::numeric AS montant_facture_0_actes_inclus_dans_sejour, 0::numeric AS montant_facture_1_actes_inclus_dans_sejour, 0::numeric AS montant_facture_2_actes_inclus_dans_sejour FROM prod_clinicom.FD_ACTES_NGAP JOIN w_ADMISSIONS_select ON FD_ACTES_NGAP.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN prod_clinicom.FB_FAC_LETTRECLE ON FD_ACTES_NGAP.CLI_DONN_LETTRECLE = FB_FAC_LETTRECLE.CLI_CODE_LETTRECLE JOIN prod_clinicom.FD_ACTES_ENTETE ON FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE = FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE AND FD_ACTES_NGAP.CLI_DONN_LIEN = FD_ACTES_ENTETE.CLI_DONN_LIEN JOIN activite[PX].p_sejours ON FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE = p_sejours.code_original AND p_sejours.etat = '' LEFT JOIN prod_clinicom.FB_FAC_HISTOLETTRECLE ON FD_ACTES_NGAP.CLI_DONN_LETTRECLE = FB_FAC_HISTOLETTRECLE.CLI_CODE_LETTRECLE AND FD_ACTES_ENTETE.CLI_DATE_SAISIE BETWEEN CLI_DATE_EFFET AND COALESCE(CLI_DATE_FINEFFET,'2099-12-31 00:00:00') - interval '1 second' WHERE CASE WHEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION <> '' THEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION ELSE FD_ACTES_NGAP.CLI_DONN_LETTRECLE END NOT IN ('ATU', 'FPU', 'FTN', 'FTR', 'PHH', 'PHS', 'PII', 'PHU', 'PME', 'SE1', 'SE2', 'SE3', 'SE4','SE5', 'SE6', 'SE7', 'REA', 'SRC', 'STF', 'PJ', 'TM'); CREATE INDEX w_FD_ACTES_NGAP_i1 ON w_FD_ACTES_NGAP USING btree (no_sejour); CREATE INDEX w_FD_ACTES_NGAP_i2 ON w_FD_ACTES_NGAP USING btree (CLI_DATE_SAISIE); DROP TABLE IF EXISTS w_FD_FAC_DETFAC_inclus; CREATE TEMP TABLE w_FD_FAC_DETFAC_inclus AS SELECT w_FD_FAC_DETFACLIG.no_sejour, CLI_DATE_DEBPERIODE, CLI_DATE_FINPERIODE, MAX(CASE WHEN type_tiers_payant = '0' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_0, MAX(CASE WHEN type_tiers_payant = '1' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_1, MAX(CASE WHEN type_tiers_payant = '2' THEN w_FD_FAC_DETFACLIG.no_facture ELSE '' END) AS no_facture_2, MAX(CASE WHEN type_tiers_payant = '0' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_0, MAX(CASE WHEN type_tiers_payant = '1' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_1, MAX(CASE WHEN type_tiers_payant = '2' THEN CLI_DONN_TAUX ELSE 0 END) AS CLI_DONN_TAUX_2, MAX(CASE WHEN type_tiers_payant = '0' THEN '1' ELSE '0' END) AS acte_inclus_dans_sejour_0, MAX(CASE WHEN type_tiers_payant = '1' THEN '1' ELSE '0' END) AS acte_inclus_dans_sejour_1, MAX(CASE WHEN type_tiers_payant = '2' THEN '1' ELSE '0' END) AS acte_inclus_dans_sejour_2 FROM w_FD_FAC_DETFACLIG JOIN w_FD_FAC_DETFAC ON w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE = w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE AND w_FD_FAC_DETFACLIG.CLI_Donn_NoObjIntFac = w_FD_FAC_DETFAC.CLI_Code_NoInterneObjet WHERE CLI_CODE_PRESTATION IN ('GHS', 'TM', 'ESTH') AND CLI_DONN_TAUX > 0 GROUP BY 1,2,3; CREATE INDEX w_FD_FAC_DETFAC_inclus_i1 ON w_FD_FAC_DETFAC_inclus USING btree (no_sejour); -- Actes inclus dans séjours (budget global) UPDATE w_FD_ACTES_NGAP SET no_facture_1 = w_FD_FAC_DETFAC_inclus.no_facture_1, taux_1 = 100, acte_inclus_dans_sejour_1 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_NGAP.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND CLI_DATE_DEBPERIODE = CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_1 = '1' AND w_FD_ACTES_NGAP.no_facture_1 = '' AND w_FD_ACTES_NGAP.no_facture_2 = '' AND w_FD_ACTES_NGAP.no_facture_0 = ''; UPDATE w_FD_ACTES_NGAP SET no_facture_2 = w_FD_FAC_DETFAC_inclus.no_facture_2, taux_2 = 100, acte_inclus_dans_sejour_2 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_NGAP.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND CLI_DATE_DEBPERIODE = CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_2 = '1' AND w_FD_ACTES_NGAP.no_facture_1 = '' AND w_FD_ACTES_NGAP.no_facture_2 = '' AND w_FD_ACTES_NGAP.no_facture_0 = ''; UPDATE w_FD_ACTES_NGAP SET no_facture_0 = w_FD_FAC_DETFAC_inclus.no_facture_0, taux_0 = 100, acte_inclus_dans_sejour_0 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_NGAP.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND CLI_DATE_DEBPERIODE = CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_0 = '1' AND w_FD_ACTES_NGAP.no_facture_1 = '' AND w_FD_ACTES_NGAP.no_facture_2 = '' AND w_FD_ACTES_NGAP.no_facture_0 = ''; UPDATE w_FD_ACTES_NGAP SET no_facture_1 = w_FD_FAC_DETFAC_inclus.no_facture_1, taux_1 = 100, acte_inclus_dans_sejour_1 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_NGAP.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_1 = '1' AND w_FD_ACTES_NGAP.no_facture_1 = '' AND w_FD_ACTES_NGAP.no_facture_2 = '' AND w_FD_ACTES_NGAP.no_facture_0 = ''; UPDATE w_FD_ACTES_NGAP SET no_facture_2 = w_FD_FAC_DETFAC_inclus.no_facture_2, taux_2 = 100, acte_inclus_dans_sejour_2 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_NGAP.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_2 = '1' AND w_FD_ACTES_NGAP.no_facture_1 = '' AND w_FD_ACTES_NGAP.no_facture_2 = '' AND w_FD_ACTES_NGAP.no_facture_0 = ''; UPDATE w_FD_ACTES_NGAP SET no_facture_0 = w_FD_FAC_DETFAC_inclus.no_facture_0, taux_0 = 100, acte_inclus_dans_sejour_0 = '1' FROM w_FD_FAC_DETFAC_inclus WHERE w_FD_FAC_DETFAC_inclus.no_sejour = w_FD_ACTES_NGAP.no_sejour AND date(CLI_DATE_SAISIE) BETWEEN CLI_DATE_DEBPERIODE AND CLI_DATE_FINPERIODE AND w_FD_FAC_DETFAC_inclus.acte_inclus_dans_sejour_0 = '1' AND w_FD_ACTES_NGAP.no_facture_1 = '' AND w_FD_ACTES_NGAP.no_facture_2 = '' AND w_FD_ACTES_NGAP.no_facture_0 = ''; UPDATE w_FD_ACTES_NGAP SET montant_facture_actes_inclus_dans_sejour = round(CLI_DONN_NOMBRE * CLI_DONN_COEFF * prix_unitaire * taux_1 / 100,2), montant_facture_1_actes_inclus_dans_sejour = round(CLI_DONN_NOMBRE * CLI_DONN_COEFF * prix_unitaire * taux_1 / 100,2) WHERE acte_inclus_dans_sejour_1 = '1'; UPDATE w_FD_ACTES_NGAP SET montant_facture_actes_inclus_dans_sejour = montant_facture_actes_inclus_dans_sejour + round(CLI_DONN_NOMBRE * CLI_DONN_COEFF * prix_unitaire * taux_2 / 100,2), montant_facture_2_actes_inclus_dans_sejour = round(CLI_DONN_NOMBRE * CLI_DONN_COEFF * prix_unitaire * taux_2 / 100,2) WHERE acte_inclus_dans_sejour_2 = '1'; UPDATE w_FD_ACTES_NGAP SET montant_facture_actes_inclus_dans_sejour = montant_facture_actes_inclus_dans_sejour + round(CLI_DONN_NOMBRE * CLI_DONN_COEFF * prix_unitaire * taux_0 / 100,2), montant_facture_2_actes_inclus_dans_sejour = round(CLI_DONN_NOMBRE * CLI_DONN_COEFF * prix_unitaire * taux_0 / 100,2) WHERE acte_inclus_dans_sejour_0 = '1'; -- mise à jour actes facturés (externes) UPDATE w_FD_FAC_DETFACLIG SET CLI_CODE_MEDECINREALISATEUR = CASE WHEN w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR = '' THEN w_FD_ACTES_NGAP.CLI_CODE_MEDECINREALISATEUR ELSE w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR END, CLI_CODE_CCAM = CASE WHEN w_FD_FAC_DETFACLIG.CLI_CODE_CCAM = '' THEN w_FD_ACTES_NGAP.CLI_DONN_LETTRECLE ELSE w_FD_FAC_DETFACLIG.CLI_CODE_CCAM END FROM w_FD_ACTES_NGAP WHERE w_FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE = w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE AND w_FD_ACTES_NGAP.CLI_DONN_LIEN = w_FD_FAC_DETFACLIG.CLI_SEQUENCE1ACTE AND w_FD_ACTES_NGAP.CLI_DONN_NUMEROSEQUENCE = w_FD_FAC_DETFACLIG.CLI_SEQUENCE2ACTE AND w_FD_FAC_DETFACLIG.CLI_CODE_PRATICIENINTERNE <> '' AND (w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR = '' OR w_FD_FAC_DETFACLIG.CLI_CODE_CCAM = '') AND w_FD_FAC_DETFACLIG.CLI_CODE_PRESTATION NOT IN ('ACO', 'ADA', 'ADC', 'ADE', 'ADI', 'ATM', 'DEN'); UPDATE w_FD_FAC_DETFACLIG SET CLI_CODE_MEDECINREALISATEUR = CASE WHEN w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR = '' THEN w_FD_ACTES_NGAP.CLI_CODE_MEDECINREALISATEUR ELSE w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR END, CLI_CODE_CCAM = CASE WHEN w_FD_FAC_DETFACLIG.CLI_CODE_CCAM = '' THEN w_FD_ACTES_NGAP.CLI_DONN_LETTRECLE ELSE w_FD_FAC_DETFACLIG.CLI_CODE_CCAM END FROM w_FD_ACTES_NGAP WHERE w_FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE = w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE AND w_FD_ACTES_NGAP.CLI_DONN_LETTRECLE = w_FD_FAC_DETFACLIG.CLI_CODE_PRESTATION AND w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR = '' AND (w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR = '' OR w_FD_FAC_DETFACLIG.CLI_CODE_CCAM = ''); UPDATE w_FD_FAC_DETFACLIG SET CLI_CODE_MEDECINREALISATEUR = CASE WHEN w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR = '' THEN w_FD_FAC_DETFACLIG.CLI_CODE_PRATICIENINTERNE ELSE w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR END, CLI_CODE_CCAM = CASE WHEN w_FD_FAC_DETFACLIG.CLI_CODE_CCAM = '' THEN w_FD_FAC_DETFACLIG.CLI_CODE_PRESTATION ELSE w_FD_FAC_DETFACLIG.CLI_CODE_CCAM END WHERE w_FD_FAC_DETFACLIG.CLI_CODE_PRATICIENINTERNE <> '' AND (w_FD_FAC_DETFACLIG.CLI_CODE_MEDECINREALISATEUR = '' OR w_FD_FAC_DETFACLIG.CLI_CODE_CCAM = '') AND w_FD_FAC_DETFACLIG.CLI_CODE_PRESTATION NOT IN ('ACO', 'ADA', 'ADC', 'ADE', 'ADI', 'ATM', 'DEN'); -- Insertion actes inclus dans séjour INSERT INTO w_FD_FAC_DETFACLIG SELECT nextval('w_FD_FAC_DETFACLIG_sequence'::regclass) AS oid, 0::bigint AS FD_ACTES_NGAP_id, w_FD_FAC_DETFAC.no_sejour, w_FD_FAC_DETFAC.sejour_id, w_FD_FAC_DETFAC.no_facture, 0::bigint AS rss_id, 0::bigint AS no_rss, 0::bigint AS ghs_id, '1'::text AS inclus_dans_sejour, w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, w_FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET, w_FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, w_FD_FAC_DETFAC.CLI_CODE_ETAT, w_FD_FAC_DETFAC.CLI_FLAG_SENS, w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, CLI_CODE_MEDECINREALISATEUR, CLI_DONN_LETTRECLE AS CLI_CODE_CCAM, ''::text AS CLI_CODE_PHASE, ''::text AS CLI_CODE_ACTIVITE, ''::text AS CLI_DONN_EXTDOC, ''::text AS CLI_DONN_MODIFICATEUR, ''::text AS CLI_SEQUENCE1ACTE, ''::text AS CLI_SEQUENCE2ACTE, ''::text AS CLI_CODE_ORDONNATEUR, CLI_CODE_PRESTATION, date(CLI_DATE_SAISIE) AS CLI_DATE_DEBPREST, date(CLI_DATE_SAISIE) AS CLI_DATE_FINPREST, CLI_DONN_NOMBRE AS CLI_DONN_QTE, CLI_DONN_COEFF, w_FD_ACTES_NGAP.taux_1, w_FD_ACTES_NGAP.prix_unitaire, round(w_FD_ACTES_NGAP.prix_unitaire * w_FD_ACTES_NGAP.taux_1 * CLI_DONN_NOMBRE * CLI_DONN_COEFF / 100,2) AS CLI_DONN_MONTANTLIG, 0::numeric AS CLI_CODE_PRATICIEN, '' AS CLI_CODE_PRATICIENINTERNE, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET FROM w_FD_ACTES_NGAP JOIN w_FD_FAC_DETFAC ON w_FD_ACTES_NGAP.no_facture_1 = w_FD_FAC_DETFAC.no_facture WHERE w_FD_ACTES_NGAP.no_facture_1 <> '' AND acte_inclus_dans_sejour_1 = '1'; INSERT INTO w_FD_FAC_DETFACLIG SELECT nextval('w_FD_FAC_DETFACLIG_sequence'::regclass) AS oid, 0::bigint AS FD_ACTES_NGAP_id, w_FD_FAC_DETFAC.no_sejour, w_FD_FAC_DETFAC.sejour_id, w_FD_FAC_DETFAC.no_facture, 0::bigint AS rss_id, 0::bigint AS no_rss, 0::bigint AS ghs_id, '1'::text AS inclus_dans_sejour, w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, w_FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET, w_FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, w_FD_FAC_DETFAC.CLI_CODE_ETAT, w_FD_FAC_DETFAC.CLI_FLAG_SENS, w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, CLI_CODE_MEDECINREALISATEUR, CLI_DONN_LETTRECLE AS CLI_CODE_CCAM, ''::text AS CLI_CODE_PHASE, ''::text AS CLI_CODE_ACTIVITE, ''::text AS CLI_DONN_EXTDOC, ''::text AS CLI_DONN_MODIFICATEUR, ''::text AS CLI_SEQUENCE1ACTE, ''::text AS CLI_SEQUENCE2ACTE, ''::text AS CLI_CODE_ORDONNATEUR, CLI_CODE_PRESTATION, date(CLI_DATE_SAISIE) AS CLI_DATE_DEBPREST, date(CLI_DATE_SAISIE) AS CLI_DATE_FINPREST, CLI_DONN_NOMBRE AS CLI_DONN_QTE, 1 AS CLI_DONN_COEFF, w_FD_ACTES_NGAP.taux_2, w_FD_ACTES_NGAP.prix_unitaire, round(w_FD_ACTES_NGAP.prix_unitaire * w_FD_ACTES_NGAP.taux_2 * CLI_DONN_NOMBRE * CLI_DONN_COEFF / 100,2) AS CLI_DONN_MONTANTLIG, 0::numeric AS CLI_CODE_PRATICIEN, '' AS CLI_CODE_PRATICIENINTERNE, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET FROM w_FD_ACTES_NGAP JOIN w_FD_FAC_DETFAC ON w_FD_ACTES_NGAP.no_facture_2 = w_FD_FAC_DETFAC.no_facture WHERE w_FD_ACTES_NGAP.no_facture_2 <> '' AND acte_inclus_dans_sejour_2 = '1'; INSERT INTO w_FD_FAC_DETFACLIG SELECT nextval('w_FD_FAC_DETFACLIG_sequence'::regclass) AS oid, 0::bigint AS FD_ACTES_NGAP_id, w_FD_FAC_DETFAC.no_sejour, w_FD_FAC_DETFAC.sejour_id, w_FD_FAC_DETFAC.no_facture, 0::bigint AS rss_id, 0::bigint AS no_rss, 0::bigint AS ghs_id, '1'::text AS inclus_dans_sejour, w_FD_FAC_DETFAC.CLI_DONN_NOABSEPISODE, w_FD_FAC_DETFAC.CLI_DONN_NOOBJETFAC, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET, w_FD_FAC_DETFAC.CLI_CODE_OBJETFACTURATION, w_FD_FAC_DETFAC.CLI_CODE_ETAT, w_FD_FAC_DETFAC.CLI_FLAG_SENS, w_FD_FAC_DETFAC.CLI_DONN_EXERCOMPTA, CLI_CODE_MEDECINREALISATEUR, CLI_DONN_LETTRECLE AS CLI_CODE_CCAM, ''::text AS CLI_CODE_PHASE, ''::text AS CLI_CODE_ACTIVITE, ''::text AS CLI_DONN_EXTDOC, ''::text AS CLI_DONN_MODIFICATEUR, ''::text AS CLI_SEQUENCE1ACTE, ''::text AS CLI_SEQUENCE2ACTE, ''::text AS CLI_CODE_ORDONNATEUR, CLI_CODE_PRESTATION, date(CLI_DATE_SAISIE) AS CLI_DATE_DEBPREST, date(CLI_DATE_SAISIE) AS CLI_DATE_FINPREST, CLI_DONN_NOMBRE AS CLI_DONN_QTE, 1 AS CLI_DONN_COEFF, w_FD_ACTES_NGAP.taux_0, w_FD_ACTES_NGAP.prix_unitaire, round(w_FD_ACTES_NGAP.prix_unitaire * w_FD_ACTES_NGAP.taux_0 * CLI_DONN_NOMBRE * CLI_DONN_COEFF / 100,2) AS CLI_DONN_MONTANTLIG, 0::numeric AS CLI_CODE_PRATICIEN, '' AS CLI_CODE_PRATICIENINTERNE, w_FD_FAC_DETFAC.CLI_CODE_NOINTERNEOBJET FROM w_FD_ACTES_NGAP JOIN w_FD_FAC_DETFAC ON w_FD_ACTES_NGAP.no_facture_0 = w_FD_FAC_DETFAC.no_facture WHERE w_FD_ACTES_NGAP.no_facture_0 <> '' AND acte_inclus_dans_sejour_0 = '1'; ]]> (CLI_DONN_EXERCOMPTA || '1231')::date; UPDATE w_factures SET mois_vente = extract('year' FROM date_vente) * 100 + extract('month' FROM date_vente) WHERE mois_vente IS DISTINCT FROM extract('year' FROM date_vente) * 100 + extract('month' FROM date_vente); UPDATE w_factures SET montant_facture_1_c = montant_facture_c, montant_comptabilise_1_c = CASE WHEN est_budget_global <> '1' THEN montant_facture_c ELSE 0 END, montant_comptabilise_c = CASE WHEN est_budget_global <> '1' THEN montant_facture_c ELSE 0 END, montant_regle_c = CASE WHEN est_budget_global <> '1' AND CLI_CODE_ETAT IN ('LQ','RG') THEN montant_facture_c ELSE 0 END, montant_regle_1_c = CASE WHEN est_budget_global <> '1' AND CLI_CODE_ETAT IN ('LQ','RG') THEN montant_facture_c ELSE 0 END, montant_comptabilise_budget_global_c = CASE WHEN est_budget_global = '1' THEN montant_facture_c ELSE 0 END WHERE type_tiers_payant = '1'; UPDATE w_factures SET montant_facture_2_c = montant_facture_c, montant_comptabilise_2_c = montant_facture_c, montant_comptabilise_c = montant_facture_c, montant_regle_c = CASE WHEN CLI_CODE_ETAT IN ('LQ','RG') THEN montant_facture_c ELSE 0 END, montant_regle_2_c = CASE WHEN CLI_CODE_ETAT IN ('LQ','RG') THEN montant_facture_c ELSE 0 END WHERE type_tiers_payant = '2'; UPDATE w_factures SET montant_facture_0_c = montant_facture_c, montant_comptabilise_0_c = montant_facture_c, montant_comptabilise_c = montant_facture_c, montant_regle_c = CASE WHEN CLI_CODE_ETAT IN ('LQ','RG') THEN montant_facture_c ELSE 0 END, montant_regle_0_c = CASE WHEN CLI_CODE_ETAT IN ('LQ','RG') THEN montant_facture_c ELSE 0 END WHERE type_tiers_payant = '0'; UPDATE w_factures SET montant_facture_0_c = montant_facture_c, montant_comptabilise_0_c = montant_facture_c, montant_comptabilise_c = montant_facture_c, montant_regle_c = CASE WHEN CLI_CODE_ETAT IN ('LQ','RG') THEN montant_facture_c ELSE 0 END, montant_regle_0_c = CASE WHEN CLI_CODE_ETAT IN ('LQ','RG') THEN montant_facture_c ELSE 0 END WHERE type_tiers_payant = '0'; UPDATE w_factures SET no_facture_od_avoir = w_factures_od_avoir.no_facture_od_avoir, type_facture = 'X' FROM w_factures w_factures_od_avoir WHERE w_factures_od_avoir.no_facture_od_avoir = w_factures.no_facture AND w_factures_od_avoir.no_facture_od_avoir <> '' AND w_factures_od_avoir.type_facture = '1' AND w_factures.type_facture <> '1'; UPDATE w_factures SET facture_od_avoir_id = w_factures_od_avoir.oid FROM w_factures w_factures_od_avoir WHERE w_factures.no_facture_od_avoir = w_factures_od_avoir.no_facture AND w_factures.no_facture_od_avoir <> ''; UPDATE w_factures SET date_debut = date_entree, date_fin = CASE WHEN code_sorti = '1' THEN date_sortie ELSE date_fin END FROM activite[PX].p_sejours JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid AND avec_facturation_intermediaire IS DISTINCT FROM '1' WHERE w_factures.no_sejour = p_sejours.no_sejour AND CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END - date_entree < 30 AND ( w_factures.date_debut <> date_entree OR w_factures.date_fin <> CASE WHEN code_sorti = '1' THEN date_sortie ELSE date_fin END ); DROP TABLE IF EXISTS w_factures_references; CREATE TEMP TABLE w_factures_references AS SELECT no_sejour, date_debut, (MIN(CASE WHEN type_tiers_payant = '1' AND type_facture IN ('0','G','H') THEN Array[date_facture::text,no_facture] ELSE NULL END))[2] AS no_facture_1_0, (MIN(CASE WHEN type_tiers_payant = '1' AND type_facture = '2' THEN Array[date_facture::text,no_facture] ELSE NULL END))[2] AS no_facture_1_2, (MIN(CASE WHEN type_tiers_payant = '2' AND type_facture = '0' THEN Array[date_facture::text,no_facture] ELSE NULL END))[2] AS no_facture_2_0, (MIN(CASE WHEN type_tiers_payant = '2' AND type_facture = '2' THEN Array[date_facture::text,no_facture] ELSE NULL END))[2] AS no_facture_2_2, (MIN(CASE WHEN type_tiers_payant = '0' AND type_facture = '0' THEN Array[date_facture::text,no_facture] ELSE NULL END))[2] AS no_facture_0_0, (MIN(CASE WHEN type_tiers_payant = '0' AND type_facture = '2' THEN Array[date_facture::text,no_facture] ELSE NULL END))[2] AS no_facture_0_2, (MIN(Array[date_facture::text,no_facture]))[2] AS no_facture_x FROM w_factures GROUP BY 1,2 ORDER BY 1,2; CREATE INDEX w_factures_references_i1 ON w_factures_references USING btree (no_sejour); CREATE INDEX w_factures_i1 ON w_factures USING btree (no_sejour); UPDATE w_factures SET no_facture_reference = COALESCE(no_facture_1_0,no_facture_1_2,no_facture_2_0,no_facture_2_2,no_facture_0_0,no_facture_0_2,no_facture_x) FROM w_factures_references WHERE w_factures.no_sejour = w_factures_references.no_sejour AND w_factures.date_debut = w_factures_references.date_debut AND no_facture_reference IS DISTINCT FROM COALESCE(no_facture_1_0,no_facture_1_2,no_facture_2_0,no_facture_2_2,no_facture_0_0,no_facture_0_2,no_facture_x); UPDATE w_factures SET type_facture = '2' FROM w_factures_references WHERE w_factures.no_sejour = w_factures_references.no_sejour AND w_factures.date_debut = w_factures_references.date_debut AND type_facture = '0' AND type_tiers_payant = '1' AND no_facture IS DISTINCT FROM no_facture_1_0; UPDATE w_factures SET type_facture = '2' FROM w_factures_references WHERE w_factures.no_sejour = w_factures_references.no_sejour AND w_factures.date_debut = w_factures_references.date_debut AND type_facture = '0' AND type_tiers_payant = '2' AND no_facture IS DISTINCT FROM no_facture_2_0; UPDATE w_factures SET type_facture = '2' FROM w_factures_references WHERE w_factures.no_sejour = w_factures_references.no_sejour AND w_factures.date_debut = w_factures_references.date_debut AND type_facture = '0' AND type_tiers_payant = '0' AND no_facture IS DISTINCT FROM no_facture_0_0; UPDATE w_factures SET facture_reference_id = w_factures_references.oid FROM w_factures w_factures_references WHERE w_factures.no_facture_reference = w_factures_references.no_facture AND w_factures.facture_reference_id IS DISTINCT FROM w_factures_references.oid; UPDATE w_factures SET date_expedition_0 = date_facture WHERE date_expedition_0 < date_facture AND date_facture <> '2099-12-31'; UPDATE w_factures SET date_solde_0_c = CASE WHEN montant_comptabilise_0_c = 0 THEN '00010101' WHEN montant_comptabilise_0_c = montant_regle_0_c THEN date_solde_0_c ELSE '20991231' END, date_solde_0_h = CASE WHEN montant_comptabilise_0_h = 0 THEN '00010101' WHEN montant_comptabilise_0_h = montant_regle_0_h THEN date_solde_0_h ELSE '20991231' END, date_solde_1_c = CASE WHEN montant_comptabilise_1_c = 0 THEN '00010101' WHEN montant_comptabilise_1_c = montant_regle_1_c THEN date_solde_1_c ELSE '20991231' END, date_solde_1_h = CASE WHEN montant_comptabilise_1_h = 0 THEN '00010101' WHEN montant_comptabilise_1_h = montant_regle_1_h THEN date_solde_1_h ELSE '20991231' END, date_solde_2_c = CASE WHEN montant_comptabilise_2_c = 0 THEN '00010101' WHEN montant_comptabilise_2_c = montant_regle_2_c THEN date_solde_2_c ELSE '20991231' END, date_solde_2_h = CASE WHEN montant_comptabilise_2_h = 0 THEN '00010101' WHEN montant_comptabilise_2_h = montant_regle_2_h THEN date_solde_2_h ELSE '20991231' END, date_solde_22_c = CASE WHEN montant_comptabilise_22_c = 0 THEN '00010101' WHEN montant_comptabilise_22_c = montant_regle_22_c THEN date_solde_22_c ELSE '20991231' END, date_solde_22_h = CASE WHEN montant_comptabilise_22_h = 0 THEN '00010101' WHEN montant_comptabilise_22_h = montant_regle_22_h THEN date_solde_22_h ELSE '20991231' END WHERE ( date_solde_0_c <> CASE WHEN montant_comptabilise_0_c = 0 THEN '00010101' WHEN montant_comptabilise_0_c = montant_regle_0_c THEN date_solde_0_c ELSE '20991231' END OR date_solde_0_h <> CASE WHEN montant_comptabilise_0_h = 0 THEN '00010101' WHEN montant_comptabilise_0_h = montant_regle_0_h THEN date_solde_0_h ELSE '20991231' END OR date_solde_1_c <> CASE WHEN montant_comptabilise_1_c = 0 THEN '00010101' WHEN montant_comptabilise_1_c = montant_regle_1_c THEN date_solde_1_c ELSE '20991231' END OR date_solde_1_h <> CASE WHEN montant_comptabilise_1_h = 0 THEN '00010101' WHEN montant_comptabilise_1_h = montant_regle_1_h THEN date_solde_1_h ELSE '20991231' END OR date_solde_2_c <> CASE WHEN montant_comptabilise_2_c = 0 THEN '00010101' WHEN montant_comptabilise_2_c = montant_regle_2_c THEN date_solde_2_c ELSE '20991231' END OR date_solde_2_h <> CASE WHEN montant_comptabilise_2_h = 0 THEN '00010101' WHEN montant_comptabilise_2_h = montant_regle_2_h THEN date_solde_2_h ELSE '20991231' END OR date_solde_22_c <> CASE WHEN montant_comptabilise_22_c = 0 THEN '00010101' WHEN montant_comptabilise_22_c = montant_regle_22_c THEN date_solde_22_c ELSE '20991231' END OR date_solde_22_h <> CASE WHEN montant_comptabilise_22_h = 0 THEN '00010101' WHEN montant_comptabilise_22_h = montant_regle_22_h THEN date_solde_22_h ELSE '20991231' END ); DROP TABLE IF EXISTS w_factures_soldes; CREATE TEMP TABLE w_factures_soldes AS SELECT no_facture, GREATEST(date_solde_0_c, date_solde_0_h, date_solde_1_c, date_solde_1_h, date_solde_2_c, date_solde_2_h, date_solde_22_c, date_solde_22_h) AS date_solde, GREATEST(date_solde_0_c, date_solde_1_c, date_solde_2_c, date_solde_22_c) AS date_solde_c, GREATEST(date_solde_0_h, date_solde_1_h, date_solde_2_h, date_solde_22_h) AS date_solde_h FROM w_factures; UPDATE w_factures SET date_solde = w_factures_soldes.date_solde, date_solde_c = w_factures_soldes.date_solde_c, date_solde_h = w_factures_soldes.date_solde_h FROM w_factures_soldes WHERE w_factures.no_facture = w_factures_soldes.no_facture AND ( w_factures.date_solde IS NULL OR w_factures.date_solde <> w_factures_soldes.date_solde OR w_factures.date_solde_c IS NULL OR w_factures.date_solde_c <> w_factures_soldes.date_solde_c OR w_factures.date_solde_h IS NULL OR w_factures.date_solde_h <> w_factures_soldes.date_solde_h ); -- Mutuelle comme seul tiers payant UPDATE w_factures SET tiers_payant_2_id = tiers_payant_1_id FROM activite[PX].t_tiers_payant WHERE tiers_payant_1_id = t_tiers_payant.oid AND t_tiers_payant.type_tiers_payant = '2' AND montant_facture_2_c <> 0 AND tiers_payant_2_id = 0; -- Ajout des factures SELECT base.cti_disable_index('activite', 'i_factures_3'); SELECT base.cti_disable_index('activite', 'i_factures_4'); SELECT base.cti_disable_index('activite', 'i_factures_5'); SELECT base.cti_disable_index('activite', 'i_factures_6'); SELECT base.cti_disable_index('activite', 'i_factures_7'); SELECT base.cti_disable_index('activite', 'i_factures_8'); SELECT base.cti_disable_index('activite', 'i_factures_9'); SELECT base.cti_disable_index('activite', 'i_factures_10'); SELECT base.cti_disable_index('activite', 'i_factures_11'); SELECT base.cti_disable_index('activite', 'i_factures_12'); SELECT base.cti_disable_index('activite', 'i_factures_13'); SELECT base.cti_disable_index('activite', 'i_factures_14'); INSERT INTO activite[PX].p_factures ( oid, no_sejour, sejour_id, no_facture, date_debut, date_fin, type_facture, code_cp_demandee, code_facture, date_facture, code_vente, date_vente, mois_vente, code_cloture, nb_rejets, no_facture_reference, facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, particularite_t2a, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, tiers_payant_0_id, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, date_expedition_22, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_22, no_bordereau_0, no_bordereau_1, no_bordereau_2, no_bordereau_22, date_solde, date_solde_c, date_solde_h, date_solde_0_c, date_solde_0_h, date_solde_1_c, date_solde_1_h, date_solde_2_c, date_solde_2_h, date_solde_22_c, date_solde_22_h, montant_facture_c, montant_facture_h, montant_facture_0_c, montant_facture_0_h, montant_facture_1_c, montant_facture_1_h, montant_facture_2_c, montant_facture_2_h, montant_facture_22_c, montant_facture_22_h, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_22_c, montant_comptabilise_22_h, montant_comptabilise_budget_global_c, montant_regle_c, montant_regle_h, montant_regle_0_c, montant_regle_0_h, montant_regle_1_c, montant_regle_1_h, montant_regle_2_c, montant_regle_2_h, montant_regle_22_c, montant_regle_22_h, delai_facture, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, delai_expedition_22, delai_solde, delai_solde_0_c, delai_solde_0_h, delai_solde_1_c, delai_solde_1_h, delai_solde_2_c, delai_solde_2_h, delai_solde_22_c, delai_solde_22_h ) SELECT oid, no_sejour, sejour_id, no_facture, date_debut, date_fin, type_facture, code_cp_demandee, code_facture, date_facture, code_vente, date_vente, mois_vente, code_cloture, nb_rejets, no_facture_reference, facture_reference_id, no_facture_od_avoir, facture_od_avoir_id, ghs_id, ghs_bebe1_id, ghs_bebe2_id, ghs_bebe3_id, particularite_t2a, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, tiers_payant_0_id, date_expedition, date_expedition_0, date_expedition_1, date_expedition_2, date_expedition_22, code_expedie_0, code_expedie_1, code_expedie_2, code_expedie_22, no_bordereau_0, no_bordereau_1, no_bordereau_2, no_bordereau_22, date_solde, date_solde_c, date_solde_h, date_solde_0_c, date_solde_0_h, date_solde_1_c, date_solde_1_h, date_solde_2_c, date_solde_2_h, date_solde_22_c, date_solde_22_h, montant_facture_c, montant_facture_h, montant_facture_0_c, montant_facture_0_h, montant_facture_1_c, montant_facture_1_h, montant_facture_2_c, montant_facture_2_h, montant_facture_22_c, montant_facture_22_h, montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour, montant_comptabilise_c, montant_comptabilise_h, montant_comptabilise_0_c, montant_comptabilise_0_h, montant_comptabilise_1_c, montant_comptabilise_1_h, montant_comptabilise_2_c, montant_comptabilise_2_h, montant_comptabilise_22_c, montant_comptabilise_22_h, montant_comptabilise_budget_global_c, montant_regle_c, montant_regle_h, montant_regle_0_c, montant_regle_0_h, montant_regle_1_c, montant_regle_1_h, montant_regle_2_c, montant_regle_2_h, montant_regle_22_c, montant_regle_22_h, delai_facture, delai_expedition, delai_expedition_0, delai_expedition_1, delai_expedition_2, delai_expedition_22, delai_solde, delai_solde_0_c, delai_solde_0_h, delai_solde_1_c, delai_solde_1_h, delai_solde_2_c, delai_solde_2_h, delai_solde_22_c, delai_solde_22_h FROM w_factures; SELECT base.cti_enable_index('activite', 'i_factures_3'); SELECT base.cti_enable_index('activite', 'i_factures_4'); SELECT base.cti_enable_index('activite', 'i_factures_5'); SELECT base.cti_enable_index('activite', 'i_factures_6'); SELECT base.cti_enable_index('activite', 'i_factures_7'); SELECT base.cti_enable_index('activite', 'i_factures_8'); SELECT base.cti_enable_index('activite', 'i_factures_9'); SELECT base.cti_enable_index('activite', 'i_factures_10'); SELECT base.cti_enable_index('activite', 'i_factures_11'); SELECT base.cti_enable_index('activite', 'i_factures_12'); SELECT base.cti_enable_index('activite', 'i_factures_13'); SELECT base.cti_enable_index('activite', 'i_factures_14'); -- Séjours sans facture DROP TABLE IF EXISTS w_factures_trous; CREATE TEMP TABLE w_factures_trous AS SELECT p_sejours.finess, p_sejours.no_sejour, p_sejours.date_entree, p_sejours.tiers_payant_0_id, p_sejours.tiers_payant_1_id, p_sejours.tiers_payant_2_id, p_sejours.tiers_payant_22_id, p_sejours.code_cp_demandee, COALESCE(t_services_facturation.avec_facturation_intermediaire,'') AS avec_facturation_intermediaire, p_sejours.code_sorti, CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_sortie, MAX(CASE WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN date_sortie ELSE p_factures.date_fin END) AS date_fin_facture, date(MAX(COALESCE(CASE WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN date_sortie ELSE p_factures.date_fin END + interval '1 day', p_sejours.date_entree))) AS date_debut_encours, CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_fin_encours FROM activite[PX].p_sejours LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND no_facture NOT LIKE 'E%' JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid WHERE p_sejours.etat = '' AND p_sejours.est_sans_facturation IS DISTINCT FROM '1' AND date_entree <= now() AND p_sejours.type_sejour <> '6' AND p_sejours.type_sejour <> '9' GROUP BY 1,2,3,4,5,6,7,8,9,10,11; -- Séjours sans facture (hors BG) INSERT INTO activite[PX].p_factures( finess, no_sejour, no_facture, no_facture_reference, type_facture, code_facture, date_facture, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee, date_debut, date_fin) SELECT finess, no_sejour, 'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END, 'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END, 'E', '0', '20991231'::date, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee , MIN(GREATEST(date_debut_encours, p_calendrier.date)), MAX(LEAST(date_fin_encours, p_calendrier.date)) FROM w_factures_trous JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_debut_encours AND date_fin_encours WHERE (date_debut_encours <= date_fin_encours or date_fin_facture is null) GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12; UPDATE activite[PX].p_sejours SET est_sans_facturation = '1' WHERE lieu_sortie_id IN (SELECT oid FROM activite[PX].t_lieux WHERE service_facturation_id IN (SELECT oid FROM activite[PX].t_services_facturation WHERE est_sans_facturation = '1') OR unite_fonctionnelle_id IN (SELECT oid FROM activite[PX].t_unites_fonctionnelles WHERE est_sans_facturation = '1') ); -- Séjours avec caisse BG mais facturés hors BG UPDATE activite[PX].p_sejours SET est_budget_global = subview.est_budget_global FROM ( SELECT no_sejour, MAX(CASE WHEN montant_comptabilise_budget_global_c <> 0 THEN 1 ELSE 0 END) AS est_budget_global FROM activite[PX].p_factures WHERE montant_facture_1_c <> 0 GROUP BY 1 ) subview WHERE p_sejours.no_sejour = subview.no_sejour AND p_sejours.est_budget_global <> subview.est_budget_global; -- Initialisation TP2 si pas connu UPDATE activite[PX].p_factures SET tiers_payant_2_id = (SELECT oid FROM activite.t_tiers_payant WHERE code_original = 'CTI_AMC') WHERE (tiers_payant_2_id = 0 OR tiers_payant_2_id IS NULL) AND montant_facture_2_c <> 0; UPDATE activite[PX].p_factures SET tiers_payant_2_id = 0 WHERE tiers_payant_2_id IS NULL; UPDATE activite[PX].p_factures SET tiers_payant_1_id = (SELECT oid FROM activite.t_tiers_payant WHERE code_original = 'CTI_AMC') WHERE (tiers_payant_1_id = 0 OR tiers_payant_1_id IS NULL) AND montant_facture_1_c <> 0; UPDATE activite[PX].p_factures SET tiers_payant_1_id = 0 WHERE tiers_payant_1_id IS NULL; UPDATE activite[PX].p_sejours SET tiers_payant_2_id = subview.tiers_payant_2_id FROM ( SELECT no_sejour, (MAX(Array[date_facture::text, tiers_payant_2_id::text]))[2]::bigint AS tiers_payant_2_id FROM activite[PX].p_factures WHERE tiers_payant_2_id <> 0 GROUP BY 1 ) subview WHERE p_sejours.no_sejour = subview.no_sejour AND (p_sejours.tiers_payant_2_id = 0 OR p_sejours.tiers_payant_2_id IS NULL) ; ]]> = 7 THEN 'CCAM' ELSE 'NGAP' END, (SELECt oid FROM base.t_ccam_regroupements WHERE code = 'NGAP'), (SELECt oid FROM base.t_ccam_regroupements WHERE code = 'NGAP') FROM w_FD_FAC_DETFACLIG LEFT JOIN base.t_actes ON substring(CLI_CODE_CCAM, 1, 7) = t_actes.code WHERE t_actes.code IS NULL AND CLI_CODE_CCAM <> '' GROUP BY 1,2,3,4,5,6; DROP SEQUENCE IF EXISTS w_factures_lignes_c_sequence; CREATE TEMP SEQUENCE w_factures_lignes_c_sequence; -- facturé DROP TABLE IF EXISTS temp.w_factures_lignes_c; CREATE TABLE temp.w_factures_lignes_c AS SELECT w_factures.no_sejour, w_factures.no_facture, w_factures.type_facture, w_factures.oid AS facture_id, w_factures.est_budget_global, w_factures.est_pmsi, w_FD_FAC_DETFACLIG.CLI_CODE_ETAT, w_FD_FAC_DETFACLIG.CLI_FLAG_SENS, w_factures.type_tiers_payant, w_FD_FAC_DETFACLIG.CLI_DATE_DEBPREST AS date_debut, w_FD_FAC_DETFACLIG.CLI_DATE_FINPREST AS date_fin, w_factures.lieu_sortie_id AS lieu_id, CASE WHEN inclus_dans_sejour <> '1' THEN 1::bigint ELSE 3::bigint END AS origine_facturation_id, COALESCE(t_compte.oid,0) AS compte_produit_id, t_rubriques_facturation.oid AS rubrique_facturation_id, t_rubriques_facturation.oid AS rubrique_comptabilisation_id, t_prestations.oid AS prestation_id, COALESCE(t_medecins_administratifs.oid,0) AS medecin_facture_id, COALESCE(t_medecins_administratifs.oid,0) AS medecin_comptabilise_id, COALESCE(t_actes.oid,0) AS acte_id, CLI_CODE_PHASE AS phase_ccam, CLI_CODE_ACTIVITE AS activite_ccam, CLI_DONN_EXTDOC AS extension_ccam, SUBSTR(CLI_DONN_MODIFICATEUR,1,1) AS modificateur_ccam_1, SUBSTR(CLI_DONN_MODIFICATEUR,2,1) AS modificateur_ccam_2, SUBSTR(CLI_DONN_MODIFICATEUR,3,1) AS modificateur_ccam_3, SUBSTR(CLI_DONN_MODIFICATEUR,4,1) AS modificateur_ccam_4, CLI_DONN_QTE AS nb_rubrique, CLI_DONN_QTE AS nb_prestation, CLI_DONN_COEFF AS coefficient, 1::numeric AS coefficient_mco, CLI_DONN_TU AS prix_unitaire, nextval('w_factures_lignes_c_sequence'::regclass) AS oid, CASE WHEN type_tiers_payant = '0' THEN CLI_DONN_TAUX ELSE 0 END AS taux_0, CASE WHEN type_tiers_payant = '1' THEN CLI_DONN_TAUX ELSE 0 END AS taux_1, CASE WHEN type_tiers_payant = '2' THEN CLI_DONN_TAUX ELSE 0 END AS taux_2, 0::numeric AS taux_22, CASE WHEN inclus_dans_sejour <> '1' THEN CLI_DONN_MONTANTLIG ELSE 0 END AS montant_facture, 0::numeric AS montant_facture_0, 0::numeric AS montant_facture_1, 0::numeric AS montant_facture_2, 0::numeric AS montant_facture_22, 0::numeric AS montant_comptabilise, 0::numeric AS montant_comptabilise_0, 0::numeric AS montant_comptabilise_1, 0::numeric AS montant_comptabilise_2, 0::numeric AS montant_comptabilise_22, 0::numeric AS montant_encours, 0::numeric AS montant_encours_0, 0::numeric AS montant_encours_1, 0::numeric AS montant_encours_2, 0::numeric AS montant_encours_22, CASE WHEN inclus_dans_sejour = '1' THEN CLI_DONN_MONTANTLIG ELSE 0 END AS montant_facture_actes_inclus_dans_sejour, 0::numeric AS montant_facture_0_actes_inclus_dans_sejour, 0::numeric AS montant_facture_1_actes_inclus_dans_sejour, 0::numeric AS montant_facture_2_actes_inclus_dans_sejour, 0::numeric AS montant_facture_22_actes_inclus_dans_sejour, 0::numeric AS montant_comptabilise_budget_global_1, 0::numeric AS rubrique_facture_id FROM w_FD_FAC_DETFACLIG JOIN w_factures ON w_FD_FAC_DETFACLIG.CLI_DONN_NOABSEPISODE = w_factures.CLI_DONN_NOABSEPISODE AND w_FD_FAC_DETFACLIG.CLI_Donn_NoObjIntFac = w_factures.CLI_Code_NoInterneObjet AND w_FD_FAC_DETFACLIG.CLI_DONN_EXERCOMPTA = w_factures.CLI_DONN_EXERCOMPTA JOIN activite[PX].t_rubriques_facturation ON CLI_CODE_PRESTATION = t_rubriques_facturation.code_original JOIN activite.t_prestations ON CLI_CODE_PRESTATION = t_prestations.code LEFT JOIN activite[PX].t_compte ON CLI_CODE_ORDONNATEUR = t_compte.code LEFT JOIN activite[PX].t_medecins_administratifs ON CLI_CODE_MEDECINREALISATEUR = t_medecins_administratifs.code_original LEFT JOIN base.t_actes ON substring(CLI_CODE_CCAM, 1, 7) = t_actes.code ; UPDATE temp.w_factures_lignes_c SET montant_facture_1 = montant_facture, montant_comptabilise = CASE WHEN est_budget_global <> '1' THEN montant_facture ELSE 0 END, montant_comptabilise_1 = CASE WHEN est_budget_global <> '1' THEN montant_facture ELSE 0 END, montant_comptabilise_budget_global_1 = CASE WHEN est_budget_global = '1' THEN montant_facture ELSE 0 END, montant_facture_1_actes_inclus_dans_sejour = montant_facture_actes_inclus_dans_sejour WHERE type_tiers_payant = '1'; UPDATE temp.w_factures_lignes_c SET montant_facture_2 = montant_facture, montant_comptabilise = montant_facture, montant_comptabilise_2 = montant_facture, montant_facture_2_actes_inclus_dans_sejour = montant_facture_actes_inclus_dans_sejour WHERE type_tiers_payant = '2'; UPDATE temp.w_factures_lignes_c SET montant_facture_0 = montant_facture, montant_comptabilise = montant_facture, montant_comptabilise_0 = montant_facture, montant_facture_0_actes_inclus_dans_sejour = montant_facture_actes_inclus_dans_sejour WHERE type_tiers_payant = '0'; ALTER TABLE temp.w_factures_lignes_c ADD CONSTRAINT w_factures_lignes_c_pk PRIMARY KEY(oid); CREATE INDEX w_factures_lignes_c_i1 ON temp.w_factures_lignes_c USING btree (no_sejour); -- Nombre = coefficient pour rubriques à ventiler UPDATE temp.w_factures_lignes_c SET nb_rubrique = nb_rubrique * coefficient, nb_prestation = nb_prestation * coefficient, coefficient = 1 FROM activite.t_prestations WHERE coefficient > 1 AND prestation_id = t_prestations.oid AND (t_prestations.code IN ('CP', 'CPC', 'SHO') OR t_prestations.type_ventilation_jour = '1') ; -- dates = periode facture si date debut = date fin et nombre > 1 UPDATE temp.w_factures_lignes_c SET date_debut = p_factures.date_debut, date_fin = p_factures.date_fin FROM activite.t_prestations, activite[PX].p_factures WHERE ABS(nb_rubrique) > 1 AND p_factures.no_facture = w_factures_lignes_c.no_facture AND prestation_id = t_prestations.oid AND (t_prestations.code IN ('CP', 'CPC', 'SHO') OR t_prestations.type_ventilation_jour = '1'); -- Eclatement des supplements par jour DROP TABLE IF EXISTS w_factures_lignes_sup_c; CREATE TEMP TABLE w_factures_lignes_sup_c AS SELECT w_factures_lignes_c.oid AS from_oid, t_prestations.code AS prestation_code, date(p_sejours.date_entree) AS date_debut_ghs, date(p_sejours.date_sortie - interval '1 day') AS date_fin_ghs, (date(date_sortie) - date(date_entree)) * CASE WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation_ghs, NULL::date[] AS dates_prestation_ghs, w_factures_lignes_c.* FROM temp.w_factures_lignes_c JOIN activite[PX].p_sejours ON w_factures_lignes_c.no_sejour = p_sejours.no_sejour JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND ( code IN ('PJ', 'FJ', 'TM', 'PHJ','SSM', 'GHS', 'EXH', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO') OR t_prestations.type_ventilation_jour = '1' ) WHERE (nb_prestation > 1 or nb_prestation < -1 OR (t_prestations.code = 'GHS' AND date(date_fin) - date(date_debut) > 1)) ; -- Nombre de jours GHS UPDATE w_factures_lignes_sup_c SET date_fin_ghs = COALESCE(date(date_debut_exh - interval '1 day'), subview.date_fin_ghs), nb_prestation_ghs = COALESCE(date(date_debut_exh - interval '1 day'), subview.date_fin_ghs) - date_debut_ghs + 1 FROM ( SELECT no_facture, date(MAX(CASE WHEN code = 'GHS' THEN date_fin ELSE NULL END)) AS date_fin_ghs, date(MIN(CASE WHEN code = 'EXH' THEN date_debut ELSE NULL END)) AS date_debut_exh FROM temp.w_factures_lignes_c JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code IN ('GHS', 'EXH') GROUP BY 1) subview WHERE w_factures_lignes_sup_c.no_facture = subview.no_facture; DROP TABLE IF EXISTS w_factures_lignes_sup_c_gen; CREATE TEMP TABLE w_factures_lignes_sup_c_gen AS SELECT from_oid, no_sejour, no_facture, type_facture, facture_id, est_budget_global, est_pmsi, CLI_CODE_ETAT, CLI_FLAG_SENS, type_tiers_payant, date AS date_debut, date AS date_fin, lieu_id, origine_facturation_id, compte_produit_id, rubrique_facturation_id, rubrique_comptabilisation_id, prestation_id, medecin_facture_id, medecin_comptabilise_id, acte_id, phase_ccam, activite_ccam, extension_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4, CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_rubrique, CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation, coefficient, coefficient_mco, prix_unitaire, oid, taux_0, taux_1, taux_2, taux_22, round(montant_facture / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_facture, round(montant_facture_0 / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_facture_0, round(montant_facture_1 / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_facture_1, round(montant_facture_2 / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_facture_2, round(montant_facture_22 / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_facture_22, round(montant_comptabilise / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_comptabilise, round(montant_comptabilise_0 / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_comptabilise_0, round(montant_comptabilise_1 / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_comptabilise_1, round(montant_comptabilise_2 / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_comptabilise_2, round(montant_comptabilise_22 / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour, round(montant_comptabilise_budget_global_1 / ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END),2) AS montant_comptabilise_budget_global_1 FROM w_factures_lignes_sup_c JOIN base.p_calendrier ON date_debut BETWEEN p_calendrier.date - ABS(CASE WHEN prestation_code <> 'GHS' THEN nb_prestation ELSE nb_prestation_ghs END)::integer + 1 AND p_calendrier.date AND p_calendrier.date <> date_debut ; DROP TABLE IF EXISTS w_factures_lignes_sup_c_gen_tot; CREATE TEMP TABLE w_factures_lignes_sup_c_gen_tot AS SELECT from_oid, SUM(nb_rubrique) AS nb_rubrique, SUM(nb_prestation) AS nb_prestation, SUM(montant_facture) AS montant_facture, SUM(montant_facture_0) AS montant_facture_0, SUM(montant_facture_1) AS montant_facture_1, SUM(montant_facture_2) AS montant_facture_2, SUM(montant_facture_22) AS montant_facture_22, SUM(montant_comptabilise) AS montant_comptabilise, SUM(montant_comptabilise_0) AS montant_comptabilise_0, SUM(montant_comptabilise_1) AS montant_comptabilise_1, SUM(montant_comptabilise_2) AS montant_comptabilise_2, SUM(montant_comptabilise_22) AS montant_comptabilise_22, SUM(montant_comptabilise_budget_global_1) AS montant_comptabilise_budget_global_1 FROM w_factures_lignes_sup_c_gen GROUP BY 1; UPDATE temp.w_factures_lignes_c SET date_fin = w_factures_lignes_c.date_debut, nb_rubrique = w_factures_lignes_c.nb_rubrique - w_factures_lignes_sup_c_gen_tot.nb_rubrique, nb_prestation = w_factures_lignes_c.nb_prestation - w_factures_lignes_sup_c_gen_tot.nb_prestation, montant_facture = w_factures_lignes_c.montant_facture - w_factures_lignes_sup_c_gen_tot.montant_facture, montant_facture_0 = w_factures_lignes_c.montant_facture_0 - w_factures_lignes_sup_c_gen_tot.montant_facture_0, montant_facture_1 = w_factures_lignes_c.montant_facture_1 - w_factures_lignes_sup_c_gen_tot.montant_facture_1, montant_facture_2 = w_factures_lignes_c.montant_facture_2 - w_factures_lignes_sup_c_gen_tot.montant_facture_2, montant_facture_22 = w_factures_lignes_c.montant_facture_22 - w_factures_lignes_sup_c_gen_tot.montant_facture_22, montant_comptabilise = w_factures_lignes_c.montant_comptabilise - w_factures_lignes_sup_c_gen_tot.montant_comptabilise, montant_comptabilise_0 = w_factures_lignes_c.montant_comptabilise_0 - w_factures_lignes_sup_c_gen_tot.montant_comptabilise_0, montant_comptabilise_1 = w_factures_lignes_c.montant_comptabilise_1 - w_factures_lignes_sup_c_gen_tot.montant_comptabilise_1, montant_comptabilise_2 = w_factures_lignes_c.montant_comptabilise_2 - w_factures_lignes_sup_c_gen_tot.montant_comptabilise_2, montant_comptabilise_22 = w_factures_lignes_c.montant_comptabilise_22 - w_factures_lignes_sup_c_gen_tot.montant_comptabilise_22, montant_comptabilise_budget_global_1 = w_factures_lignes_c.montant_comptabilise_budget_global_1 - w_factures_lignes_sup_c_gen_tot.montant_comptabilise_budget_global_1 FROM w_factures_lignes_sup_c_gen_tot WHERE w_factures_lignes_c.oid = from_oid; INSERT INTO temp.w_factures_lignes_c SELECT no_sejour, no_facture, type_facture, facture_id, est_budget_global, est_pmsi, CLI_CODE_ETAT, CLI_FLAG_SENS, type_tiers_payant, date_debut, date_fin, lieu_id, origine_facturation_id, compte_produit_id, rubrique_facturation_id, rubrique_comptabilisation_id, prestation_id, medecin_facture_id, medecin_comptabilise_id, acte_id, phase_ccam, activite_ccam, extension_ccam, modificateur_ccam_1, modificateur_ccam_2, modificateur_ccam_3, modificateur_ccam_4, nb_rubrique, nb_prestation, coefficient, coefficient_mco, prix_unitaire, nextval('w_factures_lignes_c_sequence'::regclass) AS oid, taux_0, taux_1, taux_2, taux_22, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour, montant_comptabilise_budget_global_1, 0::numeric AS rubrique_facture_id FROM w_factures_lignes_sup_c_gen; -- Lieux d'exécution UPDATE temp.w_factures_lignes_c SET lieu_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_mouvements_sejour WHERE w_factures_lignes_c.no_sejour = p_mouvements_sejour.no_sejour AND w_factures_lignes_c.date_debut = p_mouvements_sejour.date AND (p_mouvements_sejour.heure_fin = 240000 OR p_mouvements_sejour.nb_sorties_directes = 1) AND w_factures_lignes_c.lieu_id <> p_mouvements_sejour.lieu_id; -- Le code TM est basculé en BG ou HBG pour Coste Floret pour régimeeprincipal INSERT INTO activite[PX].t_rubriques_facturation(code, code_original, texte, texte_court) SELECT 'BG', 'CTI_BG', 'Séjour Budget Global', 'Séjour Budget Global' FROM activite.t_divers WHERE t_divers.code = 'CLINICOMBG' AND t_divers.valeur ='1' AND 'CTI_BG' NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation); INSERT INTO activite[PX].t_rubriques_facturation(code, code_original, texte, texte_court) SELECT 'HBG', 'CTI_HBG', 'Séjour Hors Budget Global', 'Séjour Hors Budget Global' FROM activite.t_divers WHERE t_divers.code = 'CLINICOMBG' AND t_divers.valeur ='1' AND 'CTI_HBG' NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation); UPDATE temp.w_factures_lignes_c SET rubrique_facturation_id = t_rubriques_facturation_bg.oid, rubrique_comptabilisation_id = t_rubriques_facturation_bg.oid FROM activite[PX].t_rubriques_facturation JOIN activite[PX].t_rubriques_facturation t_rubriques_facturation_bg ON t_rubriques_facturation_bg.code_original = 'CTI_BG' JOIN activite.t_divers ON t_divers.code = 'CLINICOMBG' AND t_divers.valeur ='1' WHERE w_factures_lignes_c.rubrique_facturation_id = t_rubriques_facturation.oid AND t_rubriques_facturation.code = 'TM' AND montant_comptabilise_budget_global_1 <> 0; UPDATE temp.w_factures_lignes_c SET rubrique_facturation_id = t_rubriques_facturation_bg.oid, rubrique_comptabilisation_id = t_rubriques_facturation_bg.oid FROM activite[PX].t_rubriques_facturation JOIN activite[PX].t_rubriques_facturation t_rubriques_facturation_bg ON t_rubriques_facturation_bg.code_original = 'CTI_HBG' JOIN activite.t_divers ON t_divers.code = 'CLINICOMBG' AND t_divers.valeur ='1' WHERE w_factures_lignes_c.rubrique_facturation_id = t_rubriques_facturation.oid AND t_rubriques_facturation.code = 'TM' AND montant_comptabilise_budget_global_1 = 0 AND taux_1 > 50; UPDATE temp.w_factures_lignes_c SET rubrique_facturation_id = t_rubriques_facturation_bg.oid, rubrique_comptabilisation_id = t_rubriques_facturation_bg.oid FROM activite[PX].t_rubriques_facturation JOIN activite[PX].t_rubriques_facturation t_rubriques_facturation_bg ON t_rubriques_facturation_bg.code_original = 'CTI_HBG' JOIN activite.t_divers ON t_divers.code = 'CLINICOMBG' AND t_divers.valeur ='1' WHERE w_factures_lignes_c.rubrique_facturation_id = t_rubriques_facturation.oid AND t_rubriques_facturation.code = 'TM' AND montant_comptabilise_budget_global_1 = 0 AND taux_2 > 50; UPDATE temp.w_factures_lignes_c SET rubrique_facturation_id = t_rubriques_facturation_bg.oid, rubrique_comptabilisation_id = t_rubriques_facturation_bg.oid FROM activite[PX].t_rubriques_facturation JOIN activite[PX].t_rubriques_facturation t_rubriques_facturation_bg ON t_rubriques_facturation_bg.code_original = 'CTI_HBG' JOIN activite.t_divers ON t_divers.code = 'CLINICOMBG' AND t_divers.valeur ='1' WHERE w_factures_lignes_c.rubrique_facturation_id = t_rubriques_facturation.oid AND t_rubriques_facturation.code = 'TM' AND montant_comptabilise_budget_global_1 = 0 AND taux_0 > 50; -- Les nombres TM sont supprimés sur la mutuellee et le patient (sauf coste floret) SELECT base.cti_execute( 'UPDATE temp.w_factures_lignes_c SET nb_prestation = 0, nb_rubrique = 0 FROM ( SELECT p_factures.no_sejour, w_factures_lignes_c.date_debut, MAX(CASE WHEN taux_2 > 0 THEN w_factures_lignes_c.no_facture ELSE NULL END) AS no_facture, MAX(prestation_id) AS prestation_id FROM temp.w_factures_lignes_c JOIN activite[PX].p_factures ON w_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND t_prestations.code = ''TM'' LEFT JOIN activite.t_divers ON t_divers.code = ''CLINICOMBG'' AND t_divers.valeur = ''1'' WHERE w_factures_lignes_c.date_debut = w_factures_lignes_c.date_fin AND nb_prestation <> 0 AND t_divers.code IS NULL GROUP BY 1,2 HAVING count(*) > 1 AND MAX(taux_1) > 0 AND max(taux_2) > 0 ) subview WHERE w_factures_lignes_c.no_facture = subview.no_facture AND w_factures_lignes_c.date_debut = subview.date_debut AND w_factures_lignes_c.prestation_id = subview.prestation_id',50); SELECT base.cti_execute( 'UPDATE temp.w_factures_lignes_c SET nb_prestation = 0, nb_rubrique = 0 FROM ( SELECT p_factures.no_sejour, w_factures_lignes_c.date_debut, MAX(CASE WHEN taux_0 > 0 THEN w_factures_lignes_c.no_facture ELSE NULL END) AS no_facture, MAX(prestation_id) AS prestation_id FROM temp.w_factures_lignes_c JOIN activite[PX].p_factures ON w_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND t_prestations.code = ''TM'' LEFT JOIN activite.t_divers ON t_divers.code = ''CLINICOMBG'' AND t_divers.valeur = ''1'' WHERE w_factures_lignes_c.date_debut = w_factures_lignes_c.date_fin AND nb_prestation <> 0 AND t_divers.code IS NULL GROUP BY 1,2 HAVING count(*) > 1 AND MAX(taux_1) > 0 AND max(taux_0) > 0 ) subview WHERE w_factures_lignes_c.no_facture = subview.no_facture AND w_factures_lignes_c.date_debut = subview.date_debut AND w_factures_lignes_c.prestation_id = subview.prestation_id',50); -- Rubriques internes cti SELECT activite[PX].cti_reorganize_rubrique_facture_c('temp.w_factures_lignes_c'); -- Génération SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_1'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_2'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_3'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_4'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_5'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_6'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_7'); SELECT base.cti_disable_index('activite', 'i_factures_lignes_c_8'); INSERT INTO activite[PX].p_factures_lignes_c( no_facture, facture_id, date_debut, date_fin, lieu_id, origine_facturation_id, rubrique_facture_id, compte_produit_id, rubrique_facturation_id, rubrique_comptabilisation_id, prestation_id, nb_rubrique, nb_prestation, coefficient, coefficient_mco, prix_unitaire, taux_0, taux_1, taux_2, taux_22, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour, montant_comptabilise_budget_global_1 ) SELECT no_facture, facture_id, date_debut, date_fin, lieu_id, origine_facturation_id, rubrique_facture_id, compte_produit_id, rubrique_facturation_id, rubrique_comptabilisation_id, prestation_id, nb_rubrique, nb_prestation, coefficient, coefficient_mco, prix_unitaire, taux_0, taux_1, taux_2, taux_22, montant_facture, montant_facture_0, montant_facture_1, montant_facture_2, montant_facture_22, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_encours, montant_encours_0, montant_encours_1, montant_encours_2, montant_encours_22, montant_facture_actes_inclus_dans_sejour, montant_facture_0_actes_inclus_dans_sejour, montant_facture_1_actes_inclus_dans_sejour, montant_facture_2_actes_inclus_dans_sejour, montant_facture_22_actes_inclus_dans_sejour, montant_comptabilise_budget_global_1 FROM temp.w_factures_lignes_c; SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_1'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_2'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_3'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_4'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_5'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_6'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_7'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_c_8'); -- Facturee encours BG (sauf si TM AMC ou Patient INSERT INTO activite[PX].p_factures( finess, no_sejour, no_facture, no_facture_reference, type_facture, code_facture, date_facture, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee, date_debut, date_fin) SELECT finess, no_sejour, 'E' || no_sejour || '-BG', 'E' || no_sejour || '-BG', 'E', '0', '20991231'::date, tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id, code_cp_demandee , p_sejours.date_entree, CASE WHEN code_sorti = '1' THEN p_sejours.date_sortie ELSE date(now()) END FROM activite.p_sejours WHERE est_budget_global = '1' AND date_sortie >= '20150101' AND type_sejour IN ('1', '2', '5') AND no_sejour NOT IN ( SELECT no_sejour FROM activite.p_factures WHERE no_facture LIKE '%BG' ) AND no_sejour NOT IN ( SELECT no_sejour FROM activite.p_factures_lignes_c JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite.t_prestations ON p_factures_lignes_c.prestation_id = t_prestations.oid WHERE t_prestations.code = 'TM' AND (taux_1 >= 70 OR taux_2 >= 70 OR taux_0 >= 70) GROUP BY 1 HAVING SUM(p_factures_lignes_c.montant_facture) > 0 ) ; ]]> 0 AND p_factures.code_vente = '1' GROUP BY 1,2,3,4,5,6; SELECT base.cti_disable_index('activite', 'i_factures_soldes_c_1'); SELECT base.cti_disable_index('activite', 'i_factures_soldes_c_2'); SELECT base.cti_disable_index('activite', 'i_factures_soldes_c_3'); SELECT base.cti_disable_index('activite', 'i_factures_soldes_c_4'); SELECT base.cti_disable_index('activite', 'i_factures_soldes_c_8'); INSERT INTO activite[PX].p_factures_soldes_c ( no_facture, facture_id, date_comptable, od_avoir, rubrique_comptabilisee_id, prestation_id, montant_comptabilise, montant_comptabilise_0, montant_comptabilise_1, montant_comptabilise_2, montant_comptabilise_22, montant_regle, montant_regle_0, montant_regle_1, montant_regle_2, montant_regle_22 ) SELECT no_facture, facture_id, date_comptable, od_avoir, rubrique_comptabilisee_id, prestation_id, SUM(montant_comptabilise), SUM(montant_comptabilise_0), SUM(montant_comptabilise_1), SUM(montant_comptabilise_2), SUM(montant_comptabilise_22), SUM(montant_regle), SUM(montant_regle_0), SUM(montant_regle_1), SUM(montant_regle_2), SUM(montant_regle_22) FROM w_factures_soldes_c GROUP BY 1,2,3,4,5,6; SELECT base.cti_enable_index('activite', 'i_factures_soldes_c_1'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_c_2'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_c_3'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_c_4'); SELECT base.cti_enable_index('activite', 'i_factures_soldes_c_8'); ]]> 0 OR montant_facture_actes_inclus_dans_sejour <> 0; SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_1'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_2'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_3'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_4'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_5'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_6'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_7'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_8'); SELECT base.cti_enable_index('activite', 'i_factures_lignes_h_9'); UPDATE activite[PX].p_factures_lignes_h SET lieu_id = p_mouvements_sejour.lieu_id FROM activite[PX].p_factures, activite[PX].p_mouvements_sejour WHERE p_factures_lignes_h.no_facture = p_factures.no_facture AND p_factures.no_sejour = p_mouvements_sejour.no_sejour AND activite[PX].p_factures_lignes_h.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_h.lieu_id <> p_mouvements_sejour.lieu_id; ]]> = '20090101'; INSERT INTO w_chiffrier SELECT date(DADM_DATEFIN) AS date, DADM_NDA AS no_sejour, 0::numeric AS nb_entrees_directes, 1::numeric AS nb_sorties_directes FROM prod_csis.SID_DOSSIERADMINISTRATIF_DADM JOIN prod_csis.SNO_STATUTDOSSIER_STDO ON DADM_ID_STDO = STDO_ID AND STDO_NATUREENTREE = 'R' WHERE DADM_ID_STDO NOT IN (1,2) AND DADM_ID_ETDO NOT IN (4,6) AND DADM_DATEFIN IS NOT NULL AND date(DADM_DATEFIN) >= '20090101' AND STDO_CODE IN ('S', 'C') ; INSERT INTO activite[PX].p_chiffrier_occupation ( date, no_sejour, nb_entrees_directes, nb_sorties_directes) SELECT date, no_sejour, SUM(nb_entrees_directes), SUM(nb_sorties_directes) FROM w_chiffrier GROUP BY 1,2; ]]> 'P' AND CLI_CODE_OBJETFACTURATION <> 'I' AND CLI_DONN_EXERCOMPTA >= [ENV_ADM_ANNEEDEBUT] GROUP BY 1,2; TRUNCATE activite[PX].p_chiffrier_comptable; INSERT INTO activite[PX].p_chiffrier_comptable( date_comptable, montant_ventes_c, montant_reglements_c, montant_ventes_h, montant_reglements_h ) SELECT CASE WHEN date(CLI_DATE_OBJETFAC) < (CLI_DONN_EXERCOMPTA || '0101')::date THEN (CLI_DONN_EXERCOMPTA || '0101')::date WHEN date(CLI_DATE_OBJETFAC) < (CLI_DONN_EXERCOMPTA || '0101')::date THEN (CLI_DONN_EXERCOMPTA || '0101')::date ELSE date(CLI_DATE_OBJETFAC) END AS date_comptable, SUM(CASE WHEN CLI_FLAG_SENS = 1 THEN FD_FAC_DETFAC.CLI_DONN_MONTANT ELSE 0 - FD_FAC_DETFAC.CLI_DONN_MONTANT END) AS montant_ventes_c, 0::numeric AS montant_reglements_c, 0::numeric AS montant_ventes_h, 0::numeric AS montant_reglements_h FROM prod_clinicom.FD_FAC_DETFAC JOIN w_ADMISSIONS_select ON FD_FAC_DETFAC.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT WHERE CLI_CODE_OBJETFACTURATION <> 'P' AND CLI_CODE_OBJETFACTURATION <> 'I' AND CLI_DONN_NOABSEPISODE <> '' AND CLI_DONN_EXERCOMPTA >= [ENV_ADM_ANNEEDEBUT] GROUP BY 1; ]]> 2 THEN '_2' ELSE '' END AS CLI_CODE_ORGANISME_2, MAX(CASE WHEN FB_FAC_DEBITEURS.CLI_CODE_BUDGETGLOBAL = 1 THEN 1 ELSE 0 END) AS est_budget_global, MIN(CASE WHEN FD_FAC_DEBITEURS.CLI_CODE_TYPEDEBITEUR IN (1) THEN '1' ELSE NULL END) AS type_tiers_payant_1, MAX(CASE WHEN FD_FAC_DEBITEURS.CLI_CODE_TYPEDEBITEUR IN (1) THEN NULL ELSE '2' END) AS type_tiers_payant_2, 0::bigint AS tiers_payant_1_id, 0::bigint AS tiers_payant_2_id FROM prod_clinicom.FB_FAC_DEBITEURS JOIN prod_clinicom.FD_FAC_DEBITEURS ON FB_FAC_DEBITEURS.CLI_CODE_ORGANISME = FD_FAC_DEBITEURS.CLI_CODE_ORGANISME JOIN w_ADMISSIONS_select ON FD_FAC_DEBITEURS.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT GROUP BY 1,2 ORDER BY 1; INSERT INTO w_FB_FAC_DEBITEURS SELECT FD_FAC_DEBITEURS.CLI_CODE_ORGANISME, FD_FAC_DEBITEURS.CLI_CODE_ORGANISME, FD_FAC_DEBITEURS.CLI_CODE_ORGANISME || CASE WHEN COUNT(DISTINCT FD_FAC_DEBITEURS.CLI_CODE_TYPEDEBITEUR) > 2 THEN '_2' ELSE '' END AS CLI_CODE_ORGANISME_2, 0 AS est_budget_global, MIN(CASE WHEN FD_FAC_DEBITEURS.CLI_CODE_TYPEDEBITEUR IN (1) THEN '1' ELSE NULL END) AS type_tiers_payant_1, MAX(CASE WHEN FD_FAC_DEBITEURS.CLI_CODE_TYPEDEBITEUR IN (1) THEN NULL ELSE '2' END) AS type_tiers_payant_2, 0::bigint AS tiers_payant_1_id, 0::bigint AS tiers_payant_2_id FROM prod_clinicom.FD_FAC_DEBITEURS JOIN w_ADMISSIONS_select ON FD_FAC_DEBITEURS.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT LEFT JOIN prod_clinicom.FB_FAC_DEBITEURS ON FB_FAC_DEBITEURS.CLI_CODE_ORGANISME = FD_FAC_DEBITEURS.CLI_CODE_ORGANISME WHERE FD_FAC_DEBITEURS.CLI_CODE_ORGANISME <> '' AND FB_FAC_DEBITEURS.CLI_CODE_ORGANISME IS NULL GROUP BY 1,2 ORDER BY 1; INSERT INTO w_FB_FAC_DEBITEURS SELECT FD_FAC_DETFAC.CLI_CODE_ORGANISME, FD_FAC_DETFAC.CLI_CODE_ORGANISME, FD_FAC_DETFAC.CLI_CODE_ORGANISME || CASE WHEN COUNT(DISTINCT FD_FAC_DETFAC.CLI_CODE_TYPEDEBITEUR) > 2 THEN '_2' ELSE '' END AS CLI_CODE_ORGANISME_2, 0 AS est_budget_global, MIN(CASE WHEN FD_FAC_DETFAC.CLI_CODE_TYPEDEBITEUR IN (1) THEN '1' ELSE NULL END) AS type_tiers_payant_1, MAX(CASE WHEN FD_FAC_DETFAC.CLI_CODE_TYPEDEBITEUR IN (1) THEN NULL ELSE '2' END) AS type_tiers_payant_2, 0::bigint AS tiers_payant_1_id, 0::bigint AS tiers_payant_2_id FROM prod_clinicom.FD_FAC_DETFAC JOIN w_ADMISSIONS_select ON FD_FAC_DETFAC.cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT LEFT JOIN w_FB_FAC_DEBITEURS ON FD_FAC_DETFAC.CLI_CODE_ORGANISME = w_FB_FAC_DEBITEURS.CLI_CODE_ORGANISME WHERE FD_FAC_DETFAC.CLI_CODE_ORGANISME <> '' AND w_FB_FAC_DEBITEURS.CLI_CODE_ORGANISME IS NULL GROUP BY 1,2 ORDER BY 1; ALTER TABLE w_FB_FAC_DEBITEURS ADD CONSTRAINT w_FB_FAC_DEBITEURS_pkey PRIMARY KEY(CLI_CODE_ORGANISME); INSERT INTO activite[PX].t_tiers_payant(code, code_original, texte, texte_court, type_tiers_payant) SELECT CLI_CODE_ORGANISME, CLI_CODE_ORGANISME, CLI_DONN_DESIGNATIONDEBITEUR, CLI_DONN_DESIGNATIONDEBITEUR, type_tiers_payant_1 FROM w_FB_FAC_DEBITEURS WHERE type_tiers_payant_1 IS NOT NULL AND CLI_CODE_ORGANISME NOT IN (SELECT code_original FROM activite[PX].t_tiers_payant) ORDER BY 1; INSERT INTO activite[PX].t_tiers_payant(code, code_original, texte, texte_court, type_tiers_payant) SELECT CLI_CODE_ORGANISME_2, CLI_CODE_ORGANISME_2, CLI_DONN_DESIGNATIONDEBITEUR, CLI_DONN_DESIGNATIONDEBITEUR, type_tiers_payant_2 FROM w_FB_FAC_DEBITEURS WHERE type_tiers_payant_2 IS NOT NULL AND CLI_CODE_ORGANISME_2 NOT IN (SELECT code_original FROM activite[PX].t_tiers_payant) ORDER BY 1; UPDATE w_FB_FAC_DEBITEURS SET tiers_payant_1_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE type_tiers_payant_1 IS NOT NULL AND CLI_CODE_ORGANISME = code_original; UPDATE w_FB_FAC_DEBITEURS SET tiers_payant_2_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE type_tiers_payant_2 IS NOT NULL AND CLI_CODE_ORGANISME_2 = code_original; UPDATE w_FB_FAC_DEBITEURS SET tiers_payant_1_id = t_tiers_payant.oid FROM activite[PX].t_tiers_payant WHERE type_tiers_payant_2 IS NOT NULL AND tiers_payant_1_id = 0 AND CLI_CODE_ORGANISME_2 = code_original; ]]> w_medecins.CLI_CODE_ADELI ); UPDATE base.t_medecins SET specialite_id = subview.specialite_id FROM (SELECT t_medecins.oid, MIN(t_medecins_administratifs.specialite_id) as specialite_id FROM base.t_medecins, activite[PX].t_medecins_administratifs , base.t_specialites_medecin WHERE t_medecins.oid = t_medecins_administratifs.medecin_id AND t_medecins_administratifs.specialite_id = t_specialites_medecin.oid GROUP BY t_medecins.oid) subview WHERE t_medecins.oid = subview.oid AND t_medecins.oid <> 0 AND t_medecins.specialite_id = 0; ]]> '' GROUP BY 1,2,3) subview GROUP BY 1 ) subview ON w_MVTS_UF_2.CLI_CODE_SERVICE = subview.CLI_CODE_SERVICE WHERE w_MVTS_UF.CLI_CODE_SERVICE = w_MVTS_UF_2.CLI_CODE_SERVICE AND w_MVTS_UF.CLI_CODE_ACTIVITE = ''; UPDATE w_MVTS_UF SET CLI_CODE_DMT = CODE_default, dmt_id = oid_default FROM w_MVTS_UF w_MVTS_UF_2 JOIN ( SELECT CLI_CODE_SERVICE, (MAX(array[to_char(CODE_count,'FM00000'),CODE]))[2] AS CODE_default, (MAX(array[CODE_count,oid]))[2] AS oid_default FROM ( SELECT CLI_CODE_SERVICE, CLI_CODE_DMT AS CODE, dmt_id AS oid, COUNT(*) AS CODE_count FROM w_MVTS_UF WHERE CLI_CODE_DMT <> '' GROUP BY 1,2,3) subview GROUP BY 1 ) subview ON w_MVTS_UF_2.CLI_CODE_SERVICE = subview.CLI_CODE_SERVICE WHERE w_MVTS_UF.CLI_CODE_SERVICE = w_MVTS_UF_2.CLI_CODE_SERVICE AND w_MVTS_UF.CLI_CODE_DMT = ''; ALTER TABLE w_MVTS_UF ADD CONSTRAINT w_MVTS_UF_pkey PRIMARY KEY(CLI_CODE_UF); -- Modes de traitement INSERT INTO base.t_modes_traitement(code, texte, texte_court) SELECT CLI_CODE_ACTIVITE, CLI_DONN_DESCRIPTION, CLI_DONN_DESCRIPTION FROM prod_clinicom.FS_MVTS_ACTIVITE WHERE CLI_CODE_ACTIVITE NOT IN (SELECT code FROM base.t_modes_traitement) AND CLI_CODE_ACTIVITE IN (SELECt CLI_CODE_ACTIVITE FROM w_MVTS_UF) ORDER BY CLI_CODE_ACTIVITE; -- DMT INSERT INTO base.t_modes_traitement(code, texte, texte_court) SELECT CLI_CODE_DMT, CLI_DONN_DESCRIPTION, CLI_DONN_DESCRIPTION FROM prod_clinicom.FS_MVTS_DMT WHERE CLI_CODE_DMT NOT IN (SELECT code FROM base.t_dmt) AND CLI_CODE_DMT IN (SELECt CLI_CODE_DMT FROM w_MVTS_UF) ORDER BY CLI_CODE_DMT; -- Services INSERT INTO activite[PX].t_services_facturation(oid, code_original, code, texte, texte_court) SELECT 0, 0, '****', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_services_facturation); INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, type_t2a) SELECT CLI_CODE_UF, CLI_CODE_UF, CLI_DONN_DESCRIPTION, CLI_DONN_DESCRIPTION, '0' FROM w_MVTS_UF WHERE CLI_CODE_UF NOT IN (SELECT code_original FROM activite[PX].t_services_facturation) GROUP BY 1,2,3,4 ORDER BY 1; UPDATE activite[PX].t_services_facturation SET mode_traitement_id = CASE WHEN t_services_facturation.mode_traitement_id = 0 THEN COALESCE(t_modes_traitement.oid,0) ELSE t_services_facturation.mode_traitement_id END, dmt_id = CASE WHEN t_services_facturation.dmt_id = 0 THEN COALESCE(t_dmt.oid,0) ELSE t_services_facturation.dmt_id END FROM w_MVTS_UF LEFT JOIN base.t_modes_traitement ON CLI_CODE_ACTIVITE = t_modes_traitement.code LEFT JOIN base.t_dmt ON CLI_CODE_DMT = t_dmt.code WHERE t_services_facturation.code_original = CLI_CODE_UF AND (t_services_facturation.mode_traitement_id = 0 OR t_services_facturation.dmt_id = 0); -- Unités fonctionnelles INSERT INTO activite[PX].t_unites_fonctionnelles(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_unites_fonctionnelles); INSERT INTO activite[PX].t_unites_fonctionnelles(code_original, code, texte, texte_court) SELECT CLI_CODE_UF, CLI_CODE_UF, CLI_DONN_DESCRIPTION, CLI_DONN_DESCRIPTION FROM w_MVTS_UF WHERE CLI_CODE_UF NOT IN (SELECT code_original FROM activite[PX].t_unites_fonctionnelles) ORDER BY 1; -- Unités médicales INSERT INTO activite[PX].t_unites_medicales(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_unites_medicales); INSERT INTO activite[PX].t_unites_medicales(code_original, code, texte, texte_court) SELECT CLI_CODE_UM, CLI_CODE_UM, CLI_DONN_DESCRIPTION, CLI_DONN_DESCRIPTION FROM prod_clinicom.FS_MVTS_UM WHERE CLI_CODE_UM NOT IN (SELECT code_original FROM activite[PX].t_unites_medicales) AND CLI_CODE_UM IN (SELECT CLI_CODE_UM FROM w_MVTS_UF) ORDER BY 1; -- Activités INSERT INTO activite[PX].t_activites(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_activites); INSERT INTO activite[PX].t_activites(code_original, code, texte, texte_court) SELECT CLI_CODE_SERVICE, CLI_CODE_SERVICE, CLI_DONN_DESCRIPTION_SERVICE, CLI_DONN_DESCRIPTION_SERVICE FROM w_MVTS_UF WHERE CLI_CODE_SERVICE NOT IN (SELECT code_original FROM activite[PX].t_activites) GROUP BY 1,2,3,4 ORDER BY 1; -- Etages et lits INSERT INTO activite[PX].t_etages(oid, code_original, code, texte, texte_court, nb_lits) SELECT 0, 0, '', 'Non renseigné', 'Non renseigné', 0 WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_etages); INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court) SELECT CLI_CODE_US, CLI_CODE_US, CLI_DONN_DESCRIPTION, CLI_DONN_DESCRIPTION FROM prod_clinicom.FS_MVTS_US WHERE CLI_CODE_US <> '' AND CLI_CODE_US IN (SELECT CLI_CODE_US FROM w_FS_MVTS_US) AND CLI_CODE_US NOT IN (SELECT code_original FROM activite[PX].t_etages) ORDER BY 1; INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court) SELECT CLI_CODE_US, CLI_CODE_US, CLI_CODE_US, CLI_CODE_US FROM prod_clinicom.FD_MVTS_MOUVEMENTS JOIN w_ADMISSIONS_select ON cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT WHERE CLI_CODE_US <> '' AND CLI_CODE_US NOT IN (SELECT code_original FROM activite[PX].t_etages) GROUP BY 1 ORDER BY 1; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT CLI_CODE_US || '|' || CLI_DONN_CHAMBRE, CLI_DONN_CHAMBRE, 'Chambre ' || CLI_DONN_CHAMBRE, 'Chambre ' || CLI_DONN_CHAMBRE, t_etages.oid, 'O' FROM prod_clinicom.FS_MVTS_USCHAMBRES JOIN activite[PX].t_etages ON CLI_CODE_US = t_etages.code_original WHERE CLI_CODE_US IN (SELECT CLI_CODE_US FROM w_FS_MVTS_US) AND CLI_CODE_US || '|' || CLI_DONN_CHAMBRE NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL); INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT CLI_CODE_US || '|' || CLI_DONN_LIT, CLI_DONN_LIT, 'Lit ' || CLI_DONN_LIT, 'Lit ' || CLI_DONN_LIT, t_etages.oid, 'N' FROM prod_clinicom.FS_MVTS_USLITS JOIN activite[PX].t_etages ON CLI_CODE_US = t_etages.code_original WHERE CLI_CODE_US IN (SELECT CLI_CODE_US FROM w_FS_MVTS_US) AND CLI_CODE_US || '|' || CLI_DONN_LIT NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL); INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT CLI_CODE_US || '|' || CLI_DONN_CHAMBRE, CLI_DONN_CHAMBRE, 'Chambre ' || CLI_DONN_CHAMBRE, 'Chambre ' || CLI_DONN_CHAMBRE, t_etages.oid, 'N' FROM prod_clinicom.FD_MVTS_MOUVEMENTS JOIN w_ADMISSIONS_select ON cli_donn_noabsepisode = cli_donn_noabsepisode_SElECT JOIN activite[PX].t_etages ON CLI_CODE_US = t_etages.code_original WHERE CLI_DONN_CHAMBRE <> '' AND CLI_CODE_US || '|' || CLI_DONN_CHAMBRE NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL) GROUP BY 1,2,3,4,5; INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere) SELECT code_original || '|0' , '', 'Non renseigné', 'Non renseigné', oid, 'N' FROM activite[PX].t_etages WHERE oid > 0 AND code_original || '|0' NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL); UPDATE activite[PX].t_lits SET code = '*****' WHERE oid = 0; UPDATE activite[PX].t_lits SET code = t_etages.code || '***' FROM activite[PX].t_etages WHERE etage_id = t_etages.oid AND t_lits.code = '' ; ]]> 0 AND code NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation); INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court) SELECT CLI_CODE_PRESTATIONEXTERNE, CLI_CODE_PRESTATIONEXTERNE, CLI_CODE_PRESTATIONEXTERNE, CLI_CODE_PRESTATIONEXTERNE FROM prod_clinicom.FD_FAC_DETFACLIG WHERE CLI_CODE_PRESTATIONEXTERNE <> '' AND CLI_CODE_PRESTATIONEXTERNE NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation) GROUP BY 1 ORDER BY 1; INSERT INTO activite.t_prestations(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECT oid FROM activite.t_prestations); INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT CLI_CODE_LETTRECLE, CLI_CODE_LETTRECLE, CLI_DONN_DESCRIPTION, CLI_DONN_DESCRIPTION FROM prod_clinicom.FB_FAC_LETTRECLE WHERE CLI_CODE_LETTRECLE NOT IN (SELECT code_original FROM activite.t_prestations); INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT CLI_DONN_DESCRIPTIONCOURTE, CLI_DONN_DESCRIPTIONCOURTE, CLI_DONN_DESCRIPTION, CLI_DONN_DESCRIPTION FROM prod_clinicom.FB_FAC_PRESTATION WHERE CLI_DONN_DESCRIPTIONCOURTE NOT IN (SELECT code_original FROM activite.t_prestations) ORDER BY 1; INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT CLI_CODE_PRESTATION, CLI_CODE_PRESTATION, CLI_DONN_DESCRIPTION, CLI_DONN_DESCRIPTION FROM prod_clinicom.FB_FAC_FRAISDIVERS WHERE CLI_CODE_PRESTATION NOT IN (SELECT code_original FROM activite.t_prestations); INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT code, code, texte, texte FROM base.t_ccam_regroupements WHERE oid <> 0 AND code NOT IN (SELECT code_original FROM activite.t_prestations); INSERT INTO activite.t_prestations(code_original, code, texte, texte_court) SELECT CLI_CODE_PRESTATIONEXTERNE, CLI_CODE_PRESTATIONEXTERNE, CLI_CODE_PRESTATIONEXTERNE, CLI_CODE_PRESTATIONEXTERNE FROM prod_clinicom.FD_FAC_DETFACLIG WHERE CLI_CODE_PRESTATIONEXTERNE <> '' AND CLI_CODE_PRESTATIONEXTERNE NOT IN (SELECT code_original FROM activite.t_prestations) GROUP BY 1 ORDER BY 1; -- Comptes INSERT INTO activite[PX].t_compte(oid, code_original, code, texte, texte_court) SELECT 0, 0, '', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_compte); INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court) SELECT CLI_CODE_ORDONNATEUR, CLI_CODE_ORDONNATEUR, CLI_CODE_ORDONNATEUR, CLI_CODE_ORDONNATEUR FROM prod_clinicom.FD_FAC_DETFACLIG WHERE CLI_CODE_ORDONNATEUR <> 0 AND CLI_CODE_ORDONNATEUR NOT IN (SELECT code FROM activite[PX].t_compte) GROUP BY 1 ORDER BY 1 ; ]]> '2099-12-31'; UPDATE activite[PX].p_factures SET date_solde_0_c = CASE WHEN montant_comptabilise_0_c = 0 THEN '00010101' WHEN montant_comptabilise_0_c = montant_regle_0_c THEN date_solde_0_c ELSE '20991231' END, date_solde_0_h = CASE WHEN montant_comptabilise_0_h = 0 THEN '00010101' WHEN montant_comptabilise_0_h = montant_regle_0_h THEN date_solde_0_h ELSE '20991231' END, date_solde_1_c = CASE WHEN montant_comptabilise_1_c = 0 THEN '00010101' WHEN montant_comptabilise_1_c = montant_regle_1_c THEN date_solde_1_c ELSE '20991231' END, date_solde_1_h = CASE WHEN montant_comptabilise_1_h = 0 THEN '00010101' WHEN montant_comptabilise_1_h = montant_regle_1_h THEN date_solde_1_h ELSE '20991231' END, date_solde_2_c = CASE WHEN montant_comptabilise_2_c = 0 THEN '00010101' WHEN montant_comptabilise_2_c = montant_regle_2_c THEN date_solde_2_c ELSE '20991231' END, date_solde_2_h = CASE WHEN montant_comptabilise_2_h = 0 THEN '00010101' WHEN montant_comptabilise_2_h = montant_regle_2_h THEN date_solde_2_h ELSE '20991231' END, date_solde_22_c = CASE WHEN montant_comptabilise_22_c = 0 THEN '00010101' WHEN montant_comptabilise_22_c = montant_regle_22_c THEN date_solde_22_c ELSE '20991231' END, date_solde_22_h = CASE WHEN montant_comptabilise_22_h = 0 THEN '00010101' WHEN montant_comptabilise_22_h = montant_regle_22_h THEN date_solde_22_h ELSE '20991231' END WHERE ( date_solde_0_c <> CASE WHEN montant_comptabilise_0_c = 0 THEN '00010101' WHEN montant_comptabilise_0_c = montant_regle_0_c THEN date_solde_0_c ELSE '20991231' END OR date_solde_0_h <> CASE WHEN montant_comptabilise_0_h = 0 THEN '00010101' WHEN montant_comptabilise_0_h = montant_regle_0_h THEN date_solde_0_h ELSE '20991231' END OR date_solde_1_c <> CASE WHEN montant_comptabilise_1_c = 0 THEN '00010101' WHEN montant_comptabilise_1_c = montant_regle_1_c THEN date_solde_1_c ELSE '20991231' END OR date_solde_1_h <> CASE WHEN montant_comptabilise_1_h = 0 THEN '00010101' WHEN montant_comptabilise_1_h = montant_regle_1_h THEN date_solde_1_h ELSE '20991231' END OR date_solde_2_c <> CASE WHEN montant_comptabilise_2_c = 0 THEN '00010101' WHEN montant_comptabilise_2_c = montant_regle_2_c THEN date_solde_2_c ELSE '20991231' END OR date_solde_2_h <> CASE WHEN montant_comptabilise_2_h = 0 THEN '00010101' WHEN montant_comptabilise_2_h = montant_regle_2_h THEN date_solde_2_h ELSE '20991231' END OR date_solde_22_c <> CASE WHEN montant_comptabilise_22_c = 0 THEN '00010101' WHEN montant_comptabilise_22_c = montant_regle_22_c THEN date_solde_22_c ELSE '20991231' END OR date_solde_22_h <> CASE WHEN montant_comptabilise_22_h = 0 THEN '00010101' WHEN montant_comptabilise_22_h = montant_regle_22_h THEN date_solde_22_h ELSE '20991231' END ); DROP TABLE IF EXISTS w_factures_soldes; CREATE TEMP TABLE w_factures_soldes AS SELECT no_facture, GREATEST(date_solde_0_c, date_solde_0_h, date_solde_1_c, date_solde_1_h, date_solde_2_c, date_solde_2_h, date_solde_22_c, date_solde_22_h) AS date_solde, GREATEST(date_solde_0_c, date_solde_1_c, date_solde_2_c, date_solde_22_c) AS date_solde_c, GREATEST(date_solde_0_h, date_solde_1_h, date_solde_2_h, date_solde_22_h) AS date_solde_h FROM activite[PX].p_factures; UPDATE activite[PX].p_factures SET date_solde = w_factures_soldes.date_solde, date_solde_c = w_factures_soldes.date_solde_c, date_solde_h = w_factures_soldes.date_solde_h FROM w_factures_soldes WHERE p_factures.no_facture = w_factures_soldes.no_facture AND ( p_factures.date_solde IS NULL OR p_factures.date_solde <> w_factures_soldes.date_solde OR p_factures.date_solde_c IS NULL OR p_factures.date_solde_c <> w_factures_soldes.date_solde_c OR p_factures.date_solde_h IS NULL OR p_factures.date_solde_h <> w_factures_soldes.date_solde_h ); DROP TABLE IF EXISTS w_factures_references_soldes; CREATE TEMP TABLE w_factures_references_soldes AS SELECT no_facture_reference, MAX(date_solde) AS date_solde_reference, MAX(date_solde_c) AS date_solde_reference_c, MAX(date_solde_h) AS date_solde_reference_h, MAX(date_solde_0_c) AS date_solde_reference_0_c, MAX(date_solde_0_h) AS date_solde_reference_0_h, MAX(date_solde_1_c) AS date_solde_reference_1_c, MAX(date_solde_1_h) AS date_solde_reference_1_h, MAX(date_solde_2_c) AS date_solde_reference_2_c, MAX(date_solde_2_h) AS date_solde_reference_2_h, MAX(date_solde_22_c) AS date_solde_reference_22_c, MAX(date_solde_22_h) AS date_solde_reference_22_h FROM activite[PX].p_factures GROUP BY no_facture_reference; CREATE INDEX i_factures_references_soldes_1 ON w_factures_references_soldes USING btree (no_facture_reference); UPDATE activite[PX].p_factures SET date_solde_reference = w_factures_references_soldes.date_solde_reference, date_solde_reference_c = w_factures_references_soldes.date_solde_reference_c, date_solde_reference_h = w_factures_references_soldes.date_solde_reference_h, date_solde_reference_0_c = w_factures_references_soldes.date_solde_reference_0_c, date_solde_reference_0_h = w_factures_references_soldes.date_solde_reference_0_h, date_solde_reference_1_c = w_factures_references_soldes.date_solde_reference_1_c, date_solde_reference_1_h = w_factures_references_soldes.date_solde_reference_1_h, date_solde_reference_2_c = w_factures_references_soldes.date_solde_reference_2_c, date_solde_reference_2_h = w_factures_references_soldes.date_solde_reference_2_h, date_solde_reference_22_c = w_factures_references_soldes.date_solde_reference_22_c, date_solde_reference_22_h = w_factures_references_soldes.date_solde_reference_22_h FROM w_factures_references_soldes WHERE p_factures.no_facture_reference = w_factures_references_soldes.no_facture_reference AND ( p_factures.date_solde_reference IS NULL OR p_factures.date_solde_reference <> w_factures_references_soldes.date_solde_reference OR p_factures.date_solde_reference_c IS NULL OR p_factures.date_solde_reference_c <> w_factures_references_soldes.date_solde_reference_c OR p_factures.date_solde_reference_h IS NULL OR p_factures.date_solde_reference_h <> w_factures_references_soldes.date_solde_reference_h OR p_factures.date_solde_reference_0_c IS NULL OR p_factures.date_solde_reference_0_c <> w_factures_references_soldes.date_solde_reference_0_c OR p_factures.date_solde_reference_0_h IS NULL OR p_factures.date_solde_reference_0_h <> w_factures_references_soldes.date_solde_reference_0_h OR p_factures.date_solde_reference_1_c IS NULL OR p_factures.date_solde_reference_1_c <> w_factures_references_soldes.date_solde_reference_1_c OR p_factures.date_solde_reference_1_h IS NULL OR p_factures.date_solde_reference_1_h <> w_factures_references_soldes.date_solde_reference_1_h OR p_factures.date_solde_reference_2_c IS NULL OR p_factures.date_solde_reference_2_c <> w_factures_references_soldes.date_solde_reference_2_c OR p_factures.date_solde_reference_2_h IS NULL OR p_factures.date_solde_reference_2_h <> w_factures_references_soldes.date_solde_reference_2_h OR p_factures.date_solde_reference_22_c IS NULL OR p_factures.date_solde_reference_22_c <> w_factures_references_soldes.date_solde_reference_22_c OR p_factures.date_solde_reference_22_h IS NULL OR p_factures.date_solde_reference_22_h <> w_factures_references_soldes.date_solde_reference_22_h ); ]]> '2099-12-31'; DROP TABLE IF EXISTS w_sejours_total; CREATE TEMP TABLE w_sejours_total AS SELECT p_sejours.no_sejour AS no_sejour, p_sejours.code_sorti, p_sejours.date_sortie, p_sejours.date_groupage, p_sejours.ghs_id, MAX(COALESCE(p_factures.date_facture,'20991231')) AS date_facture, MAX(COALESCE(p_factures.date_expedition,'20991231')) AS date_expedition, MAX(COALESCE(p_factures.date_solde,'20991231')) AS date_solde, SUM(COALESCE(p_factures.montant_facture_c,0)) AS montant_facture_c, SUM(COALESCE(p_factures.montant_facture_h,0)) AS montant_facture_h, SUM(COALESCE(p_factures.montant_regle_c,0)) AS montant_regle_c, SUM(COALESCE(p_factures.montant_regle_h,0)) AS montant_regle_h, SUM(COALESCE(CASE WHEN p_factures.type_facture <> 'P' AND p_factures.type_facture <> 'E' AND p_factures.type_facture <> 'G' THEN 1 ELSE 0 END,0)) AS nb_factures, SUM(COALESCE(CASE WHEN p_factures.type_facture = '0' THEN 0 ELSE 1 END,0)) AS nb_factures_regularisation, SUM(COALESCE(p_factures.nb_rejets,0)) AS nb_rejets, SUM(COALESCE(p_factures.montant_facture_0_c,0)) AS montant_facture_0_c, SUM(COALESCE(p_factures.montant_facture_0_h,0)) AS montant_facture_0_h, SUM(COALESCE(p_factures.montant_regle_0_c,0)) AS montant_regle_0_c, SUM(COALESCE(p_factures.montant_regle_0_h,0)) AS montant_regle_0_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_0_c <> 0 OR p_factures.montant_facture_0_h <> 0) THEN p_factures.date_expedition_0 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_0, MAX(COALESCE(CASE WHEN p_factures.date_solde_0_c < '2099-12-31' AND p_factures.date_solde_0_c > p_factures.date_solde_0_h THEN p_factures.date_solde_0_c ELSE p_factures.date_solde_0_h END,'20991231' )) AS date_solde_0, SUM(COALESCE(p_factures.montant_facture_1_c,0)) AS montant_facture_1_c, SUM(COALESCE(p_factures.montant_facture_1_h,0)) AS montant_facture_1_h, SUM(COALESCE(p_factures.montant_regle_1_c,0)) AS montant_regle_1_c, SUM(COALESCE(p_factures.montant_regle_1_h,0)) AS montant_regle_1_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_1_c <> 0 OR p_factures.montant_facture_1_h <> 0) THEN p_factures.date_expedition_1 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_1, MAX(COALESCE(CASE WHEN p_factures.date_solde_1_c < '2099-12-31' AND p_factures.date_solde_1_c > p_factures.date_solde_1_h THEN p_factures.date_solde_1_c ELSE p_factures.date_solde_1_h END,'20991231' )) AS date_solde_1, SUM(COALESCE(p_factures.montant_facture_2_c,0)) AS montant_facture_2_c, SUM(COALESCE(p_factures.montant_facture_2_h,0)) AS montant_facture_2_h, SUM(COALESCE(p_factures.montant_regle_2_c,0)) AS montant_regle_2_c, SUM(COALESCE(p_factures.montant_regle_2_h,0)) AS montant_regle_2_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_2_c <> 0 OR p_factures.montant_facture_2_h <> 0) THEN p_factures.date_expedition_2 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_2, MAX(COALESCE(CASE WHEN p_factures.date_solde_2_c < '2099-12-31' AND p_factures.date_solde_2_c > p_factures.date_solde_2_h THEN p_factures.date_solde_2_c ELSE p_factures.date_solde_2_h END,'20991231' )) AS date_solde_2, SUM(COALESCE(p_factures.montant_facture_22_c,0)) AS montant_facture_22_c, SUM(COALESCE(p_factures.montant_facture_22_h,0)) AS montant_facture_22_h, SUM(COALESCE(p_factures.montant_regle_22_c,0)) AS montant_regle_22_c, SUM(COALESCE(p_factures.montant_regle_22_h,0)) AS montant_regle_22_h, MAX(COALESCE(CASE WHEN (p_factures.montant_facture_22_c <> 0 OR p_factures.montant_facture_22_h <> 0) THEN p_factures.date_expedition_22 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_22, MAX(COALESCE(CASE WHEN p_factures.date_solde_22_c < '2099-12-31' AND p_factures.date_solde_22_c > p_factures.date_solde_22_h THEN p_factures.date_solde_22_c ELSE p_factures.date_solde_22_h END,'20991231' )) AS date_solde_22 , SUM(COALESCE(p_factures.montant_comptabilise_c,0)) AS montant_comptabilise_c, SUM(COALESCE(p_factures.montant_comptabilise_h,0)) AS montant_comptabilise_h, SUM(COALESCE(p_factures.montant_comptabilise_0_c,0)) AS montant_comptabilise_0_c, SUM(COALESCE(p_factures.montant_comptabilise_0_h,0)) AS montant_comptabilise_0_h, SUM(COALESCE(p_factures.montant_comptabilise_1_c,0)) AS montant_comptabilise_1_c, SUM(COALESCE(p_factures.montant_comptabilise_1_h,0)) AS montant_comptabilise_1_h, SUM(COALESCE(p_factures.montant_comptabilise_2_c,0)) AS montant_comptabilise_2_c, SUM(COALESCE(p_factures.montant_comptabilise_2_h,0)) AS montant_comptabilise_2_h, SUM(COALESCE(p_factures.montant_comptabilise_22_c,0)) AS montant_comptabilise_22_c, SUM(COALESCE(p_factures.montant_comptabilise_22_h,0)) AS montant_comptabilise_22_h, SUM(COALESCE(p_factures.montant_comptabilise_budget_global_c,0)) AS montant_comptabilise_budget_global_c, SUM(COALESCE(p_factures.montant_facture_c_actes_inclus_dans_sejour,0)) AS montant_facture_c_actes_inclus_dans_sejour, SUM(COALESCE(p_factures.montant_facture_h_actes_inclus_dans_sejour,0)) AS montant_facture_h_actes_inclus_dans_sejour, 0::numeric AS delai_groupage, 0::numeric AS delai_facture, 0::numeric AS delai_expedition, 0::numeric AS delai_solde, 0::numeric AS delai_expedition_0, 0::numeric AS delai_solde_0, 0::numeric AS delai_expedition_1, 0::numeric AS delai_solde_1, 0::numeric AS delai_expedition_2, 0::numeric AS delai_solde_2, 0::numeric AS delai_expedition_22, 0::numeric AS delai_solde_22 FROM activite[PX].p_sejours LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND type_facture <> 'P' GROUP BY 1,2,3,4,5; UPDATE activite[PX].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'; UPDATE w_sejours_total SET date_groupage = CASE WHEN date_groupage > '00010101' THEN date_groupage ELSE '20991231' END, date_facture = CASE WHEN date_facture> '00010101' THEN date_facture ELSE '20991231' END, date_expedition = CASE WHEN date_expedition > '00010101' THEN date_expedition ELSE '20991231' END, date_solde = CASE WHEN date_solde > '00010101' THEN date_solde ELSE '20991231' END, date_expedition_0 = CASE WHEN date_expedition_0 > '00010101' THEN date_expedition_0 ELSE '20991231' END, date_solde_0 = CASE WHEN date_solde_0 > '00010101' THEN date_solde_0 ELSE '20991231' END, date_expedition_1 = CASE WHEN date_expedition_1 > '00010101' THEN date_expedition_1 ELSE '20991231' END, date_solde_1 = CASE WHEN date_solde_1 > '00010101' THEN date_solde_1 ELSE '20991231' END, date_expedition_2 = CASE WHEN date_expedition_2 > '00010101' THEN date_expedition_2 ELSE '20991231' END, date_solde_2 = CASE WHEN date_solde_2 > '00010101' THEN date_solde_2 ELSE '20991231' END, date_expedition_22 = CASE WHEN date_expedition_22 > '00010101' THEN date_expedition_22 ELSE '20991231' END, date_solde_22 = CASE WHEN date_solde_22 > '00010101' THEN date_solde_22 ELSE '20991231' END; UPDATE w_sejours_total SET delai_groupage = CASE WHEN code_sorti = '1' AND date_groupage > date_sortie AND date_groupage < '2099-12-31' AND ghs_id <> 0 THEN date_groupage - date_sortie ELSE 0 END, delai_facture = CASE WHEN code_sorti = '1' AND date_facture > date_sortie AND date_facture < '2099-12-31' AND date_facture > date_sortie THEN date_facture - date_sortie ELSE 0 END, delai_expedition = CASE WHEN code_sorti = '1' AND date_expedition > date_sortie AND date_facture < '2099-12-31' AND date_expedition < '2099-12-31' THEN date_expedition - date_sortie ELSE 0 END, delai_solde = CASE WHEN code_sorti = '1' AND date_solde > date_sortie AND date_facture < '2099-12-31' AND date_solde < '2099-12-31' THEN date_solde - date_sortie ELSE 0 END, delai_expedition_0 = CASE WHEN code_sorti = '1' AND date_expedition_0 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_0 < '2099-12-31' THEN date_expedition_0 - date_sortie ELSE 0 END, delai_solde_0 = CASE WHEN code_sorti = '1'AND date_solde_0 > date_sortie AND date_facture < '2099-12-31' AND date_solde_0 < '2099-12-31' THEN date_solde_0 - date_sortie ELSE 0 END, delai_expedition_1 = CASE WHEN code_sorti = '1' AND date_expedition_1 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_1 < '2099-12-31' THEN date_expedition_1 - date_sortie ELSE 0 END, delai_solde_1 = CASE WHEN code_sorti = '1' AND date_solde_1 > date_sortie AND date_facture < '2099-12-31' AND date_solde_1 < '2099-12-31' THEN date_solde_1 - date_sortie ELSE 0 END, delai_expedition_2 = CASE WHEN code_sorti = '1' AND date_expedition_2 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_2 < '2099-12-31' THEN date_expedition_2 - date_sortie ELSE 0 END, delai_solde_2 = CASE WHEN code_sorti = '1' AND date_solde_2 > date_sortie AND date_facture < '2099-12-31' AND date_solde_2 < '2099-12-31' THEN date_solde_2 - date_sortie ELSE 0 END, delai_expedition_22 = CASE WHEN code_sorti = '1' AND date_expedition_22 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_22 < '2099-12-31' THEN date_expedition_22 - date_sortie ELSE 0 END, delai_solde_22 = CASE WHEN code_sorti = '1' AND date_solde_22 > date_sortie AND date_facture < '2099-12-31' AND date_solde_22 < '2099-12-31' THEN date_solde_22 - date_sortie ELSE 0 END; ALTER TABLE w_sejours_total ADD CONSTRAINT w_sejours_total_pkey PRIMARY KEY(no_sejour); UPDATE activite[PX].p_sejours SET date_facture = w_sejours_total.date_facture, date_expedition = w_sejours_total.date_expedition, date_solde = w_sejours_total.date_solde, montant_facture_c = w_sejours_total.montant_facture_c, montant_facture_h = w_sejours_total.montant_facture_h, montant_regle_c = w_sejours_total.montant_regle_c, montant_regle_h = w_sejours_total.montant_regle_h, nb_factures = w_sejours_total.nb_factures, nb_factures_regularisation = w_sejours_total.nb_factures_regularisation, nb_factures_rejet = w_sejours_total.nb_rejets, montant_facture_0_c = w_sejours_total.montant_facture_0_c, montant_facture_0_h = w_sejours_total.montant_facture_0_h, montant_regle_0_c = w_sejours_total.montant_regle_0_c, montant_regle_0_h = w_sejours_total.montant_regle_0_h, date_expedition_0 = w_sejours_total.date_expedition_0, date_solde_0 = w_sejours_total.date_solde_0, montant_facture_1_c = w_sejours_total.montant_facture_1_c, montant_facture_1_h = w_sejours_total.montant_facture_1_h, montant_regle_1_c = w_sejours_total.montant_regle_1_c, montant_regle_1_h = w_sejours_total.montant_regle_1_h, date_expedition_1 = w_sejours_total.date_expedition_1, date_solde_1 = w_sejours_total.date_solde_1, montant_facture_2_c = w_sejours_total.montant_facture_2_c, montant_facture_2_h = w_sejours_total.montant_facture_2_h, montant_regle_2_c = w_sejours_total.montant_regle_2_c, montant_regle_2_h = w_sejours_total.montant_regle_2_h, date_expedition_2 = w_sejours_total.date_expedition_2, date_solde_2 = w_sejours_total.date_solde_2, montant_facture_22_c = w_sejours_total.montant_facture_22_c, montant_facture_22_h = w_sejours_total.montant_facture_22_h, montant_regle_22_c = w_sejours_total.montant_regle_22_c, montant_regle_22_h = w_sejours_total.montant_regle_22_h, date_expedition_22 = w_sejours_total.date_expedition_22, date_solde_22 = w_sejours_total.date_solde_22, montant_comptabilise_c = w_sejours_total.montant_comptabilise_c, montant_comptabilise_h = w_sejours_total.montant_comptabilise_h, montant_comptabilise_0_c = w_sejours_total.montant_comptabilise_0_c, montant_comptabilise_0_h = w_sejours_total.montant_comptabilise_0_h, montant_comptabilise_1_c = w_sejours_total.montant_comptabilise_1_c, montant_comptabilise_1_h = w_sejours_total.montant_comptabilise_1_h, montant_comptabilise_2_c = w_sejours_total.montant_comptabilise_2_c, montant_comptabilise_2_h = w_sejours_total.montant_comptabilise_2_h, montant_comptabilise_22_c = w_sejours_total.montant_comptabilise_22_c, montant_comptabilise_22_h = w_sejours_total.montant_comptabilise_22_h, montant_comptabilise_budget_global_c = w_sejours_total.montant_comptabilise_budget_global_c, montant_facture_c_actes_inclus_dans_sejour = w_sejours_total.montant_facture_c_actes_inclus_dans_sejour, montant_facture_h_actes_inclus_dans_sejour = w_sejours_total.montant_facture_h_actes_inclus_dans_sejour, delai_groupage = w_sejours_total.delai_groupage, delai_facture = w_sejours_total.delai_facture, delai_expedition = w_sejours_total.delai_expedition, delai_solde = w_sejours_total.delai_solde, delai_expedition_0 = w_sejours_total.delai_expedition_0, delai_solde_0 = w_sejours_total.delai_solde_0, delai_expedition_1 = w_sejours_total.delai_expedition_1, delai_solde_1 = w_sejours_total.delai_solde_1, delai_expedition_2 = w_sejours_total.delai_expedition_2, delai_solde_2 = w_sejours_total.delai_solde_2, delai_expedition_22 = w_sejours_total.delai_expedition_22, delai_solde_22 = w_sejours_total.delai_solde_22 FROM w_sejours_total WHERE w_sejours_total.no_sejour = p_sejours.no_sejour AND ( p_sejours.date_facture IS DISTINCT FROM w_sejours_total.date_facture OR p_sejours.date_expedition IS DISTINCT FROM w_sejours_total.date_expedition OR p_sejours.date_solde IS DISTINCT FROM w_sejours_total.date_solde OR p_sejours.montant_facture_c IS DISTINCT FROM w_sejours_total.montant_facture_c OR p_sejours.montant_facture_h IS DISTINCT FROM w_sejours_total.montant_facture_h OR p_sejours.montant_regle_c IS DISTINCT FROM w_sejours_total.montant_regle_c OR p_sejours.montant_regle_h IS DISTINCT FROM w_sejours_total.montant_regle_h OR p_sejours.nb_factures IS DISTINCT FROM w_sejours_total.nb_factures OR p_sejours.nb_factures_regularisation IS DISTINCT FROM w_sejours_total.nb_factures_regularisation OR p_sejours.nb_factures_rejet IS DISTINCT FROM w_sejours_total.nb_rejets OR p_sejours.montant_facture_0_c IS DISTINCT FROM w_sejours_total.montant_facture_0_c OR p_sejours.montant_facture_0_h IS DISTINCT FROM w_sejours_total.montant_facture_0_h OR p_sejours.montant_regle_0_c IS DISTINCT FROM w_sejours_total.montant_regle_0_c OR p_sejours.montant_regle_0_h IS DISTINCT FROM w_sejours_total.montant_regle_0_h OR p_sejours.date_expedition_0 IS DISTINCT FROM w_sejours_total.date_expedition_0 OR p_sejours.date_solde_0 IS DISTINCT FROM w_sejours_total.date_solde_0 OR p_sejours.montant_facture_1_c IS DISTINCT FROM w_sejours_total.montant_facture_1_c OR p_sejours.montant_facture_1_h IS DISTINCT FROM w_sejours_total.montant_facture_1_h OR p_sejours.montant_regle_1_c IS DISTINCT FROM w_sejours_total.montant_regle_1_c OR p_sejours.montant_regle_1_h IS DISTINCT FROM w_sejours_total.montant_regle_1_h OR p_sejours.date_expedition_1 IS DISTINCT FROM w_sejours_total.date_expedition_1 OR p_sejours.date_solde_1 IS DISTINCT FROM w_sejours_total.date_solde_1 OR p_sejours.montant_facture_2_c IS DISTINCT FROM w_sejours_total.montant_facture_2_c OR p_sejours.montant_facture_2_h IS DISTINCT FROM w_sejours_total.montant_facture_2_h OR p_sejours.montant_regle_2_c IS DISTINCT FROM w_sejours_total.montant_regle_2_c OR p_sejours.montant_regle_2_h IS DISTINCT FROM w_sejours_total.montant_regle_2_h OR p_sejours.date_expedition_2 IS DISTINCT FROM w_sejours_total.date_expedition_2 OR p_sejours.date_solde_2 IS DISTINCT FROM w_sejours_total.date_solde_2 OR p_sejours.montant_facture_22_c IS DISTINCT FROM w_sejours_total.montant_facture_22_c OR p_sejours.montant_facture_22_h IS DISTINCT FROM w_sejours_total.montant_facture_22_h OR p_sejours.montant_regle_22_c IS DISTINCT FROM w_sejours_total.montant_regle_22_c OR p_sejours.montant_regle_22_h IS DISTINCT FROM w_sejours_total.montant_regle_22_h OR p_sejours.date_expedition_22 IS DISTINCT FROM w_sejours_total.date_expedition_22 OR p_sejours.date_solde_22 IS DISTINCT FROM w_sejours_total.date_solde_22 OR p_sejours.montant_comptabilise_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_c OR p_sejours.montant_comptabilise_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_h OR p_sejours.montant_comptabilise_0_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_0_c OR p_sejours.montant_comptabilise_0_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_0_h OR p_sejours.montant_comptabilise_1_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_1_c OR p_sejours.montant_comptabilise_1_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_1_h OR p_sejours.montant_comptabilise_2_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_2_c OR p_sejours.montant_comptabilise_2_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_2_h OR p_sejours.montant_comptabilise_22_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_22_c OR p_sejours.montant_comptabilise_22_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_22_h OR p_sejours.montant_comptabilise_budget_global_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_budget_global_c OR p_sejours.montant_facture_c_actes_inclus_dans_sejour IS DISTINCT FROM w_sejours_total.montant_facture_c_actes_inclus_dans_sejour OR p_sejours.montant_facture_h_actes_inclus_dans_sejour IS DISTINCT FROM w_sejours_total.montant_facture_h_actes_inclus_dans_sejour OR p_sejours.delai_groupage IS DISTINCT FROM w_sejours_total.delai_groupage OR p_sejours.delai_facture IS DISTINCT FROM w_sejours_total.delai_facture OR p_sejours.delai_expedition IS DISTINCT FROM w_sejours_total.delai_expedition OR p_sejours.delai_solde IS DISTINCT FROM w_sejours_total.delai_solde OR p_sejours.delai_expedition_0 IS DISTINCT FROM w_sejours_total.delai_expedition_0 OR p_sejours.delai_solde_0 IS DISTINCT FROM w_sejours_total.delai_solde_0 OR p_sejours.delai_expedition_1 IS DISTINCT FROM w_sejours_total.delai_expedition_1 OR p_sejours.delai_solde_1 IS DISTINCT FROM w_sejours_total.delai_solde_1 OR p_sejours.delai_expedition_2 IS DISTINCT FROM w_sejours_total.delai_expedition_2 OR p_sejours.delai_solde_2 IS DISTINCT FROM w_sejours_total.delai_solde_2 OR p_sejours.delai_expedition_22 IS DISTINCT FROM w_sejours_total.delai_expedition_22 OR p_sejours.delai_solde_22 IS DISTINCT FROM w_sejours_total.delai_solde_22 ); ]]>