'' 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 ;
]]>