'' AND L0CCHI <> '0000' THEN L0CCHI WHEN L0CSPE <> '' AND L0CSPE <> '0000' THEN L0CSPE WHEN L0CME1 <> '' AND L0CME1 <> '0000' THEN L0CME1 ELSE L0CANE END FROM prod_shs.[PMSISCHEMA]_L0P01 WHERE L0AASO >= 2008 GROUP BY 1 ) AND t_medecins.code IS NULL ; INSERT INTO pmsi.t_medecins(code, nom, prenom, specialite_id, no_adeli, specialite_interne_id) SELECT trim(to_char(MDPRAT,'0000')), MDNOMS, MDPRES, COALESCE(t_specialites_medecin.oid,0), MDNIOM, COALESCE(t_specialites_internes_medecin.oid,0) FROM prod_shs.[ACTIVITESCHEMA]_MDP01 LEFT JOIN pmsi.t_specialites_medecin ON (t_specialites_medecin.code = SUBSTR(MDZTAR , 1, 2)) LEFT JOIN pmsi.t_specialites_internes_medecin ON (t_specialites_internes_medecin.code = SUBSTR(MDZTAR , 1, 2) || '..') LEFT JOIN pmsi.t_medecins ON (trim(to_char(MDPRAT,'0000')) = t_medecins.code) WHERE 1=1 AND trim(to_char(MDPRAT,'0000')) IN ( SELECT L5CMED FROM prod_shs.[PMSISCHEMA]_L5P01 WHERE L5ANNE >= 2008 GROUP BY 1 ) AND t_medecins.code IS NULL ; ]]> formatage UPDATE [SCHEMA].p_rss SET no_sejour_administratif = to_char(ADDOSS,'FM00000000') FROM prod_shs.[ACTIVITESCHEMA]_ADP01 WHERE substr(no_sejour_administratif,1,8) = ADDOSS AND ghm_id = 0 AND to_char(p_rss.date_sortie,'YYYYMMDD') = ADDTS1 AND to_char(p_rss.date_naissance,'DDMMYYYY') = to_char(ADDTNM,'FM00000000') AND no_sejour_administratif IS DISTINCT FROM to_char(ADDOSS,'FM00000000') ; -- à partir des numeros de facture UPDATE [SCHEMA].p_rss SET no_sejour_administratif = to_char(ADDOSS,'FM00000000') FROM prod_shs.[ACTIVITESCHEMA]_ADP01 JOIN prod_shs.[ACTIVITESCHEMA]_FDP02 ON ADDOSS = FDDOSS AND ADDCPL = FDDCPL WHERE FDNFA1 LIKE '%'|| no_sejour_administratif AND ghm_id = 0 AND to_char(p_rss.date_sortie,'YYYYMMDD') = ADDTS1 AND to_char(p_rss.date_naissance,'DDMMYYYY') = to_char(ADDTNM,'FM00000000') AND no_sejour_administratif IS DISTINCT FROM to_char(ADDOSS,'FM00000000') ; -- a partir des dates d'entrée, sortie et naissance (si pas plusieurs séjours avec ces mêmes infos) UPDATE [SCHEMA].p_rss SET no_sejour_administratif = to_char(ADDOSS,'FM00000000') FROM prod_shs.[ACTIVITESCHEMA]_ADP01 LEFT JOIN ( SELECT ENT, SOR, DN FROM ( SELECT ADDTE1 as ENT, ADDTS1 AS SOR, ADDTNM AS DN, ADNOM1, ADPREM FROM prod_shs.[ACTIVITESCHEMA]_ADP01 GROUP BY 1, 2, 3, 4, 5 ) sub GROUP BY 1, 2, 3 HAVING count(*) > 1 ) sub2 ON ENT = ADDTE1 AND SOR = ADDTS1 AND DN = ADDTNM WHERE ENT IS NULL AND ghm_id = 0 AND to_char(p_rss.date_entree,'YYYYMMDD') = ADDTE1 AND to_char(p_rss.date_sortie,'YYYYMMDD') = ADDTS1 AND to_char(p_rss.date_naissance,'DDMMYYYY') = to_char(ADDTNM,'FM00000000') AND no_sejour_administratif IS DISTINCT FROM to_char(ADDOSS,'FM00000000') ; -- a partir de l'historique UPDATE [SCHEMA].p_rss SET no_sejour_administratif = to_char(ADDOSS,'FM00000000') FROM prod_shs.[ACTIVITESCHEMA]H_ADP01H LEFT JOIN ( SELECT ENT, SOR, DN FROM ( SELECT ADDTE1 as ENT, ADDTS1 AS SOR, ADDTNM AS DN, ADNOM1, ADPREM FROM prod_shs.[ACTIVITESCHEMA]H_ADP01H GROUP BY 1, 2, 3, 4, 5 ) sub GROUP BY 1, 2, 3 HAVING count(*) > 1 ) sub2 ON ENT = ADDTE1 AND SOR = ADDTS1 AND DN = ADDTNM WHERE ENT IS NULL AND ghm_id = 0 AND to_char(p_rss.date_entree,'YYYYMMDD') = ADDTE1 AND to_char(p_rss.date_sortie,'YYYYMMDD') = ADDTS1 AND to_char(p_rss.date_naissance,'DDMMYYYY') = to_char(ADDTNM,'FM00000000') AND no_sejour_administratif IS DISTINCT FROM to_char(ADDOSS,'FM00000000') ; UPDATE [SCHEMA].p_identites SET nom = ADNOM1, prenom = ADPREM FROM [SCHEMA].p_rss JOIN prod_shs.[ACTIVITESCHEMA]H_adp01H ON no_sejour_administratif = ADDOSS AND to_char(p_rss.date_sortie,'YYYYMMDD') = ADDTS1 AND to_char(p_rss.date_naissance,'DDMMYYYY') = to_char(ADDTNM,'FM00000000') WHERE p_identites.rss_id = p_rss.oid AND nom LIKE 'RSS %'; UPDATE [SCHEMA].p_rss SET no_patient = ADDMED FROM prod_shs.[ACTIVITESCHEMA]H_adp01H WHERE no_sejour_administratif = ADDOSS AND to_char(p_rss.date_sortie,'YYYYMMDD') = ADDTS1 AND to_char(p_rss.date_naissance,'DDMMYYYY') = to_char(ADDTNM,'FM00000000') AND no_patient <= 0; UPDATE [SCHEMA].p_identites SET nom = ADNOM1, prenom = ADPREM FROM [SCHEMA].p_rss JOIN prod_shs.[ACTIVITESCHEMA]_adp01 ON no_sejour_administratif = ADDOSS AND to_char(p_rss.date_sortie,'YYYYMMDD') = ADDTS1 AND to_char(p_rss.date_naissance,'DDMMYYYY') = to_char(ADDTNM,'FM00000000') WHERE p_identites.rss_id = p_rss.oid AND nom LIKE 'RSS %'; UPDATE [SCHEMA].p_rss SET no_patient = ADDMED FROM prod_shs.[ACTIVITESCHEMA]_adp01 WHERE no_sejour_administratif = ADDOSS AND to_char(p_rss.date_sortie,'YYYYMMDD') = ADDTS1 AND to_char(p_rss.date_naissance,'DDMMYYYY') = to_char(ADDTNM,'FM00000000') AND no_patient <= 0; ]]> '' AND L0CCHI <> '0000' THEN L0CCHI WHEN L0CSPE <> '' AND L0CSPE <> '0000' THEN L0CSPE WHEN L0CME1 <> '' AND L0CME1 <> '0000' THEN L0CME1 ELSE L0CANE END = t_medecins.code WHERE 1=1 AND p_rss.no_rss = L0NRSS AND p_rss.import_id = [IMPORT_ID] AND date_part('year', p_rss.date_sortie) = L0AASO AND medecin_rss_id IS DISTINCT FROM t_medecins.oid ; -- Tentative de liaison via le n° administratif de séjour. UPDATE [SCHEMA].p_rss SET medecin_rss_id = t_medecins.oid FROM prod_shs.[PMSISCHEMA]_L0P01 JOIN pmsi.t_medecins ON CASE WHEN L0CCHI <> '' AND L0CCHI <> '0000' THEN L0CCHI WHEN L0CSPE <> '' AND L0CSPE <> '0000' THEN L0CSPE WHEN L0CME1 <> '' AND L0CME1 <> '0000' THEN L0CME1 ELSE L0CANE END = t_medecins.code WHERE 1=1 AND p_rss.no_sejour_administratif = L0NDOS AND p_rss.import_id = [IMPORT_ID] AND to_char(p_rss.date_sortie, 'YYYYMM') = to_char(L0AASO,'FM0000')||to_char(L0MMSO,'FM00') AND medecin_rss_id IS DISTINCT FROM t_medecins.oid ; -- Liaison via la gestion administrative (externes) UPDATE [SCHEMA].p_rss SET medecin_rss_id = t_medecins.oid FROM prod_shs.[ACTIVITESCHEMA]_adp01 JOIN pmsi.t_medecins ON to_char(ADMEDR,'FM0000') = t_medecins.code WHERE 1=1 AND p_rss.no_sejour_administratif = ADDOSS AND ADDCPL = 0 AND p_rss.import_id = [IMPORT_ID] AND to_char(p_rss.date_sortie,'YYYYMMDD') = ADDTS1 AND to_char(p_rss.date_naissance,'DDMMYYYY') = to_char(ADDTNM,'FM00000000') AND medecin_rss_id = 0 ; ]]> '' AND L0CCHI <> '0000' THEN L0CCHI WHEN L0CSPE <> '' AND L0CSPE <> '0000' THEN L0CSPE WHEN L0CME1 <> '' AND L0CME1 <> '0000' THEN L0CME1 ELSE L0CANE END FROM prod_shs.[PMSISCHEMA]_L0P01 WHERE L0AASO >= 2008 GROUP BY 1 ) AND t_medecins.code IS NULL ; INSERT INTO pmsi.t_medecins(code, nom, prenom, specialite_id, no_adeli, specialite_interne_id) SELECT trim(to_char(MDPRAT,'0000')), MDNOMS, MDPRES, COALESCE(t_specialites_medecin.oid,0), MDNIOM, COALESCE(t_specialites_internes_medecin.oid,0) FROM prod_shs.[ACTIVITESCHEMA]_MDP01 LEFT JOIN pmsi.t_specialites_medecin ON (t_specialites_medecin.code = SUBSTR(MDZTAR , 1, 2)) LEFT JOIN pmsi.t_specialites_internes_medecin ON (t_specialites_internes_medecin.code = SUBSTR(MDZTAR , 1, 2) || '..') LEFT JOIN pmsi.t_medecins ON (trim(to_char(MDPRAT,'0000')) = t_medecins.code) WHERE 1=1 AND trim(to_char(MDPRAT,'0000')) IN ( SELECT L5CMED FROM prod_shs.[PMSISCHEMA]_L5P01 WHERE L5ANNE >= 2008 GROUP BY 1 ) AND t_medecins.code IS NULL ; ]]> '' GROUP BY 1,2; INSERT INTO pmsi.t_unites_medicales (code, texte) SELECT w_um.code, w_um.texte FROM w_um WHERE w_um.code NOT IN (SELECT code FROM pmsi.t_unites_medicales) GROUP BY 1,2; ]]> 1; DROP TABLE IF EXISTS w_rss; CREATE TEMP TABLE w_rss AS SELECT (SELECT code FROM w_finess) AS finess, L0NDOS, L0COMP, L0NRSS, nextval('pmsi.s_rss'::regclass) AS rss_id, base.date(L0AANP * 10000 + L0MMNP * 100 + L0JJNP) AS L0DTNP_date, L0NOMP, L0PREP, L0SEXE, SFGGHS, CASE WHEN L0GHM9 <> '' AND length(L0GHM9) = 6 THEN L0GHM9 WHEN SFGGHS IN ('1', '3') THEN '99Z99Z' ELSE '' END AS L0GHM9, CASE WHEN L0CCHI <> '' AND L0CCHI <> '0000' THEN L0CCHI WHEN L0CSPE <> '' AND L0CSPE <> '0000' THEN L0CSPE WHEN L0CME1 <> '' AND L0CME1 <> '0000' THEN L0CME1 ELSE L0CANE END AS L0CCHI, CASE WHEN L0GHM9 <> '' AND length(L0GHM9) = 6 AND L0GHM9 NOT LIKE '90%' AND L0FI14 = 'O' THEN 'V' WHEN L0GHM9 <> '' AND length(L0GHM9) = 6 AND L0GHM9 NOT LIKE '90%' THEN 'G' WHEN SFGGHS = '2' AND SFTYPA NOT IN ('01','05') THEN 'V' ELSE 'S' END AS L0ETAT, CASE WHEN char_length(L0NGHS) > 0 THEN trim(leading '0' from L0NGHS) ELSE '0000' END AS L0NGHS, L0FI14, L0CMEN, L0CPRO, L0CMSO, L0CDES, L0CDP1, L0CDP2, L0PDBB, case when ADDTE1 is not null THEN base.date(ADDTE1) ELSE base.date(L0AAEN * 10000 + L0MMEN * 100 + L0JJEN) END AS ADDTE1_date, case when ADDOSS is not null THEN COALESCE(base.date(ADDTS1), GREATEST(base.date(ADDTE1), date(now()))) ELSE date(base.date(L0AASO * 10000 + L0MMSO * 100 + L0JJSO)) END AS ADDTS1_date, 'MF'::text AS origine_RSF, 0::integer as nb_seances, L0CERR FROM prod_shs.[PMSISCHEMA]_L0P01 LEFT JOIN pmsi.p_rss ON L0NRSS = p_rss.no_rss AND p_rss.etat = '' AND L0AASO = date_part('year', p_rss.date_sortie) LEFT JOIN pmsi.p_rss p_rss_a ON L0NDOS = p_rss_a.no_sejour_administratif AND p_rss_a.etat = '' AND L0AASO = date_part('year', p_rss_a.date_sortie) LEFT JOIN prod_shs.[ACTIVITESCHEMA]_ADP01 ON L0NDOS = ADDOSS AND ADDCPL = 0 AND ADCPRP = '1' AND base.date(ADDTS1) <= now() LEFT JOIN prod_shs.[ACTIVITESCHEMA]_SFP01 ON ADCSER = SFCSER WHERE L0AASO BETWEEN '[ANNEE]' AND date_part('year', now()) AND L0NRSS > 0 AND L0COMP = 0 AND ( SFGGHS NOT IN ('','0','2') OR SFGGHS = '2' AND SFTYPA <> '03' AND SFTYPA <> '04' AND ADCFAC = '1' OR L0GHM9 <> '' AND length(L0GHM9) = 6 ) AND p_rss.no_rss IS NULL AND p_rss_a.no_rss IS NULL ORDER BY L0NRSS; -- modifPL comptage des séances (compteur l0comp) pour séjours non facturés DROP TABLE IF EXISTS w_rss_se; CREATE TEMP TABLE w_rss_se AS SELECT w_rss.L0NDOS, count(*) as compteur from prod_shs.[PMSISCHEMA]_L0P01 INNER JOIN w_rss on [PMSISCHEMA]_L0P01.L0NDOS = w_rss.L0NDOS GROUP BY 1 HAVING count(*) > 1; UPDATE w_rss SET nb_seances = w_rss_se.compteur FROM w_rss_se WHERE w_rss_se.L0NDOS = w_rss.L0NDOS; -- Supprime les doublons de no_rss sur les dossiers en cours (ils ne seront pas importés) DROP TABLE IF EXISTS w_rss_doublons; CREATE TEMP TABLE w_rss_doublons AS SELECT L0NRSS FROM w_rss GROUP BY 1 HAVING count(*) > 1; CTISELECT_PROPERTY_READ 'DOUBLONS_NORSS', COALESCE(base.cti_group_concat(L0NRSS),'') FROM w_rss_doublons ; warn numéros de RSS en doublon : {[DOUBLONS_NORSS]}. Ces dossiers ne seront pas importés ; DELETE FROM w_rss WHERE L0NRSS = ANY(array(SELECT L0NRSS FROM w_rss GROUP BY 1 HAVING count(*) > 1)::bigint[]); CREATE INDEX w_rss_i1 ON w_rss USING btree (rss_id); CREATE INDEX w_rss_i2 ON w_rss USING btree (L0NDOS); UPDATE w_rss SET origine_RSF = 'JB' FROM prod_shs.[PMSISCHEMA]_JBP05 WHERE JBNDOS = w_rss.L0NDOS AND JBCOMP = w_rss.L0COMP AND JBTTFA <> 0; 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 w_rss.finess AS finess, w_rss.rss_id AS oid, w_rss.L0NRSS AS no_rss, 0 AS no_patient, '' AS version_groupage, date(L0DTNP_date) AS date_naissance, L0SEXE AS sexe, date(ADDTE1_date) AS date_entree, date(ADDTS1_date) AS date_sortie, L0CMEN AS mode_entree, CASE WHEN L0CPRO = 0 OR char_length(L0CPRO) > 1 THEN ' ' ELSE L0CPRO::text END AS provenance, L0CMSO AS mode_sortie, CASE WHEN L0CDES = 0 OR char_length(L0CDES) > 1 THEN ' ' ELSE L0CDES::text END AS destination, substr(trim(to_char(L0CDP1 * 1000 + L0CDP2,'FM0000000000')),6,5) AS code_postal, L0PDBB AS poids_bebe, 0 AS igs2, '' AS cma, substr(L0GHM9 , 3 , 1) AS groupe_ghm, CASE WHEN date(ADDTS1_date) > date(ADDTE1_date) THEN date(ADDTS1_date) - date(ADDTE1_date) ELSE 0 END AS duree_sejour, CASE WHEN substr(L0GHM9,1,2) = '28' THEN 1 ELSE 1 END AS nb_rsa, CASE WHEN date(ADDTE1_date) > date(L0DTNP_date) THEN trunc((date(ADDTE1_date) - date(L0DTNP_date)) / 365.25,0) ELSE 0 END AS age, '' AS supprime, now() AS date_import, 1 AS nb_rum, '' AS secteur, trim(to_char(L0NDOS,'00000000')) AS no_sejour_administratif, w_rss.nb_seances 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', ADDTS1_date) * 100 + date_part('month', ADDTS1_date) 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, L0ETAT 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, RIGHT(L0CERR,3) AS code_retour_groupage, 0 AS comite_medical_id, '0' AS rehosp_meme_ghm, 0 AS from_oid FROM w_rss LEFT JOIN pmsi.t_ghm ON L0GHM9 = t_ghm.code LEFT JOIN pmsi.t_ghs ON L0NGHS = t_ghs.code_text LEFT JOIN pmsi.t_medecins ON L0CCHI = t_medecins.code; -- transferts d'établissements INSERT INTO base.t_etablissements(code, texte, texte_court) SELECT DDNDOP, DDNDOP, DDNDOP FROM prod_shs.[ACTIVITESCHEMA]_DDP01 WHERE DDNDOP NOT IN (SELECT code FROM base.t_etablissements) GROUP BY 1,2,3 ; /********************************************************************************** * 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(ARRAY[DDDCPL::text,provenance.oid::text]))[2],0::text)::bigint AS prov_id, COALESCE((MAX(ARRAY[DDDCPL::text,destination.oid::text]))[2],0::text)::bigint AS dest_id FROM pmsi.p_rss JOIN prod_shs.[ACTIVITESCHEMA]_DDP01 ON DDDOSS = no_sejour_administratif LEFT JOIN base.t_etablissements provenance ON DDNDOP = provenance.code AND DDNDOP != '' LEFT JOIN base.t_etablissements destination ON DDNDOD = destination.code AND DDNDOD != '' WHERE 1=1 AND ( DDNDOD != '' OR DDNDOP != '') AND etat != 'S' GROUP BY 1,2 ; ]]> date(base.date(L2AENT * 10000 + L2MENT * 100 + L2JENT)) THEN date(base.date(L2ASOR * 10000 + L2MSOR * 100 + L2JSOR)) - date(base.date(L2AENT * 10000 + L2MENT * 100 + L2JENT)) ELSE 0 END AS duree_sejour, CASE WHEN w_rss.nb_seances > 0 THEN w_rss.nb_seances ELSE L2NBSE END AS nb_seances, L2CDUM 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, L2NIGS AS igs2, '' AS type_autorisation_lit_dedie, '' AS supplement_code FROM prod_shs.[PMSISCHEMA]_L2P01 JOIN w_rss ON (L2NDOS = w_rss.L0NDOS AND L2COMP = w_rss.L0COMP) LEFT JOIN pmsi.t_unites_medicales ON (L2CDUM = t_unites_medicales.code) LEFT JOIN pmsi.t_diagnostics ON (L2DIAG = t_diagnostics.code) LEFT JOIN pmsi.t_diagnostics t_diagnostics_relies ON (L2DIAR = t_diagnostics_relies.code); DROP TABLE IF EXISTS w_rss_rum; CREATE TEMP TABLE w_rss_rum AS SELECT p_rss_rum.rss_id, count(*) AS nb_rum, SUM(p_rss_rum.nb_seances) AS nb_seances, MIN(no_rum) AS no_premier_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; 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, nb_seances = w_rss_rum.nb_seances 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; ]]> 0 OR t_prestations.code IN ('GHS', 'EXH', 'ATU', 'FFM', 'SE1', 'SE2', 'SE3', 'SE4', 'SE5', 'SE6', 'SE7', 'APE', 'AP2', 'FPI', 'FFM')) 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; ]]> '' 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', 'ATU', 'FFM', 'SE1', 'SE2', 'SE3', 'SE4' ,'SE5', 'SE6', 'SE7', 'APE', 'AP2', 'FPI', 'FFM') OR t_prestations.code IN ('GHS') AND MFCGHS = 9605 ); -- Detail RSF depuis Facturation (externes ou pas de RSF dans PMSI) -- CAS Spécial du 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 w_rss.finess AS finess, w_rss.rss_id AS rss_id, w_rss.L0NRSS AS no_rss, '' AS nature, '' AS mt, '' AS dmt, ADDTE1_date AS date_debut, ADDTS1_date 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 JOIN w_rss ON MFDOSS = w_rss.L0NDOS AND MFDCPL = 0 AND origine_RSF = 'MF' 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; ]]> 0 AND L0NDME > 0 GROUP BY 1,2; ALTER TABLE w_L0P01 ADD CONSTRAINT w_L0P01_pkey PRIMARY KEY(L0NRSS); UPDATE pmsi.p_rss_etat SET date_groupage = CASE WHEN L0DTGR >= date_sortie THEN L0DTGR ELSE '20991231' END FROM pmsi.p_rss JOIN w_L0P01 ON L0NRSS = no_rss AND date_part('year',date_sortie) = L0AASO WHERE p_rss_etat.rss_id = p_rss.oid AND date_groupage IS DISTINCT FROM CASE WHEN L0DTGR >= date_sortie THEN L0DTGR ELSE '20991231' END; DROP TABLE IF EXISTS w_L0P01; CREATE TEMP TABLE w_L0P01 AS SELECT to_char(L0NDOS,'FM00000000') AS L0NDOS, MAX(L0DTGR) AS L0DTGR_original, to_date(MAX(to_char(L0DTGR,'FM00000000')),'YYYYMMDD') AS L0DTGR FROM prod_shs.[PMSISCHEMA]_L0P01 GROUP BY 1; ALTER TABLE w_L0P01 ADD CONSTRAINT w_L0P01_pkey PRIMARY KEY(L0NDOS); UPDATE pmsi.p_rss_etat SET date_groupage = CASE WHEN L0DTGR >= date_sortie THEN L0DTGR ELSE '20991231' END FROM pmsi.p_rss JOIN w_L0P01 ON L0NDOS = no_sejour_administratif WHERE p_rss_etat.rss_id = p_rss.oid AND date_groupage IS DISTINCT FROM CASE WHEN L0DTGR >= date_sortie THEN L0DTGR ELSE '20991231' END AND L0DTGR >= date_sortie; DROP TABLE IF EXISTS w_ADP01; CREATE TEMP TABLE w_ADP01 AS SELECT 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]h_ADP01H WHERE ADADAV IN ('0','3') GROUP BY 1,2; ALTER TABLE w_ADP01 ADD CONSTRAINT w_ADP01_pkey PRIMARY KEY(ADDOSS); 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 ); DROP TABLE IF EXISTS w_ADP01; CREATE TEMP TABLE w_ADP01 AS SELECT 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') GROUP BY 1,2; ALTER TABLE w_ADP01 ADD CONSTRAINT w_ADP01_pkey PRIMARY KEY(ADDOSS); UPDATE pmsi.p_rss_etat SET date_facture = CASE WHEN ADDTFA >= date_sortie THEN ADDTFA ELSE '20991231' END, est_facture = CASE WHEN ADDTFA >= date_sortie 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 THEN ADDTFA ELSE '20991231' END, est_facture = CASE WHEN ADDTFA >= date_sortie 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 ); DROP TABLE IF EXISTS w_ADP01; CREATE TEMP TABLE w_ADP01 AS SELECT 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') GROUP BY 1,2; ALTER TABLE w_ADP01 ADD CONSTRAINT w_ADP01_pkey PRIMARY KEY(ADDOSS); 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 ghm_id = t_ghm_99Z98Z.oid, ghm_production_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, ghm_production_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, ghm_production_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, ghm_production_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', '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 ; ]]>