0 GROUP BY 1; -- FINESS DROP TABLE IF EXISTS w_finess ; CREATE TEMP TABLE w_finess AS SELECT fin.nd_code as finess, fin.nd_lib as texte, ets2.nd_code as code, ets2.nd_oid as oid, ets.fld_entitefacturation as entite_facturation_id FROM prod_web100t.sgn_nmcl_data as fin JOIN prod_web100t.nmcl_etablissement as ets ON ets.fld_finessgeo = fin.nd_oid JOIN prod_web100t.sgn_nmcl_data as ets2 ON ets2.nd_oid = ets.oid WHERE fin.nd_code = '[FINESS]' OR ets.oid IN (SELECT RES_EG FROM w_eg) ; /********************************************************************************** * MAJ SPECIALITES MEDECIN * **********************************************************************************/ -- Récupération des spécialites officielles DROP TABLE IF EXISTS w_specialite ; CREATE TEMP TABLE w_specialite AS SELECT spe.nd_oid as oid, spe.nd_code as code, spe.nd_lib as texte FROM prod_web100t.sgn_nmcls as classe JOIN prod_web100t.SGN_NMCL_DATA as spe ON spe.ND_NMCL_OID = classe.NMCL_OID WHERE classe.NMCL_IDENT = 'SPECIALITEAMO' ; -- Insertion des nouvelles spécialités officielles INSERT INTO pmsi.t_specialites_medecin(code, texte) SELECT code,texte FROM w_specialite WHERE code NOT IN (SELECT code FROM pmsi.t_specialites_medecin) ; -- Màj des spécialités officielles créées via import PMSI UPDATE pmsi.t_specialites_medecin SET texte = w_specialite.texte FROM w_specialite WHERE t_specialites_medecin.code = w_specialite.code AND t_specialites_medecin.code = t_specialites_medecin.texte ; -- Récupération des spécialites internes INSERT INTO pmsi.t_specialites_internes_medecin(code, texte) SELECT CASE WHEN length(code) = 2 THEN code || '..' ELSE code END,texte FROM w_specialite WHERE CASE WHEN length(code) = 2 THEN code || '..' ELSE code END NOT IN (SELECT code FROM pmsi.t_specialites_internes_medecin) ; /********************************************************************************** * MAJ MEDECINS * **********************************************************************************/ -- Récupération des médecins DROP TABLE IF EXISTS w_medecin ; CREATE TEMP TABLE w_medecin AS SELECT base.cti_group_array3(med.ND_OID) AS oid, trim(med.ND_CODE) AS code, max(med.ND_LIB) AS texte, max(med_detail.FLD_CODEADELI) AS adeli, max(coalesce(spe.ND_CODE,'')) AS specialite FROM prod_web100t.SGN_NMCLS AS classe_med JOIN prod_web100t.SGN_NMCL_DATA AS med ON med.ND_NMCL_OID = classe_med.NMCL_OID JOIN prod_web100t.NMCL_INTERVENANT AS med_detail ON med_detail.OID = med.ND_OID LEFT JOIN prod_web100t.SGN_NMCL_DATA AS spe ON spe.ND_OID = med_detail.FLD_SPECIALITE LEFT JOIN w_finess ON w_finess.oid = med.nd_etablissement WHERE classe_med.NMCL_IDENT = 'INTERVENANT' GROUP BY 2 ; CREATE INDEX w_medecin_i1 ON w_medecin USING btree (oid) ; CREATE INDEX w_medecin_i2 ON w_medecin USING btree (code) ; -- Insertion des nouveaux médecins -- @TODO Lier les spécialités établissement (= interne) INSERT INTO pmsi.t_medecins(code, nom, prenom, specialite_id, no_adeli, specialite_interne_id) SELECT w_medecin.code, MAX(w_medecin.texte), '', MAX(spe.oid), MAX(w_medecin.adeli), 0 FROM w_medecin LEFT JOIN pmsi.t_specialites_medecin AS spe ON (spe.code = w_medecin.specialite) WHERE w_medecin.code NOT IN (SELECT code FROM pmsi.t_medecins WHERE code IS NOT NULL GROUP BY 1) GROUP BY 1 ORDER BY 1; -- Mise à jour des médecins modifiés UPDATE pmsi.t_medecins SET nom = w_medecin.texte, prenom = '' FROM w_medecin WHERE t_medecins.code = w_medecin.code AND ( t_medecins.nom IS DISTINCT FROM w_medecin.texte OR t_medecins.prenom IS DISTINCT FROM '' ) ; -- Spécialité interne par défaut UPDATE pmsi.t_medecins SET specialite_interne_id = t_specialites_internes_medecin.oid FROM pmsi.t_specialites_medecin JOIN pmsi.t_specialites_internes_medecin ON CASE WHEN length(t_specialites_medecin.code) = 2 THEN t_specialites_medecin.code || '..' ELSE t_specialites_medecin.code END = t_specialites_internes_medecin.code WHERE specialite_id = t_specialites_medecin.oid AND specialite_interne_id = 0 and specialite_id <> 0; SELECT pmsi.cti_reorganize_medecins_c() ; /********************************************************************************** * MAJ UNITES MEDICALES * **********************************************************************************/ -- Récupération données UM DROP TABLE IF EXISTS w_um ; CREATE TEMP TABLE w_um AS SELECT data_um.ND_OID AS oid, data_um.ND_CODE AS code, data_um.ND_LIB AS texte, substr(CASE WHEN length(auth.ND_CODE) > 0 THEN auth.ND_CODE ELSE ' ' END, 1, 3) as type_autorisation FROM prod_web100t.sgn_nmcls as classe_um JOIN prod_web100t.SGN_NMCL_DATA as data_um ON data_um.ND_NMCL_OID = classe_um.NMCL_OID JOIN prod_web100t.nmcl_unitemedicale as um ON um.oid = data_um.nd_oid LEFT JOIN prod_web100t.SGN_NMCL_DATA as auth ON auth.nd_oid = um.fld_autorisation WHERE data_um.nd_etablissement IN (SELECT oid FROM w_finess) AND classe_um.NMCL_IDENT = 'UNITEMEDICALE' ; CREATE INDEX w_um_i1 ON w_um USING btree (oid) ; CREATE INDEX w_um_i2 ON w_um USING btree (code) ; -- Insertion des nouvelles UM INSERT INTO pmsi.t_unites_medicales(code, texte, type_autorisation) SELECT code, MAX(texte), MAX(type_autorisation) FROM w_um WHERE code NOT IN (SELECT code FROM pmsi.t_unites_medicales) GROUP BY 1 ; -- Màj libellés UM quand UM créée via import PMSI UPDATE pmsi.t_unites_medicales SET texte = w_um.texte FROM w_um WHERE t_unites_medicales.code = w_um.code AND (t_unites_medicales.texte = 'Unité ' || t_unites_medicales.code OR t_unites_medicales.texte = t_unites_medicales.code) ; -- Màj autorisations UM UPDATE pmsi.t_unites_medicales SET type_autorisation = w_um.type_autorisation FROM w_um WHERE t_unites_medicales.code = w_um.code ; /********************************************************************************** * MAJ ETABLISSEMENTS * **********************************************************************************/ DROP TABLE IF EXISTS w_SGN_NMCL_DATA; CREATE TEMP TABLE W_SGN_NMCL_DATA AS SELECT NMCL_IDENT, ND_INVARIANT_OID, (MAX(Array[ND_VALIDE_DE::text,ND_CODE]))[2] AS ND_CODE, (MAX(Array[ND_VALIDE_DE::text,ND_LIB]))[2] AS ND_LIB FROM prod_web100t.SGN_NMCL_DATA JOIN prod_web100t.SGN_NMCLS ON ND_NMCL_OID = NMCL_OID WHERE NMCL_IDENT = 'FINESS' GROUP BY 1,2; UPDATE base.t_etablissements SET texte = ND_LIB, texte_court = ND_LIB FROM W_SGN_NMCL_DATA WHERE 1=1 AND ND_CODE = t_etablissements.code AND t_etablissements.code = t_etablissements.texte ]]> 0 JOIN prod_web100t.DAT_DA on dat_da.da_oid = fac_FACTURE.fact_da WHERE import_id = [IMPORT_ID] AND p_rss.oid = p_rsf_total.rss_id AND ghm_id = 0 AND date(p_rss.date_sortie) = date(DA_DATE_FIN) AND no_sejour_administratif IS DISTINCT FROM DA_NUMERO ; /********************************************************************************** * MAJ DES PATIENTS * **********************************************************************************/ DROP TABLE IF EXISTS w_PATIENTS; CREATE TEMP TABLE w_PATIENTS AS SELECT PAT_ID, REGEXP_REPLACE(PAT_IPP::text, '[,?]', '') AS PAT_IPP, CASE WHEN base.cti_to_number(REGEXP_REPLACE(PAT_IPP, '[,?]', '')) > 0 THEN REGEXP_REPLACE(PAT_IPP, '[,?]', '') ELSE to_number('0' || REGEXP_REPLACE(PAT_IPP, '[,?]', ''),'0000000000') || '000' || PAT_ID END::bigint AS PAT_IPP_NUM, PAT_NOM, PAT_PRENOM, PAT_NOMNAISS, PAT_NAISSANCE, PAT_SEXE FROM prod_web100T.PATIENTS ; CREATE INDEX w_PATIENTS_i1 ON w_PATIENTS USING btree (PAT_ID) ; ANALYSE w_PATIENTS ; -- Màj du n° de patient RSS AVEC GHM UPDATE [SCHEMA].p_rss SET no_patient = PAT_IPP_NUM FROM prod_web100t.DAT_RESUME JOIN w_PATIENTS PATIENTS ON PATIENTS.PAT_ID = DAT_RESUME.RES_PATIENT JOIN prod_web100t.DEF_TYPE_RESUME ON DEF_TYPE_RESUME.TR_OID = DAT_RESUME.RES_TYPE WHERE DAT_RESUME.RES_OID = p_rss.no_rss AND p_rss.import_id = [IMPORT_ID] AND DEF_TYPE_RESUME.TR_IDENT = 'RSS' AND PAT_IPP BETWEEN '0' AND '9999999999999999' AND ghm_id <> 0 AND p_rss.date_sortie = res_ds_calc::date AND no_patient IS DISTINCT FROM PAT_IPP_NUM ; -- Màj des n° de patient RSS SANS GHM UPDATE [SCHEMA].p_rss SET no_patient = PAT_IPP_NUM FROM prod_web100t.fac_FACTURE JOIN prod_web100t.dat_da on dat_da.da_oid = fac_FACTURE.fact_da JOIN w_PATIENTS PATIENTS ON PATIENTS.PAT_id = dat_da.da_patient WHERE dat_da.da_numero = p_rss.no_sejour_administratif AND base.cti_is_num(fac_FACTURE.fact_numero) AND p_rss.import_id = [IMPORT_ID] AND PAT_IPP BETWEEN '0' AND '9999999999999999' AND ghm_id = 0 --AND FACT_NUMERO NOT LIKE '%.%' AND position('.' in FACT_NUMERO) = 0 AND p_rss.date_sortie = DA_DATE_FIN::date AND no_patient IS DISTINCT FROM PAT_IPP_NUM ; -- Màj des noms, prénoms et nom de naissance des patients RSS AVEC GHM UPDATE [SCHEMA].p_identites SET nom = PAT_NOM, prenom = PAT_PRENOM, nom_naissance = PAT_NOMNAISS FROM [SCHEMA].p_rss JOIN prod_web100t.DAT_RESUME ON DAT_RESUME.RES_OID = p_rss.no_rss JOIN prod_web100t.DEF_TYPE_RESUME ON DEF_TYPE_RESUME.TR_OID = DAT_RESUME.RES_TYPE JOIN w_PATIENTS PATIENTS ON PATIENTS.PAT_ID = DAT_RESUME.RES_PATIENT WHERE p_identites.rss_id = p_rss.oid AND p_rss.import_id = [IMPORT_ID] AND p_identites.rss_id = p_rss.oid AND DEF_TYPE_RESUME.TR_IDENT = 'RSS' AND ghm_id <> 0 AND p_rss.date_sortie = res_ds_calc::date AND ( nom IS DISTINCT FROM PAT_NOM OR prenom IS DISTINCT FROM PAT_PRENOM OR nom_naissance IS DISTINCT FROM PAT_NOMNAISS ) ; -- Màj des noms, prénoms et nom de naissance des patients RSS SANS GHM UPDATE [SCHEMA].p_identites SET nom = PAT_NOM, prenom = PAT_PRENOM, nom_naissance = PAT_NOMNAISS FROM [SCHEMA].p_rss JOIN prod_web100t.dat_da ON dat_da.da_numero = p_rss.no_sejour_administratif JOIN prod_web100t.fac_FACTURE ON dat_da.da_oid = fac_FACTURE.fact_da JOIN w_PATIENTS PATIENTS ON PATIENTS.PAT_id = dat_da.da_patient WHERE p_identites.rss_id = p_rss.oid AND base.cti_is_num(fac_FACTURE.fact_numero) AND fac_FACTURE.fact_ef IN (select entite_facturation_id from w_finess) AND p_rss.import_id = [IMPORT_ID] AND ghm_id = 0 --AND FACT_NUMERO NOT LIKE '%.%' AND position('.' in FACT_NUMERO) = 0 AND p_rss.date_sortie = DA_DATE_FIN::date AND ( nom IS DISTINCT FROM PAT_NOM OR prenom IS DISTINCT FROM PAT_PRENOM OR nom_naissance IS DISTINCT FROM PAT_NOMNAISS ) ; ]]> 0 AND p_rss.date_sortie = res_ds_calc::date AND medecin_rss_id IS DISTINCT FROM t_medecins.oid AND p_rss.import_id = [IMPORT_ID] ; -- D'après n° séjour UPDATE [SCHEMA].p_rss SET medecin_rss_id = t_medecins.oid FROM prod_web100t.dat_da JOIN prod_web100t.SGN_TREE_NODES on SGN_TREE_NODES.node_oid = dat_da.da_node_resp JOIN w_medecin on SGN_TREE_NODES.NODE_INVARIANT_OID = ANY(w_medecin.oid) JOIN pmsi.t_medecins ON t_medecins.code = w_medecin.code WHERE p_rss.no_sejour_administratif = DA_NUMERO AND DA_EG_ENTREE IN (select oid from w_finess) AND medecin_rss_id = 0 AND date_part('month',p_rss.date_sortie) = date_part('month',DA_DATE_FIN) AND medecin_rss_id IS DISTINCT FROM t_medecins.oid AND p_rss.import_id = [IMPORT_ID] ; ]]> 0 GROUP BY 1; -- FINESS DROP TABLE IF EXISTS w_finess ; CREATE TEMP TABLE w_finess AS SELECT fin.nd_code as finess, fin.nd_lib as texte, ets2.nd_code as code, ets2.nd_oid as oid, ets.fld_entitefacturation as entite_facturation_id FROM prod_web100t.sgn_nmcl_data as fin JOIN prod_web100t.nmcl_etablissement as ets ON ets.fld_finessgeo = fin.nd_oid JOIN prod_web100t.sgn_nmcl_data as ets2 ON ets2.nd_oid = ets.oid WHERE fin.nd_code = '[FINESS]' OR ets.oid IN (SELECT RES_EG FROM w_eg) ; /********************************************************************************** * MAJ SPECIALITES MEDECIN * **********************************************************************************/ -- Récupération des spécialites officielles DROP TABLE IF EXISTS w_specialite ; CREATE TEMP TABLE w_specialite AS SELECT spe.nd_oid as oid, spe.nd_code as code, spe.nd_lib as texte from prod_web100t.sgn_nmcls as classe JOIN prod_web100t.SGN_NMCL_DATA as spe ON spe.ND_NMCL_OID = classe.NMCL_OID where classe.NMCL_IDENT = 'SPECIALITEAMO' ; -- Insertion des nouvelles spécialités officielles INSERT INTO pmsi.t_specialites_medecin(code, texte) SELECT code,texte FROM w_specialite WHERE code NOT IN (SELECT code FROM pmsi.t_specialites_medecin) ; -- Màj des spécialités officielles créées via import PMSI UPDATE pmsi.t_specialites_medecin SET texte = w_specialite.texte FROM w_specialite WHERE t_specialites_medecin.code = w_specialite.code AND t_specialites_medecin.code = t_specialites_medecin.texte ; -- Récupération des spécialites internes INSERT INTO pmsi.t_specialites_internes_medecin(code, texte) SELECT CASE WHEN length(code) = 2 THEN code || '..' ELSE code END,texte FROM w_specialite WHERE CASE WHEN length(code) = 2 THEN code || '..' ELSE code END NOT IN (SELECT code FROM pmsi.t_specialites_internes_medecin) ; /********************************************************************************** * MAJ MEDECINS * **********************************************************************************/ -- Récupération des médecins DROP TABLE IF EXISTS w_medecin ; CREATE TEMP TABLE w_medecin AS SELECT base.cti_group_array3(med.ND_OID) AS oid, trim(med.ND_CODE) AS code, max(med.ND_LIB) AS texte, max(med_detail.FLD_CODEADELI) AS adeli, max(coalesce(spe.ND_CODE,'')) AS specialite FROM prod_web100t.SGN_NMCLS AS classe_med JOIN prod_web100t.SGN_NMCL_DATA AS med ON med.ND_NMCL_OID = classe_med.NMCL_OID JOIN prod_web100t.NMCL_INTERVENANT AS med_detail ON med_detail.OID = med.ND_OID LEFT JOIN prod_web100t.SGN_NMCL_DATA AS spe ON spe.ND_OID = med_detail.FLD_SPECIALITE LEFT JOIN w_finess ON w_finess.oid = med.nd_etablissement WHERE (w_finess.oid IS NOT NULL OR med.nd_etablissement = 0) AND classe_med.NMCL_IDENT = 'INTERVENANT' GROUP BY 2 ; CREATE INDEX w_medecin_i1 ON w_medecin USING btree (oid) ; CREATE INDEX w_medecin_i2 ON w_medecin USING btree (code) ; -- Insertion des nouveaux médecins -- @TODO Lier les spécialités établissement (= interne) INSERT INTO pmsi.t_medecins(code, nom, prenom, specialite_id, no_adeli, specialite_interne_id) SELECT w_medecin.code, w_medecin.texte, '', spe.oid, w_medecin.adeli, 0 FROM w_medecin LEFT JOIN pmsi.t_specialites_medecin AS spe ON (spe.code = w_medecin.specialite) WHERE w_medecin.code NOT IN (SELECT code FROM pmsi.t_medecins GROUP BY 1) ; -- Mise à jour des médecins modifiés UPDATE pmsi.t_medecins SET nom = w_medecin.texte, prenom = '' FROM w_medecin WHERE t_medecins.code = w_medecin.code AND ( t_medecins.nom IS DISTINCT FROM w_medecin.texte OR t_medecins.prenom IS DISTINCT FROM '' ) ; -- Spécialité interne par défaut UPDATE pmsi.t_medecins SET specialite_interne_id = t_specialites_internes_medecin.oid FROM pmsi.t_specialites_medecin JOIN pmsi.t_specialites_internes_medecin ON CASE WHEN length(t_specialites_medecin.code) = 2 THEN t_specialites_medecin.code || '..' ELSE t_specialites_medecin.code END = t_specialites_internes_medecin.code WHERE specialite_id = t_specialites_medecin.oid AND specialite_interne_id = 0 and specialite_id <> 0; SELECT pmsi.cti_reorganize_medecins_c() ; /********************************************************************************** * MAJ DES UNITES MEDICALES * **********************************************************************************/ -- Récupération données UM DROP TABLE IF EXISTS w_um ; CREATE TEMP TABLE w_um AS SELECT data_um.ND_OID AS oid, data_um.ND_CODE AS code, data_um.ND_LIB AS texte, substr(CASE WHEN length(auth.ND_CODE) > 0 THEN auth.ND_CODE ELSE ' ' END, 1, 3) as type_autorisation FROM prod_web100t.sgn_nmcls as classe_um JOIN prod_web100t.SGN_NMCL_DATA as data_um ON data_um.ND_NMCL_OID = classe_um.NMCL_OID JOIN prod_web100t.nmcl_unitemedicale as um ON um.oid = data_um.nd_oid LEFT JOIN prod_web100t.SGN_NMCL_DATA as auth ON auth.nd_oid = um.fld_autorisation WHERE data_um.nd_etablissement IN (SELECT oid FROM w_finess) AND classe_um.NMCL_IDENT = 'UNITEMEDICALE' ; CREATE INDEX w_um_i1 ON w_um USING btree (oid) ; CREATE INDEX w_um_i2 ON w_um USING btree (code) ; -- Insertion des nouvelles UM INSERT INTO pmsi.t_unites_medicales(code, texte, type_autorisation) SELECT code, MAX(texte), MAX(type_autorisation) FROM w_um WHERE code NOT IN (SELECT code FROM pmsi.t_unites_medicales) GROUP BY 1 ; -- Màj libellés UM quand UM créée via import PMSI UPDATE pmsi.t_unites_medicales SET texte = w_um.texte FROM w_um WHERE t_unites_medicales.code = w_um.code AND (t_unites_medicales.texte = 'Unité ' || t_unites_medicales.code OR t_unites_medicales.texte = t_unites_medicales.code) ; -- Màj autorisations UM UPDATE pmsi.t_unites_medicales SET type_autorisation = w_um.type_autorisation FROM w_um WHERE t_unites_medicales.code = w_um.code AND t_unites_medicales.type_autorisation = '' ; /********************************************************************************** * TABLE TEMP GHM * **********************************************************************************/ DROP TABLE IF EXISTS w_ghm ; CREATE TEMP TABLE w_ghm AS SELECT ND_OID AS oid, CASE WHEN MAX(ND_CODE) NOT LIKE '90%' THEN MAX(ND_CODE) ELSE '99Z99Z' END AS code FROM prod_web100t.SGN_NMCL_DATA JOIN prod_web100t.SGN_NMCLS ON SGN_NMCLS.NMCL_OID = SGN_NMCL_DATA.ND_NMCL_OID WHERE SGN_NMCLS.NMCL_IDENT = 'GHM' GROUP BY ND_OID ; INSERT INTO w_ghm SELECT ND_INVARIANT_OID AS oid, MAX(ND_CODE) AS code FROM prod_web100t.SGN_NMCL_DATA JOIN prod_web100t.SGN_NMCLS ON SGN_NMCLS.NMCL_OID = SGN_NMCL_DATA.ND_NMCL_OID WHERE SGN_NMCLS.NMCL_IDENT = 'GHM' AND ND_INVARIANT_OID <> ND_OID AND ND_INVARIANT_OID NOT IN (SELECT oid FROM w_ghm) GROUP BY ND_INVARIANT_OID ; CREATE INDEX w_ghm_i1 ON w_ghm USING btree (oid) ; CREATE INDEX w_ghm_i2 ON w_ghm USING btree (code) ; /********************************************************************************** * TABLE TEMP GHS * **********************************************************************************/ DROP TABLE IF EXISTS w_ghs ; CREATE TEMP TABLE w_ghs AS SELECT ND_OID AS oid, MAX(to_number(ND_CODE,'0000')) AS code FROM prod_web100t.SGN_NMCL_DATA JOIN prod_web100t.SGN_NMCLS ON SGN_NMCLS.NMCL_OID = SGN_NMCL_DATA.ND_NMCL_OID WHERE SGN_NMCLS.NMCL_IDENT = 'GHS' GROUP BY ND_OID ; INSERT INTO w_ghs SELECT ND_INVARIANT_OID AS oid, MAX(to_number(ND_CODE,'0000')) AS code FROM prod_web100t.SGN_NMCL_DATA JOIN prod_web100t.SGN_NMCLS ON SGN_NMCLS.NMCL_OID = SGN_NMCL_DATA.ND_NMCL_OID WHERE SGN_NMCLS.NMCL_IDENT = 'GHS' AND ND_INVARIANT_OID <> ND_OID AND ND_INVARIANT_OID NOT IN (SELECT oid FROM w_ghs) GROUP BY ND_INVARIANT_OID ; CREATE INDEX w_ghs_i1 ON w_ghs USING btree (oid) ; CREATE INDEX w_ghs_i2 ON w_ghs USING btree (code) ; ]]> 0 THEN REGEXP_REPLACE(PAT_IPP, '[,?]', '') ELSE to_number('0' || REGEXP_REPLACE(PAT_IPP, '[,?]', ''),'0000000000') || '000' || PAT_ID END::bigint AS PAT_IPP_NUM, PAT_NOM, PAT_PRENOM, PAT_NOMNAISS, PAT_NAISSANCE, PAT_SEXE FROM prod_web100T.PATIENTS ; /********************************************************************************** * REFERENCEMENT DES RSS GROUPES DANS WEB100T * **********************************************************************************/ DROP TABLE IF EXISTS w_DAT_GROUPAGE ; CREATE TEMP TABLE w_DAT_GROUPAGE AS SELECT GRP_RESUME AS w_GRP_RESUME, MAX(GRP_OID) AS w_GRP_OID, MAX(GRP_FINESS) AS w_GRP_FINESS FROM prod_web100t.DAT_GROUPAGE GROUP BY 1 ; CREATE INDEX w_DAT_GROUPAGE_i1 ON w_DAT_GROUPAGE USING btree (w_GRP_RESUME) ; CREATE INDEX w_DAT_GROUPAGE_i2 ON w_DAT_GROUPAGE USING btree (w_GRP_OID) ; /********************************************************************************** * REFERENCEMENT DES RSS DEJA EXISTANTS DANS i-CTI * **********************************************************************************/ DROP TABLE IF EXISTS w_DAT_RESUME_deja ; CREATE TEMP TABLE w_DAT_RESUME_deja AS SELECT RES_HOSPIT AS w_RES_HOSPIT_deja, substr(mois_sortie,1,4) as annee FROM pmsi.p_rss JOIN prod_web100t.DAT_RESUME ON no_rss = DAT_RESUME.RES_OID AND date_trunc('month',p_rss.date_sortie) = date_trunc('month',RES_DS_CALC) GROUP BY 1,2 ; CREATE INDEX w_DAT_RESUME_deja_i1 ON w_DAT_RESUME_deja USING btree (w_RES_HOSPIT_deja) ; INSERT INTO w_DAT_RESUME_deja SELECT RES_HOSPIT AS w_RES_HOSPIT_deja, substr(mois_sortie,1,4) as annee FROM prod_web100t.DAT_RESUME JOIN prod_web100t.DAT_HOSPIT ON RES_HOSPIT = HOSP_OID JOIN prod_web100t.DAT_RSS ON RES_OID = RSS_OID JOIN pmsi.p_rss ON RSS_NO_HOSPIT = no_sejour_administratif LEFT JOIN w_DAT_RESUME_deja ON w_RES_HOSPIT_deja = RES_HOSPIT AND substr(mois_sortie,1,4) = annee WHERE date_trunc('month',date_sortie) = date_trunc('month',RES_DS_CALC) AND w_RES_HOSPIT_deja IS NULL GROUP BY 1,2 ; /********************************************************************************** * REFERENCEMENT DES RSS A INSERER DANS iCTI * **********************************************************************************/ DROP TABLE IF EXISTS w_rss ; CREATE TEMP TABLE w_rss AS SELECT DAT_RESUME.RES_HOSPIT, MAX(DAT_RESUME.RES_OID) AS RES_OID, MAX(DAT_RESUME.RES_DS_CALC) AS RES_DS, MAX(DAT_RESUME.RES_DE_CALC) AS RES_DE, MAX(DAT_RESUME.RES_PATIENT) AS RES_PATIENT, MAX(w_GRP_FINESS) AS finess, MAX(w_GRP_OID) AS GRP_OID, MAX(COALESCE(DA_OID,0)) AS DA_OID, MAX(DAT_RUM.RUM_AGE_GEST::numeric) AS RUM_AGE_GEST, MAX(DAT_RUM.RUM_DERNIERES_REGLES::date) AS RUM_DERNIERES_REGLES, MAX(DAT_DA.DA_DIM_VALID) AS w_DA_DIM_VALID, MAX(CASE WHEN DAT_RUM.RUM_RESCRIT_TARIFAIRE = 1 THEN 1 WHEN DAT_RUM.RUM_RESCRIT_TARIFAIRE = 0 THEN 2 ELSE 0 END) AS w_rescrit_tarif_id, MAX(CASE WHEN DAT_RUM.RUM_CONTEXTE_PATIENT_CALC = 1 THEN 1 WHEN DAT_RUM.RUM_CONTEXTE_PATIENT_CALC = 0 THEN 2 ELSE 0 END) AS w_contexte_pat_id, MAX(CASE WHEN DAT_RUM.RUM_ADMINISTRATION_RH_CALC = 1 THEN 1 WHEN DAT_RUM.RUM_ADMINISTRATION_RH_CALC = 0 THEN 2 ELSE 0 END) AS w_adm_prod_reshospi_id, MAX(COALESCE(DAT_RUM.RUM_CAT_NB_INTERVENTIONS_CALC,0)) AS w_nb_intervention_id, MAX(CASE WHEN DAT_RUM.RUM_ADNP_CALC = 1 THEN 1 WHEN DAT_RUM.RUM_ADNP_CALC = 0 THEN 2 ELSE 0 END) AS w_np_id, MAX(COALESCE(RES_REF.RES_URGENCE_CALC,0)) AS PASSAGE_URGENCES_OID, MAX(DAT_RUM.RUM_RAAC) AS raac, nextval('pmsi.s_rss'::regclass) AS rss_id FROM prod_web100t.DAT_RESUME JOIN w_DAT_GROUPAGE ON RES_OID = w_GRP_RESUME JOIN prod_web100t.DEF_TYPE_RESUME ON DEF_TYPE_RESUME.TR_OID = DAT_RESUME.RES_TYPE JOIN prod_web100t.DAT_HOSPIT ON RES_HOSPIT = HOSP_OID JOIN prod_web100t.DAT_RSS ON RES_OID = RSS_OID LEFT JOIN prod_web100t.DAT_RESUME RES_REF ON RES_REF.RES_PARENT = DAT_RESUME.RES_OID LEFT JOIN prod_web100t.DAT_RUM on DAT_RUM.RUM_OID = RES_REF.RES_OID LEFT JOIN prod_web100t.DAT_DA ON DA_NUMERO = RSS_NO_HOSPIT LEFT JOIN w_DAT_RESUME_deja ON 1=1 AND DAT_RESUME.RES_HOSPIT = w_RES_HOSPIT_deja AND w_DAT_RESUME_deja.annee = to_char(DAT_RESUME.RES_DS_CALC, 'YYYY') WHERE 1=1 AND DAT_RESUME.RES_DS_CALC BETWEEN '[ANNEE]0101' AND ('[ANNEE]1231'::date + '10 years'::interval)::date AND DAT_RESUME.RES_OID > 0 AND DEF_TYPE_RESUME.TR_IDENT = 'RSS' AND w_RES_HOSPIT_deja IS NULL GROUP BY 1 HAVING MAX(w_GRP_FINESS) = '[FINESS]' ORDER BY 2 ; CREATE INDEX w_rss_i1 ON w_rss USING btree (RES_OID) ; CREATE INDEX w_rss_i2 ON w_rss USING btree (GRP_OID) ; CREATE INDEX w_rss_i3 ON w_rss USING btree (RES_PATIENT) ; CREATE INDEX w_rss_i4 ON w_rss USING btree (DA_OID) ; DROP TABLE IF EXISTS w_SGN_NMCL_DATA; CREATE TEMP TABLE W_SGN_NMCL_DATA AS SELECT DISTINCT ND_INVARIANT_OID, first_value(ND_CODE) OVER w as ND_CODE, first_value(ND_LIB) OVER w as ND_LIB FROM prod_web100t.SGN_NMCL_DATA JOIN prod_web100t.SGN_NMCLS ON ND_NMCL_OID = NMCL_OID WHERE SGN_NMCLS.NMCL_IDENT = 'ERREURMCO' WINDOW w AS (PARTITION BY ND_INVARIANT_OID ORDER BY ND_VALIDE_DE DESC) ORDER BY ND_CODE ; /********************************************************************************** * INSERTION DES NOUVEAUX RSS * **********************************************************************************/ INSERT INTO pmsi.p_rss ( finess, oid, no_rss, no_patient, version_groupage, date_naissance, sexe, date_entree, date_sortie, mode_entree, provenance, mode_sortie, destination, code_postal, poids_bebe, igs2, cma, groupe_ghm, duree_sejour, nb_rsa, age, supprime, date_import, nb_rum, secteur, no_sejour_administratif, nb_seances, ghm_fg9, ghm_id, medecin_rss_id, ghs_id, mois_sortie, diagnostic_principal_id, diagnostic_relie_id, no_rum_principal, unite_medicale_principale_id, import_id, etat, acte_principal_id, code_postal_id, patient_id, prestation_principale_id, severite_fg11_simulation_code, en_cours, en_cours_etat, base_remboursement, sejour_facture, honoraires_factures, t2a_facture, dmi_facture, phc_facture, ca_ghs_theorique, nb_ghs, ca_ghs, nb_exb, ca_exb, nb_exh, ca_exh, nb_si, ca_si, nb_sur, ca_sur, nb_rea, ca_rea, nb_neonat, ca_neonat, traitement_epmsi, code_retour_groupage, comite_medical_id, rehosp_meme_ghm, age_gestationnel, date_dernieres_regles, from_oid, rescrit_tarif_id, contexte_pat_id, adm_prod_reshospi_id, nb_intervention_id, np_id, raac_id, passage_urgences_code ) SELECT w_rss.finess AS finess, w_rss.rss_id AS oid, w_rss.RES_OID AS no_rss, PAT_IPP_NUM AS no_patient, '' AS version_groupage, PATIENTS.PAT_NAISSANCE AS date_naissance, PATIENTS.PAT_SEXE AS sexe, DAT_RESUME.RES_DE_CALC AS date_entree, DAT_RESUME.RES_DS_CALC AS date_sortie, substr(DAT_RESUME.RES_ME_PMSI,1,1) AS mode_entree, substr(DAT_RESUME.RES_ME_PMSI,2,1) AS provenance, substr(DAT_RESUME.RES_MS_PMSI,1,1) AS mode_sortie, substr(DAT_RESUME.RES_MS_PMSI,2,1) AS destination, DAT_INFO_PATIENT.PAT_CODE_POSTAL AS code_postal, 0 AS poids_bebe, 0 AS igs2, '' AS cma, substr(w_ghm.code , 3 , 1) AS groupe_ghm, CASE WHEN RES_DS_CALC > RES_DE_CALC THEN date(RES_DS_CALC) - date(RES_DE_CALC) ELSE 0 END AS duree_sejour, CASE WHEN substr(w_ghm.code,1,2) = '28' THEN RES_SEANCES ELSE 1 END AS nb_rsa, CASE WHEN RES_DS_CALC > PATIENTS.PAT_NAISSANCE THEN trunc((date(RES_DE_CALC) - date(PATIENTS.PAT_NAISSANCE)) / 365.25,0) ELSE 0 END AS age, '' AS supprime, now() AS date_import, RSS_NBRE_RUM AS nb_rum, '' AS secteur, COALESCE(RSS_NO_HOSPIT::text,''::text) AS no_sejour_administratif, CASE WHEN substr(w_ghm.code,1,2) = '28' THEN RES_SEANCES ELSE 0 END AS nb_seances, '' AS ghm_fg9, COALESCE(t_ghm.oid, 0) AS ghm_id, COALESCE(t_medecins.oid,0) AS medecin_rss_id, COALESCE(t_ghs.oid, 0) AS ghs_id, date_part('year', RES_DS_CALC) * 100 + date_part('month', RES_DS_CALC) AS mois_sortie, 0 AS diagnostic_principal_id, 0 AS diagnostic_relie_id, 1 AS no_rum_principal, 0 AS unite_medicale_principale_id, -1 AS import_id, '' AS etat, 0 AS acte_principal_id, 0 AS code_postal_id, 0 AS patient_id, 0 AS prestation_principale_id, '' AS severite_fg11_simulation_code, '1' AS en_cours, CASE WHEN length(w_ghm.code) = 6 AND substr(w_ghm.code,1,2) <> '90' AND substr(w_ghm.code,1,2) <> '99' AND GRP_CORRECT = 1 AND w_DA_DIM_VALID IS DISTINCT FROM NULL THEN 'V' WHEN length(w_ghm.code) = 6 AND substr(w_ghm.code,1,2) <> '90' AND substr(w_ghm.code,1,2) <> '99' THEN 'G' ELSE 'S' END AS en_cours_etat, 0 AS base_remboursement, 0 AS sejour_facture, 0 AS honoraires_factures, 0 AS t2a_facture, 0 AS dmi_facture, 0 AS phc_facture, 0 AS ca_ghs_theorique, 0 AS nb_ghs, 0 AS ca_ghs, 0 AS nb_exb, 0 AS ca_exb, 0 AS nb_exh, 0 AS ca_exh, 0 AS nb_si, 0 AS ca_si, 0 AS nb_sur, 0 AS ca_sur, 0 AS nb_rea, 0 AS ca_rea, 0 AS nb_neonat, 0 AS ca_neonat, '' AS traitement_epmsi, COALESCE(CASE WHEN w_SGN_NMCL_DATA.ND_CODE ~'[A-Z][0-9]*' THEN substring(w_SGN_NMCL_DATA.ND_CODE,2) ELSE w_SGN_NMCL_DATA.ND_CODE END,'') AS code_retour_groupage, 0 AS comite_medical_id, '0' AS rehosp_meme_ghm, COALESCE(RUM_AGE_GEST, 0), RUM_DERNIERES_REGLES, 0 AS from_oid, w_rescrit_tarif_id, w_contexte_pat_id, w_adm_prod_reshospi_id, w_nb_intervention_id, w_np_id, COALESCE(t_raac.oid, 0), COALESCE(t_passage_urgences.code, '') FROM prod_web100t.DAT_RESUME JOIN w_rss ON (DAT_RESUME.RES_OID = w_rss.RES_OID) JOIN w_PATIENTS PATIENTS ON (w_rss.RES_PATIENT = PATIENTS.PAT_ID) JOIN prod_web100t.DAT_INFO_PATIENT ON (w_rss.RES_PATIENT = DAT_INFO_PATIENT.PAT_OID) JOIN prod_web100t.DAT_GROUPAGE ON w_rss.GRP_OID = DAT_GROUPAGE.GRP_OID LEFT JOIN prod_web100t.DAT_RSS ON w_rss.RES_OID = RSS_OID LEFT JOIN w_ghm ON w_ghm.oid = GRP_GHM LEFT JOIN w_ghs ON w_ghs.oid = GRP_CODE_GHS LEFT JOIN pmsi.t_ghm ON (w_ghm.code = t_ghm.code) LEFT JOIN pmsi.t_ghs ON (w_ghs.code = t_ghs.code) LEFt JOIN prod_web100t.SGN_TREE_NODES ON NODE_OID = RES_RESP LEFT JOIN w_medecin ON SGN_TREE_NODES.NODE_INVARIANT_OID = ANY(w_medecin.oid) LEFT JOIN pmsi.t_medecins ON t_medecins.code = w_medecin.code LEFT JOIN w_SGN_NMCL_DATA ON w_SGN_NMCL_DATA.ND_INVARIANT_OID = GRP_ERROR LEFT JOIN pmsi.t_raac ON t_raac.code = w_rss.raac LEFT JOIN pmsi.t_passage_urgences ON t_passage_urgences.oid = w_rss.PASSAGE_URGENCES_OID WHERE w_rss.finess = '[FINESS]' ; UPDATE pmsi.p_rss SET no_rum_principal = RES_INDEX FROM prod_web100t.DAT_RSS JOIN prod_web100t.DAT_RESUME ON RSS_OID_RUM_CLASSANT = RES_OID WHERE p_rss.no_rss = RSS_OID AND en_cours = '1' AND RES_INDEX > 1 ; /********************************************************************************** * REAFFECTATION DES RSS MERE ASSOCIES AUX BEBES (CMD 14 et 15) * **********************************************************************************/ -- On récupère les no_rss des bébé et mère qui sont liés ensemble DROP TABLE IF EXISTS w_BB; CREATE TEMP TABLE w_BB AS ( SELECT DAT_RESUME.RES_OID AS NO_RSS_BB, DAT_RESUME.RES_NUM AS NO_ADMINISTRATIF_BB, DAT_RUM.RUM_OID AS RUM_OID_BB, DAT_RUM.RUM_MERE_OID FROM prod_web100t.DAT_RESUME LEFT JOIN prod_web100t.DAT_RESUME RES_REF ON RES_REF.RES_PARENT = DAT_RESUME.RES_OID LEFT JOIN prod_web100t.DAT_RUM on DAT_RUM.RUM_OID = RES_REF.RES_OID WHERE DAT_RUM.RUM_MERE_OID <> 0 AND DAT_RESUME.RES_DS_CALC BETWEEN '[ANNEE]0101' AND ('[ANNEE]1231'::date + '10 years'::interval)::date ); DROP TABLE IF EXISTS w_BB_MERE; CREATE TEMP TABLE w_BB_MERE AS ( SELECT NO_RSS_BB, NO_ADMINISTRATIF_BB, RES_MERE.RES_OID AS NO_RSS_MERE, RES_MERE.RES_NUM AS NO_ADMINISTRATIF_MERE FROM w_bb JOIN prod_web100t.DAT_RUM RUM_MERE ON w_bb.RUM_MERE_OID = RUM_MERE.RUM_OID JOIN prod_web100t.DAT_RESUME RES_REF_MERE ON RES_REF_MERE.RES_OID = RUM_MERE.RUM_OID JOIN prod_web100t.DAT_RESUME RES_MERE ON RES_REF_MERE.RES_PARENT = RES_MERE.RES_OID ORDER BY 1 ) ; -- On assigne le rss_id de la mère dans la ligne rss du bébé WITH w_ids AS( SELECT no_rss_bb , oid as w_rss_mere_id FROM w_BB_MERE JOIN pmsi.p_rss ON NO_RSS_MERE = no_rss WHERE import_id = -1 ) UPDATE pmsi.p_rss SET rss_mere_id = w_rss_mere_id FROM w_ids WHERE p_rss.no_rss = w_ids.no_rss_bb AND w_rss_mere_id IS DISTINCT FROM rss_mere_id AND import_id = -1 ; INSERT INTO pmsi.p_rss_leg (finess, no_rsa, rss_id, code_retour_id, nombre) SELECT finess , 0 AS no_rsa , p_rss.oid AS rss_id , t_codes_retour_groupeur.oid , 1 FROM prod_web100t.DAT_RESUME JOIN prod_web100t.DAT_GROUPAGE ON DAT_RESUME.RES_OID = DAT_GROUPAGE.GRP_RESUME JOIN prod_web100t.DAT_RSS ON DAT_RESUME.RES_OID = RSS_OID JOIN w_SGN_NMCL_DATA ON w_SGN_NMCL_DATA.ND_INVARIANT_OID = GRP_ERROR JOIN pmsi.t_codes_retour_groupeur ON t_codes_retour_groupeur.type || t_codes_retour_groupeur.code = w_SGN_NMCL_DATA.ND_CODE JOIN pmsi.p_rss ON RSS_NO_HOSPIT::text = no_sejour_administratif WHERE GRP_ERROR IS NOT NULL AND import_id = -1 AND finess = '[FINESS]' ; -- transferts d'établissements DROP TABLE IF EXISTS w_SGN_NMCL_DATA; CREATE TEMP TABLE W_SGN_NMCL_DATA AS SELECT NMCL_IDENT, ND_INVARIANT_OID, (MAX(Array[ND_VALIDE_DE::text,ND_CODE]))[2] AS ND_CODE, (MAX(Array[ND_VALIDE_DE::text,ND_LIB]))[2] AS ND_LIB FROM prod_web100t.SGN_NMCL_DATA JOIN prod_web100t.SGN_NMCLS ON ND_NMCL_OID = NMCL_OID WHERE NMCL_IDENT = 'FINESS' GROUP BY 1,2; INSERT INTO base.t_etablissements (code, texte, texte_court) SELECT ND_CODE, ND_LIB, ND_LIB FROM w_SGN_NMCL_DATA WHERE 1=1 AND NMCL_IDENT = 'FINESS' AND ND_INVARIANT_OID IN (SELECT DISTINCT MVT_AUTRE_ETS FROM prod_web100t.REGUL_MOUVEMENTS) AND ND_CODE NOT IN (SELECT CODE FROM base.t_etablissements) ; /********************************************************************************** * ETABLISSEMENT PROVENANCE ET DESTINATION (TRANSFERT) * **********************************************************************************/ -- Insertion des établissement de provenance et destination dans p_rss_transfert -- Traitement en commun réalisé dans import_rss_rsf_encours.php (generation_rum_post_traitements()) -- Grâce à la table w_TRANSFERTS DROP TABLE IF EXISTS temp.w_TRANSFERTS; CREATE TABLE temp.w_TRANSFERTS AS SELECT p_rss.oid AS rss_id, import_id, COALESCE(MIN(CASE WHEN MVT_TYPE = 1 THEN t_etablissements.oid ELSE null END),0) AS prov_id, COALESCE(MIN(CASE WHEN MVT_TYPE = 2 THEN t_etablissements.oid ELSE null END),0) AS dest_id FROM pmsi.p_rss JOIN prod_web100t.DAT_SEJOUR ON SEJ_NO_ENTREE = no_sejour_administratif JOIN prod_web100t.REGUL_MOUVEMENTS ON MVT_SEJ_OID = PHASE_OID JOIN w_SGN_NMCL_DATA ON MVT_AUTRE_ETS = ND_INVARIANT_OID AND NMCL_IDENT = 'FINESS' LEFT JOIN base.t_etablissements ON ND_CODE = code WHERE 1=1 AND MVT_AUTRE_ETS != 0 AND etat != 'S' GROUP BY 1,2 ; ]]> 0 AND p_rss.date_sortie = res_ds_calc::date AND no_patient IS DISTINCT FROM PAT_IPP_NUM ; -- Màj des n° de patient RSS SANS GHM UPDATE pmsi.p_rss SET no_patient = PAT_IPP_NUM FROM prod_web100t.fac_FACTURE JOIN prod_web100t.dat_da on dat_da.da_oid = fac_FACTURE.fact_da JOIN w_PATIENTS PATIENTS ON PATIENTS.PAT_id = dat_da.da_patient WHERE dat_da.da_numero = p_rss.no_sejour_administratif AND base.cti_is_num(fac_FACTURE.fact_numero) AND PAT_IPP BETWEEN '0' AND '9999999999999999' AND ghm_id = 0 AND position('.' in FACT_NUMERO) = 0 AND p_rss.date_sortie = DA_DATE_FIN::date AND no_patient IS DISTINCT FROM PAT_IPP_NUM ; ]]> DAT_RESUME.RES_DE_CALC THEN date(DAT_RESUME.RES_DS_CALC) - date(DAT_RESUME.RES_DE_CALC) ELSE 0 END AS duree_sejour, RES_SEANCES AS nb_seances, substr(w_um.code,1,4) AS unite_medicale, COALESCE(t_diagnostics.oid,0) AS diagnostic_principal_id, COALESCE(t_diagnostics_relies.oid,0) AS diagnostic_relie_id, COALESCE(t_unites_medicales.oid,0) AS unite_medicale_id, '' AS type_autorisation, RUM_IGS2 AS igs2, '' AS type_autorisation_lit_dedie, '' AS supplement_code FROM prod_web100t.DAT_RESUME JOIN w_rss ON (DAT_RESUME.RES_PARENT = w_rss.RES_OID) JOIN prod_web100t.DAT_RUM ON DAT_RESUME.RES_OID = RUM_OID JOIN prod_web100t.DEF_TYPE_RESUME ON DEF_TYPE_RESUME.TR_OID = DAT_RESUME.RES_TYPE LEFT JOIN prod_web100t.DAT_DIAGS DAT_DIAGS_p ON RUM_DP = DAT_DIAGS_p.DIAG_OID LEFT JOIN prod_web100t.SGN_NMCL_DATA SGN_NMCL_DATA_p ON DAT_DIAGS_p.DIAG_CODE = SGN_NMCL_DATA_p.ND_OID LEFT JOIN prod_web100t.DAT_DIAGS DAT_DIAGS_r ON RUM_DR = DAT_DIAGS_r.DIAG_OID LEFT JOIN prod_web100t.SGN_NMCL_DATA SGN_NMCL_DATA_r ON DAT_DIAGS_r.DIAG_CODE = SGN_NMCL_DATA_r.ND_OID LEFT JOIN w_um ON RES_UM = w_um.oid LEFT JOIN pmsi.t_unites_medicales ON (w_um.code = t_unites_medicales.code) LEFT JOIN pmsi.t_diagnostics ON (replace(SGN_NMCL_DATA_p.ND_CODE,'.','') = t_diagnostics.code) LEFT JOIN pmsi.t_diagnostics t_diagnostics_relies ON (replace(SGN_NMCL_DATA_r.ND_CODE,'.','') = t_diagnostics_relies.code) LEFT JOIN pmsi.t_passage_urgences ON t_passage_urgences.oid = DAT_RESUME.RES_URGENCE_CALC WHERE DEF_TYPE_RESUME.TR_IDENT = 'RUM' ; ]]> 0 GROUP BY 1; ALTER TABLE w_FAC_FACT_TIER ADD CONSTRAINT w_FAC_FACT_TIER_pkey PRIMARY KEY(FT_DA); DROP TABLE IF EXISTS w_FAC_B2_TIER; CREATE TEMP TABLE w_FAC_B2_TIER AS SELECT w_rss.rss_id, B2T_LIGNE, MAX(B2T_QUANTITE) AS B2T_QUANTITE, base.cti_division( SUM(B2T_TOTAL_TTC)::numeric - SUM(B2T_DEPASSEMENT)::numeric, MAX(B2T_QUANTITE)::numeric ) AS B2T_PU, SUM(B2T_TOTAL_TTC) AS B2T_TOTAL, round(base.cti_division( SUM(CASE WHEN B2T_TYPE_TIER = 'AMO' THEN B2T_TOTAL_TTC ELSE 0 END)::numeric - SUM(CASE WHEN B2T_TYPE_TIER = 'AMO' THEN B2T_DEPASSEMENT ELSE 0 END)::numeric, SUM(B2T_TOTAL_TTC)::numeric - SUM(B2T_DEPASSEMENT)::numeric ) * 100,0) AS B2T_TAUX_AMO FROM prod_web100t.FAC_B2_TIER JOIN w_rss ON B2T_DA = w_rss.DA_OID GROUP BY 1,2 ORDER BY 1; CREATE INDEX w_FAC_B2_TIER_i1 ON w_FAC_B2_TIER USING btree (B2T_LIGNE) ; INSERT INTO pmsi.p_rsf_total( finess, rss_id, no_rss, code_pec, rang_beneficiaire, regime, nature_pec, justificatif_exo, no_facture, code_regularisation, matricule_assure, cle_matricule_assure, base_remboursement, sejour_facture, sejour_remboursable, honoraires_factures, honoraires_remboursable, t2a_facture, dmi_facture, phc_facture, participation_assure_avant_oc, sejour_remboursable_2, honoraires_remboursable_2, montant_dmi_ghs2006, nb_si, ca_si, nb_sur, ca_sur, nb_rea, ca_rea, nb_neonat, ca_neonat, nb_exh, ca_exh, nb_exb, ca_exb, nb_ghs, ca_ghs, ca_ghs_theorique, taux_remboursement ) SELECT w_rss.finess AS finess, w_rss.rss_id AS rss_id, w_rss.RES_OID AS no_rss, '1' AS code_pec, '' AS rang_beneficiaire, '' AS regime, '' AS nature_pec, '' AS justificatif_exo, MAX(FACT_NUMERO) AS no_facture, '1' AS code_regularisation, '' AS matricule_assure, '' AS cle_matricule_assure, base.cti_sum_distinct_on(ARRAY[LI_OID::numeric,COALESCE(round((B2T_PU * B2T_QUANTITE)::numeric,2),FLT_TOTAL_TTC)]) AS base_remboursement, base.cti_sum_distinct_on(ARRAY[LI_OID::numeric,FLT_TOTAL_TTC]) AS sejour_facture, base.cti_sum_distinct_on(ARRAY[LI_OID::numeric,FLT_TOTAL_TTC]) AS sejour_remboursable, MAX(FACT_TOTAL_HO) AS honoraires_factures, MAX(FACT_TOTAL_HO) AS honoraires_remboursable, 0 AS t2a_facture, 0 AS dmi_facture, 0 AS phc_facture, 0 AS participation_assure_avant_oc, 0 AS sejour_remboursable_2, 0 AS honoraires_remboursable_2, 0 AS montant_dmi_ghs2006, 0 AS nb_si, 0 AS ca_si, 0 AS nb_sur, 0 AS ca_sur, 0 AS nb_rea, 0 AS ca_rea, 0 AS nb_neonat, 0 AS ca_neonat, 0 AS nb_exh, 0 AS ca_exh, 0 AS nb_exb, 0 AS ca_exb, 0 AS nb_ghs, 0 AS ca_ghs, 0 AS ca_ghs_theorique, 0 AS taux_remboursement FROM w_FAC_FACT_TIER JOIN w_rss ON FT_DA = w_rss.DA_OID JOIN prod_web100t.FAC_FACT_LIGNE_TIER ON FLT_FACTURE_TIER = FT_OID AND FLT_IS_ETS = 1 JOIN prod_web100t.FAC_FACTURE ON w_FAC_FACT_TIER.FT_FACTURE = FACT_OID JOIN prod_web100t.FAC_FACT_LIGNE ON FLT_LIGNE_FACTURE = LI_OID JOIN pmsi.t_prestations ON FLT_CODE_PREST = t_prestations.code LEFT JOIN w_FAC_B2_TIER ON LI_LIGNE_SOURCE = B2T_LIGNE AND w_rss.rss_id = w_FAC_B2_TIER.rss_id JOIN pmsi.p_rss ON w_rss.rss_id = p_rss.oid WHERE date(FLT_DATE_DEBUT) BETWEEN p_rss.date_entree AND p_rss.date_sortie GROUP BY 1,2,3 ; INSERT INTO pmsi.p_rsf_total( finess, no_rss, code_pec, rang_beneficiaire, regime, nature_pec, justificatif_exo, no_facture, code_regularisation, base_remboursement, sejour_facture, sejour_remboursable, honoraires_factures, honoraires_remboursable, t2a_facture, dmi_facture, phc_facture, participation_assure_avant_oc, sejour_remboursable_2, honoraires_remboursable_2, montant_dmi_ghs2006, nb_si, ca_si, nb_sur, ca_sur, nb_rea, ca_rea, nb_neonat, ca_neonat, nb_exh, ca_exh, nb_exb, ca_exb, nb_ghs, ca_ghs, rss_id, ca_ghs_theorique) SELECT p_rss.finess, p_rss.no_rss, '', '', '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p_rss.oid, 0 FROM pmsi.p_rss LEFT JOIN pmsi.p_rsf_total ON (p_rsf_total.rss_id = p_rss.oid) WHERE en_cours = '1' AND p_rsf_total.rss_id IS NULL ; ]]> = t_ghs.date_debut_prive_1 AND p_rss.date_sortie <= t_ghs.date_fin_prive_1 THEN t_ghs.tarif_ghs_prive_1 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_2 AND p_rss.date_sortie <= t_ghs.date_fin_prive_2 THEN t_ghs.tarif_ghs_prive_2 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_3 AND p_rss.date_sortie <= t_ghs.date_fin_prive_3 THEN t_ghs.tarif_ghs_prive_3 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_4 AND p_rss.date_sortie <= t_ghs.date_fin_prive_4 THEN t_ghs.tarif_ghs_prive_4 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_5 AND p_rss.date_sortie <= t_ghs.date_fin_prive_5 THEN t_ghs.tarif_ghs_prive_5 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_6 AND p_rss.date_sortie <= t_ghs.date_fin_prive_6 THEN t_ghs.tarif_ghs_prive_6 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_7 AND p_rss.date_sortie <= t_ghs.date_fin_prive_7 THEN t_ghs.tarif_ghs_prive_7 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_8 AND p_rss.date_sortie <= t_ghs.date_fin_prive_8 THEN t_ghs.tarif_ghs_prive_8 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_9 AND p_rss.date_sortie <= t_ghs.date_fin_prive_9 THEN t_ghs.tarif_ghs_prive_9 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_1 AND p_rss.date_sortie <= t_ghs.date_fin_public_1 THEN t_ghs.tarif_ghs_public_1 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_2 AND p_rss.date_sortie <= t_ghs.date_fin_public_2 THEN t_ghs.tarif_ghs_public_2 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_3 AND p_rss.date_sortie <= t_ghs.date_fin_public_3 THEN t_ghs.tarif_ghs_public_3 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_4 AND p_rss.date_sortie <= t_ghs.date_fin_public_4 THEN t_ghs.tarif_ghs_public_4 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_5 AND p_rss.date_sortie <= t_ghs.date_fin_public_5 THEN t_ghs.tarif_ghs_public_5 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_6 AND p_rss.date_sortie <= t_ghs.date_fin_public_6 THEN t_ghs.tarif_ghs_public_6 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_7 AND p_rss.date_sortie <= t_ghs.date_fin_public_7 THEN t_ghs.tarif_ghs_public_7 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_8 AND p_rss.date_sortie <= t_ghs.date_fin_public_8 THEN t_ghs.tarif_ghs_public_8 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_9 AND p_rss.date_sortie <= t_ghs.date_fin_public_9 THEN t_ghs.tarif_ghs_public_9 ELSE 0::numeric END AS prix_unitaire_theorique, p_rsf_detail.base_remboursement AS base_remboursement_avant, round(CASE WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_1 AND p_rss.date_sortie <= t_ghs.date_fin_prive_1 THEN t_ghs.tarif_ghs_prive_1 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_2 AND p_rss.date_sortie <= t_ghs.date_fin_prive_2 THEN t_ghs.tarif_ghs_prive_2 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_3 AND p_rss.date_sortie <= t_ghs.date_fin_prive_3 THEN t_ghs.tarif_ghs_prive_3 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_4 AND p_rss.date_sortie <= t_ghs.date_fin_prive_4 THEN t_ghs.tarif_ghs_prive_4 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_5 AND p_rss.date_sortie <= t_ghs.date_fin_prive_5 THEN t_ghs.tarif_ghs_prive_5 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_6 AND p_rss.date_sortie <= t_ghs.date_fin_prive_6 THEN t_ghs.tarif_ghs_prive_6 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_7 AND p_rss.date_sortie <= t_ghs.date_fin_prive_7 THEN t_ghs.tarif_ghs_prive_7 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_8 AND p_rss.date_sortie <= t_ghs.date_fin_prive_8 THEN t_ghs.tarif_ghs_prive_8 WHEN type_etablissement = '1' AND p_rss.date_sortie >= t_ghs.date_debut_prive_9 AND p_rss.date_sortie <= t_ghs.date_fin_prive_9 THEN t_ghs.tarif_ghs_prive_9 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_1 AND p_rss.date_sortie <= t_ghs.date_fin_public_1 THEN t_ghs.tarif_ghs_public_1 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_2 AND p_rss.date_sortie <= t_ghs.date_fin_public_2 THEN t_ghs.tarif_ghs_public_2 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_3 AND p_rss.date_sortie <= t_ghs.date_fin_public_3 THEN t_ghs.tarif_ghs_public_3 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_4 AND p_rss.date_sortie <= t_ghs.date_fin_public_4 THEN t_ghs.tarif_ghs_public_4 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_5 AND p_rss.date_sortie <= t_ghs.date_fin_public_5 THEN t_ghs.tarif_ghs_public_5 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_6 AND p_rss.date_sortie <= t_ghs.date_fin_public_6 THEN t_ghs.tarif_ghs_public_6 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_7 AND p_rss.date_sortie <= t_ghs.date_fin_public_7 THEN t_ghs.tarif_ghs_public_7 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_8 AND p_rss.date_sortie <= t_ghs.date_fin_public_8 THEN t_ghs.tarif_ghs_public_8 WHEN type_etablissement <> '1' AND p_rss.date_sortie >= t_ghs.date_debut_public_9 AND p_rss.date_sortie <= t_ghs.date_fin_public_9 THEN t_ghs.tarif_ghs_public_9 ELSE 0::numeric END * p_rsf_detail.coefficient_mco,2) AS base_remboursement_theorique, (p_rss.date_sortie - p_rss.date_entree) * 20 AS montant_forfait_theorique FROM pmsi.p_rsf_detail JOIN pmsi.p_rss On rss_id = p_rss.oid JOIN pmsi.t_prestations ON prestation_id = t_prestations.oid JOIN pmsi.t_ghs ON p_rss.ghs_id = t_ghs.oid JOIN base.t_finess ON p_rss.finess = t_finess.code WHERE en_cours = '1' AND t_prestations.code = 'GHS' AND est_ligne_rss = '1' AND prix_unitaire = p_rsf_detail.base_remboursement ; ANALYSE w_correction ; UPDATE pmsi.p_rsf_detail SET prix_unitaire = prix_unitaire_theorique, base_remboursement = CASE WHEN ( (base_remboursement_avant + montant_forfait_theorique) = base_remboursement_theorique OR (base_remboursement_avant + montant_forfait_theorique + 24) = base_remboursement_theorique OR base_remboursement_avant = base_remboursement_theorique ) THEN base_remboursement_theorique ELSE p_rsf_detail.base_remboursement END , sejour_facture = CASE WHEN ( (base_remboursement_avant + montant_forfait_theorique) = base_remboursement_theorique OR (base_remboursement_avant + montant_forfait_theorique + 24) = base_remboursement_theorique OR base_remboursement_avant = base_remboursement_theorique ) THEN base_remboursement_theorique ELSE p_rsf_detail.base_remboursement END FROM w_correction WHERE p_rsf_detail.rss_id = w_correction.rss_id AND p_rsf_detail.CTID = w_correction.from_CTID ; ]]> 1 AND DAT_PRESTATIONS.PREST_TYPE NOT IN ('GHS', 'EXH', 'EXB') ) INSERT INTO pmsi.p_rsf_detail ( finess, rss_id, no_rss, nature, mt, dmt, date_debut, date_fin, nombre, coefficient, prix_unitaire, base_remboursement, taux_remboursement, sejour_facture, sejour_remboursable, compteur, ligne_t2a, pec_fj, coefficient_mco, sejour_remboursable_2, ghs_id, sejour_rembourse_noemie, nature_noemie, prestation_id, type, coefficient_geo, est_ligne_rss, est_ligne_rum, no_rum, unite_medicale_id, base_remboursement_rum ) SELECT w_prest.finess, w_prest.rss_id, w_prest.no_rss, w_prest.nature, w_prest.mt, w_prest.dmt, w_prest.date_debut, w_prest.date_fin, w_prest.nombre, w_prest.coefficient, w_prest.prix_unitaire, w_prest.base_remboursement, w_prest.taux_remboursement, w_prest.sejour_facture, w_prest.sejour_remboursable, w_prest.compteur, w_prest.ligne_t2a, w_prest.pec_fj, w_prest.coefficient_mco, w_prest.sejour_remboursable_2, w_prest.ghs_id, w_prest.sejour_rembourse_noemie, w_prest.nature_noemie, COALESCE(t_prestations.oid, 0) as prestation_id, w_prest.type, w_prest.coefficient_geo, w_prest.est_ligne_rss, w_prest.est_ligne_rum, w_prest.no_rum, COALESCE(t_unites_medicales.oid, 0) as unite_medicale_id, 0::integer as base_remboursement_rum FROM w_prest LEFT JOIN pmsi.t_prestations ON t_prestations.code = w_prest.PREST_TYPE LEFT JOIN pmsi.t_unites_medicales ON t_unites_medicales.code = w_prest.um_code ; UPDATE pmsi.p_rsf_detail SET no_rum = p_rss_rum.no_rum FROM w_rss, pmsi.p_rss_rum WHERE 1=1 AND w_rss.rss_id = p_rsf_detail.rss_id AND p_rss_rum.rss_id = w_rss.rss_id AND p_rsf_detail.unite_medicale_id = p_rss_rum.unite_medicale_id AND p_rsf_detail.date_debut BETWEEN p_rss_rum.date_entree and p_rss_rum.date_sortie AND p_rsf_detail.date_fin BETWEEN p_rss_rum.date_entree and p_rss_rum.date_sortie AND p_rss_rum.no_rum IS DISTINCT FROM p_rsf_detail.no_rum ; ]]> 0 OR t_prestations.code IN ('GHS', 'EXH', 'PII', 'PH1', 'PH8', 'SRC', 'REA', 'ATU', 'FFM', 'SE1', 'SE2', 'SE3', 'SE4', 'SE5', 'SE6', 'SE7', 'APE', 'AP2', 'FPI')) GROUP BY 1,2; UPDATE pmsi.p_rsf_total SET no_facture = w_rsf_shs.no_facture, base_remboursement = w_rsf_shs.base_remboursement, sejour_facture = w_rsf_shs.sejour_facture, sejour_remboursable = w_rsf_shs.sejour_remboursable, participation_assure_avant_oc = w_rsf_shs.participation_assure_avant_oc FROM w_rsf_shs WHERE w_rsf_shs.rss_id = p_rsf_total.rss_id; -- Hors GHS INSERT INTO pmsi.p_rsf_detail( finess, rss_id, no_rss, nature, mt, dmt, date_debut, date_fin, nombre, coefficient, prix_unitaire, base_remboursement, taux_remboursement, sejour_facture, sejour_remboursable, compteur, ligne_t2a, pec_fj, coefficient_mco, sejour_remboursable_2, ghs_id, sejour_rembourse_noemie, nature_noemie, prestation_id, type, coefficient_geo, est_ligne_rss, est_ligne_rum, no_rum, unite_medicale_id, base_remboursement_rum) SELECT p_rss.finess, p_rss.oid AS rss_id, p_rss.no_rss, '' AS nature, '' AS mt, '' AS dmt, p_rss.date_entree AS date_debut, p_rss.date_sortie AS date_fin, MFNBRE AS nombre, 1 AS coefficient, MFPRUA AS prix_unitaire, MFMTFA AS base_remboursement, MFTFA1 AS taux_remboursement, MFMTFA AS sejour_facture, MFMFA1 AS sejour_remboursable, 0 AS compteur, '' AS ligne_t2a, '' AS pec_fj, 1 AS coefficient_mco, 0 AS sejour_remboursable_2, COALESCE(t_ghs.oid, 0) AS ghs_id, 0 AS sejour_rembourse_noemie, '' AS nature_noemie, COALESCE(t_prestations.oid, 0) AS prestation_id, 'B' AS type, 0 AS coefficient_geo, '1' AS est_ligne_rss, '0' AS est_ligne_rum, 1 AS no_rum, 0 AS unite_medicale_id, 0 AS base_remboursement_rum FROM prod_shs.[ACTIVITESCHEMA]_MFP01CLI MFP01CLI JOIN w_rsf_shs ON MFP01CLI.MFDOSS = w_rsf_shs.MFDOSS AND MFDCPL = 0 JOIN pmsi.p_rss ON w_rsf_shs.rss_id = p_rss.oid JOIN prod_shs.[ACTIVITESCHEMA]_TRP01 ON TRCENR = 'A51' AND TRCSER = MFCSER AND TRCRUB = substr(to_char(MFRUPR,'FM0000'),2,3) JOIN pmsi.t_prestations ON CASE WHEN MFRUPR IN (111,112) THEN 'GHS' WHEN TRPRST <> '' THEN TRPRST ELSE TRPRSA END = t_prestations.code LEFT JOIN pmsi.t_ghs ON to_number(CASE WHEN MFCGHS BETWEEN '0000' AND '9999' THEN MFCGHS ELSE '9999' END,'0000') = t_ghs.code WHERE (MFMFA1 <> 0 AND t_prestations.code NOT IN ('GHS') OR t_prestations.code IN ('EXH', 'PII', 'PH1', 'PH8', 'SRC', 'REA', 'ATU', 'FFM', 'SE1', 'SE2', 'SE3', 'SE4', 'SE5', 'SE6', 'SE7', 'APE', 'AP2', 'FPI') OR t_prestations.code IN ('GHS') AND MFCGHS = 9605 ); -- GHS INSERT INTO pmsi.p_rsf_detail( finess, rss_id, no_rss, nature, mt, dmt, date_debut, date_fin, nombre, coefficient, prix_unitaire, base_remboursement, taux_remboursement, sejour_facture, sejour_remboursable, compteur, ligne_t2a, pec_fj, coefficient_mco, sejour_remboursable_2, ghs_id, sejour_rembourse_noemie, nature_noemie, prestation_id, type, coefficient_geo, est_ligne_rss, est_ligne_rum, no_rum, unite_medicale_id, base_remboursement_rum) SELECT p_rss.finess, p_rss.oid AS rss_id, p_rss.no_rss, '' AS nature, '' AS mt, '' AS dmt, p_rss.date_entree AS date_debut, p_rss.date_sortie AS date_fin, 1 AS nombre, 1 AS coefficient, MAX(MFPRUA) AS prix_unitaire, SUM(MFMTFA) AS base_remboursement, MAX(MFTFA1) AS taux_remboursement, SUM(MFMTFA) AS sejour_facture, SUM(MFMFA1) AS sejour_remboursable, 0 AS compteur, '' AS ligne_t2a, '' AS pec_fj, 1 AS coefficient_mco, 0 AS sejour_remboursable_2, COALESCE(t_ghs.oid, 0) AS ghs_id, 0 AS sejour_rembourse_noemie, '' AS nature_noemie, COALESCE(t_prestations.oid, 0) AS prestation_id, 'B' AS type, 0 AS coefficient_geo, '1' AS est_ligne_rss, '0' AS est_ligne_rum, 1 AS no_rum, 0 AS unite_medicale_id, 0 AS base_remboursement_rum FROM prod_shs.[ACTIVITESCHEMA]_MFP01CLI MFP01CLI JOIN w_rsf_shs ON MFP01CLI.MFDOSS = w_rsf_shs.MFDOSS AND MFDCPL = 0 JOIN pmsi.p_rss ON w_rsf_shs.rss_id = p_rss.oid JOIN prod_shs.[ACTIVITESCHEMA]_TRP01 ON TRCENR = 'A51' AND TRCSER = MFCSER AND TRCRUB = substr(to_char(MFRUPR,'FM0000'),2,3) JOIN pmsi.t_prestations ON CASE WHEN MFRUPR IN (111,112) THEN 'GHS' WHEN TRPRST <> '' THEN TRPRST ELSE TRPRSA END = t_prestations.code LEFT JOIN pmsi.t_ghs ON to_number(CASE WHEN MFCGHS BETWEEN '0000' AND '9999' THEN MFCGHS ELSE '9999' END,'0000') = t_ghs.code WHERE t_prestations.code IN ('GHS') AND MFCGHS <> 9605 GROUP BY 1,2,3,7,8,21,24; ]]> no_rum_new ; ANALYSE w_rum_index ; UPDATE pmsi.p_rss_actes p_rss_table SET no_rum = no_rum_new FROM w_rum_index WHERE p_rss_table.rss_id = w_rum_index.rss_id AND p_rss_table.no_rum = w_rum_index.no_rum ; UPDATE pmsi.p_rss_diagnostics p_rss_table SET no_rum = no_rum_new FROM w_rum_index WHERE p_rss_table.rss_id = w_rum_index.rss_id AND p_rss_table.no_rum = w_rum_index.no_rum ; UPDATE pmsi.p_rsf_detail p_rss_table SET no_rum = no_rum_new FROM w_rum_index WHERE p_rss_table.rss_id = w_rum_index.rss_id AND p_rss_table.no_rum = w_rum_index.no_rum ; UPDATE pmsi.p_rss p_rss_table SET no_rum_principal = no_rum_new FROM w_rum_index WHERE p_rss_table.oid = w_rum_index.rss_id AND p_rss_table.no_rum_principal = w_rum_index.no_rum ; UPDATE pmsi.p_rss_rum p_rss_table SET no_rum = no_rum_new FROM w_rum_index WHERE p_rss_table.rss_id = w_rum_index.rss_id AND p_rss_table.no_rum = w_rum_index.no_rum ; ]]> 0 AND DEF_TYPE_RESUME.TR_IDENT = 'RSS' GROUP BY 1; ALTER TABLE w_DAT_GROUPAGE ADD CONSTRAINT w_DAT_GROUPAGE_pkey PRIMARY KEY(RES_OID); UPDATE pmsi.p_rss_etat SET date_groupage = CASE WHEN GRP_DATE >= date_sortie THEN GRP_DATE ELSE '20991231' END FROM pmsi.p_rss JOIN w_DAT_GROUPAGE ON no_rss = RES_OID AND date_trunc('month',date_sortie) = date_trunc('month',RES_DS) WHERE p_rss_etat.rss_id = p_rss.oid AND date_groupage IS DISTINCT FROM CASE WHEN GRP_DATE >= date_sortie THEN GRP_DATE ELSE '20991231' END; DROP TABLE IF EXISTS w_FAC_FACTURE; CREATE TEMP TABLE w_FAC_FACTURE AS SELECT p_rss.oid AS rss_id, p_rss.date_sortie, date(MAX(FACT_DATE)) AS FACT_DATE FROM prod_web100t.DAT_DA JOIN prod_web100t.FAC_FACTURE ON FACT_DA = DA_OID JOIN pmsi.p_rss ON DA_NUMERO = no_sejour_administratif WHERE date_trunc('month',date_sortie) = date_trunc('month',DA_DATE_FIN) GROUP BY 1,2; ALTER TABLE w_FAC_FACTURE ADD CONSTRAINT w_FAC_FACTURE_pkey PRIMARY KEY(rss_id); UPDATE pmsi.p_rss_etat SET date_facture = CASE WHEN FACT_DATE >= date_sortie AND FACT_DATE <> '20991231' THEN FACT_DATE ELSE '20991231' END, est_facture = CASE WHEN FACT_DATE >= date_sortie AND FACT_DATE <> '20991231' THEN '1' ELSE '0' END FROM w_FAC_FACTURE WHERE p_rss_etat.rss_id = w_FAC_FACTURE.rss_id AND ( date_facture IS DISTINCT FROM CASE WHEN FACT_DATE >= date_sortie AND FACT_DATE <> '20991231' THEN FACT_DATE ELSE '20991231' END OR est_facture IS DISTINCT FROM CASE WHEN FACT_DATE >= date_sortie AND FACT_DATE <> '20991231' THEN '1' ELSE '0' END ); UPDATE pmsi.p_rss_etat SET est_groupe = '1', est_valide = '1' WHERE est_facture = '1' AND (est_groupe = '0' OR est_valide = '0') ; UPDATE pmsi.p_rss_etat SET date_groupage = date_facture WHERE date_facture < date_groupage AND date_facture <> '20991231' AND date_groupage <> '20991231'; UPDATE pmsi.p_rss_etat SET date_groupage = '20991231' WHERE date_groupage <> '20991231' AND est_groupe IN ('0','9'); UPDATE pmsi.p_rss SET ghm_id = t_ghm_99Z98Z.oid FROM pmsi.p_rss_etat, pmsi.t_ghm, pmsi.t_ghm t_ghm_99Z98Z WHERE p_rss.oid = p_rss_etat.rss_id AND p_rss.ghm_id = t_ghm.oid AND t_ghm_99Z98Z.code = '99Z98Z' AND est_facture = '1' AND t_ghm.code = '99Z99Z' AND p_rss.oid NOT IN ( SELECT rss_id FROM pmsi.p_rsf_detail JOIN pmsi.t_prestations ON prestation_id = t_prestations.oid WHERE t_prestations.code IN ('SE1', 'SE2', 'SE3', 'SE4', 'SE5', 'SE6', 'SE7', 'APE', 'AP2', 'FPI', 'FFM', 'ATU') ); UPDATE pmsi.p_rss SET ghm_id = 0 FROM pmsi.p_rss_etat, pmsi.t_ghm, pmsi.t_ghm t_ghm_99Z98Z WHERE p_rss.oid = p_rss_etat.rss_id AND p_rss.en_cours = '1' AND p_rss.ghm_id = t_ghm.oid AND t_ghm_99Z98Z.code = '99Z98Z' AND est_facture = '1' AND t_ghm.code = '99Z99Z' AND p_rss.oid NOT IN ( SELECT rss_id FROM pmsi.p_rsf_detail JOIN pmsi.t_prestations ON prestation_id = t_prestations.oid WHERE t_prestations.code IN ('SE1', 'SE2', 'SE3', 'SE4', 'SE5', 'SE6', 'SE7', 'APE', 'AP2', 'FPI', 'FFM', 'ATU') ); UPDATE pmsi.p_rss SET ghm_id = t_ghm_99Z99Z.oid FROM pmsi.p_rss_etat, pmsi.t_ghm, pmsi.t_ghm t_ghm_99Z99Z WHERE p_rss.oid = p_rss_etat.rss_id AND p_rss.ghm_id = t_ghm.oid AND t_ghm_99Z99Z.code = '99Z99Z' AND en_cours = '1' AND t_ghm.code LIKE '90%'; UPDATE pmsi.p_rss SET ghm_id = 0 FROM pmsi.p_rss_etat, pmsi.t_ghm WHERE p_rss.oid = p_rss_etat.rss_id AND p_rss.en_cours = '1' AND p_rss.ghm_id = t_ghm.oid AND est_facture = '1' AND (t_ghm.code = '99Z99Z' OR ghm_id = 0) AND p_rss.oid IN ( SELECT rss_id FROM pmsi.p_rsf_detail JOIN pmsi.t_prestations ON prestation_id = t_prestations.oid WHERE t_prestations.code IN ('SE1', 'SE2', 'SE3', 'SE4', 'SE5', 'SE6', 'SE7', 'APE', 'AP2', 'FPI', 'FFM', 'ATU') ); UPDATE pmsi.p_rss SET en_cours_etat = 'F' FROM pmsi.p_rss_etat WHERE p_rss.oid = p_rss_etat.rss_id AND en_cours = '1' AND en_cours_etat IS DISTINCT FROM 'F' AND est_facture = 1 ; ]]> = 10000000 THEN to_char(ADDOSS,'FM00000000') ELSE to_char(ADDOSS,'FM0000000') END AS ADDOSS2, MAX(to_date( CASE WHEN ADCFAC = '1' AND ADDTFA <> 0 THEN to_char(ADDTFA,'FM00000000') WHEN ADCFAC = '1' AND ADDTFA = 0 THEN to_char(now(),'YYYYMMDD') ELSE '20991231' END,'YYYYMMDD')) AS ADDTFA FROM prod_shs.[ACTIVITESCHEMA]h_ADP01H WHERE ADADAV IN ('0','3') GROUP BY 1,2; ALTER TABLE w_ADP01 ADD CONSTRAINT w_ADP01_pkey PRIMARY KEY(ADDOSS); INSERT INTO w_ADP01 SELECT ADDOSS AS ADDOSS_base, to_char(ADDOSS,'FM00000000') AS ADDOSS, CASE WHEN ADDOSS >= 10000000 THEN to_char(ADDOSS,'FM00000000') ELSE to_char(ADDOSS,'FM0000000') END AS ADDOSS2, MAX(to_date( CASE WHEN ADCFAC = '1' AND ADDTFA <> 0 THEN to_char(ADDTFA,'FM00000000') WHEN ADCFAC = '1' AND ADDTFA = 0 THEN to_char(now(),'YYYYMMDD') ELSE '20991231' END,'YYYYMMDD')) AS ADDTFA FROM prod_shs.[ACTIVITESCHEMA]p_ADP01P WHERE ADADAV IN ('0','3') AND ADDOSS NOT IN (SELECT ADDOSS_base FROM w_ADP01) GROUP BY 1,2; INSERT INTO w_ADP01 SELECT ADDOSS AS ADDOSS_base, to_char(ADDOSS,'FM00000000') AS ADDOSS, CASE WHEN ADDOSS >= 10000000 THEN to_char(ADDOSS,'FM00000000') ELSE to_char(ADDOSS,'FM0000000') END AS ADDOSS2, MAX(to_date( CASE WHEN ADCFAC = '1' AND ADDTFA <> 0 THEN to_char(ADDTFA,'FM00000000') WHEN ADCFAC = '1' AND ADDTFA = 0 THEN to_char(now(),'YYYYMMDD') ELSE '20991231' END,'YYYYMMDD')) AS ADDTFA FROM prod_shs.[ACTIVITESCHEMA]_ADP01 WHERE ADADAV IN ('0','3') AND ADDOSS NOT IN (SELECT ADDOSS_base FROM w_ADP01) GROUP BY 1,2; UPDATE pmsi.p_rss_etat SET date_facture = CASE WHEN ADDTFA >= date_sortie AND ADDTFA <> '20991231' THEN ADDTFA ELSE '20991231' END, est_facture = CASE WHEN ADDTFA >= date_sortie AND ADDTFA <> '20991231' THEN '1' ELSE '0' END FROM pmsi.p_rss JOIN w_ADP01 ON ADDOSS = no_sejour_administratif WHERE p_rss_etat.rss_id = p_rss.oid AND ( date_facture IS DISTINCT FROM CASE WHEN ADDTFA >= date_sortie AND ADDTFA <> '20991231' THEN ADDTFA ELSE '20991231' END OR est_facture IS DISTINCT FROM CASE WHEN ADDTFA >= date_sortie AND ADDTFA <> '20991231' THEN '1' ELSE '0' END ); UPDATE pmsi.p_rss_etat SET date_facture = CASE WHEN ADDTFA >= date_sortie AND ADDTFA <> '20991231' THEN ADDTFA ELSE '20991231' END, est_facture = CASE WHEN ADDTFA >= date_sortie AND ADDTFA <> '20991231' THEN '1' ELSE '0' END FROM pmsi.p_rss JOIN w_ADP01 ON ADDOSS2 = no_sejour_administratif WHERE p_rss_etat.rss_id = p_rss.oid AND ( date_facture IS DISTINCT FROM CASE WHEN ADDTFA >= date_sortie AND ADDTFA <> '20991231' THEN ADDTFA ELSE '20991231' END OR est_facture IS DISTINCT FROM CASE WHEN ADDTFA >= date_sortie AND ADDTFA <> '20991231' THEN '1' ELSE '0' END ); UPDATE pmsi.p_rss_etat SET est_groupe = '1', est_valide = '1' WHERE est_facture = '1' AND (est_groupe = '0' OR est_valide = '0') ; UPDATE pmsi.p_rss_etat SET date_groupage = date_facture WHERE date_facture < date_groupage AND date_facture <> '20991231' AND date_groupage <> '20991231'; UPDATE pmsi.p_rss_etat SET date_groupage = '20991231' WHERE date_groupage <> '20991231' AND est_groupe IN ('0','9'); UPDATE pmsi.p_rss SET en_cours_etat = 'F' FROM pmsi.p_rss_etat WHERE p_rss.oid = p_rss_etat.rss_id AND en_cours = '1' AND en_cours_etat IS DISTINCT FROM 'F' AND est_facture = 1 ; ]]>