0 OR CLI_CODE_SPECIALITE = ANY (ARRAY(SELECT CLI_CODE_SPECIALITE FROM prod_clinicom.FB_MVTS_MEDECETB GROUP BY 1)::text[]) ORDER BY CLI_CODE_SPECIALITE ; INSERT INTO pmsi.t_specialites_internes_medecin(code, texte) SELECT spe_cti, w_CLI_DONN_DESCRIPTION FROM w_specialite LEFT JOIN pmsi.t_specialites_internes_medecin ON t_specialites_internes_medecin.code = spe_cti WHERE t_specialites_internes_medecin.code IS NULL ; INSERT INTO pmsi.t_medecins(code, nom, prenom, specialite_id, no_adeli, specialite_interne_id) SELECT CLI_CODE_MEDECIN, MAX(CLI_DONN_NOM), MAX(COALESCE(CLI_DONN_PRENOM,'')) AS CLI_DONN_PRENOM, MAX(COALESCE(t_specialites_medecin.oid,0)), MAX(CASE WHEN COALESCE(CLI_CODE_ADELI,0) IS DISTINCT FROM 0 THEN to_char(CLI_CODE_ADELI,'FM000000000') ELSE '' END) AS CLI_CODE_ADELI, MAX(COALESCE(t_specialites_internes_medecin.oid,0)) FROM prod_clinicom.FB_MVTS_MEDECETB LEFT JOIN pmsi.t_specialites_medecin ON t_specialites_medecin.code = FB_MVTS_MEDECETB.CLI_CODE_SPECIALITE LEFT JOIN w_specialite ON w_specialite.w_CLI_CODE_SPECIALITE = FB_MVTS_MEDECETB.CLI_CODE_SPECIALITE LEFT JOIN pmsi.t_specialites_internes_medecin ON w_specialite.spe_cti = t_specialites_internes_medecin.code LEFT JOIN pmsi.t_medecins ON CLI_CODE_MEDECIN = t_medecins.code WHERE t_medecins.code IS NULL GROUP BY 1 ORDER BY 1; UPDATE pmsi.t_medecins SET specialite_interne_id = COALESCE(t_specialites_internes_medecin.oid, 0) FROM prod_clinicom.FB_MVTS_MEDECETB LEFT JOIN w_specialite ON w_specialite.w_CLI_CODE_SPECIALITE = FB_MVTS_MEDECETB.CLI_CODE_SPECIALITE LEFT JOIN pmsi.t_specialites_internes_medecin ON w_specialite.spe_cti = t_specialites_internes_medecin.code WHERE 1=1 AND FB_MVTS_MEDECETB.CLI_CODE_MEDECIN = t_medecins.code AND t_medecins.specialite_interne_id != COALESCE(t_specialites_internes_medecin.oid, 0); DROP TABLE IF EXISTS w_um; CREATE TEMP TABLE w_um AS SELECT CASE WHEN char_length(CLI_CODE_UM) <= 4 THEN CLI_CODE_UM WHEN char_length(CLI_CODE_UM) = 5 THEN substr(CLI_CODE_UM, 2, 4) ELSE ''::text END as um_code ,CLI_DONN_DESCRIPTION as um_texte FROM prod_clinicom.FS_MVTS_UM WHERE 1=1 AND cli_code_suppression = 0 AND char_length(CLI_CODE_UM) <= 5 ORDER BY 1; INSERT INTO pmsi.t_unites_medicales(code, texte, type_autorisation) SELECT um_code::text ,um_texte::text ,''::text FROM w_um WHERE um_code != ALL(ARRAY(SELECT code FROM pmsi.t_unites_medicales)::text[]) ORDER BY 1; ]]> '' AND FD_PMSI_RUM.CLI_Code_MedecinResponsable <> 'NR' GROUP BY 1; ALTER TABLE w_FD_PMSI_RUM ADD CONSTRAINT w_FD_PMSI_RUM_pkey PRIMARY KEY(CLI_Donn_RSSReference); DROP TABLE IF EXISTS w_MVTS_EPISODES_medecin_acte; CREATE TEMP TABLE w_MVTS_EPISODES_medecin_acte AS SELECT FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE, (MAX(Array[FD_ACTES_ENTETE.CLI_DATE_SAISIE::text, FD_ACTES_ENTETE.CLI_CODE_MEDECIN1]))[2] AS CLI_CODE_MEDECIN FROM prod_clinicom.FD_ACTES_ENTETE JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE AND (CLI_CODE_MEDECINRESPONSABLE = '' OR CLI_CODE_MEDECINRESPONSABLE = 'NR') WHERE CLI_CODE_MEDECIN1 <> '' AND CLI_CODE_MEDECIN1 <> 'NR' GROUP BY 1; ALTER TABLE w_MVTS_EPISODES_medecin_acte ADD CONSTRAINT w_MVTS_EPISODES_medecin_acte_pkey PRIMARY KEY(CLI_DONN_NOABSEPISODE); DROP TABLE IF EXISTS w_MVTS_EPISODES_medecin; CREATE TEMP TABLE w_MVTS_EPISODES_medecin AS SELECT FD_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE, (MAX(Array[CLI_DATE_MOUVEMENT::text, CLI_CODE_MEDECIN]))[2] AS CLI_CODE_MEDECIN FROM prod_clinicom.FD_MVTS_MOUVEMENTS JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE AND (CLI_CODE_MEDECINRESPONSABLE = '' OR CLI_CODE_MEDECINRESPONSABLE = 'NR') WHERE CLI_CODE_MEDECIN <> '' AND CLI_CODE_MEDECIN <> 'NR' GROUP BY 1; ALTER TABLE w_MVTS_EPISODES_medecin ADD CONSTRAINT w_MVTS_EPISODES_medecin_pkey PRIMARY KEY(CLI_DONN_NOABSEPISODE); DROP TABLE IF EXISTS w_FD_PMSI_RSS; CREATE TEMP TABLE w_FD_PMSI_RSS AS SELECT FD_PMSI_RSS.CLI_Donn_RSSReference, CLI_DONN_NOEXTEPISODE, date(CLI_Date_Entree) AS CLI_Date_Entree, date(CLI_Date_Sortie) AS CLI_Date_Sortie, CLI_Donn_NoIPPExterne, CLI_DONN_NOM, CLI_DONN_NOMNAISSANCE, CLI_DONN_PRENOM, COALESCE( w_FD_PMSI_RUM.CLI_Code_MedecinResponsable, CASE WHEN FD_MVTS_EPISODES.CLI_Code_MedecinResponsable <> '' AND FD_MVTS_EPISODES.CLI_Code_MedecinResponsable <> 'NR' THEN FD_MVTS_EPISODES.CLI_Code_MedecinResponsable ELSE NULL END, w_MVTS_EPISODES_medecin.CLI_CODE_MEDECIN, w_MVTS_EPISODES_medecin_acte.CLI_CODE_MEDECIN ) AS CLI_Code_MedecinResponsable FROM prod_clinicom.FD_PMSI_RSS JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_PMSI_RSS.CLI_Donn_NoAbsEpisode = FD_MVTS_EPISODES.CLI_Donn_NoAbsEpisode JOIN prod_clinicom.FD_MVTS_PATIENTS ON FD_MVTS_PATIENTS.CLI_Code_NoIPP = FD_MVTS_EPISODES.CLI_Code_NoIPP LEFT JOIN w_MVTS_EPISODES_medecin ON FD_PMSI_RSS.CLI_Donn_NoAbsEpisode = w_MVTS_EPISODES_medecin.CLI_Donn_NoAbsEpisode LEFT JOIN w_MVTS_EPISODES_medecin_acte ON FD_PMSI_RSS.CLI_Donn_NoAbsEpisode = w_MVTS_EPISODES_medecin_acte.CLI_Donn_NoAbsEpisode LEFT JOIN w_FD_PMSI_RUM ON w_FD_PMSI_RUM.CLI_Donn_RSSReference = FD_PMSI_RSS.CLI_Donn_RSSReference; CREATE INDEX w_FD_PMSI_RSS_i1 ON w_FD_PMSI_RSS USING btree (CLI_Donn_RSSReference); CREATE INDEX w_FD_PMSI_RSS_i2 ON w_FD_PMSI_RSS USING btree (CLI_Code_MedecinResponsable); UPDATE [SCHEMA].p_rss SET no_sejour_administratif = CLI_DONN_NOEXTEPISODE FROM w_FD_PMSI_RSS WHERE CLI_Donn_RSSReference = no_rss AND date_trunc('year',CLI_Date_Sortie) = date_trunc('year',date_sortie) AND trim(no_sejour_administratif) IS DISTINCT FROM CLI_DONN_NOEXTEPISODE AND en_cours LIKE '0' AND ghm_id <> 0 ; UPDATE [SCHEMA].p_identites SET nom = CLI_DONN_NOM, nom_naissance = CLI_DONN_NOMNAISSANCE, prenom = CLI_DONN_PRENOM FROM [SCHEMA].p_rss JOIN w_FD_PMSI_RSS ON CLI_Donn_RSSReference = no_rss AND (CLI_Date_Sortie = date_sortie OR CLI_Date_Entree = date_entree OR CLI_DONN_NOEXTEPISODE = substr(no_sejour_administratif,1,8) AND date_trunc('month',CLI_Date_Sortie) = date_trunc('month',date_sortie)) WHERE p_identites.rss_id = p_rss.oid AND en_cours LIKE '0' AND ( nom IS DISTINCT FROM CLI_DONN_NOM OR nom_naissance IS DISTINCT FROM CLI_DONN_NOMNAISSANCE OR prenom IS DISTINCT FROM CLI_DONN_PRENOM ); UPDATE [SCHEMA].p_rss SET medecin_rss_id = COALESCE(t_medecins.oid,0), no_patient = to_number(CLI_Donn_NoIPPExterne,'000000000000') FROM w_FD_PMSI_RSS LEFT JOIN pmsi.t_medecins ON CLI_Code_MedecinResponsable = t_medecins.code WHERE CLI_Donn_RSSReference = no_rss AND (CLI_Date_Sortie = date_sortie OR CLI_Date_Entree = date_entree OR CLI_DONN_NOEXTEPISODE = substr(no_sejour_administratif,1,8) AND date_trunc('month',CLI_Date_Sortie) = date_trunc('month',date_sortie)) AND en_cours LIKE '0' AND ( medecin_rss_id IS DISTINCT FROM COALESCE(t_medecins.oid,0) OR no_patient IS DISTINCT FROM to_number(CLI_Donn_NoIPPExterne,'000000000000') ) ; -- Traitement Externes DROP TABLE IF EXISTS w_FD_MVTS_EPISODES; CREATE TEMP TABLE w_FD_MVTS_EPISODES AS SELECT FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE, CLI_DONN_NOEXTEPISODE, date(CLI_Date_Entree) AS CLI_Date_Entree, date(CLI_Date_Sortie) AS CLI_Date_Sortie, CLI_Donn_NoIPPExterne, CLI_DONN_NOM, CLI_DONN_NOMNAISSANCE, CLI_DONN_PRENOM, COALESCE( CASE WHEN FD_MVTS_EPISODES.CLI_Code_MedecinResponsable <> '' THEN FD_MVTS_EPISODES.CLI_Code_MedecinResponsable ELSE NULL END, w_MVTS_EPISODES_medecin.CLI_CODE_MEDECIN, w_MVTS_EPISODES_medecin_acte.CLI_CODE_MEDECIN ) AS CLI_Code_MedecinResponsable, FD_MVTS_SORTIES.CLI_CODE_UF, CASE WHEN CLI_CODE_UM <> '' THEN CLI_CODE_UM ELSE FD_MVTS_SORTIES.CLI_CODE_UF END AS CLI_CODE_UM FROM prod_clinicom.FD_MVTS_EPISODES JOIN prod_clinicom.FD_MVTS_PATIENTS ON FD_MVTS_PATIENTS.CLI_Code_NoIPP = FD_MVTS_EPISODES.CLI_Code_NoIPP JOIN prod_clinicom.FD_MVTS_SORTIES ON FD_MVTS_SORTIES.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE JOIN [SCHEMA].p_rss ON no_sejour_administratif = CLI_DONN_NOEXTEPISODE AND ghm_id = 0 LEFT JOIN w_MVTS_EPISODES_medecin ON FD_MVTS_EPISODES.CLI_Donn_NoAbsEpisode = w_MVTS_EPISODES_medecin.CLI_Donn_NoAbsEpisode LEFT JOIN w_MVTS_EPISODES_medecin_acte ON FD_MVTS_EPISODES.CLI_Donn_NoAbsEpisode = w_MVTS_EPISODES_medecin_acte.CLI_Donn_NoAbsEpisode LEFT JOIN prod_clinicom.FS_MVTS_UF ON FD_MVTS_SORTIES.CLI_CODE_UF = FS_MVTS_UF.CLI_CODE_UF; CREATE INDEX w_FD_MVTS_EPISODES_i1 ON w_FD_MVTS_EPISODES USING btree (CLI_DONN_NOEXTEPISODE); CREATE INDEX w_FD_MVTS_EPISODES_i2 ON w_FD_MVTS_EPISODES USING btree (CLI_DONN_NOABSEPISODE); CREATE INDEX w_FD_MVTS_EPISODES_i3 ON w_FD_MVTS_EPISODES USING btree (CLI_Code_MedecinResponsable); CREATE INDEX w_FD_MVTS_EPISODES_i4 ON w_FD_MVTS_EPISODES USING btree (CLI_CODE_UM); UPDATE w_FD_MVTS_EPISODES SET CLI_Code_MedecinResponsable = CLI_CODE_MEDECIN1 FROM prod_clinicom.FD_ACTES_ENTETE WHERE CLI_CODE_MEDECINRESPONSABLE = '' AND w_FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE = FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE; UPDATE [SCHEMA].p_identites SET nom = CLI_DONN_NOM, nom_naissance = CLI_DONN_NOMNAISSANCE, prenom = CLI_DONN_PRENOM FROM [SCHEMA].p_rss JOIN w_FD_MVTS_EPISODES ON CLI_DONN_NOEXTEPISODE = no_sejour_administratif AND CLI_Date_Sortie = date_sortie WHERE ghm_id = 0 AND en_cours LIKE '0' AND p_identites.rss_id = p_rss.oid AND ( nom IS DISTINCT FROM CLI_DONN_NOM OR nom_naissance IS DISTINCT FROM CLI_DONN_NOMNAISSANCE OR prenom IS DISTINCT FROM CLI_DONN_PRENOM ); UPDATE [SCHEMA].p_rss SET medecin_rss_id = COALESCE(t_medecins.oid,0), no_patient = to_number(CLI_Donn_NoIPPExterne,'000000000000') FROM w_FD_MVTS_EPISODES LEFT JOIN pmsi.t_medecins ON CLI_Code_MedecinResponsable = t_medecins.code WHERE ghm_id = 0 AND CLI_DONN_NOEXTEPISODE = no_sejour_administratif AND en_cours LIKE '0' AND CLI_Date_Sortie = date_sortie AND ( medecin_rss_id IS DISTINCT FROM COALESCE(t_medecins.oid,0) OR no_patient IS DISTINCT FROM to_number(CLI_Donn_NoIPPExterne,'000000000000') ) ; INSERT INTO pmsi.t_unites_medicales(code, texte, type_autorisation) SELECT w_FD_MVTS_EPISODES.CLI_CODE_UM, CLI_DONN_DESCRIPTION, '' FROM w_FD_MVTS_EPISODES JOIN prod_clinicom.FS_MVTS_UF ON w_FD_MVTS_EPISODES.CLI_CODE_UF = FS_MVTS_UF.CLI_CODE_UF WHERE w_FD_MVTS_EPISODES.CLI_CODE_UF = w_FD_MVTS_EPISODES.CLI_CODE_UM AND w_FD_MVTS_EPISODES.CLI_CODE_UM NOT IN (SELECT code FROM pmsi.t_unites_medicales) GROUP BY 1,2 ORDER BY 1; UPDATE [SCHEMA].p_rss_rum SET unite_medicale_id = t_unites_medicales.oid FROM [SCHEMA].p_rss JOIN w_FD_MVTS_EPISODES ON CLI_DONN_NOEXTEPISODE = no_sejour_administratif AND CLI_Date_Sortie = date_sortie JOIN pmsi.t_unites_medicales ON CLI_CODE_UM = t_unites_medicales.code WHERE ghm_id = 0 AND en_cours LIKE '0' AND p_rss_rum.rss_id = p_rss.oid AND ( unite_medicale_id IS DISTINCT FROM t_unites_medicales.oid ); UPDATE [SCHEMA].p_rss_actes SET unite_medicale_id = t_unites_medicales.oid FROM [SCHEMA].p_rss JOIN w_FD_MVTS_EPISODES ON CLI_DONN_NOEXTEPISODE = no_sejour_administratif AND CLI_Date_Sortie = date_sortie JOIN pmsi.t_unites_medicales ON CLI_CODE_UM = t_unites_medicales.code WHERE ghm_id = 0 AND en_cours LIKE '0' AND p_rss_actes.rss_id = p_rss.oid AND ( unite_medicale_id IS DISTINCT FROM t_unites_medicales.oid ); ]]> '0' THEN CLI_CODE_PROVENANCEPMSI ELSE '' END AS CLI_CODE_PROVENANCEPMSI, CLI_CODE_MODESORTIEPMSI, CASE WHEN CLI_CODE_DESTINATIONPMSI <> '0' THEN CLI_CODE_DESTINATIONPMSI ELSE '' END AS CLI_CODE_DESTINATIONPMSI, CLI_CODE_MEDECINRESPONSABLE, CLI_DONN_IGS2, MAX(CASE WHEN CLI_CODE_TYPEDIAGNOSTIC = '1' THEN CLI_CODE_DIAG ELSE '' END) AS CLI_CODE_DIAG_DP, MAX(CASE WHEN CLI_CODE_TYPEDIAGNOSTIC = '2' THEN CLI_CODE_DIAG ELSE '' END) AS CLI_CODE_DIAG_DR FROM prod_clinicom.FD_PMSI_RUM LEFT JOIN prod_clinicom.FD_PMSI_DIAG ON FD_PMSI_RUM.CLI_DONN_NOABSEPISODE = FD_PMSI_DIAG.CLI_DONN_NOABSEPISODE AND FD_PMSI_RUM.CLI_DONN_LIEN = FD_PMSI_DIAG.CLI_DONN_LIEN WHERE CLI_DATE_SORTIEUM >= '[ANNEE]0101' GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14; CREATE INDEX w_FD_PMSI_RUM_i1 ON w_FD_PMSI_RUM USING btree (CLI_DONN_NOABSEPISODE); DROP TABLE IF EXISTS w_FD_PMSI_RSS; CREATE TEMP TABLE w_FD_PMSI_RSS AS SELECT 'HOS'::text AS rss_type, w_finess.finess, 0::bigint AS rss_id, FD_PMSI_RSS.CLI_DONN_NOABSEPISODE, FD_PMSI_RSS.CLI_DONN_NORSS, MAX(CLI_DONN_NOIPPEXTERNE) AS CLI_DONN_NOIPPEXTERNE, MAX(CLI_DONN_NOM) AS CLI_DONN_NOM, MAX(CLI_DONN_NOMNAISSANCE) AS CLI_DONN_NOMNAISSANCE, MAX(CLI_DONN_PRENOM) AS CLI_DONN_PRENOM, MAX(CLI_DATE_NAISSANCE) AS CLI_DATE_NAISSANCE, MAX(CLI_CODE_POSTAL) AS CLI_CODE_POSTAL, MAX(CASE WHEN FB_MVTS_SEXE.CLI_DONN_DESCRIPTIONCOURTE ILIKE 'F%' THEN '2' ELSE '1' END) AS CLI_CODE_SEXE, MAX(CASE WHEN FD_PMSI_RSS.CLI_DONN_RSSREFERENCE <> 0 THEN FD_PMSI_RSS.CLI_DONN_RSSREFERENCE ELSE 99000000000 + to_number(FD_PMSI_RSS.CLI_DONN_NOABSEPISODE,'0000000') * 100 + FD_PMSI_RSS.CLI_DONN_NORSS END) AS CLI_DONN_RSSREFERENCE, MAX(CLI_DONN_NOEXTEPISODE) AS CLI_DONN_NOEXTEPISODE, MAX(FD_PMSI_RSS.CLI_DATE_ENTREE) AS CLI_DATE_ENTREE, MAX(FD_PMSI_RSS.CLI_DATE_SORTIE) AS CLI_DATE_SORTIE, MAX(FD_PMSI_RSS.CLI_CODE_GHM) AS CLI_CODE_GHM, MAX(FD_PMSI_RSS.CLI_CODE_GHS) AS CLI_CODE_GHS, MAX(CLI_FLAG_CODAGERSS) AS CLI_FLAG_CODAGERSS, count(*) AS nb_rum, SUM(CLI_DONN_NBSEANCES) AS RSS_CLI_DONN_NBSEANCES, (min(array[CLI_DATE_ENTREEUM::text,CLI_CODE_MODEENTREEPMSI::text]))[2] AS RSS_CLI_CODE_MODEENTREEPMSI, (min(array[CLI_DATE_ENTREEUM::text,CLI_CODE_PROVENANCEPMSI::text]))[2] AS RSS_CLI_CODE_PROVENANCEPMSI, (max(array[CLI_DATE_SORTIEUM::text,CLI_CODE_MODESORTIEPMSI::text]))[2] AS RSS_CLI_CODE_MODESORTIEPMSI, (max(array[CLI_DATE_SORTIEUM::text,CLI_CODE_DESTINATIONPMSI::text]))[2] AS RSS_CLI_CODE_DESTINATIONPMSI, (max(array[CLI_DATE_SORTIEUM::text,w_FD_PMSI_RUM.CLI_CODE_MEDECINRESPONSABLE::text]))[2] AS RSS_CLI_CODE_MEDECINRESPONSABLE, ''::text AS CLI_CODE_UM FROM w_finess, prod_clinicom.FD_PMSI_RSS JOIN w_FD_PMSI_RUM ON FD_PMSI_RSS.CLI_DONN_NOABSEPISODE = w_FD_PMSI_RUM.CLI_DONN_NOABSEPISODE AND FD_PMSI_RSS.CLI_DONN_NORSS = w_FD_PMSI_RUM.CLI_DONN_NORSS JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_PMSI_RSS.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE JOIN prod_clinicom.FD_MVTS_PATIENTS ON FD_MVTS_EPISODES.CLI_CODE_NOIPP = FD_MVTS_PATIENTS.CLI_CODE_NOIPP JOIN prod_clinicom.FB_MVTS_SEXE ON FD_MVTS_PATIENTS.CLI_CODE_SEXE = FB_MVTS_SEXE.CLI_CODE_SEXE LEFT JOIN pmsi.p_rss ON CLI_DONN_RSSREFERENCE = no_rss AND date_trunc('month',CLI_DATE_SORTIE) = date_trunc('month',date_sortie) WHERE CLI_DATE_SORTIE >= '[ANNEE]0101' AND p_rss.oid IS NULL GROUP BY 2,4,5; INSERT INTO w_FD_PMSI_RSS SELECT 'EXT'::text AS rss_type, w_finess.finess, 0::bigint AS rss_id, FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE, 0 AS CLI_DONN_NORSS, MAX(CLI_DONN_NOIPPEXTERNE) AS CLI_DONN_NOIPPEXTERNE, MAX(CLI_DONN_NOM) AS CLI_DONN_NOM, MAX(CLI_DONN_NOMNAISSANCE) AS CLI_DONN_NOMNAISSANCE, MAX(CLI_DONN_PRENOM) AS CLI_DONN_PRENOM, MAX(CLI_DATE_NAISSANCE) AS CLI_DATE_NAISSANCE, MAX(CLI_CODE_POSTAL) AS CLI_CODE_POSTAL, MAX(FD_MVTS_PATIENTS.CLI_CODE_SEXE) AS CLI_CODE_SEXE, MAX(99000000000 + to_number(FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE,'0000000') * 100) AS CLI_DONN_RSSREFERENCE, MAX(CLI_DONN_NOEXTEPISODE) AS CLI_DONN_NOEXTEPISODE, MAX(FD_MVTS_SORTIES.CLI_DATE_ENTREE) AS CLI_DATE_ENTREE, MAX(FD_MVTS_SORTIES.CLI_DATE_SORTIE) AS CLI_DATE_SORTIE, ''::text AS CLI_CODE_GHM, 0::numeric AS CLI_CODE_GHS, 0::numeric AS CLI_FLAG_CODAGERSS, 1::numeric AS nb_rum, 0::numeric AS RSS_CLI_DONN_NBSEANCES, '8' AS RSS_CLI_CODE_MODEENTREEPMSI, '' AS RSS_CLI_CODE_PROVENANCEPMSI, '8' AS RSS_CLI_CODE_MODESORTIEPMSI, '' AS RSS_CLI_CODE_DESTINATIONPMSI, MAX(CASE WHEN CLI_CODE_MEDECINRESPONSABLE <> '' THEN CLI_CODE_MEDECINRESPONSABLE ELSE FD_MVTS_SORTIES.CLI_CODE_MEDECIN END) AS RSS_CLI_CODE_MEDECINRESPONSABLE, MAX(CASE WHEN CLI_CODE_UM <> '' THEN CLI_CODE_UM ELSE FD_MVTS_SORTIES.CLI_CODE_UF END) AS CLI_CODE_UM FROM w_finess, prod_clinicom.FD_ACTES_NGAP JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE JOIN prod_clinicom.FD_MVTS_SORTIES ON FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE = FD_MVTS_SORTIES.CLI_DONN_NOABSEPISODE JOIN prod_clinicom.FD_MVTS_PATIENTS ON FD_MVTS_EPISODES.CLI_CODE_NOIPP = FD_MVTS_PATIENTS.CLI_CODE_NOIPP JOIN prod_clinicom.FS_MVTS_UF ON FD_MVTS_SORTIES.CLI_CODE_UF = FS_MVTS_UF.CLI_CODE_UF LEFT JOIN pmsi.p_rss ON CLI_DONN_NOEXTEPISODE = no_sejour_administratif AND p_rss.ghm_id = 0 AND date(CLI_DATE_SORTIE) = date(date_sortie) AND en_cours LIKE '0' WHERE FD_MVTS_SORTIES.CLI_DATE_SORTIE >= '[ANNEE]0101' AND date(FD_MVTS_SORTIES.CLI_DATE_SORTIE) = date(FD_MVTS_SORTIES.CLI_DATE_ENTREE) AND p_rss.oid IS NULL GROUP BY 2,4,5; UPDATE w_FD_PMSI_RSS SET rss_id = nextval('pmsi.s_rss'::regclass); CREATE INDEX w_FD_PMSI_RSS_i1 ON w_FD_PMSI_RSS USING btree (CLI_DONN_NOABSEPISODE); INSERT INTO pmsi.t_unites_medicales(code, texte, type_autorisation) SELECT w_FD_PMSI_RSS.CLI_CODE_UM, CLI_DONN_DESCRIPTION, '' FROM w_FD_PMSI_RSS JOIN prod_clinicom.FS_MVTS_UF ON w_FD_PMSI_RSS.CLI_CODE_UM = FS_MVTS_UF.CLI_CODE_UF WHERE rss_type = 'EXT' AND w_FD_PMSI_RSS.CLI_CODE_UM NOT IN (SELECT code FROM pmsi.t_unites_medicales) GROUP BY 1,2 ORDER BY 1; 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 ) SELECT finess, rss_id AS oid, CLI_DONN_RSSREFERENCE AS no_rss, to_number(CLI_DONN_NOIPPEXTERNE, '000000000000000')::bigint AS no_patient, '' AS version_groupage, date(CLI_DATE_NAISSANCE) AS date_naissance, CLI_CODE_SEXE AS sexe, date(CLI_DATE_ENTREE) AS date_entree, date(CLI_DATE_SORTIE) AS date_sortie, COALESCE(RSS_CLI_CODE_MODEENTREEPMSI,'8') AS mode_entree, COALESCE(RSS_CLI_CODE_PROVENANCEPMSI,'') AS provenance, COALESCE(RSS_CLI_CODE_MODESORTIEPMSI,'8') AS mode_sortie, COALESCE(RSS_CLI_CODE_DESTINATIONPMSI,'') AS destination, SUBSTR(CLI_CODE_POSTAL,1,5) AS code_postal, 0 AS poids_bebe, 0 AS igs2, '' AS cma, substr(CLI_CODE_GHM , 3 , 1) AS groupe_ghm, CASE WHEN CLI_DATE_SORTIE > CLI_DATE_ENTREE THEN date(CLI_DATE_SORTIE) - date(CLI_DATE_ENTREE) ELSE 0 END AS duree_sejour, CASE WHEN substr(CLI_CODE_GHM,1,2) = '28' THEN 1 ELSE 1 END AS nb_rsa, CASE WHEN CLI_DATE_ENTREE > CLI_DATE_NAISSANCE THEN trunc((date(CLI_DATE_ENTREE) - date(CLI_DATE_NAISSANCE)) / 365.25,0) ELSE 0 END AS age, '' AS supprime, now() AS date_import, nb_rum, '' AS secteur, CLI_DONN_NOEXTEPISODE AS no_sejour_administratif, CASE WHEN substr(CLI_CODE_GHM,1,2) = '28' THEN RSS_CLI_DONN_NBSEANCES 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', CLI_DATE_SORTIE) * 100 + date_part('month', CLI_DATE_SORTIE) AS mois_sortie, 0::bigint AS diagnostic_principal_id, 0::bigint AS diagnostic_relie_id, COALESCE(t_ghm.oid, 0) AS ghm_production_id, CASE WHEN nb_rum > 1 THEN 0::bigint ELSE 1 END AS no_rum_principal, 0::bigint 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(CLI_CODE_GHM) = 6 AND substr(CLI_CODE_GHM,1,2) <> '90' AND '1' <> '1' THEN 'V' WHEN length(CLI_CODE_GHM) = 6 AND substr(CLI_CODE_GHM,1,2) <> '90' THEN 'G' WHEN rss_type = 'EXT' 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, '' AS code_retour_groupage, 0 AS comite_medical_id, '0' AS rehosp_meme_ghm, 0 AS from_oid FROM w_FD_PMSI_RSS LEFT JOIN pmsi.t_ghm ON (CLI_CODE_GHM = t_ghm.code) LEFT JOIN pmsi.t_ghs ON (CLI_CODE_GHS = t_ghs.code) LEFT JOIN pmsi.t_medecins ON RSS_CLI_CODE_MEDECINRESPONSABLE = t_medecins.code; ]]> CLI_DONN_NOM THEN CLI_DONN_NOMNAISSANCE ELSE '' END AS nom_naissance FROM w_FD_PMSI_RSS; UPDATE pmsi.p_rss SET no_patient = to_number(CLI_Donn_NoIPPExterne,'000000000000') FROM w_FD_PMSI_RSS WHERE CLI_Donn_RSSReference = no_rss AND (CLI_Date_Sortie = date_sortie OR CLI_Date_Entree = date_entree OR CLI_DONN_NOEXTEPISODE = substr(no_sejour_administratif,1,8) AND date_trunc('month',CLI_Date_Sortie) = date_trunc('month',date_sortie)) AND en_cours LIKE '0' AND ( no_patient IS DISTINCT FROM to_number(CLI_Donn_NoIPPExterne,'000000000000') ) ; ]]> CLI_DATE_ENTREEUM THEN date(CLI_DATE_SORTIEUM) - date(CLI_DATE_ENTREEUM) ELSE 0 END AS duree_sejour, CASE WHEN substr(CLI_CODE_GHM,1,2) = '28' THEN CLI_DONN_NBSEANCES ELSE 0 END AS nb_seances, ''::text AS unite_medicale, COALESCE(t_diagnostics_dp.oid, 0) AS diagnostic_principal_id, COALESCE(t_diagnostics_dr.oid, 0) AS diagnostic_relie_id, COALESCE(t_unites_medicales.oid,0) AS unite_medicale_id, '' AS type_autorisation, CLI_DONN_IGS2 AS igs2, '' AS type_autorisation_lit_dedie, '' AS supplement_code FROM w_FD_PMSI_RSS JOIN w_FD_PMSI_RUM ON w_FD_PMSI_RSS.CLI_DONN_NOABSEPISODE = w_FD_PMSI_RUM.CLI_DONN_NOABSEPISODE AND w_FD_PMSI_RSS.CLI_DONN_NORSS = w_FD_PMSI_RUM.CLI_DONN_NORSS LEFT JOIN pmsi.t_unites_medicales ON (w_FD_PMSI_RUM.CLI_CODE_UM = t_unites_medicales.code) LEFT JOIN pmsi.t_diagnostics t_diagnostics_dp ON CLI_CODE_DIAG_DP = t_diagnostics_dp.code LEFT JOIN pmsi.t_diagnostics t_diagnostics_dr ON CLI_CODE_DIAG_DR = t_diagnostics_dr.code; ]]> 0 THEN FD_ACTES_NGAP.CLI_DONN_TARIF ELSE FB_FAC_HISTOLETTRECLE.CLI_DONN_TARIF END AS CLI_DONN_TARIF, CASE WHEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION <> '' THEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION ELSE FD_ACTES_NGAP.CLI_DONN_LETTRECLE END AS CLI_CODE_IMPRESSION, CASE WHEN CASE WHEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION <> '' THEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION ELSE FD_ACTES_NGAP.CLI_DONN_LETTRECLE END IN ('ATU', 'FTN', 'FTR', 'PHH', 'PHS', 'PII', 'PME', 'SE1', 'SE2', 'SE3', 'SE4', 'SE5', 'SE6', 'APE', 'AP2', 'FPI', 'FFM', 'REA', 'SRC', 'STF', 'PJ', 'TM') THEN 'B' ELSE 'C' END AS CLI_DONN_LETTRECLE_TYPE FROM w_FD_PMSI_RSS JOIN w_FD_PMSI_RUM ON w_FD_PMSI_RSS.CLI_DONN_NOABSEPISODE = w_FD_PMSI_RUM.CLI_DONN_NOABSEPISODE AND w_FD_PMSI_RSS.CLI_DONN_NORSS = w_FD_PMSI_RUM.CLI_DONN_NORSS JOIN prod_clinicom.FD_ACTES_ENTETE ON w_FD_PMSI_RUM.CLI_DONN_NOABSEPISODE = FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE AND FD_ACTES_ENTETE.CLI_DATE_SAISIE BETWEEN CLI_DATE_ENTREEUM AND CLI_DATE_SORTIEUM JOIN prod_clinicom.FD_ACTES_NGAP ON FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE = FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE AND FD_ACTES_ENTETE.CLI_DONN_LIEN = FD_ACTES_NGAP.CLI_DONN_LIEN JOIN prod_clinicom.FB_FAC_LETTRECLE ON FD_ACTES_NGAP.CLI_DONN_LETTRECLE = FB_FAC_LETTRECLE.CLI_CODE_LETTRECLE JOIN prod_clinicom.FB_FAC_HISTOLETTRECLE ON FD_ACTES_NGAP.CLI_DONN_LETTRECLE = FB_FAC_HISTOLETTRECLE.CLI_CODE_LETTRECLE AND CLI_DATE_SAISIE BETWEEN CLI_DATE_EFFET AND COALESCE(CLI_DATE_FINEFFET,'2099-12-31 00:00:00') - interval '1 second' WHERE rss_type = 'EXT'; 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 finess, rss_id, CLI_DONN_RSSREFERENCE AS no_rss, '1' AS code_pec, '' AS rang_beneficiaire, '' AS regime, '' AS nature_pec, '' AS justificatif_exo, CLI_DONN_NOEXTEPISODE AS no_facture, '1' AS code_regularisation, '' AS matricule_assure, '' AS cle_matricule_assure, SUM(CASE WHEN CLI_DONN_LETTRECLE_TYPE = 'B' THEN round(CLI_DONN_NBACTESSTATISTIQUES * CLI_DONN_COEFF * CLI_DONN_TARIF,2) ELSE 0 END) AS base_remboursement, SUM(CASE WHEN CLI_DONN_LETTRECLE_TYPE = 'B' THEN round(CLI_DONN_NBACTESSTATISTIQUES * CLI_DONN_COEFF * CLI_DONN_TARIF,2) ELSE 0 END) AS sejour_facture, SUM(CASE WHEN CLI_DONN_LETTRECLE_TYPE = 'B' THEN round(CLI_DONN_NBACTESSTATISTIQUES * CLI_DONN_COEFF * CLI_DONN_TARIF,2) ELSE 0 END) AS sejour_remboursable, SUM(CASE WHEN CLI_DONN_LETTRECLE_TYPE = 'C' THEN round(CLI_DONN_NBACTESSTATISTIQUES * CLI_DONN_COEFF * CLI_DONN_TARIF,2) ELSE 0 END) AS honoraires_factures, SUM(CASE WHEN CLI_DONN_LETTRECLE_TYPE = 'C' THEN round(CLI_DONN_NBACTESSTATISTIQUES * CLI_DONN_COEFF * CLI_DONN_TARIF,2) ELSE 0 END) 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_FD_ACTES_NGAP JOIN pmsi.t_prestations ON CLI_CODE_IMPRESSION = t_prestations.code GROUP BY finess, rss_id, CLI_DONN_RSSREFERENCE, CLI_DONN_NOEXTEPISODE; 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; ]]>