'' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END AS MEDE_CODE, MEDE_NOM_USU, COALESCE(MEDE_PRENOM,'') AS MEDE_PRENOM, COALESCE(t_specialites_medecin.oid,0), COALESCE(t_specialites_internes_medecin.oid,0), COALESCE(MEDI_ADELI,'') AS MEDI_ADELI FROM prod_hm.IDE_MEDECIN LEFT JOIN (SELECT MEDI_ID_MEDE, MAX(MEDI_ADELI) AS MEDI_ADELI, MAX(MEDI_ID_CAGE) AS MEDI_ID_CAGE FROM prod_hm.IDE_MEDECIN_IMMAT WHERE MEDI_ID_ETAB = [ETAB] GROUP BY 1) subview ON (MEDE_ID_MEDE = MEDI_ID_MEDE) LEFT JOIN prod_hm.BAS_CATALOGUE_GEN ON (MEDI_ID_CAGE = CAGE_ID_CAGE) LEFT JOIN pmsi.t_specialites_medecin ON (t_specialites_medecin.code = CAGE_CODE) LEFT JOIN pmsi.t_specialites_internes_medecin ON (t_specialites_internes_medecin.code = CAGE_CODE || '..') LEFT JOIN pmsi.t_medecins ON (CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END = t_medecins.code) WHERE MEDE_ID_MEDE IN (SELECT TRSS_ID_MEDE FROM prod_hm.PMS_RSS JOIN prod_hm.IDE_SEJOUR ON (TRSS_ID_SEJO_D = SEJO_ID_SEJO) WHERE SEJO_ID_ETAB_CON = [ETAB] GROUP BY 1) AND t_medecins.oid IS NULL; INSERT INTO pmsi.t_medecins(code, nom, prenom, specialite_id, specialite_interne_id, no_adeli) SELECT CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END AS MEDE_CODE, MEDE_NOM_USU, COALESCE(MEDE_PRENOM,'') AS MEDE_PRENOM, COALESCE(t_specialites_medecin.oid,0), COALESCE(t_specialites_internes_medecin.oid,0), COALESCE(MEDI_ADELI,'') AS MEDI_ADELI FROM prod_hm.IDE_MEDECIN LEFT JOIN (SELECT MEDI_ID_MEDE, MAX(MEDI_ADELI) AS MEDI_ADELI, MAX(MEDI_ID_CAGE) AS MEDI_ID_CAGE FROM prod_hm.IDE_MEDECIN_IMMAT WHERE MEDI_ID_ETAB = [ETAB] GROUP BY 1) subview ON (MEDE_ID_MEDE = MEDI_ID_MEDE) LEFT JOIN prod_hm.BAS_CATALOGUE_GEN ON (MEDI_ID_CAGE = CAGE_ID_CAGE) LEFT JOIN pmsi.t_specialites_medecin ON (t_specialites_medecin.code = CAGE_CODE) LEFT JOIN pmsi.t_specialites_internes_medecin ON (t_specialites_internes_medecin.code = CAGE_CODE || '..') LEFT JOIN pmsi.t_medecins ON (CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END = t_medecins.code) WHERE MEDE_ID_MEDE IN (SELECT SEJO_ID_MEDE_COURANT FROM prod_hm.IDE_SEJOUR WHERE SEJO_ID_ETAB_CON = [ETAB] GROUP BY 1) AND t_medecins.oid IS NULL; INSERT INTO pmsi.t_medecins(code, nom, prenom, specialite_id, specialite_interne_id, no_adeli) SELECT CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END AS MEDE_CODE, MEDE_NOM_USU, COALESCE(MEDE_PRENOM,'') AS MEDE_PRENOM, COALESCE(t_specialites_medecin.oid,0), COALESCE(t_specialites_internes_medecin.oid,0), COALESCE(MEDI_ADELI,'') AS MEDI_ADELI FROM prod_hm.IDE_MEDECIN LEFT JOIN (SELECT MEDI_ID_MEDE, MAX(MEDI_ADELI) AS MEDI_ADELI, MAX(MEDI_ID_CAGE) AS MEDI_ID_CAGE FROM prod_hm.IDE_MEDECIN_IMMAT WHERE MEDI_ID_ETAB = [ETAB] GROUP BY 1) subview ON (MEDE_ID_MEDE = MEDI_ID_MEDE) LEFT JOIN prod_hm.BAS_CATALOGUE_GEN ON (MEDI_ID_CAGE = CAGE_ID_CAGE) LEFT JOIN pmsi.t_specialites_medecin ON (t_specialites_medecin.code = CAGE_CODE) LEFT JOIN pmsi.t_specialites_internes_medecin ON (t_specialites_internes_medecin.code = CAGE_CODE || '..') LEFT JOIN pmsi.t_medecins ON (CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END = t_medecins.code) WHERE MEDE_ID_MEDE IN (SELECT LFAC_ID_MEDE_EXE from prod_hm.FAC_LIGNE_FACTURE where LFAC_ID_ETAB_D = [ETAB] AND LFAC_ID_MEDE_EXE > 0 GROUP BY 1) AND t_medecins.oid IS NULL; INSERT INTO pmsi.t_unites_medicales(code, texte) SELECT UNME_CODE, UNME_LIBELLE FROM prod_hm.SAD_UM WHERE UNME_ID_ETAB = [ETAB] AND UNME_CODE NOT IN (SELECT code FROM pmsi.t_unites_medicales) ORDER BY UNME_CODE; -- Remplacement des Unités médicales par les Unités Fonctionnelles pour les externes INSERT INTO pmsi.t_divers (code, texte, valeur, description) SELECT 'EXT_UF_UM', 'Remplacer les UM par les UF pour les externes (HM)', 'UM', 'UF:unites fonctionnelles, UM:unités médicales' WHERE 'EXT_UF_UM' NOT IN (SELECT code FROM pmsi.t_divers); ; INSERT INTO pmsi.t_unites_medicales(code, texte) SELECT UNFO_CODE, UNFO_LIBELLE FROM prod_hm.BAS_UF JOIN pmsi.t_divers ON t_divers.code = 'EXT_UF_UM' WHERE 1=1 AND UNFO_ID_ETAB = [ETAB] AND UNFO_CODE NOT IN (SELECT code FROM pmsi.t_unites_medicales) AND UNFO_ID_UNME > 0 AND t_divers.valeur = 'UF' ORDER BY 1; INSERT INTO pmsi.t_prestations(code, texte, texte_court) SELECT LFAC_LET_CLE, LFAC_LET_CLE, LFAC_LET_CLE FROM prod_hm.FAC_LIGNE_FACTURE WHERE LFAC_ID_PRSE <> 0 AND LFAC_LET_CLE NOT IN (select code from pmsi.t_prestations) GROUP BY 1,2,3; SELECT pmsi.cti_reorganize_medecins_c(); -- maj des établissements insérés juste avec le finess UPDATE base.t_etablissements SET texte = ETEX_NOM, texte_court = ETEX_NOM FROM prod_hm.IDE_ETABLISSEMENT_EXTERIEUR WHERE 1=1 AND ETEX_CODE = t_etablissements.code AND t_etablissements.code = t_etablissements.texte ; ]]> MAX(SEJO_ID_MEDE_COURANT) ) subview WHERE SEJO_ID_SEJO = MESE_ID_SEJO ',1) WHERE 't_divers' IN (SELECT tablename FROM pg_tables WHERE schemaname = 'activite') ; DROP TABLE IF EXISTS w_PMS_RSS; CREATE TEMP TABLE w_PMS_RSS AS SELECT TRSS_ID_TRSS, TRSS_NUMERO, MAX(TRSS_ID_MEDE) AS TRSS_ID_MEDE, MAX(TRUM_DAT_SOR_RUM) AS TRSS_DAT_SOR, MAX(TRUM_ID_SEJO) AS TRSS_ID_SEJO FROM prod_hm.pms_rss JOIN prod_hm.PMS_RUM ON TRSS_ID_TRSS = TRUM_ID_TRSS GROUP BY 1,2; CREATE INDEX w_PMS_RSS_i1 ON w_PMS_RSS USING btree (TRSS_NUMERO); UPDATE [SCHEMA].p_rss SET no_sejour_administratif = SEJO_NUM_SEJ FROM w_PMS_RSS JOIN prod_hm.ide_sejour ON trss_id_sejo = sejo_id_sejo WHERE p_rss.no_rss = TRSS_NUMERO AND p_rss.date_sortie = date(TRSS_DAT_SOR) AND ghm_id <> 0 AND SEJO_DAT_SUP IS NULL AND sejo_num_sej IS NOT NULL AND no_sejour_administratif <> SEJO_NUM_SEJ; UPDATE [SCHEMA].p_rss SET no_sejour_administratif = SEJO_NUM_SEJ FROM prod_hm.FAC_FACTURE JOIN prod_hm.IDE_SEJOUR ON FACT_ID_SEJO = SEJO_ID_SEJO WHERE p_rss.date_entree = date(SEJO_DAT_DEB) AND p_rss.date_sortie = date(SEJO_DAT_FIN) AND ghm_id = 0 AND FACT_NUM_FAC NOT LIKE 'P%' AND FACT_NUM_FAC LIKE '%' || no_sejour_administratif AND SEJO_DAT_SUP IS NULL AND FACT_NUM_FAC IS NOT NULL AND no_sejour_administratif <> SEJO_NUM_SEJ; UPDATE [SCHEMA].p_rss SET no_sejour_administratif = SEJO_NUM_SEJ FROM prod_hm.IDE_SEJOUR WHERE p_rss.date_entree = date(SEJO_DAT_DEB) AND p_rss.date_sortie = date(SEJO_DAT_FIN) AND SEJO_NUM_SEJ LIKE '%' || no_sejour_administratif AND SEJO_DAT_SUP IS NULL AND no_sejour_administratif <> SEJO_NUM_SEJ; UPDATE [SCHEMA].p_identites SET nom = PATI_NOM_USU, prenom = PATI_PRENOM, nom_naissance = CASE WHEN PATI_NOM_NAI <> PATI_NOM_USU THEN PATI_NOM_NAI ELSE '' END FROM [SCHEMA].p_rss JOIN prod_hm.IDE_SEJOUR ON no_sejour_administratif = SEJO_NUM_SEJ AND SEJO_DAT_SUP IS NULL AND p_rss.date_sortie = date(SEJO_DAT_FIN) JOIN prod_hm.IDE_PATIENT ON SEJO_ID_PATI = PATI_ID_PATI WHERE p_identites.rss_id = p_rss.oid AND ( nom IS DISTINCT FROM PATI_NOM_USU OR prenom IS DISTINCT FROM PATI_PRENOM OR nom_naissance IS DISTINCT FROM (CASE WHEN PATI_NOM_NAI <> PATI_NOM_USU THEN PATI_NOM_NAI ELSE '' END) ) ; UPDATE [SCHEMA].p_rss SET no_patient = COALESCE(NULLIF(TRIM(IDE_PATIENT.PATI_NIP), ''), '0')::bigint FROM prod_hm.IDE_SEJOUR JOIN prod_hm.IDE_PATIENT ON SEJO_ID_PATI = PATI_ID_PATI WHERE 1=1 AND no_sejour_administratif = SEJO_NUM_SEJ AND SEJO_DAT_SUP IS NULL AND p_rss.date_sortie = date(SEJO_DAT_FIN) AND no_patient IS DISTINCT FROM IDE_PATIENT.PATI_NIP ; ]]> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END WHERE p_rss.no_rss = TRSS_NUMERO AND ghm_id <> 0 AND p_rss.date_sortie = date(TRSS_DAT_SOR) AND medecin_rss_id <> t_medecins.oid; UPDATE [SCHEMA].p_rss SET medecin_rss_id = t_medecins.oid FROM prod_hm.IDE_SEJOUR JOIN prod_hm.IDE_MEDECIN ON SEJO_ID_MEDE_COURANT = MEDE_ID_MEDE JOIN pmsi.t_medecins ON t_medecins.code = CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END WHERE 1=1 AND no_sejour_administratif = SEJO_NUM_SEJ AND SEJO_DAT_SUP IS NULL AND p_rss.date_entree = date(SEJO_DAT_DEB) AND p_rss.date_sortie = date(SEJO_DAT_FIN) AND t_medecins.oid <> medecin_rss_id; UPDATE [SCHEMA].p_rss SET medecin_rss_id = t_medecins.oid FROM prod_hm.IDE_SEJOUR JOIN prod_hm.IDE_MEDECIN ON SEJO_ID_MEDE_COURANT = MEDE_ID_MEDE JOIN pmsi.t_medecins ON t_medecins.code = CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END WHERE no_sejour_administratif = SEJO_NUM_SEJ AND SEJO_DAT_SUP IS NULL AND p_rss.date_entree = date(SEJO_DAT_DEB) AND p_rss.date_sortie = date(SEJO_DAT_FIN) AND ghm_id = 0 AND t_medecins.oid <> medecin_rss_id; -- Sans critère sur date de sortie, cas des séjours modifiés depuis la création du lot importé UPDATE [SCHEMA].p_rss SET medecin_rss_id = t_medecins.oid FROM prod_hm.IDE_SEJOUR JOIN prod_hm.IDE_MEDECIN ON SEJO_ID_MEDE_COURANT = MEDE_ID_MEDE JOIN pmsi.t_medecins ON t_medecins.code = CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END WHERE 1=1 AND no_sejour_administratif = SEJO_NUM_SEJ AND SEJO_DAT_SUP IS NULL AND p_rss.date_entree = date(SEJO_DAT_DEB) AND ghm_id != 0 AND medecin_rss_id = 0; ]]> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END = t_medecins.code WHERE ghm_id <> 0 AND TRSS_NUMERO = p_rss.no_rss AND p_rss.date_sortie = date(SEJO_DAT_FIN) AND p_rss_actes.rss_id = p_rss.oid AND p_rss_actes.date_acte = date(ACSA_DAT_EXE_DEB) AND (p_rss_actes.activite_ccam = ACSA_COD_ACT_D OR p_rss_actes.activite_ccam = '1' AND ACSA_COD_ACT_D = 0) AND p_rss_actes.acte_id = t_actes.oid AND (t_actes.code = ACSA_CODE_D || COALESCE(ACSA_COD_ACT_DESC, ''::text) OR t_actes.code = ACSA_CODE_D) AND p_rss_actes.medecin_id <> t_medecins.oid; UPDATE [SCHEMA].p_rss_actes SET medecin_id = t_medecins.oid FROM pmsi.t_actes, [SCHEMA].p_rss, prod_hm.IDE_SEJOUR JOIN prod_hm.SAD_ACTES_SAISIS ON ASAI_ID_SEJO = SEJO_ID_SEJO JOIN prod_hm.SAD_ACTIVITE_SAISIES ON ACSA_ID_ASAI = ASAI_ID_ASAI JOIN prod_hm.IDE_MEDECIN ON ACSA_ID_MEDE = MEDE_ID_MEDE JOIN pmsi.t_medecins ON CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END = t_medecins.code WHERE ghm_id = 0 and no_sejour_administratif = SEJO_NUM_SEJ AND p_rss.date_sortie = date(SEJO_DAT_FIN) AND p_rss_actes.rss_id = p_rss.oid AND p_rss_actes.date_acte = date(ACSA_DAT_EXE_DEB) AND (p_rss_actes.activite_ccam = ACSA_COD_ACT_D OR p_rss_actes.activite_ccam = '1' AND ACSA_COD_ACT_D = 0) AND p_rss_actes.acte_id = t_actes.oid AND (t_actes.code = ACSA_CODE_D || COALESCE(ACSA_COD_ACT_DESC, ''::text) OR t_actes.code = ACSA_CODE_D) AND p_rss_actes.medecin_id <> t_medecins.oid; ]]> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END WHERE p_rss_rum.no_rss = TRSS_NUMERO AND p_rss_rum.date_sortie = date(TRUM_DAT_SOR_RUM) AND (medecin_rum_id is null or medecin_rum_id = 0); ]]> MAX(SEJO_ID_MEDE_COURANT) ) subview WHERE SEJO_ID_SEJO = MESE_ID_SEJO ',1) WHERE 't_divers' IN (SELECT tablename FROM pg_tables WHERE schemaname = 'activite') ; DROP TABLE IF EXISTS w_IDE_MEDECIN_used; CREATE TEMP TABLE w_IDE_MEDECIN_used AS SELECT TRSS_ID_MEDE AS USED_ID_MEDE FROM prod_hm.PMS_RSS JOIN prod_hm.IDE_SEJOUR ON (TRSS_ID_SEJO_D = SEJO_ID_SEJO) WHERE SEJO_ID_ETAB_CON = [ETAB] GROUP BY 1 ; INSERT INTO w_IDE_MEDECIN_used SELECT SEJO_ID_MEDE_COURANT FROM prod_hm.IDE_SEJOUR WHERE SEJO_ID_ETAB_CON = [ETAB] GROUP BY 1 ; INSERT INTO w_IDE_MEDECIN_used SELECT LFAC_ID_MEDE_EXE FROM prod_hm.FAC_LIGNE_FACTURE WHERE LFAC_ID_ETAB_D = [ETAB] AND LFAC_ID_MEDE_EXE > 0 GROUP BY 1 ; INSERT INTO pmsi.t_medecins(code, nom, prenom, specialite_id, specialite_interne_id, no_adeli) SELECT CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END AS MEDE_CODE, MAX(MEDE_NOM_USU), MAX(COALESCE(MEDE_PRENOM,'')) AS MEDE_PRENOM, MAX(COALESCE(t_specialites_medecin.oid,0)), MAX(COALESCE(t_specialites_internes_medecin.oid,0)), MAX(COALESCE(MEDI_ADELI,'')) AS MEDI_ADELI FROM prod_hm.IDE_MEDECIN LEFT JOIN (SELECT MEDI_ID_MEDE, MAX(MEDI_ADELI) AS MEDI_ADELI, MAX(MEDI_ID_CAGE) AS MEDI_ID_CAGE FROM prod_hm.IDE_MEDECIN_IMMAT WHERE MEDI_ID_ETAB = [ETAB] GROUP BY 1) subview ON (MEDE_ID_MEDE = MEDI_ID_MEDE) LEFT JOIN prod_hm.BAS_CATALOGUE_GEN ON (MEDI_ID_CAGE = CAGE_ID_CAGE) LEFT JOIN pmsi.t_specialites_medecin ON (t_specialites_medecin.code = CAGE_CODE) LEFT JOIN pmsi.t_specialites_internes_medecin ON (t_specialites_internes_medecin.code = CAGE_CODE || '..') LEFT JOIN pmsi.t_medecins ON (CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END = t_medecins.code) WHERE MEDE_ID_MEDE = ANY (SELECT USED_ID_MEDE FROM w_IDE_MEDECIN_used) AND t_medecins.oid IS NULL GROUP BY 1 ; INSERT INTO pmsi.t_unites_medicales(code, texte) SELECT UNME_CODE, UNME_LIBELLE FROM prod_hm.SAD_UM WHERE UNME_ID_ETAB = [ETAB] AND UNME_CODE NOT IN (SELECT code FROM pmsi.t_unites_medicales) ORDER BY UNME_CODE; INSERT INTO pmsi.t_prestations(code, texte, texte_court) SELECT LFAC_LET_CLE, LFAC_LET_CLE, LFAC_LET_CLE FROM prod_hm.FAC_LIGNE_FACTURE WHERE LFAC_ID_PRSE <> 0 AND LFAC_LET_CLE NOT IN (select code from pmsi.t_prestations) GROUP BY 1,2,3; ]]> 1; -- Identification des RSS (hospit et ambu) DROP TABLE IF EXISTS w_rss_select; CREATE TEMP TABLE w_rss_select AS SELECT TRSS_NUMERO, TRSS_ID_TRSS, SEJO_ID_SEJO, SEJO_NUM_SEJ, SEJO_DAT_FIN, SEJO_ID_PATI, CASE WHEN t_divers_finess.valeur = '1' THEN ETAB_COD_FIN ELSE w_finess.code END AS ETAB_COD_FIN, MAX(CASE WHEN TRUM_COD_ADNP is null or TRIM(TRUM_COD_ADNP) = '' THEN '0' ELSE TRUM_COD_ADNP END) as w_TRUM_COD_ADNP, MIN(TRUM_DAT_ENT_RUM) as w_DATE_ENTREE, MAX(TRUM_DAT_SOR_RUM) as w_DATE_SORTIE, MAX(SEJO_ID_MEDE_COURANT) AS SEJO_ID_MEDE_COURANT, COALESCE(NULLIF(MAX(TRSS_COD_CTX_PAT_SURVEILLANCE), ''), '0')::smallint AS w_PAT_SURVEILLANCE, COALESCE(NULLIF(MAX(TRSS_COD_ADT_PDT_RES_HOSPIT), ''), '0')::smallint AS w_RES_HOSPIT, COALESCE(NULLIF(MAX(TRSS_COD_RESCRIT_TARIFAIRE), ''), '0')::smallint AS w_RESCRIT_TARIFAIRE, COALESCE(MAX(TRSS_COD_NBR_TOT_INTERVENTION), '') AS w_NBR_TOT_INTERVENTION FROM prod_hm.PMS_RSS JOIN prod_hm.IDE_SEJOUR ON (TRSS_ID_SEJO_D = SEJO_ID_SEJO AND SEJO_ID_ETAB_CON = [ETAB]) JOIN prod_hm.BAS_UF ON SEJO_ID_UNFO = UNFO_ID_UNFO AND SEJO_ID_ETAB_CON = UNFO_ID_ETAB JOIN prod_hm.BAS_ETABLISSEMENT ON (SEJO_ID_ETAB_CON = ETAB_ID_ETAB) JOIN prod_hm.PMS_RUM ON (TRUM_ID_TRSS = TRSS_ID_TRSS) JOIN pmsi.t_divers t_divers_finess ON t_divers_finess.code = 'HM_FINESS' JOIN w_finess ON 1=1 LEFT JOIN prod_hm.PMS_GHM ON (TRSS_ID_TGHM = TGHM_ID_TGHM) LEFT JOIN pmsi.t_divers t_select_ser ON t_select_ser.code = 'FILDELEAU_SER' WHERE (t_select_ser.valeur IS NULL OR t_select_ser.valeur = '' OR replace(UNFO_CODE, ',', '@') = ANY (string_to_array(replace(t_select_ser.valeur,' ',''),','))) AND date(SEJO_DAT_FIN) BETWEEN '[ANNEE]0101' AND date(now()) AND SEJO_DAT_DEB <= date(now()) AND TRSS_NUMERO > 0 AND SEJO_DAT_DEB <= SEJO_DAT_FIN AND SEJO_DAT_SUP IS NULL AND COALESCE(TGHM_NUMERO,'') NOT LIKE '28%' GROUP BY 1,2,3,4,5,6,7 HAVING MAX(TRUM_DAT_SOR_RUM) >= '[ANNEE]0101' ORDER BY SEJO_NUM_SEJ, TRSS_NUMERO; INSERT INTO w_rss_select SELECT TRSS_NUMERO, TRSS_ID_TRSS, SEJO_ID_SEJO, SEJO_NUM_SEJ, MAX(TRUM_DAT_SOR_RUM) AS TRUM_DAT_SOR_RUM, SEJO_ID_PATI, CASE WHEN t_divers_finess.valeur = '1' THEN ETAB_COD_FIN ELSE w_finess.code END AS ETAB_COD_FIN, MAX(CASE WHEN TRUM_COD_ADNP is null or TRIM(TRUM_COD_ADNP) = '' THEN '0' ELSE TRUM_COD_ADNP END) as w_TRUM_COD_ADNP, MIN(TRUM_DAT_ENT_RUM) as w_DATE_ENTREE, MAX(TRUM_DAT_SOR_RUM) as w_DATE_SORTIE, MAX(SEJO_ID_MEDE_COURANT) AS SEJO_ID_MEDE_COURANT, COALESCE(NULLIF(MAX(TRSS_COD_CTX_PAT_SURVEILLANCE), ''), '0')::smallint AS w_PAT_SURVEILLANCE, COALESCE(NULLIF(MAX(TRSS_COD_ADT_PDT_RES_HOSPIT), ''), '0')::smallint AS w_RES_HOSPIT, COALESCE(NULLIF(MAX(TRSS_COD_RESCRIT_TARIFAIRE), ''), '0')::smallint AS w_RESCRIT_TARIFAIRE, COALESCE(MAX(TRSS_COD_NBR_TOT_INTERVENTION), '') AS w_NBR_TOT_INTERVENTION FROM prod_hm.PMS_RSS JOIN prod_hm.IDE_SEJOUR ON (TRSS_ID_SEJO_D = SEJO_ID_SEJO AND SEJO_ID_ETAB_CON = [ETAB]) JOIN prod_hm.BAS_UF ON SEJO_ID_UNFO = UNFO_ID_UNFO AND SEJO_ID_ETAB_CON = UNFO_ID_ETAB JOIN prod_hm.BAS_ETABLISSEMENT ON (SEJO_ID_ETAB_CON = ETAB_ID_ETAB) JOIN prod_hm.PMS_RUM ON (TRUM_ID_TRSS = TRSS_ID_TRSS) JOIN pmsi.t_divers t_divers_finess ON t_divers_finess.code = 'HM_FINESS' JOIN w_finess ON 1=1 LEFT JOIN prod_hm.PMS_GHM ON (TRSS_ID_TGHM = TGHM_ID_TGHM) LEFT JOIN pmsi.t_divers t_select_ser ON t_select_ser.code = 'FILDELEAU_SER' WHERE (t_select_ser.valeur IS NULL OR t_select_ser.valeur = '' OR replace(UNFO_CODE, ',', '@') = ANY (string_to_array(replace(t_select_ser.valeur,' ',''),','))) AND date(TRUM_DAT_SOR_RUM) BETWEEN '[ANNEE]0101' AND date(now()) AND TRUM_DAT_ENT_RUM <= date(now()) AND TRSS_NUMERO > 0 AND TRUM_DAT_ENT_RUM <= TRUM_DAT_SOR_RUM AND SEJO_DAT_SUP IS NULL AND COALESCE(TGHM_NUMERO,'') LIKE '28%' GROUP BY 1,2,3,4,6,7 HAVING MAX(TRUM_DAT_SOR_RUM) >= '[ANNEE]0101' ORDER BY SEJO_NUM_SEJ, TRSS_NUMERO; UPDATE w_rss_select SET w_DATE_SORTIE = SEJO_DAT_FIN WHERE w_DATE_SORTIE IS NULL; CREATE INDEX w_rss_select_i1 ON w_rss_select USING btree (TRSS_NUMERO); CREATE INDEX w_rss_select_i2 ON w_rss_select USING btree (SEJO_NUM_SEJ); DROP TABLE IF EXISTS w_rss; CREATE TEMP TABLE w_rss AS SELECT ETAB_COD_FIN AS WRSS_COD_FIN, TRSS_ID_TRSS AS WRSS_ID_TRSS, TRSS_NUMERO AS WRSS_NUMERO, SEJO_ID_SEJO AS WRSS_ID_SEJO, SEJO_ID_PATI AS WRSS_ID_PATI, w_DATE_ENTREE, w_DATE_SORTIE, nextval('pmsi.s_rss'::regclass) AS rss_id, w_TRUM_COD_ADNP, w_PAT_SURVEILLANCE, w_RES_HOSPIT, w_RESCRIT_TARIFAIRE, w_NBR_TOT_INTERVENTION FROM w_rss_select LEFT JOIN pmsi.p_rss p_rss_1 ON TRSS_NUMERO = p_rss_1.no_rss AND p_rss_1.etat = '' AND date_trunc('month',p_rss_1.date_sortie) = date_trunc('month', w_DATE_SORTIE) LEFT JOIN pmsi.p_rss p_rss_2 ON SEJO_NUM_SEJ = p_rss_2.no_sejour_administratif AND p_rss_2.etat = '' AND date_trunc('month',p_rss_2.date_sortie) = date_trunc('month', w_DATE_SORTIE) WHERE 1=1 AND p_rss_1.no_rss IS NULL AND p_rss_2.no_rss IS NULL ; DROP TABLE IF EXISTS w_rss_passage_urgence; CREATE TEMP TABLE w_rss_passage_urgence AS SELECT rss_id, CAGE_CODE as w_passage_urgences_code FROM prod_hm.IDE_MOUVEMENT JOIN prod_hm.BAS_CATALOGUE_GEN ON MOUV_ID_CAGE_STRUCT_URGENCES = CAGE_ID_CAGE JOIN w_rss ON MOUV_ID_SEJO = WRSS_ID_SEJO WHERE w_DATE_SORTIE >= '[ANNEE]0101' AND MOUV_ID_CAGE_STRUCT_URGENCES IS NOT NULL ; 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, ghm_production_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, from_oid, raac_id, np_id, passage_urgences_code, contexte_pat_id, adm_prod_reshospi_id, rescrit_tarif_id, nb_intervention_id ) SELECT WRSS_COD_FIN AS finess, w_rss.rss_id AS oid, TRSS_NUMERO AS no_rss, COALESCE(NULLIF(TRIM(IDE_PATIENT.PATI_NIP), ''), '0')::bigint AS no_patient, '11' AS version_groupage, date(PATI_DAT_NAI) AS date_naissance, CASE WHEN PATI_SEXE = 'F' THEN '2' ELSE '1' END AS sexe, date(w_DATE_ENTREE) AS date_entree, date(w_DATE_SORTIE) AS date_sortie, '8' AS mode_entree, '' AS provenance, '8' AS mode_sortie, '' AS destination, '' AS code_postal, 0 AS poids_bebe, 0 AS igs2, '' AS cma, substr(TGHM_NUMERO , 3 , 1) AS groupe_ghm, CASE WHEN SEJO_DAT_FIN > w_DATE_ENTREE THEN date(w_DATE_SORTIE) - date(w_DATE_ENTREE) ELSE 0 END AS duree_sejour, CASE WHEN substr(TGHM_NUMERO,1,2) = '28' THEN 1 ELSE 1 END AS nb_rsa, CASE WHEN w_DATE_ENTREE > PATI_DAT_NAI AND trunc((date(w_DATE_ENTREE) - date(PATI_DAT_NAI)) / 365.25,0) BETWEEN 0 AND 120 THEN trunc((date(w_DATE_ENTREE) - date(PATI_DAT_NAI)) / 365.25,0) ELSE 0 END AS age, '' AS supprime, now() AS date_import, 1 AS nb_rum, '' AS secteur, SEJO_NUM_SEJ AS no_sejour_administratif, CASE WHEN substr(TGHM_NUMERO,1,2) = '28' THEN 1 ELSE 0 END AS nb_seances, '' AS ghm_fg9, COALESCE(t_ghm.oid, 0) AS ghm_id, 0 AS medecin_rss_id, COALESCE(t_ghs.oid, 0) AS ghs_id, date_part('year', w_DATE_SORTIE) * 100 + date_part('month', w_DATE_SORTIE) AS mois_sortie, 0 AS diagnostic_principal_id, 0 AS diagnostic_relie_id, COALESCE(t_ghm.oid, 0) AS ghm_production_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(TGHM_NUMERO) = 6 AND substr(TGHM_NUMERO,1,2) <> '90' AND (TRSS_ETA_CONFIRMATION = '1' OR TRSS_DAT_SIG IS NOT NULL) THEN 'V' WHEN length(TGHM_NUMERO) = 6 AND substr(TGHM_NUMERO,1,2) <> '90' 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 ERGR_COD_ERR_GRO ~'[A-Z][0-9]*' THEN substring(ERGR_COD_ERR_GRO,2) ELSE ERGR_COD_ERR_GRO END,'') AS code_retour_groupage, 0 AS comite_medical_id, '0' AS rehosp_meme_ghm, 0 AS from_oid, COALESCE(t_raac.oid, 0), w_TRUM_COD_ADNP::smallint AS np_id, COALESCE(w_passage_urgences_code, '') AS passage_urgences_code, w_PAT_SURVEILLANCE AS contexte_pat_id, w_RES_HOSPIT AS adm_prod_reshospi_id, w_RESCRIT_TARIFAIRE AS rescrit_tarif_id, COALESCE(t_nb_interventions.oid, 0) AS nb_intervention_id FROM prod_hm.PMS_RSS JOIN w_rss ON (WRSS_ID_TRSS = TRSS_ID_TRSS) JOIN prod_hm.IDE_SEJOUR ON (WRSS_ID_SEJO = SEJO_ID_SEJO) JOIN prod_hm.IDE_PATIENT ON (PATI_ID_PATI = SEJO_ID_PATI) LEFT JOIN prod_hm.PMS_GHM ON (TRSS_ID_TGHM = TGHM_ID_TGHM) LEFT JOIN (SELECT ERSG_ID_TRSS, (MAX(ARRAY[ERSG_ID_ERSG,ERSG_ID_ERGR]))[2] AS ERSG_ID_ERGR FROM prod_hm.PMS_ERR_SEC_GROUP GROUP BY 1) PMS_ERR_SEC_GROUP ON TRSS_ID_TRSS = ERSG_ID_TRSS LEFT JOIN prod_hm.PMS_ERR_GROUPAGE ON TRSS_ID_ERGR = ERGR_ID_ERGR LEFT JOIN pmsi.t_ghm ON (TGHM_NUMERO = t_ghm.code) LEFT JOIN pmsi.t_ghs ON (TRSS_SARGH_NUM_GHS = t_ghs.code) LEFT JOIN pmsi.t_raac ON t_raac.code = pms_rss.trss_raac LEFT JOIN pmsi.t_np ON t_np.code = w_rss.w_trum_cod_adnp LEFT JOIN w_rss_passage_urgence ON w_rss.rss_id = w_rss_passage_urgence.rss_id LEFT JOIN pmsi.t_nb_interventions ON w_rss.w_NBR_TOT_INTERVENTION = t_nb_interventions.code ; DELETE FROM pmsi.p_rss_leg WHERE rss_id IN (SELECT oid FROM pmsi.p_rss WHERE 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_hm.PMS_ERR_SEC_GROUP JOIN prod_hm.PMS_RSS ON TRSS_ID_TRSS = ERSG_ID_TRSS JOIN prod_hm.PMS_ERR_GROUPAGE ON ERSG_ID_ERGR = ERGR_ID_ERGR JOIN prod_hm.IDE_SEJOUR ON TRSS_ID_SEJO_D = SEJO_ID_SEJO JOIN pmsi.t_codes_retour_groupeur ON t_codes_retour_groupeur.type || t_codes_retour_groupeur.code = ERGR_COD_ERR_GRO JOIN pmsi.p_rss ON SEJO_NUM_SEJ::text = no_sejour_administratif WHERE import_id = -1; UPDATE pmsi.p_rss SET code_postal = SUBSTR(ADRE_COD_POS, 1 , 5) FROM w_rss, prod_hm.IDE_ADRESSE WHERE rss_id = p_rss.oid AND WRSS_ID_PATI = ADRE_ID_OBJ; UPDATE pmsi.p_rss SET medecin_rss_id = t_medecins.oid FROM prod_hm.PMS_RSS JOIN prod_hm.IDE_MEDECIN ON TRSS_ID_MEDE = MEDE_ID_MEDE JOIN pmsi.t_medecins ON t_medecins.code = CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END WHERE p_rss.no_rss = TRSS_NUMERO AND ghm_id <> 0 AND medecin_rss_id = 0 AND t_medecins.oid != 0 ; UPDATE pmsi.p_rss SET medecin_rss_id = t_medecins.oid FROM w_rss_select JOIN prod_hm.IDE_MEDECIN ON SEJO_ID_MEDE_COURANT = MEDE_ID_MEDE JOIN pmsi.t_medecins ON t_medecins.code = CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END WHERE 1=1 AND p_rss.import_id < 0 AND w_rss_select.TRSS_NUMERO = p_rss.no_rss AND date(w_DATE_SORTIE) = p_rss.date_sortie AND medecin_rss_id = 0 ; -- Etablissements de provenance et destination -- insertion nouveaux etablissements DROP TABLE IF EXISTS w_ETAB; CREATE TEMP TABLE w_ETAB AS SELECT * FROM prod_hm.IDE_ETABLISSEMENT_EXTERIEUR LEFT JOIN base.t_etablissements ON ETEX_CODE = code WHERE ETEX_ID_ETEX = ANY(array(SELECT SEJO_ID_ETEX_PRO FROM prod_hm.IDE_SEJOUR)::bigint[]) OR ETEX_ID_ETEX = ANY(array(SELECT SEJO_ID_ETEX_DES FROM prod_hm.IDE_SEJOUR)::bigint[]); INSERT INTO base.t_etablissements ( code, texte, texte_court ) SELECT ETEX_CODE, ETEX_NOM, ETEX_NOM FROM w_ETAB WHERE code IS NULL; -- rechargements des etablissements DROP TABLE IF EXISTS w_ETAB; CREATE TEMP TABLE w_ETAB AS SELECT * FROM prod_hm.IDE_ETABLISSEMENT_EXTERIEUR LEFT JOIN base.t_etablissements ON ETEX_CODE = code; /********************************************************************************** * 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(MAX(etex_pro.oid),0) as prov_id, COALESCE(MAX(etex_des.oid),0) as dest_id FROM prod_hm.IDE_SEJOUR JOIN pmsi.p_rss ON SEJO_NUM_SEJ = no_sejour_administratif AND SEJO_NUM_SEJ <> '' LEFT JOIN w_ETAB as etex_pro ON SEJO_ID_ETEX_PRO = etex_pro.ETEX_ID_ETEX LEFT JOIN w_ETAB as etex_des ON SEJO_ID_ETEX_DES = etex_des.ETEX_ID_ETEX WHERE 1=1 AND (SEJO_ID_ETEX_PRO <> 0 OR SEJO_ID_ETEX_DES <> 0) AND etat != 'S' GROUP BY 1,2 ; ]]> '''' THEN MEDE_CODE::text ELSE NULL END, MEDE_ID_MEDE::text) as code FROM prod_hm.IDE_MEDECIN GROUP BY 1,2 ), new_data AS ( SELECT trum_id_mede, COALESCE(t_medecins.oid,0) as med_id FROM prod_hm.PMS_RUM JOIN w_rss ON TRUM_ID_TRSS = WRSS_ID_TRSS JOIN med_code ON TRUM_ID_MEDE =MEDE_ID_MEDE JOIN pmsi.t_medecins ON t_medecins.code = med_code.code WHERE TRUM_DAT_SUP IS NULL GROUP BY 1,2 ) UPDATE w_rum SET tmp_trum_id_mede = med_id FROM new_data WHERE w_rum.tmp_trum_id_mede = new_data.trum_id_mede ', 1) WHERE ( SELECT 1 FROM pg_attribute WHERE attrelid = ( SELECT relid FROM pg_stat_user_tables WHERE schemaname = 'prod_hm' AND relname = 'pms_rum' ) AND attname = 'trum_id_mede' ) = 1; INSERT INTO pmsi.p_rss_rum( finess, rss_id, no_rss, no_rum, date_entree, date_sortie, mode_entree, provenance, mode_sortie, destination, duree_sejour, nb_seances, unite_medicale, diagnostic_principal_id, diagnostic_relie_id, unite_medicale_id, type_autorisation, igs2, type_autorisation_lit_dedie, supplement_code, medecin_rum_id) SELECT WRSS_COD_FIN AS finess, w_rss.rss_id AS oid, WRSS_NUMERO AS no_rss, WRUM_NUMERO AS no_rum, date(TRUM_DAT_ENT_RUM) AS date_entree, date(COALESCE(TRUM_DAT_SOR_RUM, w_DATE_SORTIE)) AS date_sortie, CASE WHEN TRUM_MOD_ENT::bigint < 8 THEN '0'::text ELSE SUBSTR(TRUM_MOD_ENT * 10,1,1)::text END AS mode_entree, CASE WHEN TRUM_MOD_ENT::bigint BETWEEN 1 AND 7 THEN TRUM_MOD_ENT::text WHEN SUBSTR(TRUM_MOD_ENT * 10,2,1)::text <> '0'::text THEN SUBSTR(TRUM_MOD_ENT * 10,2,1)::text ELSE ''::text END AS provenance, CASE WHEN TRUM_MOD_SOR::bigint < 8 THEN '0'::text ELSE SUBSTR(TRUM_MOD_SOR * 10,1,1)::text END AS mode_sortie, CASE WHEN TRUM_MOD_SOR::bigint BETWEEN 1 AND 7 THEN TRUM_MOD_SOR::text WHEN SUBSTR(TRUM_MOD_SOR * 10,2,1)::text <> '0'::text THEN SUBSTR(TRUM_MOD_SOR * 10,2,1)::text ELSE ''::text END AS destination, CASE WHEN TRUM_DAT_SOR_RUM > TRUM_DAT_ENT_RUM THEN date(TRUM_DAT_SOR_RUM) - date(TRUM_DAT_ENT_RUM) ELSE 0 END AS duree_sejour, TRUM_NOM_SCE AS nb_seances, UNME_CODE AS unite_medicale, 0 AS diagnostic_principal_id, 0 AS diagnostic_relie_id, COALESCE(t_unites_medicales.oid,0) AS unite_medicale_id, '' AS type_autorisation, TRUM_SCO_IGS AS igs2, '' AS type_autorisation_lit_dedie, '' AS supplement_code, tmp_trum_id_mede as medecin_rum_id FROM prod_hm.PMS_RUM JOIN w_rss ON (TRUM_ID_TRSS = WRSS_ID_TRSS) JOIN w_rum ON TRUM_ID_TRSS = WRUM_ID_TRSS AND TRUM_NUMERO = WRUM_NUMERO_ORIGINAL LEFT JOIN prod_hm.SAD_UM ON (TRUM_ID_UNME = UNME_ID_UNME) LEFT JOIN pmsi.t_unites_medicales ON (UNME_CODE = t_unites_medicales.code) WHERE TRUM_DAT_SUP IS NULL; INSERT INTO pmsi.p_rss_rum( finess, rss_id, no_rss, no_rum, date_entree, date_sortie, mode_entree, provenance, mode_sortie, destination, duree_sejour, nb_seances, unite_medicale, diagnostic_principal_id, diagnostic_relie_id, unite_medicale_id, type_autorisation, igs2, type_autorisation_lit_dedie, supplement_code, medecin_rum_id) SELECT p_rss.finess AS finess, p_rss.oid AS oid, p_rss.no_rss AS no_rss, 1 AS no_rum, p_rss.date_entree AS date_entree, p_rss.date_sortie AS date_sortie, '8' AS mode_entree, '' AS provenance, '8' AS mode_sortie, '' AS destination, p_rss.duree_sejour AS duree_sejour, 0 AS nb_seances, '' AS unite_medicale, 0 AS diagnostic_principal_id, 0 AS diagnostic_relie_id, 0 AS unite_medicale_id, '' AS type_autorisation, 0 AS igs2, '' AS type_autorisation_lit_dedie, '' AS supplement_code, 0 AS medecin_rum_id FROM pmsi.p_rss WHERE en_cours = '1' AND oid NOT IN (select distinct rss_id from pmsi.p_rss_rum); -- Récupération du premier et dernier RUM DROP TABLE IF EXISTS w_rss_rum; CREATE TEMP TABLE w_rss_rum AS SELECT p_rss_rum.rss_id, count(*) AS nb_rum, MIN(no_rum) AS no_premier_rum, MAX(no_rum) AS no_dernier_rum FROM pmsi.p_rss_rum, pmsi.p_rss WHERE p_rss.oid = p_rss_rum.rss_id AND en_cours = '1' GROUP BY 1; -- MAJ RSS pour premier RUM UPDATE pmsi.p_rss SET nb_rum = w_rss_rum.nb_rum, no_rum_principal = p_rss_rum.no_rum, unite_medicale_principale_id = p_rss_rum.unite_medicale_id, mode_entree = p_rss_rum.mode_entree, provenance = p_rss_rum.provenance, mode_sortie = p_rss_rum.mode_sortie, destination = p_rss_rum.destination FROM w_rss_rum, pmsi.p_rss_rum WHERE p_rss.oid = w_rss_rum.rss_id AND en_cours = '1' AND p_rss_rum.rss_id = w_rss_rum.rss_id AND p_rss_rum.no_rum = w_rss_rum.no_premier_rum ; -- MAJ RUM pour premier RUM UPDATE pmsi.p_rss_rum SET passage_urgences_code = w_passage_urgences_code FROM w_rss_rum JOIN w_rss_passage_urgence USING(rss_id) WHERE p_rss_rum.rss_id = w_rss_rum.rss_id AND p_rss_rum.no_rum = w_rss_rum.no_premier_rum ; -- MAJ RSS pour pernier RUM UPDATE pmsi.p_rss SET mode_sortie = p_rss_rum.mode_sortie, destination = p_rss_rum.destination FROM w_rss_rum, pmsi.p_rss_rum WHERE p_rss.oid = w_rss_rum.rss_id AND en_cours = '1' AND p_rss.nb_rum > 1 AND p_rss_rum.rss_id = w_rss_rum.rss_id AND p_rss_rum.no_rum = w_rss_rum.no_dernier_rum; -- mise à jour des dates_d'e/s pour les séances UPDATE pmsi.p_rss SET date_entree = p_rss_rum.date_entree FROM w_rss_rum, pmsi.p_rss_rum WHERE p_rss.oid = w_rss_rum.rss_id AND en_cours = '1' AND p_rss.nb_seances != 0 AND p_rss_rum.rss_id = w_rss_rum.rss_id AND p_rss_rum.no_rum = w_rss_rum.no_premier_rum AND p_rss.date_entree < p_rss_rum.date_entree; UPDATE pmsi.p_rss SET date_sortie = p_rss_rum.date_sortie FROM w_rss_rum, pmsi.p_rss_rum WHERE p_rss.oid = w_rss_rum.rss_id AND en_cours = '1' AND p_rss.nb_seances != 0 AND p_rss_rum.rss_id = w_rss_rum.rss_id AND p_rss_rum.no_rum = w_rss_rum.no_dernier_rum AND p_rss.date_sortie > p_rss_rum.date_sortie; ]]> 1 THEN ''::text ELSE ACSA_EXT_DOC END AS extension_ccam, ACSA_MODIF1 AS modificateur_ccam_1, ACSA_MODIF2 AS modificateur_ccam_2, ACSA_MODIF3 AS modificateur_ccam_3, ACSA_MODIF4 AS modificateur_ccam_4, ACSA_IND_RMB_EXCEPTIONNEL AS remboursement_excp_ccam, CASE WHEN ACSA_ASS_NON_PREV < 99 THEN ACSA_ASS_NON_PREV ELSE '' END AS association_nonprevue_ccam FROM prod_hm.SAD_ACTIVITE_SAISIES JOIN w_rss ON (ACSA_ID_SEJO = WRSS_ID_SEJO) JOIN prod_hm.SAD_ACTES_SAISIS ON (ACSA_ID_ASAI = ASAI_ID_ASAI) JOIN prod_hm.PMS_RUM ON (ASAI_ID_TRUM = TRUM_ID_TRUM) JOIN w_rum ON WRSS_ID_TRSS = WRUM_ID_TRSS AND TRUM_NUMERO = WRUM_NUMERO_ORIGINAL JOIN pmsi.p_rss_rum ON (w_rss.rss_id = p_rss_rum.rss_id AND WRUM_NUMERO = p_rss_rum.no_rum) JOIN pmsi.t_actes ON (ACSA_CODE_D || COALESCE(ACSA_COD_ACT_DESC, ''::text) = t_actes.code) JOIN prod_hm.IDE_MEDECIN ON ACSA_ID_MEDE = MEDE_ID_MEDE LEFT JOIN pmsi.t_medecins ON (CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END = t_medecins.code); UPDATE pmsi.p_rss_actes SET medecin_id = t_medecins.oid FROM pmsi.t_actes, pmsi.p_rss, prod_hm.PMS_RSS JOIN prod_hm.PMS_RUM ON TRSS_ID_TRSS = TRUM_ID_TRSS JOIN prod_hm.IDE_SEJOUR ON TRUM_ID_SEJO = SEJO_ID_SEJO JOIN prod_hm.SAD_ACTES_SAISIS ON ASAI_ID_SEJO = SEJO_ID_SEJO JOIN prod_hm.SAD_ACTIVITE_SAISIES ON ACSA_ID_ASAI = ASAI_ID_ASAI JOIN prod_hm.IDE_MEDECIN ON ACSA_ID_MEDE = MEDE_ID_MEDE JOIN pmsi.t_medecins ON CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END = t_medecins.code WHERE en_cours = '1' AND TRSS_NUMERO = p_rss.no_rss AND p_rss.date_sortie = date(SEJO_DAT_FIN) AND p_rss_actes.rss_id = p_rss.oid AND p_rss_actes.date_acte = date(ACSA_DAT_EXE_DEB) AND p_rss_actes.activite_ccam = ACSA_COD_ACT_D AND p_rss_actes.acte_id = t_actes.oid AND (t_actes.code = ACSA_CODE_D || COALESCE(ACSA_COD_ACT_DESC, ''::text) OR t_actes.code = ACSA_CODE_D) AND p_rss_actes.medecin_id <> t_medecins.oid; ]]> 'P' AND FACT_TYPE <> 'E' AND FACD_ID_ORGA_AMO <> 0 AND LFAC_MTT_BAS_RMB <> 0 AND LFAC_LET_CLE = ANY(ARRAY['GHS','EXH','SRC','REA','STF','NN1','NN2','NN3']) ; -- suppression factures seances dont l'execution ne correspondant au date rss DELETE FROM w_rsf_3 USING pmsi.p_rss WHERE rss_id = p_rss.oid AND p_rss.nb_seances != 0 AND LFAC_DAT_EXE_DEB != date_entree AND LFAC_DAT_EXE_FIN != date_sortie; DROP TABLE IF EXISTS w_rsf_5; CREATE TEMP TABLE w_rsf_5 AS SELECT WRSS_COD_FIN, rss_id, WRSS_NUMERO, MIN(FACT_NUM_FAC) AS FACT_NUM_FAC, 1 AS rang, MAX('01') AS grand, MAX('1') AS assurance, MAX('0') AS exoneration, MIN('1') AS operation, MAX('') AS matricule, MAX('') AS cle, SUM(CASE WHEN LFAC_ID_PRSE <> 0 THEN LFAC_MTT_BAS_RMB ELSE 0 END) AS FACT_MTT_SEJ, SUM(CASE WHEN LFAC_ID_PRHO <> 0 THEN LFAC_MTT_BAS_RMB ELSE 0 END) AS FACT_MTT_HON FROM w_rsf_3 GROUP BY 1,2,3; 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 WRSS_COD_FIN AS finess, rss_id AS oid, WRSS_NUMERO AS no_rss, '1' AS code_pec, w_rsf_5.rang AS rang_beneficiaire, w_rsf_5.grand AS regime, w_rsf_5.assurance AS nature_pec, w_rsf_5.exoneration AS justificatif_exo, w_rsf_5.FACT_NUM_FAC AS no_facture, w_rsf_5.operation AS code_regularisation, w_rsf_5.matricule AS matricule_assure, w_rsf_5.cle AS cle_matricule_assure, FACT_MTT_SEJ AS base_remboursement, FACT_MTT_SEJ AS sejour_facture, FACT_MTT_SEJ AS sejour_remboursable, FACT_MTT_HON AS honoraires_factures, FACT_MTT_HON 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_rsf_5; 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; ]]> 0 THEN w_rsf_3.LFAC_COE_MCO_HAD ELSE 1 END 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 w_rsf_3 JOIN pmsi.t_prestations ON (w_rsf_3.LFAC_LEt_CLE = t_prestations.code) LEFT JOIN pmsi.t_ghs ON (to_number('0' || w_rsf_3.LFAC_NUM_GHS,'0000') = t_ghs.code) WHERE LFAC_ID_PRSE <> 0; ]]> ''; ]]> 'P' AND FACT_TYPE <> 'E' AND LFAC_MTT_BAS_RMB <> 0 GROUP BY 1; INSERT INTO pmsi.p_rss_ucd( finess, rss_id, no_rss, rang, date_ucd, ucd_id, nombre, coefficient_fractionnement, prix_unitaire_achat, prix_unitaire_ecart_indemnisable, montant_ecart_indemnisable, montant_facture, non_pris_en_compte) SELECT w_rsf_3.WRSS_COD_FIN AS finess, w_rsf_3.rss_id AS rss_id, w_rsf_3.WRSS_NUMERO, 0 AS rang, MAX(date(LFAC_DAT_EXE_DEB)) AS date_ucd, MAX(COALESCE(t_ucd.oid,0)) AS ucd_id, MAX(LFUC_QUANTITE) AS nombre, MAX(LFUC_COEFFICIENT) AS coefficient_fractionnement, MAX(LFUC_VLR_REFERENCE) AS prix_unitaire_achat, MAX(LFUC_MTT_EUI) AS prix_unitaire_ecart_indemnisable, MAX(LFUC_MTT_EMI) AS montant_ecart_indemnisable, MAX(LFUC_MTT_FACTURE) AS montant_facture, '0' AS non_pris_en_compte FROM w_rsf_3 JOIN prod_hm.FAC_LIGNE_FACTURE_UCD ON LFAC_ID_LFAC = LFUC_ID_LFAC JOIN w_FAC_FACTURE_lastucd ON LFAC_ID_FACT = FACT_ID_FACT_last LEFT JOIN pmsi.t_ucd ON (LFUC_COD_UCD = t_ucd.code) GROUP BY 1,2,3; ]]> SEJO_NUM_SEJ ; UPDATE pmsi.p_rss SET no_sejour_administratif = w_rss_externes_numsej.no_sejour_administratif FROM w_rss_externes_numsej WHERE p_rss.oid = w_rss_externes_numsej.oid AND p_rss.no_sejour_administratif IS DISTINCT FROM w_rss_externes_numsej.no_sejour_administratif ; DROP TABLE IF EXISTS w_rss_hm; CREATE TEMP TABLE w_rss_hm AS SELECT * FROM pmsi.p_rss LEFT JOIN prod_hm.IDE_SEJOUR ON no_sejour_administratif = SEJO_NUM_SEJ AND SEJO_DAT_SUP IS NULL AND (p_rss.date_entree = date(SEJO_DAT_DEB) OR p_rss.date_sortie = date(SEJO_DAT_FIN)) ; UPDATE pmsi.p_identites SET nom = PATI_NOM_USU, prenom = PATI_PRENOM, nom_naissance = CASE WHEN PATI_NOM_NAI <> PATI_NOM_USU THEN PATI_NOM_NAI ELSE '' END FROM w_rss_hm JOIN prod_hm.IDE_PATIENT ON SEJO_ID_PATI = PATI_ID_PATI WHERE p_identites.rss_id = w_rss_hm.oid AND ( nom IS DISTINCT FROM PATI_NOM_USU OR prenom IS DISTINCT FROM PATI_PRENOM OR nom_naissance IS DISTINCT FROM (CASE WHEN PATI_NOM_NAI <> PATI_NOM_USU THEN PATI_NOM_NAI ELSE '' END) ); UPDATE pmsi.p_rss SET medecin_rss_id = t_medecins.oid FROM w_rss_hm JOIN prod_hm.IDE_MEDECIN ON SEJO_ID_MEDE_COURANT = MEDE_ID_MEDE JOIN pmsi.t_medecins ON t_medecins.code = CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END WHERE p_rss.oid = w_rss_hm.oid AND p_rss.ghm_id = 0 AND t_medecins.oid != 0 AND p_rss.medecin_rss_id = 0; UPDATE pmsi.p_rss SET code_postal = SUBSTR(ADRE_COD_POS,1,5) FROM w_rss_hm JOIN prod_hm.IDE_ADRESSE ON SEJO_ID_PATI = ADRE_ID_OBJ AND length(ADRE_COD_POS) >= 5 WHERE p_rss.oid = w_rss_hm.oid AND p_rss.ghm_id = 0 AND p_rss.code_postal IS DISTINCT FROM SUBSTR(ADRE_COD_POS,1,5); UPDATE pmsi.p_rss SET code_postal = '0' || ADRE_COD_POS FROM w_rss_hm JOIN prod_hm.IDE_ADRESSE ON SEJO_ID_PATI = ADRE_ID_OBJ AND length(ADRE_COD_POS) = 4 WHERE p_rss.oid = w_rss_hm.oid AND p_rss.ghm_id = 0 AND p_rss.code_postal IS DISTINCT FROM ('0' || ADRE_COD_POS); UPDATE pmsi.p_rss_actes SET medecin_id = t_medecins.oid FROM pmsi.t_actes, w_rss_hm JOIN prod_hm.SAD_ACTES_SAISIS ON ASAI_ID_SEJO = SEJO_ID_SEJO JOIN prod_hm.SAD_ACTIVITE_SAISIES ON ACSA_ID_ASAI = ASAI_ID_ASAI JOIN prod_hm.IDE_MEDECIN ON ACSA_ID_MEDE = MEDE_ID_MEDE JOIN pmsi.t_medecins ON CASE WHEN MEDE_CODE <> '' AND MEDE_CODE IS NOT NULL THEN MEDE_CODE::text ELSE MEDE_ID_MEDE::text END = t_medecins.code WHERE ghm_id = 0 AND p_rss_actes.rss_id = w_rss_hm.oid AND p_rss_actes.date_acte = date(ACSA_DAT_EXE_DEB) AND p_rss_actes.activite_ccam = ACSA_COD_ACT_D AND p_rss_actes.acte_id = t_actes.oid AND (t_actes.code = ACSA_CODE_D || COALESCE(ACSA_COD_ACT_DESC, ''::text) OR t_actes.code = ACSA_CODE_D) AND p_rss_actes.medecin_id <> t_medecins.oid; UPDATE pmsi.p_rss SET medecin_rss_id = CASE WHEN (SELECT medecin_id FROM pmsi.v_rss_actes_1 WHERE activite_ccam <> '4' AND v_rss_actes_1.rss_id = p_rss.oid ORDER BY icr DESC LIMIT 1) > 0 THEN (SELECT medecin_id FROM pmsi.v_rss_actes_1 WHERE activite_ccam <> '4' AND v_rss_actes_1.rss_id = p_rss.oid ORDER BY icr DESC LIMIT 1) ELSE p_rss.medecin_rss_id END WHERE ghm_id = 0 AND medecin_rss_id = 0; ]]> '' AND TGHM_NUMERO NOT LIKE '90%' THEN COALESCE(date(TRUM_DAT_DER_GROUPAGE),'20991231') ELSE '20991231' END) AS date_groupage FROM prod_hm.pms_rss JOIN prod_hm.IDE_SEJOUR ON TRSS_ID_SEJO_D = SEJO_ID_SEJO JOIN prod_hm.PMS_RUM ON TRSS_ID_TRSS = TRUM_ID_TRSS JOIN prod_hm.PMS_GHM ON (TRSS_ID_TGHM = TGHM_ID_TGHM) GROUP BY 1,2; CREATE INDEX w_PMS_RSS_i1 ON w_PMS_RSS USING btree (TRSS_NUMERO); UPDATE pmsi.p_rss_etat SET date_groupage = w_PMS_RSS.date_groupage FROM w_PMS_RSS JOIN pmsi.p_rss ON w_PMS_RSS.TRSS_NUMERO = p_rss.no_rss AND w_PMS_RSS.SEJO_DAT_FIN = p_rss.date_sortie WHERE p_rss_etat.rss_id = p_rss.oid AND p_rss_etat.date_groupage <> w_PMS_RSS.date_groupage; DROP TABLE IF EXISTS w_sejo_fac; CREATE TEMP TABLE w_sejo_fac AS SELECT SEJO_NUM_SEJ, date(SEJO_DAT_DEB) AS SEJO_DAT_DEB, date(SEJO_DAT_FIN) AS SEJO_DAT_FIN, COALESCE(MAX(GREATEST(date(FACT_DAT_IMPRESSION), date(FACT_DAT_DER_CALCUL))),'20991231') AS date_facture FROM prod_hm.IDE_SEJOUR JOIN prod_hm.FAC_FACTURE ON SEJO_ID_SEJO = FACT_ID_SEJO AND FACT_TYPE = 'F' GROUP BY 1,2,3; UPDATE pmsi.p_rss_etat SET date_facture = subview.date_facture, est_facture = CASE WHEN subview.date_facture != '20991231' OR en_cours <> '1' THEN '1' ELSE '0' END FROM ( SELECT p_rss.oid AS rss_id, p_rss.en_cours, COALESCE(MAX(date_facture),'20991231') AS date_facture FROM pmsi.p_rss LEFT JOIN w_sejo_fac ON SEJO_NUM_SEJ = no_sejour_administratif AND date_sortie = SEJO_DAT_FIN GROUP BY 1,2) subview WHERE p_rss_etat.rss_id = subview.rss_id AND ( p_rss_etat.date_facture IS DISTINCT FROM subview.date_facture OR p_rss_etat.est_facture IS DISTINCT FROM CASE WHEN subview.date_facture != '20991231' OR en_cours <> '1' 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 ; ]]>