pour déploiement auto v2 via gitlab
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

1546 lines
50 KiB

<?xml version="1.0" encoding="ISO-8859-1"?>
<ROOT>
<NODE name="PMSICOMPLEMENTS" label="RECUPERATION DES DONNEES COMPLEMENTAIRES PMSI">
<NODE label="Paramètres">
<sqlcmd><![CDATA[
/**********************************************************************************
* SPECIALITES MEDECINS *
**********************************************************************************/
INSERT INTO pmsi.t_specialites_medecin(code,texte)
SELECT
NOSPEC,
LIBELLE
FROM prod_mederi.KSPECIAL
LEFT JOIN pmsi.t_specialites_medecin on t_specialites_medecin.code = NOSPEC
WHERE t_specialites_medecin.code IS NULL
ORDER BY 1;
INSERT INTO pmsi.t_specialites_internes_medecin(code, texte)
SELECT
t_specialites_medecin.code::text || '..'::text,
t_specialites_medecin.texte
FROM
pmsi.t_specialites_medecin
LEFT JOIN pmsi.t_specialites_internes_medecin on t_specialites_internes_medecin.code = t_specialites_medecin.code::text || '..'::text
WHERE 1=1
AND t_specialites_medecin.oid <> 0
AND t_specialites_internes_medecin.code IS NULL
ORDER BY 1;
/**********************************************************************************
* MEDECINS *
**********************************************************************************/
INSERT INTO pmsi.t_medecins (code, nom, prenom, specialite_id, no_adeli, specialite_interne_id)
SELECT
NOPRAT as code
,NOMPRAT as nom
,PRENOMPRAT as prenom
,COALESCE(t_specialites_medecin.oid, 0) as specialite_id
,COALESCE(RPPS,'') AS RPPS
,COALESCE(t_specialites_internes_medecin.oid, 0) as specialite_interne_id
FROM
prod_mederi.KPRAT
LEFT JOIN pmsi.t_specialites_medecin ON t_specialites_medecin.code = NOSPEC
LEFT JOIN pmsi.t_specialites_internes_medecin ON (t_specialites_internes_medecin.code = NOSPEC || '..')
LEFT JOIN pmsi.t_medecins ON NOPRAT = t_medecins.code
WHERE t_medecins.code IS NULL;
SELECT pmsi.cti_reorganize_medecins_c();
/**********************************************************************************
* UNITES MEDICALES *
**********************************************************************************/
INSERT INTO pmsi.t_unites_medicales (code, texte)
SELECT
CODEUM
,LIBSERVSS
FROM
prod_mederi.KSERVINT
JOIN prod_mederi.KSERVSS ON KSERVINT.NOSERVSS = KSERVSS.NOSERVSS
JOIN pmsi.t_unites_medicales ON t_unites_medicales.code = KSERVINT.CODEUM
WHERE
CODEUM != '' AND
t_unites_medicales.code IS NULL
GROUP BY 1,2
ORDER BY 1;
UPDATE pmsi.t_unites_medicales
SET texte = LIBSERVSS
FROM prod_mederi.KSERVINT
JOIN prod_mederi.KSERVSS ON KSERVINT.NOSERVSS = KSERVSS.NOSERVSS
WHERE t_unites_medicales.code = CODEUM AND
texte <> LIBSERVSS;
/**********************************************************************************
* UNITES FONCTIONNELLES *
**********************************************************************************/
INSERT INTO pmsi.t_unites_fonctionnelles(oid, code, texte)
SELECT 0, '', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM pmsi.t_unites_fonctionnelles);
INSERT INTO pmsi.t_unites_fonctionnelles (code, texte)
SELECT NOSERVSS, LIBSERVSS
FROM prod_mederi.KSERVSS
LEFT JOIN pmsi.t_unites_fonctionnelles uf ON code = NOSERVSS
WHERE
uf.code IS NULL
ORDER BY 1;
/**********************************************************************************
* PRESTATIONS *
**********************************************************************************/
INSERT INTO pmsi.t_prestations(code, texte, texte_court)
SELECT
NOACTE,
LIBELLE,
LIBELLE
FROM prod_mederi.KRUBTAR
WHERE NOACTE NOT IN (select code from pmsi.t_prestations)
GROUP BY 1,2,3;
/**********************************************************************************
* COEFF MCO *
**********************************************************************************/
DROP TABLE IF EXISTS w_coef;
CREATE TEMP TABLE w_coef as
SELECT DATEDEB, COEFF, row_number() over (order by DATEDEB)
FROM prod_mederi.ETABLI
LEFT JOIN prod_mederi.ETABCOEF ON 1=1
WHERE NOFITNESS IN (SELECT code FROM base.t_finess)
ORDER BY DATEDEB;
UPDATE base.t_finess SET
date_debut_coefficient_mco_1 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 1),
date_debut_coefficient_mco_2 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 3),
date_debut_coefficient_mco_3 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 3),
date_debut_coefficient_mco_4 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 4),
date_debut_coefficient_mco_5 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 5),
date_debut_coefficient_mco_6 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 6),
date_debut_coefficient_mco_7 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 7),
date_debut_coefficient_mco_8 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 8),
date_debut_coefficient_mco_9 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 9),
coefficient_mco_1 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 1),
coefficient_mco_2 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 2),
coefficient_mco_3 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 3),
coefficient_mco_4 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 4),
coefficient_mco_5 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 5),
coefficient_mco_6 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 6),
coefficient_mco_7 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 7),
coefficient_mco_8 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 8),
coefficient_mco_9 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 9);
]]></sqlcmd>
</NODE>
<NODE label="Identités">
<sqlcmd><![CDATA[
-- Numéros de séjours des externes selon numéro de facture
UPDATE [SCHEMA].p_rss
SET no_sejour_administratif = NODOSSIER
FROM
(
SELECT p_rsf_total.rss_id, KFACTURE.NODOSSIER
FROM [SCHEMA].p_rsf_total
JOIN [SCHEMA].p_rss ON p_rsf_total.rss_id = p_rss.oid
JOIN prod_mederi.KFACTURE ON KFACTURE.NOFAC = p_rsf_total.no_facture
JOIN prod_mederi.KDOSSIER ON KFACTURE.NODOSSIER = KDOSSIER.NODOSSIER
WHERE no_sejour_administratif IS DISTINCT FROM KFACTURE.NODOSSIER AND
(
date_entree = KDOSSIER.DATEENTREE OR
date_sortie = KDOSSIER.DATESORTIE
) AND
ghm_id = 0 AND
p_rss.import_id > 0
) subview
WHERE p_rss.oid = subview.rss_id
;
UPDATE [SCHEMA].p_identites SET
nom = NOMPAT
,prenom = PRENOMPAT
,nom_naissance = NOMJFPAT
FROM [SCHEMA].p_rss
JOIN prod_mederi.KDOSSIER ON KDOSSIER.NODOSSIER = no_sejour_administratif
WHERE
p_identites.rss_id = p_rss.oid AND
p_rss.import_id > 0
;
UPDATE [SCHEMA].p_rss SET code_postal = SUBSTR(CPPAT, 1 , 5)
FROM prod_mederi.KDOSSIER
WHERE no_sejour_administratif = KDOSSIER.NODOSSIER;
]]></sqlcmd>
</NODE>
<NODE label="Médecins RSS">
<sqlcmd><![CDATA[
UPDATE [SCHEMA].p_rss SET medecin_rss_id = t_medecins.oid
FROM
prod_mederi.KDOSSIER
JOIN pmsi.t_medecins ON t_medecins.code = NOPRAT
WHERE no_sejour_administratif = KDOSSIER.NODOSSIER AND
p_rss.import_id > 0 AND
medecin_rss_id <> t_medecins.oid;
]]></sqlcmd>
</NODE>
<NODE label="Médecins actes">
<sqlcmd><![CDATA[
UPDATE [SCHEMA].p_rss_actes
SET medecin_id = t_medecins.oid
FROM pmsi.t_actes,
[SCHEMA].p_rss,
prod_mederi.KDOSSIER
JOIN prod_mederi.KACTES ON KACTES.NODOSSIER = KDOSSIER.NODOSSIER
JOIN pmsi.t_medecins ON t_medecins.code = KACTES.NOPRAT
WHERE
KDOSSIER.NODOSSIER = no_sejour_administratif
AND p_rss_actes.rss_id = p_rss.oid
AND p_rss_actes.date_acte = date(DATEACTE)
AND p_rss_actes.activite_ccam = ACTIVITE
AND p_rss_actes.acte_id = t_actes.oid
AND t_actes.code = substring(NCCAM, 1, 7)
AND p_rss_actes.medecin_id <> t_medecins.oid
AND p_rss.import_id > 0;
]]></sqlcmd>
</NODE>
<NODE label="Etat des dossiers">
<sqlcmd><![CDATA[
SELECT pmsi.cti_initialize_rss_etat();
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="PMSIENCOURS" label="RECUPERATION DES DOSSIERS PMSI EN-COURS MEDERI">
<NODE label="Paramètres">
<sqlcmd><![CDATA[
/**********************************************************************************
* SPECIALITES MEDECINS *
**********************************************************************************/
INSERT INTO pmsi.t_specialites_medecin(code,texte)
SELECT
NOSPEC,
LIBELLE
FROM prod_mederi.KSPECIAL
LEFT JOIN pmsi.t_specialites_medecin on t_specialites_medecin.code = NOSPEC
WHERE t_specialites_medecin.code IS NULL
ORDER BY 1;
INSERT INTO pmsi.t_specialites_internes_medecin(code, texte)
SELECT
t_specialites_medecin.code::text || '..'::text,
t_specialites_medecin.texte
FROM
pmsi.t_specialites_medecin
LEFT JOIN pmsi.t_specialites_internes_medecin on t_specialites_internes_medecin.code = t_specialites_medecin.code::text || '..'::text
WHERE 1=1
AND t_specialites_medecin.oid <> 0
AND t_specialites_internes_medecin.code IS NULL
ORDER BY 1;
/**********************************************************************************
* MEDECINS *
**********************************************************************************/
INSERT INTO pmsi.t_medecins (code, nom, prenom, specialite_id, no_adeli, specialite_interne_id)
SELECT
NOPRAT as code
,NOMPRAT as nom
,PRENOMPRAT as prenom
,COALESCE(t_specialites_medecin.oid, 0) as specialite_id
,COALESCE(RPPS,'') AS RPPS
,COALESCE(t_specialites_internes_medecin.oid, 0) as specialite_interne_id
FROM
prod_mederi.KPRAT
LEFT JOIN pmsi.t_specialites_medecin ON t_specialites_medecin.code = NOSPEC
LEFT JOIN pmsi.t_specialites_internes_medecin ON (t_specialites_internes_medecin.code = NOSPEC || '..')
LEFT JOIN pmsi.t_medecins ON NOPRAT = t_medecins.code
WHERE t_medecins.code IS NULL;
SELECT pmsi.cti_reorganize_medecins_c();
/**********************************************************************************
* UNITES MEDICALES *
**********************************************************************************/
INSERT INTO pmsi.t_unites_medicales (code, texte)
SELECT
CODEUM
,LIBSERVSS
FROM
prod_mederi.KSERVINT
JOIN prod_mederi.KSERVSS ON KSERVINT.NOSERVSS = KSERVSS.NOSERVSS
JOIN pmsi.t_unites_medicales ON t_unites_medicales.code = KSERVINT.CODEUM
WHERE
CODEUM != '' AND
t_unites_medicales.code IS NULL
GROUP BY 1,2
ORDER BY 1;
UPDATE pmsi.t_unites_medicales
SET texte = LIBSERVSS
FROM prod_mederi.KSERVINT
JOIN prod_mederi.KSERVSS ON KSERVINT.NOSERVSS = KSERVSS.NOSERVSS
WHERE t_unites_medicales.code = CODEUM AND
texte <> LIBSERVSS;
/**********************************************************************************
* UNITES FONCTIONNELLES *
**********************************************************************************/
INSERT INTO pmsi.t_unites_fonctionnelles(oid, code, texte)
SELECT 0, '', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM pmsi.t_unites_fonctionnelles);
INSERT INTO pmsi.t_unites_fonctionnelles (code, texte)
SELECT NOSERVSS, LIBSERVSS
FROM prod_mederi.KSERVSS
LEFT JOIN pmsi.t_unites_fonctionnelles uf ON code = NOSERVSS
WHERE
uf.code IS NULL
ORDER BY 1;
/**********************************************************************************
* PRESTATIONS *
**********************************************************************************/
INSERT INTO pmsi.t_prestations(code, texte, texte_court)
SELECT
NOACTE,
LIBELLE,
LIBELLE
FROM prod_mederi.KRUBTAR
WHERE NOACTE NOT IN (select code from pmsi.t_prestations)
GROUP BY 1,2,3;
/**********************************************************************************
* COEFF MCO *
**********************************************************************************/
DROP TABLE IF EXISTS w_coef;
CREATE TEMP TABLE w_coef as
SELECT DATEDEB, COEFF, row_number() over (order by DATEDEB)
FROM prod_mederi.ETABLI
LEFT JOIN prod_mederi.ETABCOEF ON 1=1
WHERE NOFITNESS IN (SELECT code FROM base.t_finess)
ORDER BY DATEDEB;
UPDATE base.t_finess SET
date_debut_coefficient_mco_1 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 1),
date_debut_coefficient_mco_2 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 3),
date_debut_coefficient_mco_3 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 3),
date_debut_coefficient_mco_4 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 4),
date_debut_coefficient_mco_5 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 5),
date_debut_coefficient_mco_6 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 6),
date_debut_coefficient_mco_7 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 7),
date_debut_coefficient_mco_8 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 8),
date_debut_coefficient_mco_9 = (SELECT date(DATEDEB) FROM w_coef WHERE row_number = 9),
coefficient_mco_1 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 1),
coefficient_mco_2 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 2),
coefficient_mco_3 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 3),
coefficient_mco_4 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 4),
coefficient_mco_5 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 5),
coefficient_mco_6 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 6),
coefficient_mco_7 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 7),
coefficient_mco_8 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 8),
coefficient_mco_9 = (SELECT COEFF::numeric FROM w_coef WHERE row_number = 9);
]]></sqlcmd>
</NODE>
<NODE label="RSS">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_DOSSIER;
CREATE TEMP TABLE w_DOSSIER AS
SELECT
NOFITNESS,
KDOSSIER.* ,
COALESCE(DATESORTIE, '20991231') AS date_sortie,
'N'::text AS CTI_OK,
''::text AS dup_type_sejour,
'0'::text AS dup_code_prevu,
0::bigint AS dup_sejour_id,
0::bigint AS dup_medecin_sejour_id,
''::text AS dup_etat,
rank() OVER (PARTITION BY KDOSSIER.NODOSSIER ORDER BY DATESORTIE, HEURESOR) as rank,
K5CLEUNIK
FROM prod_mederi.KDOSSIER
LEFT JOIN prod_mederi.KRSS ON KDOSSIER.NODOSSIER = KRSS.NODOSSIER
,prod_mederi.ETABLI--LEFT JOIN prod_mederi.ETABLI ON KDOSSIER.NOETABLI = ETABLI.NOETABLI
WHERE 1=1
AND COALESCE(COALESCE(DATESORTIE,RSSSORT), '20991231') >= '20160101'
AND COALESCE(COALESCE(DATESORTIE,RSSSORT), '20991231') <= now()
ORDER BY NODOSSIER, K5CLEUNIK;
-- date entrée > datedeb
UPDATE w_DOSSIER
SET
DATEENTREE = KSEJOUR.DATEDEB,
HEUREENT = KSEJOUR.HEUREDEB
FROM prod_mederi.KSEJOUR
WHERE
DATEENTREE > w_DOSSIER.DATEDEB
AND KSEJOUR.NODOSSIER = w_DOSSIER.NODOSSIER
AND w_DOSSIER.DATEDEB = KSEJOUR.DATEDEB;
UPDATE w_DOSSIER
SET
NODOSSIER = NODOSSIER || '_' || rank
WHERE rank != 1;
-- modification de la table des rss pour prendre en compte les rss multiples par séjour
UPDATE prod_mederi.KRSS
SET
NODOSSIER = w_DOSSIER.NODOSSIER
FROM w_DOSSIER
WHERE KRSS.K5CLEUNIK = w_DOSSIER.K5CLEUNIK
;
CREATE INDEX w_dossier_i1
ON w_dossier
USING btree
(NODOSSIER);
ANALYSE W_DOSSIER;
-- ghm et ghs
DROP TABLe IF EXISTS w_KRSSLOG;
CREATE TEMP TABLE w_KRSSLOG AS
SELECT
RSSNR,
MAX(PMSI_DEXPORT) AS PMSI_DEXPORT,
(MAX(Array[PMSI_DEXPORT::text, VERROUAP::text]))[2] AS VERROUAP,
(MAX(Array[PMSI_DEXPORT::text, GHM::text]))[2] AS GHM
FROM prod_mederi.KRSSLOG
GROUP BY 1
;
DROP TABLE IF EXISTS w_rss;
CREATE TEMP TABLE w_rss AS
SELECT
KRSS.*,
w_DOSSIER.NOFITNESS,
w_DOSSIER.NIP,
w_DOSSIER.NODOSSIER as NODOSSIER_ADM,
NOMPAT,
PRENOMPAT,
NOMJFPAT,
CPPAT,
DATEENTREE,
DATESORTIE,
NOPRAT,
TYPDOS,
nextval('pmsi.s_rss'::regclass) AS rss_id
FROM prod_mederi.KRSS
JOIN w_DOSSIER ON (w_DOSSIER.K5CLEUNIK = KRSS.K5CLEUNIK)
--JOIN prod_mederi.PMS_RUM ON (TRUM_ID_TRSS = TRSS_ID_TRSS)
LEFT JOIN pmsi.p_rss ON RSSNR::bigint = p_rss.no_rss AND p_rss.etat = '' AND date_trunc('month',p_rss.date_sortie) = date_trunc('month', RSSSORT)
WHERE RSSSORT BETWEEN '[ANNEE]0101' AND ('[ANNEE]1231'::date + '10 years'::interval)::date AND RSSNR > 0
AND RSSENTRE <= RSSSORT
AND (w_DOSSIER.TYPDOS < 4 OR KRSS.RSSCMDGHM BETWEEN '01' AND '29')
AND p_rss.no_rss IS NULL
ORDER BY RSSNR;
-- Suppression faux RSS (souvent transformés en SE)
DELETE FROM w_rss
USING
(
SELECT w_rss.NODOSSIER
FROM w_rss
JOIN prod_mederi.KSEJOUR ON w_rss.NODOSSIER = KSEJOUR.NODOSSIER
JOIN prod_mederi.KSERVINT ON KSEJOUR.NOSERVINT = KSERVINT.NOSERVINT
WHERE GENPMSI <> '1'
GROUP BY 1
) subview
WHERE w_rss.NODOSSIER = subview.NODOSSIER
;
DELETE FROM w_rss
USING
(
SELECT w_rss.NODOSSIER,
SUM(CASE WHEN NOACTE LIKE 'SE%' OR NOACTE LIKE 'ATU' THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN QTE ELSE 0-QTE END ELSE 0 END) AS QTE_EXT,
SUM(CASE WHEN NOACTE LIKE 'GHS' THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN QTE ELSE 0-QTE END ELSE 0 END) AS QTE_GHS
FROM w_rss
JOIN prod_mederi.KACTES ON w_rss.NODOSSIER = KACTES.NODOSSIER
JOIN prod_mederi.KFACTURE ON KACTES.NOFAC = KFACTURE.NOFAC
WHERE TYPERUB = '1' AND
(NOACTE LIKE 'SE%' OR NOACTE LIKE 'ATU' OR NOACTE LIKE 'GHS')
GROUP BY 1
HAVING SUM(CASE WHEN NOACTE LIKE 'SE%' OR NOACTE LIKE 'ATU' THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN QTE ELSE 0-QTE END ELSE 0 END) > 0 AND
SUM(CASE WHEN NOACTE LIKE 'GHS' THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN QTE ELSE 0-QTE END ELSE 0 END) = 0
) subview
WHERE w_rss.NODOSSIER = subview.NODOSSIER
;
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
NOFITNESS,
w_rss.rss_id AS oid,
w_rss.RSSNR::bigint AS no_rss,
0 AS no_patient,
'11' AS version_groupage,
date(RSSNELE) AS date_naissance,
SEXE,
RSSENTRE AS date_entree,
RSSSORT AS date_sortie,
'8' AS mode_entree,
'' AS provenance,
'8' AS mode_sortie,
'' AS destination,
CPPAT AS code_postal,
0 AS poids_bebe,
0 AS igs2,
'' AS cma,
substr(GHM , 3 , 1) AS groupe_ghm,
CASE WHEN RSSSORT > RSSENTRE THEN date(RSSSORT) - date(RSSENTRE) ELSE 0 END AS duree_sejour,
CASE WHEN substr(GHM,1,2) = '28' THEN 1 ELSE 1 END AS nb_rsa,
CASE WHEN RSSENTRE > RSSNELE THEN trunc((date(RSSENTRE) - date(RSSNELE)) / 365.25,0) ELSE 0 END AS age,
'' AS supprime,
now() AS date_import,
1 AS nb_rum,
'' AS secteur,
NODOSSIER_ADM AS no_sejour_administratif,
CASE WHEN substr(GHM,1,2) = '28' THEN 1 ELSE 0 END AS nb_seances,
'' AS ghm_fg9,
COALESCE(t_ghm.oid, 0) AS ghm_id,
t_medecins.oid AS medecin_rss_id,
COALESCE(t_ghs.oid, 0) AS ghs_id,
date_part('year', RSSSORT) * 100 + date_part('month', RSSSORT) AS mois_sortie,
0 diagnostic_principal_id,
0 AS diagnostic_relie_id,
COALESCE(t_ghm.oid, 0) AS ghm_production_id,
1 AS no_rum_principal,
0 AS unite_medicale_principale_id,
-1 AS import_id,
'' AS etat,
0 AS acte_principal_id,
0 AS code_postal_id,
0 AS patient_id,
0 AS prestation_principale_id,
'' AS severite_fg11_simulation_code,
'1' AS en_cours,
CASE WHEN length(GHM) = 6 AND substr(GHM,1,2) <> '90' THEN 'V' ELSE 'S' END AS en_cours_etat,
0 AS base_remboursement,
0 AS sejour_facture,
0 AS honoraires_factures,
0 AS t2a_facture,
0 AS dmi_facture,
0 AS phc_facture,
0 AS ca_ghs_theorique,
0 AS nb_ghs,
0 AS ca_ghs,
0 AS nb_exb,
0 AS ca_exb,
0 AS nb_exh,
0 AS ca_exh,
0 AS nb_si,
0 AS ca_si,
0 AS nb_sur,
0 AS ca_sur,
0 AS nb_rea,
0 AS ca_rea,
0 AS nb_neonat,
0 AS ca_neonat,
'' AS traitement_epmsi,
'' AS code_retour_groupage,
0 AS comite_medical_id,
'0' AS rehosp_meme_ghm,
0 AS from_oid
FROM w_rss
LEFT JOIN w_KRSSLOG ON w_rss.RSSNR = w_KRSSLOG.RSSNR
LEFT JOIN pmsi.t_ghm ON (GHM = t_ghm.code)
LEFT JOIN pmsi.t_ghs ON (VERROUAP = t_ghs.code)
LEFT JOIN pmsi.t_medecins ON (NOPRAT = t_medecins.code)
;
]]></sqlcmd>
</NODE>
<NODE label="Identités">
<sqlcmd><![CDATA[
INSERT INTO pmsi.p_identites(
finess,
rss_id,
no_rss,
nom,
prenom,
nom_naissance)
SELECT
NOFITNESS,
w_rss.rss_id AS oid,
RSSNR::bigint AS no_rss,
NOMPAT AS nom,
PRENOMPAT AS prenom,
NOMJFPAT AS nom_naissance
FROM w_rss;
UPDATE pmsi.p_rss SET
no_sejour_administratif = KFACTURE.NODOSSIER
FROM w_rss
LEFT JOIN w_KRSSLOG ON w_rss.RSSNR = w_KRSSLOG.RSSNR
JOIN prod_mederi.KFACTURE ON KFACTURE.NODOSSIER = w_rss.NODOSSIER
WHERE NOFAC = no_sejour_administratif
AND (TYPDOS IN (6,2)
OR (TYPDOS = 3 AND NOFAC IS NOT NULL AND GHM IS NULL));
]]></sqlcmd>
</NODE>
<NODE label="Rum">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_rum
;
CREATE TEMP TABLE w_rum AS
SELECT
KRUM.*,
0 AS WRUM_NUMERO,
0 AS tmp_rum_num,
0 AS tmp_min_rum_num
FROM prod_mederi.KRUM
JOIN w_rss ON w_rss.RSSNR = KRUM.RSSNR
ORDER BY RSSNR, RSSNO
;
DROP SEQUENCE IF EXISTS w_seq
;
CREATE TEMP SEQUENCE w_seq
;
UPDATE w_rum
SET tmp_rum_num = nextval('w_seq')
;
UPDATE w_rum
SET
tmp_min_rum_num = subq.tmp_min_rum_num
FROM (
SELECT
RSSNR,
min(tmp_rum_num) AS tmp_min_rum_num
FROM w_rum
GROUP BY RSSNR
) AS subq
WHERE w_rum.RSSNR = subq.RSSNR
;
UPDATE w_rum
SET WRUM_NUMERO = tmp_rum_num - tmp_min_rum_num + 1
;
INSERT INTO pmsi.p_rss_rum(
finess,
rss_id,
no_rss,
no_rum,
date_entree,
date_sortie,
mode_entree,
provenance,
mode_sortie,
destination,
duree_sejour,
nb_seances,
unite_medicale,
diagnostic_principal_id,
diagnostic_relie_id,
unite_medicale_id,
type_autorisation,
igs2,
type_autorisation_lit_dedie,
supplement_code)
SELECT
NOFITNESS,
w_rss.rss_id AS oid,
w_rss.RSSNR::bigint AS no_rss,
WRUM_NUMERO AS no_rum,
date(DATEDEBUM) AS date_entree,
date(DATEFINUM) AS date_sortie,
MODEENTREE::bigint AS mode_entree,
CASE WHEN substring(PROVENANCE,1,1) != '0' THEN substring(PROVENANCE,1,1) ELSE '' END,
MODESORTIE::bigint AS mode_sortie,
CASE WHEN substring(DESTINATION,1,1) != '0' THEN substring(DESTINATION,1,1) ELSE '' END,
CASE WHEN DATEFINUM > DATEDEBUM THEN date(DATEFINUM) - date(DATEDEBUM) ELSE 0 END AS duree_sejour,
w_rum.NBSEANCES AS nb_seances,
NOUM AS unite_medicale,
COALESCE(diap.oid,0) AS diagnostic_principal_id,
COALESCE(diar.oid,0) AS diagnostic_relie_id,
COALESCE(t_unites_medicales.oid,0) AS unite_medicale_id,
'' AS type_autorisation,
w_rss.IGS2::numeric,
'' AS type_autorisation_lit_dedie,
'' AS supplement_code
FROM w_rum
JOIN w_rss ON (w_rum.RSSNR = w_RSS.RSSNR)
LEFT JOIN pmsi.t_diagnostics diap ON w_rum.DP = diap.code
LEFT JOIN pmsi.t_diagnostics diar ON w_rum.DR = diar.code
LEFT JOIN pmsi.t_unites_medicales ON (NOUM = t_unites_medicales.code);
INSERT INTO pmsi.p_rss_rum(
finess,
rss_id,
no_rss,
no_rum,
date_entree,
date_sortie,
mode_entree,
provenance,
mode_sortie,
destination,
duree_sejour,
nb_seances,
unite_medicale,
diagnostic_principal_id,
diagnostic_relie_id,
unite_medicale_id,
type_autorisation,
igs2,
type_autorisation_lit_dedie,
supplement_code)
SELECT
p_rss.finess,
p_rss.oid AS oid,
p_rss.no_rss AS no_rss,
1 AS no_rum,
p_rss.date_entree AS date_entree,
p_rss.date_sortie AS date_sortie,
'8' AS mode_entree,
'' AS provenance,
'8' AS mode_sortie,
'' AS destination,
p_rss.duree_sejour AS duree_sejour,
0 AS nb_seances,
'' AS unite_medicale,
0 AS diagnostic_principal_id,
0 AS diagnostic_relie_id,
0 AS unite_medicale_id,
'' AS type_autorisation,
0 AS igs2,
'' AS type_autorisation_lit_dedie,
'' AS supplement_code
FROM pmsi.p_rss
WHERE en_cours = '1' AND oid NOT IN (select distinct rss_id from pmsi.p_rss_rum);
DROP TABLE IF EXISTS w_rss_rum;
CREATE TEMP TABLE w_rss_rum AS
SELECT p_rss_rum.rss_id,
count(*) AS nb_rum,
MIN(no_rum) AS no_premier_rum,
MAX(no_rum) AS no_dernier_rum
FROM pmsi.p_rss_rum, pmsi.p_rss
WHERE p_rss.oid = p_rss_rum.rss_id AND en_cours = '1'
GROUP BY 1;
UPDATE pmsi.p_rss
SET
nb_rum = w_rss_rum.nb_rum,
no_rum_principal = p_rss_rum.no_rum,
unite_medicale_principale_id = p_rss_rum.unite_medicale_id,
mode_entree = p_rss_rum.mode_entree,
provenance = p_rss_rum.provenance,
mode_sortie = p_rss_rum.mode_sortie,
destination = p_rss_rum.destination
FROM w_rss_rum, pmsi.p_rss_rum
WHERE p_rss.oid = w_rss_rum.rss_id AND en_cours = '1' AND
p_rss_rum.rss_id = w_rss_rum.rss_id AND p_rss_rum.no_rum = w_rss_rum.no_premier_rum;
UPDATE pmsi.p_rss
SET
mode_sortie = p_rss_rum.mode_sortie,
destination = p_rss_rum.destination
FROM w_rss_rum, pmsi.p_rss_rum
WHERE p_rss.oid = w_rss_rum.rss_id AND en_cours = '1' AND p_rss.nb_rum > 1 AND
p_rss_rum.rss_id = w_rss_rum.rss_id AND p_rss_rum.no_rum = w_rss_rum.no_dernier_rum;
-- mise à jour des dates_d'e/s pour les séances
UPDATE pmsi.p_rss
SET
date_entree = p_rss_rum.date_entree
FROM w_rss_rum, pmsi.p_rss_rum
WHERE p_rss.oid = w_rss_rum.rss_id AND en_cours = '1' AND p_rss.nb_seances != 0 AND
p_rss_rum.rss_id = w_rss_rum.rss_id AND p_rss_rum.no_rum = w_rss_rum.no_premier_rum AND
p_rss.date_entree < p_rss_rum.date_entree;
UPDATE pmsi.p_rss
SET
date_sortie = p_rss_rum.date_sortie
FROM w_rss_rum, pmsi.p_rss_rum
WHERE p_rss.oid = w_rss_rum.rss_id AND en_cours = '1' AND p_rss.nb_seances != 0 AND
p_rss_rum.rss_id = w_rss_rum.rss_id AND p_rss_rum.no_rum = w_rss_rum.no_dernier_rum AND
p_rss.date_sortie > p_rss_rum.date_sortie;
]]></sqlcmd>
</NODE>
<NODE label="Diagnostics">
<sqlcmd><![CDATA[
-- DP
INSERT INTO pmsi.p_rss_diagnostics(
finess,
rss_id,
no_rss,
no_rum,
diagnostic_id,
type_diagnostic,
type_diagnostic_rss,
imprecis,
unite_medicale,
unite_medicale_id)
SELECT
p_rss.finess,
rss_id,
p_rss.no_rss,
no_rum,
p_rss_rum.diagnostic_principal_id,
'DP' AS type_diagnostic,
CASE WHEN p_rss.diagnostic_principal_id = p_rss_rum.diagnostic_principal_id THEN 'DP' ELSE 'DA' END AS type_diagnostic_rss,
'' AS imprecis,
unite_medicale,
unite_medicale_id
FROM pmsi.p_rss_rum
JOIN pmsi.p_rss ON rss_id = p_rss.oid
WHERE 1 = 1
AND p_rss_rum.diagnostic_principal_id != 0
AND p_rss.en_cours = '1'
;
INSERT INTO pmsi.p_rss_diagnostics(
finess,
rss_id,
no_rss,
no_rum,
diagnostic_id,
type_diagnostic,
type_diagnostic_rss,
imprecis,
unite_medicale,
unite_medicale_id)
SELECT
p_rss.finess,
rss_id,
p_rss.no_rss,
no_rum,
p_rss_rum.diagnostic_principal_id,
'DR' AS type_diagnostic,
'DR' AS type_diagnostic_rss,
'' AS imprecis,
unite_medicale,
unite_medicale_id
FROM pmsi.p_rss_rum
JOIN pmsi.p_rss ON rss_id = p_rss.oid
WHERE 1 = 1
AND p_rss_rum.diagnostic_relie_id != 0
AND p_rss.en_cours = '1'
;
INSERT INTO pmsi.p_rss_diagnostics(
finess,
rss_id,
no_rss,
no_rum,
diagnostic_id,
type_diagnostic,
type_diagnostic_rss,
imprecis,
unite_medicale,
unite_medicale_id)
SELECT
NOFITNESS,
rss_id AS oid,
w_rss.RSSNR::bigint AS no_rss,
WRUM_NUMERO AS no_rum,
COALESCE(t_diagnostics.oid,0) AS diagnostic_id,
'DA' AS type_diagnostic,
'DA' AS type_diagnostic_rss,
'' AS imprecis,
NOUM AS unite_medicale,
COALESCE(t_unites_medicales.oid,0) AS unite_medicale_id
FROM prod_mederi.KDAS
JOIN w_rum ON w_rum.RSSNR || w_rum.RSSNO = KDAS.RUM
JOIN w_rss ON (w_rss.RSSNR::bigint = w_rum.RSSNR::bigint)
JOIN pmsi.t_diagnostics ON (DAS = t_diagnostics.code)
JOIN pmsi.t_unites_medicales ON (NOUM = t_unites_medicales.code)
ORDER BY w_rss.rss_id, WRUM_NUMERO;
]]></sqlcmd>
</NODE>
<NODE label="Actes">
<sqlcmd><![CDATA[
INSERT INTO pmsi.t_modificateurs_ccam
SELECT mod FROM (
SELECT substr(modificat,1,1) as mod
FROM prod_mederi.MCCAM
UNION ALL
SELECT substr(modificat,2,1) as mod
FROM prod_mederi.MCCAM
UNION ALL
SELECT substr(modificat,3,1) as mod
FROM prod_mederi.MCCAM
UNION ALL
SELECT substr(modificat,4,1) as mod
FROM prod_mederi.MCCAM) as sub
WHERE 1=1
AND mod NOT IN (SELECT code FROM pmsi.t_modificateurs_ccam)
AND mod != ''
GROUP BY mod
;
INSERT INTO pmsi.p_rss_actes(
finess,
rss_id,
no_rss,
no_rum,
unite_medicale,
unite_medicale_id,
date_acte,
medecin_id,
acte_id,
nombre,
phase_ccam,
activite_ccam,
extension_ccam,
modificateur_ccam_1,
modificateur_ccam_2,
modificateur_ccam_3,
modificateur_ccam_4,
remboursement_excp_ccam,
association_nonprevue_ccam
)
SELECT
FINESS,
rss_id AS oid,
w_rum.RSSNR::bigint AS no_rss,
WRUM_NUMERO AS no_rum,
p_rss_rum.unite_medicale AS unite_medicale,
p_rss_rum.unite_medicale_id AS unite_medicale_id,
date(DATEACTE) AS date_acte,
COALESCE(t_medecins.oid,0) AS medecin_id,
COALESCE(t_actes.oid,0) AS acte_id,
1 AS nombre,
PHASE AS phase_ccam,
MODIF9 AS activite_ccam,
'' AS extension_ccam,
substr(modificat,1,1) AS modificateur_ccam_1,
substr(modificat,2,1) AS modificateur_ccam_2,
substr(modificat,3,1) AS modificateur_ccam_3,
substr(modificat,4,1) AS modificateur_ccam_4,
'' AS remboursement_excp_ccam,
MODIF8 AS association_nonprevue_ccam --attention valeurs non valides
FROM prod_mederi.MCCAM
JOIN
w_rum ON
w_RUM.NODOSSIER = MCCAM.NODOSSIER
AND (w_rum.RSSNO = MCCAM.RSSNO OR MCCAM.RSSNO IS NULL AND DATEACTE BETWEEN DATEDEBUM AND DATEFINUM)
JOIN pmsi.p_rss_rum ON (w_rum.RSSNR::bigint = p_rss_rum.no_rss AND WRUM_NUMERO = p_rss_rum.no_rum)
LEFT JOIN pmsi.t_actes ON (substring(CODEACTE, 1, 7) = t_actes.code)
LEFT JOIN pmsi.t_medecins ON MCCAM.NOPRAT = t_medecins.code
;
]]></sqlcmd>
</NODE>
<NODE label="Factures">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_rsf_3;
CREATE TEMP TABLE w_rsf_3 AS
SELECT
w_rss.NOFITNESS,
w_rss.rss_id AS rss_id,
w_rss.RSSNR,
KFACTURE.NOFAC,
KACTES.ACCLEUNIK,
NOACTE,
NOACTEASS,
DATEACTE,
DATEFIN,
PRIXU,
QTE * KACTES.COEFF as QTE_COEFF,
MONTANT,
TAUXSS,
TYPERUB,
VERROUAP
FROM prod_mederi.KACTES
JOIN prod_mederi.KFACTURE ON (KACTES.NOFAC = KFACTURE.NOFAC)
JOIN w_rss ON (KACTES.NODOSSIER = w_rss.NODOSSIER)
JOIN w_KRSSLOG ON w_KRSSLOG.RSSNR = w_rss.RSSNR
WHERE FACAVOIR IS NULL
AND KFACTURE.ETATFAC <> 6;
-- suppression factures seances dont l'execution ne correspondant au date rss
DELETE FROM w_rsf_3 USING pmsi.p_rss
WHERE
rss_id = p_rss.oid
AND p_rss.nb_seances != 0
AND DATEACTE != date_entree
AND DATEFIN != date_sortie;
DROP TABLE IF EXISTS w_rsf_5;
CREATE TEMP TABLE w_rsf_5 AS
SELECT
NOFITNESS,
rss_id,
RSSNR,
MIN(NOFAC) AS NOFAC,
1 AS rang,
MAX('01') AS grand,
MAX('1') AS assurance,
MAX('0') AS exoneration,
MIN('1') AS operation,
MAX('') AS matricule,
MAX('') AS cle,
SUM(CASE WHEN TYPERUB = 1 THEN MONTANT ELSE 0 END) AS FACT_MTT_SEJ,
SUM(CASE WHEN TYPERUB = 3 THEN MONTANT ELSE 0 END) AS FACT_MTT_HON
FROM w_rsf_3
GROUP BY 1,2,3;
INSERT INTO pmsi.p_rsf_total(
finess,
rss_id,
no_rss,
code_pec,
rang_beneficiaire,
regime,
nature_pec,
justificatif_exo,
no_facture,
code_regularisation,
matricule_assure,
cle_matricule_assure,
base_remboursement,
sejour_facture,
sejour_remboursable,
honoraires_factures,
honoraires_remboursable,
t2a_facture,
dmi_facture,
phc_facture,
participation_assure_avant_oc,
sejour_remboursable_2,
honoraires_remboursable_2,
montant_dmi_ghs2006,
nb_si,
ca_si,
nb_sur,
ca_sur,
nb_rea,
ca_rea,
nb_neonat,
ca_neonat,
nb_exh,
ca_exh,
nb_exb,
ca_exb,
nb_ghs,
ca_ghs,
ca_ghs_theorique,
taux_remboursement)
SELECT
NOFITNESS,
rss_id AS oid,
RSSNR::bigint AS no_rss,
'1' AS code_pec,
w_rsf_5.rang AS rang_beneficiaire,
w_rsf_5.grand AS regime,
w_rsf_5.assurance AS nature_pec,
w_rsf_5.exoneration AS justificatif_exo,
substr(w_rsf_5.NOFAC,1,9) AS no_facture,
w_rsf_5.operation AS code_regularisation,
w_rsf_5.matricule AS matricule_assure,
w_rsf_5.cle AS cle_matricule_assure,
FACT_MTT_SEJ AS base_remboursement,
FACT_MTT_SEJ AS sejour_facture,
FACT_MTT_SEJ AS sejour_remboursable,
FACT_MTT_HON AS honoraires_factures,
FACT_MTT_HON AS honoraires_remboursable,
0 AS t2a_facture,
0 AS dmi_facture,
0 AS phc_facture,
0 AS participation_assure_avant_oc,
0 AS sejour_remboursable_2,
0 AS honoraires_remboursable_2,
0 AS montant_dmi_ghs2006,
0 AS nb_si,
0 AS ca_si,
0 AS nb_sur,
0 AS ca_sur,
0 AS nb_rea,
0 AS ca_rea,
0 AS nb_neonat,
0 AS ca_neonat,
0 AS nb_exh,
0 AS ca_exh,
0 AS nb_exb,
0 AS ca_exb,
0 AS nb_ghs,
0 AS ca_ghs,
0 AS ca_ghs_theorique,
0 AS taux_remboursement
FROM w_rsf_5;
INSERT INTO pmsi.p_rsf_total(
finess, no_rss, code_pec, rang_beneficiaire, regime, nature_pec,
justificatif_exo, no_facture, code_regularisation, base_remboursement,
sejour_facture, sejour_remboursable, honoraires_factures, honoraires_remboursable,
t2a_facture, dmi_facture, phc_facture, participation_assure_avant_oc,
sejour_remboursable_2, honoraires_remboursable_2, montant_dmi_ghs2006,
nb_si, ca_si, nb_sur, ca_sur, nb_rea, ca_rea, nb_neonat, ca_neonat,
nb_exh, ca_exh, nb_exb, ca_exb, nb_ghs, ca_ghs, rss_id, ca_ghs_theorique)
SELECT
p_rss.finess, p_rss.no_rss, '', '', '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p_rss.oid, 0
FROM pmsi.p_rss LEFT JOIN pmsi.p_rsf_total ON (p_rsf_total.rss_id = p_rss.oid)
WHERE en_cours = '1' AND p_rsf_total.rss_id IS NULL;
]]></sqlcmd>
</NODE>
<NODE label="Prestations">
<sqlcmd><![CDATA[
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_rsf_3.NOFITNESS,
w_rsf_3.rss_id AS rss_id,
w_rsf_3.RSSNR::bigint,
'' AS nature,
'' AS mt,
'' AS dmt,
date(DATEACTE) AS date_debut,
date(DATEFIN) AS date_fin,
QTE_COEFF AS nombre,
1 AS coefficient,
w_rsf_3.PRIXU AS prix_unitaire,
w_rsf_3.MONTANT AS base_remboursement,
TAUXSS AS taux_remboursement,
w_rsf_3.MONTANT AS sejour_facture,
w_rsf_3.MONTANT 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 w_rsf_3
JOIN pmsi.t_prestations ON (w_rsf_3.NOACTEASS = t_prestations.code)
LEFT JOIN pmsi.t_ghs ON (to_number('0' || w_rsf_3.VERROUAP,'0000') = t_ghs.code)
WHERE TYPERUB = 1;
]]></sqlcmd>
</NODE>
<NODE label="LPP">
<sqlcmd><![CDATA[
INSERT INTO pmsi.p_rss_lpp(
finess,
rss_id,
no_rss,
rang,
date_lpp,
lpp_id,
nombre,
prix_unitaire,
montant_facture,
non_pris_en_compte)
SELECT
w_rsf_3.NOFITNESS,
w_rsf_3.rss_id AS rss_id,
w_rsf_3.RSSNR::bigint,
0 AS rang,
date(DATEACTE) AS date_lpp,
COALESCE(t_lpp.oid, 0) AS lpp_id,
QTE_COEFF AS nombre,
w_rsf_3.PRIXU AS prix_unitaire,
w_rsf_3.MONTANT AS montant_facture,
'0' AS non_pris_en_compte
FROM w_rsf_3
JOIN prod_mederi.KLPP ON KLPP.ACCLEUNIK = w_rsf_3.ACCLEUNIK
LEFT JOIN pmsi.t_lpp ON (CODE_TIPS = t_lpp.code)
;
]]></sqlcmd>
</NODE>
<NODE label="UCD">
<sqlcmd><![CDATA[
INSERT INTO pmsi.p_rss_ucd(
finess,
rss_id,
no_rss,
rang,
date_ucd,
ucd_id,
nombre,
coefficient_fractionnement,
prix_unitaire_achat,
prix_unitaire_ecart_indemnisable,
montant_ecart_indemnisable,
montant_facture,
non_pris_en_compte)
SELECT
w_rsf_3.NOFITNESS,
w_rsf_3.rss_id AS rss_id,
w_rsf_3.RSSNR::bigint,
0 AS rang,
date(DATEACTE) AS date_ucd,
COALESCE(t_ucd.oid,0) AS ucd_id,
KUCD.QTE AS nombre,
KUCD.COEFF AS coefficient_fractionnement,
KUCD.PRIXU AS prix_unitaire_achat,
MONTANTUECART AS prix_unitaire_ecart_indemnisable,
MONTANTTECART AS montant_ecart_indemnisable,
KUCD.MONTANT AS montant_facture,
'0' AS non_pris_en_compte
FROM w_rsf_3
JOIN prod_mederi.KUCD ON KUCD.ACCLEUNIK = w_rsf_3.ACCLEUNIK
LEFT JOIN pmsi.t_ucd ON (CODEUCD = t_ucd.code);
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="PMSIETAT" label="RECUPERATION ETAT DES DOSSIERS">
<NODE label="Initialisation">
<sqlcmd><![CDATA[
-- Séjours non groupés
INSERT INTO pmsi.t_ghm(
code,
texte,
mco,
aso,
severite,
cmd_id,
ghm5_id,
ligne_oap_id,
cas_id)
SELECT
'99Z99Z' AS code,
'Séjours sortis non groupés' AS texte,
'?' AS mco,
'?' AS aso,
'Z' AS severite,
COALESCE((SELECT oid FROM pmsi.t_cmd WHERE code = '99'),0) AS cmd_id,
COALESCE((SELECT oid FROM pmsi.t_ghm5 WHERE code = '99Z99'),0) AS ghm5_id,
0 AS ligne_oap_id,
COALESCE((SELECT oid FROM base.t_cas WHERE code = '?'),0) AS cas_id
WHERE '99Z99Z' NOT IN (SELECT code FROM pmsi.t_ghm)
UNION
SELECT
'99Z98Z' AS code,
'GHM indisponible' AS texte,
'?' AS mco,
'?' AS aso,
'Z' AS severite,
COALESCE((SELECT oid FROM pmsi.t_cmd WHERE code = '99'),0) AS cmd_id,
COALESCE((SELECT oid FROM pmsi.t_ghm5 WHERE code = '99Z98'),0) AS ghm5_id,
0 AS ligne_oap_id,
COALESCE((SELECT oid FROM base.t_cas WHERE code = '?'),0) AS cas_id
WHERE '99Z98Z' NOT IN (SELECT code FROM pmsi.t_ghm);
SELECT pmsi.cti_initialize_rss_etat();
]]></sqlcmd>
</NODE>
<NODE label="Etat des dossiers">
<sqlcmd><![CDATA[
-- maj des séjours externes
UPDATE pmsi.p_rss
SET no_sejour_administratif = NODOSSIER
FROM
(
SELECT p_rsf_total.rss_id, KFACTURE.NODOSSIER
FROM pmsi.p_rsf_total
JOIN pmsi.p_rss ON p_rsf_total.rss_id = p_rss.oid
JOIN prod_mederi.KFACTURE ON KFACTURE.NOFAC = p_rsf_total.no_facture
JOIN prod_mederi.KDOSSIER ON KFACTURE.NODOSSIER = KDOSSIER.NODOSSIER
WHERE no_sejour_administratif IS DISTINCT FROM KFACTURE.NODOSSIER AND
(
date_entree = KDOSSIER.DATEENTREE OR
date_sortie = KDOSSIER.DATESORTIE
) AND
ghm_id = 0 AND
p_rss.import_id > 0
) subview
WHERE p_rss.oid = subview.rss_id
;
UPDATE pmsi.p_identites SET
nom = NOMPAT
,prenom = PRENOMPAT
,nom_naissance = NOMJFPAT
FROM pmsi.p_rss
JOIN prod_mederi.KDOSSIER ON KDOSSIER.NODOSSIER = no_sejour_administratif
WHERE
p_identites.rss_id = p_rss.oid AND
p_rss.import_id > 0
;
UPDATE pmsi.p_rss SET code_postal = SUBSTR(CPPAT, 1 , 5)
FROM prod_mederi.KDOSSIER
WHERE no_sejour_administratif = KDOSSIER.NODOSSIER;
UPDATE pmsi.p_rss SET medecin_rss_id = t_medecins.oid
FROM
prod_mederi.KDOSSIER
JOIN pmsi.t_medecins ON t_medecins.code = NOPRAT
WHERE no_sejour_administratif = KDOSSIER.NODOSSIER AND
p_rss.import_id > 0 AND
medecin_rss_id <> t_medecins.oid;
UPDATE pmsi.p_rss_actes
SET medecin_id = t_medecins.oid
FROM pmsi.t_actes,
pmsi.p_rss,
prod_mederi.KDOSSIER
JOIN prod_mederi.KACTES ON KACTES.NODOSSIER = KDOSSIER.NODOSSIER
JOIN pmsi.t_medecins ON t_medecins.code = KACTES.NOPRAT
WHERE
KDOSSIER.NODOSSIER = no_sejour_administratif
AND p_rss_actes.rss_id = p_rss.oid
AND p_rss_actes.date_acte = date(DATEACTE)
AND p_rss_actes.activite_ccam = ACTIVITE
AND p_rss_actes.acte_id = t_actes.oid
AND t_actes.code = substring(NCCAM, 1, 7)
AND p_rss_actes.medecin_id <> t_medecins.oid
AND p_rss.import_id > 0;
-- maj des etats
DROP TABLE IF EXISTS w_RSS_LOG;
CREATE TEMP TABLE w_RSS_LOG AS
SELECT
KRSS.RSSNR::bigint,
date(RSSSORT) AS RSSSORT,
COALESCE(MIN(CASE WHEN KRSSLOG.GHM <> '' AND PMSI_DEXPORT >= RSSSORT AND KRSSLOG.GHM = KRSS.RSSCMDGHM THEN date(PMSI_DEXPORT) ELSE NULL END),'20991231') AS date_groupage
FROM prod_mederi.KRSSLOG
JOIN prod_mederi.KRSS ON KRSS.RSSNR::bigint = KRSSLOG.RSSNR::bigint
GROUP BY 1,2;
CREATE INDEX w_RSS_LOG_i1 ON w_RSS_LOG USING btree (RSSNR);
UPDATE pmsi.p_rss_etat SET
date_groupage = w_RSS_LOG.date_groupage
FROM w_RSS_LOG
JOIN pmsi.p_rss ON w_RSS_LOG.RSSNR::bigint = p_rss.no_rss AND w_RSS_LOG.RSSSORT = p_rss.date_sortie
WHERE p_rss_etat.rss_id = p_rss.oid AND
p_rss_etat.date_groupage <> w_RSS_LOG.date_groupage;
DROP TABLE IF EXISTS w_sejo_fac;
CREATE TEMP TABLE w_sejo_fac AS
SELECT
KFACTURE.NODOSSIER,
MIN(date(KDOSSIER.DATEENTREE)) AS RSSENTRE,
MAX(date(KDOSSIER.DATESORTIE)) AS RSSSORT,
COALESCE(MAX(date(DATEFAC)),'20991231') AS date_facture
FROM prod_mederi.KFACTURE
JOIN prod_mederi.KDOSSIER ON KFACTURE.NODOSSIER = KDOSSIER.NODOSSIER
GROUP BY 1
;
UPDATE pmsi.p_rss_etat SET
date_facture = subview.date_facture,
est_facture = CASE WHEN subview.date_facture != '20991231' OR en_cours <> '1' THEN '1' ELSE '0' END
FROM (
SELECT
p_rss.oid AS rss_id,
p_rss.en_cours,
COALESCE(MAX(date_facture),'20991231') AS date_facture
FROM pmsi.p_rss
LEFT JOIN w_sejo_fac ON NODOSSIER = no_sejour_administratif AND date_sortie = RSSSORT
GROUP BY 1,2) subview
WHERE p_rss_etat.rss_id = subview.rss_id AND
(
p_rss_etat.date_facture IS DISTINCT FROM subview.date_facture OR
p_rss_etat.est_facture IS DISTINCT FROM CASE WHEN subview.date_facture != '20991231' OR en_cours <> '1' THEN '1' ELSE '0' END
)
;
UPDATE pmsi.p_rss_etat
SET est_groupe = '1', est_valide = '1'
WHERE est_facture = '1' AND
(est_groupe = '0' OR est_valide = '0') ;
UPDATE pmsi.p_rss_etat
SET date_groupage = date_facture
WHERE date_facture < date_groupage AND
date_facture <> '20991231' AND
date_groupage <> '20991231';
UPDATE pmsi.p_rss_etat
SET date_groupage = '20991231'
WHERE date_groupage <> '20991231' AND
est_groupe IN ('0','9');
UPDATE pmsi.p_rss
SET en_cours_etat = 'F'
FROM pmsi.p_rss_etat
WHERE p_rss.oid = p_rss_etat.rss_id AND
en_cours = '1' AND
en_cours_etat IS DISTINCT FROM 'F' AND
est_facture = 1 ;
]]></sqlcmd>
</NODE>
</NODE>
</ROOT>