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