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.
 
 

1398 lines
42 KiB

<?xml version="1.0" encoding="ISO-8859-1"?>
<ROOT>
<NODE name="PMSICOMPLEMENTS" label="RECUPERATION DES DONNEES COMPLEMENTAIRES PMSI ORBIS SIM">
<NODE label="Parametres">
<sqlcmd><![CDATA[
--------------------------------------------
-- Médecins
--------------------------------------------
DROP TABLE IF EXISTS w_med;
CREATE TEMP TABLE w_med AS
-- Actes CCAM
(
SELECT
COALESCE(NOMEXECUTANT.CODE, NOMPRAT.CODE) as med_code
,COALESCE(NOMEXECUTANT.LIB, NOMPRAT.LIB) as med_lib
FROM
prod_sim.DATACTESCCAM
LEFT JOIN prod_sim.NOMEXECUTANT ON NOMEXECUTANT.CODE = DATACTESCCAM.ACTEXECCCAM
LEFT JOIN prod_sim.NOMPRAT ON NOMPRAT.CODE = DATACTESCCAM.ACTEXECCCAM
WHERE 1!=1
OR NOMEXECUTANT.CODE IS DISTINCT FROM NULL
OR NOMPRAT.CODE IS DISTINCT FROM NULL
GROUP BY 1, 2
)
UNION
-- Historique Actes CCAM
(
SELECT
COALESCE(NOMEXECUTANT.CODE, NOMPRAT.CODE) as med_code
,COALESCE(NOMEXECUTANT.LIB, NOMPRAT.LIB) as med_lib
FROM
prod_sim.DATACTESCCAMDELETED
LEFT JOIN prod_sim.NOMEXECUTANT ON NOMEXECUTANT.CODE = DATACTESCCAMDELETED.ACTEXECCCAM
LEFT JOIN prod_sim.NOMPRAT ON NOMPRAT.CODE = DATACTESCCAMDELETED.ACTEXECCCAM
WHERE 1!=1
OR NOMEXECUTANT.CODE IS DISTINCT FROM NULL
OR NOMPRAT.CODE IS DISTINCT FROM NULL
GROUP BY 1, 2
)
UNION
-- Médecins responsables de passages
(
SELECT
COALESCE(NOMEXECUTANT.CODE, NOMPRAT.CODE) as med_code
,COALESCE(NOMEXECUTANT.LIB, NOMPRAT.LIB) as med_lib
FROM
prod_sim.DATPASSAGE
LEFT JOIN prod_sim.NOMEXECUTANT ON NOMEXECUTANT.CODE = DATPASSAGE.PASRESP
LEFT JOIN prod_sim.NOMPRAT ON NOMPRAT.CODE = DATPASSAGE.PASRESP
WHERE 1!=1
OR NOMEXECUTANT.CODE IS DISTINCT FROM NULL
OR NOMPRAT.CODE IS DISTINCT FROM NULL
GROUP BY 1, 2
)
ORDER BY 1;
-- Mise à jour des noms des médecins
UPDATE pmsi.t_medecins SET
nom = w_med.med_lib
FROM
w_med
WHERE 1=1
AND t_medecins.nom != w_med.med_lib
AND t_medecins.code = w_med.med_code;
-- Ajout des nouveaux médecins
INSERT INTO pmsi.t_medecins (code, nom)
SELECT
w_med.med_code
,w_med.med_lib
FROM
w_med
LEFT JOIN pmsi.t_medecins ON t_medecins.code = w_med.med_code
WHERE
t_medecins.code IS NULL;
SELECT base.cti_initialize_medecins();
SELECT pmsi.cti_reorganize_medecins_c();
--------------------------------------------
-- Unités médicales
--------------------------------------------
DROP TABLE IF EXISTS w_um;
CREATE TEMP TABLE w_um AS
-- Actes CCAM
(
SELECT
NOMUM.CODE,
NOMUM.LIB,
NOMUM.DEFTYPEAUTOUM
FROM
prod_sim.NOMUM
JOIN prod_sim.DATACTESCCAM ON DATACTESCCAM.ACTCODEUFCCAM = NOMUM.CODE
GROUP BY 1,2,3
)
UNION
-- Historique Actes CCAM
(
SELECT
NOMUM.CODE,
NOMUM.LIB,
NOMUM.DEFTYPEAUTOUM
FROM
prod_sim.NOMUM
JOIN prod_sim.DATACTESCCAMDELETED ON DATACTESCCAMDELETED.ACTCODEUFCCAM = NOMUM.CODE
GROUP BY 1,2,3
)
UNION
-- Rums
(
SELECT
NOMUM.CODE,
NOMUM.LIB,
NOMUM.DEFTYPEAUTOUM
FROM
prod_sim.NOMUM
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASUM = NOMUM.CODE
GROUP BY 1,2,3
)
UNION
-- UM déjà expédiées ATIH
(
SELECT
NOMUM.CODE,
NOMUM.LIB,
NOMUM.DEFTYPEAUTOUM
FROM
prod_sim.NOMUM
JOIN pmsi.t_unites_medicales ON t_unites_medicales.code = NOMUM.CODE
GROUP BY 1,2,3
)
ORDER BY 1;
-- Mise à jour des libellés si code = texte
UPDATE pmsi.t_unites_medicales SET
texte = w_um.LIB
FROM
w_um
WHERE 1=1
AND w_um.CODE = t_unites_medicales.code
AND t_unites_medicales.code = t_unites_medicales.texte;
-- Ajout des nouvelles unités médicales
INSERT INTO pmsi.t_unites_medicales (code, texte, type_autorisation)
SELECT
w_um.CODE
,w_um.LIB
,COALESCE(t_types_autorisations.code::text, ''::text)
FROM
w_um
LEFT JOIN pmsi.t_types_autorisations on t_types_autorisations.code = w_um.DEFTYPEAUTOUM
LEFT JOIN pmsi.t_unites_medicales um on um.code = w_um.CODE
WHERE
um.code IS NULL;
-- Lien vers l'unité d'expédition
UPDATE pmsi.t_unites_medicales SET
um_expedition_id = oid
WHERE
um_expedition_id = 0 OR um_expedition_id IS NULL;
--------------------------------------------
-- Unités fonctionnelles
--------------------------------------------
DROP TABLE IF EXISTS w_uf;
CREATE TEMP TABLE w_uf AS
SELECT
UPPER(DATACTESCCAM.ACTCODEUFCCAM) as code,
COALESCE(NOMUM.LIB, UPPER(DATACTESCCAM.ACTCODEUFCCAM)) as lib
FROM
prod_sim.DATACTESCCAM
LEFT JOIN prod_sim.NOMUM on NOMUM.CODE = UPPER(DATACTESCCAM.ACTCODEUFCCAM)
GROUP BY 1,2
ORDER BY 1;
UPDATE pmsi.t_unites_fonctionnelles SET
texte = w_uf.lib
FROM
w_uf
WHERE 1=1
AND t_unites_fonctionnelles.code = w_uf.code
AND t_unites_fonctionnelles.code = t_unites_fonctionnelles.texte
AND t_unites_fonctionnelles.texte != w_uf.lib;
INSERT INTO pmsi.t_unites_fonctionnelles(oid, code, texte)
SELECT 0, chr(127) || '**', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM pmsi.t_unites_fonctionnelles);
INSERT INTO pmsi.t_unites_fonctionnelles (code, texte)
SELECT
w_uf.code
,w_uf.lib
FROM
w_uf
LEFT JOIN pmsi.t_unites_fonctionnelles uf ON uf.code = w_uf.code
WHERE 1=1
AND uf.code IS NULL
AND w_uf.code IS DISTINCT FROM ''::text
ORDER BY w_uf.code;
--------------------------------------------
-- UCD
--------------------------------------------
INSERT INTO pmsi.t_ucd (code, texte, texte_court)
SELECT
NOMUCD.CODE
,NOMUCD.LIB
,NOMUCD.LIB
FROM
prod_sim.DATUCD
JOIN prod_sim.NOMUCD ON NOMUCD.CODE = DATUCD.UCDCODE
LEFT JOIN pmsi.t_ucd ucd ON ucd.code = NOMUCD.CODE
WHERE
ucd.code is null
GROUP BY 1,2,3;
]]></sqlcmd>
</NODE>
<NODE label="Unite medicale sejours">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_DATPASSAGE;
CREATE TEMP TABLE w_DATPASSAGE AS
SELECT
p_rss.oid AS rss_id,
p_rss.no_sejour_administratif,
p_rss_rum.date_entree,
p_rss_rum.date_sortie,
p_rss_rum.no_rum,
MAX(t_unites_medicales_rum.code) AS unite_medicale_rum_code,
MAX(DATPASSAGE.PASUM) AS PASUM,
count(*)
FROM [SCHEMA].p_rss_rum
JOIN pmsi.t_unites_medicales t_unites_medicales_rum ON p_rss_rum.unite_medicale_id = t_unites_medicales_rum.oid
JOIN [SCHEMA].p_rss ON p_rss_rum.rss_id = p_rss.oid
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = p_rss.no_sejour_administratif
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASIDENT = DATENTREE.ENTID AND
date(p_rss_rum.date_entree) = date(DATPASSAGE.PASENTREELE) AND
date(p_rss_rum.date_sortie) = date(DATPASSAGE.PASSORTIELE) AND
p_rss_rum.no_rum = DATPASSAGE.PASINDEX
GROUP BY 1,2,3,4,5
HAVING COUNT(*) = 1
;
UPDATE [SCHEMA].p_rss_rum
SET unite_medicale_id = t_unites_medicales.oid
FROM w_DATPASSAGE
JOIN pmsi.t_unites_medicales ON w_DATPASSAGE.PASUM = t_unites_medicales.code
WHERE w_DATPASSAGE.rss_id = p_rss_rum.rss_id AND
w_DATPASSAGE.date_entree = p_rss_rum.date_entree AND
w_DATPASSAGE.date_sortie = p_rss_rum.date_sortie AND
w_DATPASSAGE.no_rum = p_rss_rum.no_rum AND
w_DATPASSAGE.unite_medicale_rum_code <> w_DATPASSAGE.PASUM
;
UPDATE [SCHEMA].p_rss
SET unite_medicale_principale_id = p_rss_rum.unite_medicale_id
FROM [SCHEMA].p_rss_rum
WHERE p_rss.oid = p_rss_rum.rss_id AND
p_rss.no_rum_principal = p_rss_rum.no_rum AND
p_rss.nb_rum = 1 AND
p_rss.unite_medicale_principale_id <> p_rss_rum.unite_medicale_id
;
UPDATE [SCHEMA].p_rss_actes
SET unite_medicale = p_rss_rum.unite_medicale,
unite_medicale_id = p_rss_rum.unite_medicale_id
FROM [SCHEMA].p_rss_rum
WHERE p_rss_actes.rss_id = p_rss_rum.rss_id AND
p_rss_actes.no_rum = p_rss_rum.no_rum AND
NOT (
p_rss_actes.unite_medicale = p_rss_rum.unite_medicale AND
p_rss_actes.unite_medicale_id = p_rss_rum.unite_medicale_id
)
;
]]></sqlcmd>
</NODE>
<NODE label="Unite fonctionnelle actes">
<sqlcmd><![CDATA[
UPDATE [SCHEMA].p_rss_actes SET
unite_fonctionnelle_id = t_unites_fonctionnelles.oid
FROM
[SCHEMA].p_rss
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = p_rss.no_sejour_administratif
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASIDENT = DATENTREE.ENTID
JOIN prod_sim.DATACTESCCAM ON DATACTESCCAM.ACTIDPASSCCAM = DATPASSAGE.PASID
JOIN pmsi.t_unites_fonctionnelles on t_unites_fonctionnelles.code = DATACTESCCAM.ACTCODEUFCCAM
JOIN pmsi.t_actes ON t_actes.code = DATACTESCCAM.ACTCODECCAM
WHERE 1=1
AND p_rss_actes.rss_id = p_rss.oid
AND p_rss_actes.acte_id = t_actes.oid
AND p_rss_actes.unite_fonctionnelle_id = 0
AND p_rss_actes.date_acte = DATACTESCCAM.ACTDATECCAM
AND p_rss_actes.activite_ccam = DATACTESCCAM.ACTACTIVITECCAM
AND p_rss_actes.no_rum = DATPASSAGE.PASINDEX;
]]></sqlcmd>
</NODE>
<NODE label="Interventions">
<sqlcmd><![CDATA[
WITH w_interv AS (
SELECT
p_rss.oid as rss_id
,p_rss_actes.no_rum
,t_actes.oid as acte_id
,p_rss_actes.date_acte
,p_rss_actes.activite_ccam
,p_rss_actes.association_nonprevue_ccam
,array_agg(ACTNUMINTERVCCAM) as interventions
FROM
[SCHEMA].p_rss
JOIN [SCHEMA].p_rss_actes on p_rss_actes.rss_id = p_rss.oid
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = p_rss.no_sejour_administratif
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASIDENT = DATENTREE.ENTID
JOIN prod_sim.DATACTESCCAM ON DATACTESCCAM.ACTIDPASSCCAM = DATPASSAGE.PASID
JOIN pmsi.t_actes ON t_actes.code = DATACTESCCAM.ACTCODECCAM
WHERE 1=1
AND p_rss.import_id = [IMPORT_ID]
AND p_rss_actes.rss_id = p_rss.oid
AND p_rss_actes.acte_id = t_actes.oid
AND p_rss_actes.date_acte = DATACTESCCAM.ACTDATECCAM
AND p_rss_actes.activite_ccam = DATACTESCCAM.ACTACTIVITECCAM
AND p_rss_actes.association_nonprevue_ccam = DATACTESCCAM.ACTASSONONPREVUE
AND p_rss_actes.no_rum = DATPASSAGE.PASINDEX
GROUP BY 1,2,3,4,5,6
)
UPDATE [SCHEMA].p_rss_actes SET
interventions = w_interv.interventions
FROM w_interv
WHERE 1=1
AND p_rss_actes.rss_id = w_interv.rss_id
AND p_rss_actes.no_rum = w_interv.no_rum
AND p_rss_actes.acte_id = w_interv.acte_id
AND p_rss_actes.date_acte = w_interv.date_acte
AND p_rss_actes.association_nonprevue_ccam = w_interv.association_nonprevue_ccam
AND p_rss_actes.activite_ccam = w_interv.activite_ccam;
]]></sqlcmd>
</NODE>
<NODE label="Identites">
<sqlcmd><![CDATA[
UPDATE [SCHEMA].p_identites SET
nom = IPPNOM
,prenom = IPPPRENOM
,nom_naissance = IPPNOMEPOUSE
FROM
[SCHEMA].p_rss
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = p_rss.no_sejour_administratif
JOIN prod_sim.DATPATIENT ON DATPATIENT.IPPID = DATENTREE.ENTIPP
WHERE 1=1
AND p_rss.oid = p_identites.rss_id
AND
( 1!=1
OR p_identites.nom <> DATPATIENT.IPPNOM
OR p_identites.prenom <> DATPATIENT.IPPPRENOM
OR p_identites.nom_naissance <> DATPATIENT.IPPNOMEPOUSE
);
]]></sqlcmd>
</NODE>
<NODE label="Medecins actes">
<sqlcmd><![CDATA[
UPDATE [SCHEMA].p_rss_actes SET
medecin_id = t_medecins.oid
FROM
[SCHEMA].p_rss
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = p_rss.no_sejour_administratif
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASIDENT = DATENTREE.ENTID
JOIN prod_sim.DATACTESCCAM ON DATACTESCCAM.ACTIDPASSCCAM = DATPASSAGE.PASID
JOIN pmsi.t_unites_medicales on t_unites_medicales.code = DATPASSAGE.PASUM
JOIN pmsi.t_medecins ON t_medecins.code = DATACTESCCAM.ACTEXECCCAM,
pmsi.t_actes
WHERE 1=1
AND p_rss_actes.medecin_id = 0
AND p_rss_actes.acte_id = t_actes.oid
AND p_rss_actes.rss_id = p_rss.oid
AND t_actes.code = DATACTESCCAM.ACTCODECCAM
AND p_rss_actes.date_acte = DATACTESCCAM.ACTDATECCAM
AND p_rss_actes.activite_ccam = DATACTESCCAM.ACTACTIVITECCAM
AND p_rss_actes.unite_medicale_id = t_unites_medicales.um_expedition_id;
UPDATE [SCHEMA].p_rss_actes SET
medecin_id = t_medecins.oid
FROM
[SCHEMA].p_rss
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = p_rss.no_sejour_administratif
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASIDENT = DATENTREE.ENTID
JOIN prod_sim.DATACTESCCAMDELETED ON DATACTESCCAMDELETED.ACTIDPASSCCAM = DATPASSAGE.PASID
JOIN pmsi.t_unites_medicales on t_unites_medicales.code = DATPASSAGE.PASUM
JOIN pmsi.t_medecins ON t_medecins.code = DATACTESCCAMDELETED.ACTEXECCCAM,
pmsi.t_actes
WHERE 1=1
AND p_rss_actes.medecin_id = 0
AND p_rss_actes.acte_id = t_actes.oid
AND p_rss_actes.rss_id = p_rss.oid
AND t_actes.code = DATACTESCCAMDELETED.ACTCODECCAM
AND p_rss_actes.date_acte = DATACTESCCAMDELETED.ACTDATECCAM
AND p_rss_actes.activite_ccam = DATACTESCCAMDELETED.ACTACTIVITECCAM
AND p_rss_actes.unite_medicale_id = t_unites_medicales.um_expedition_id;
]]></sqlcmd>
</NODE>
<NODE label="Medecins RSS">
<sqlcmd><![CDATA[
-- Médecin de l'acte avec le plus fort ICR par RSS et par RUM
DROP TABLE IF EXISTS w_max_icr;
CREATE TEMP TABLE w_max_icr AS
SELECT
rss_id,
no_rum,
(COALESCE(
MAX(
CASE WHEN activite_ccam <> '4' AND
t_actes_c.ccam_regroupement_code_1 <> 'ADI' AND
t_actes_c.ccam_regroupement_code_1 <> 'ADA' AND
t_actes_c.ccam_regroupement_code_1 <> 'ATM'
THEN Array[t_actes_c.icr_1,medecin_id] ELSE NULL END),
MAX(
CASE WHEN activite_ccam <> '4' AND
t_actes_c.ccam_regroupement_code_1 <> 'ADI' AND
t_actes_c.ccam_regroupement_code_1 <> 'ADA'
THEN Array[t_actes_c.icr_1,medecin_id] ELSE NULL END),
MAX(
CASE WHEN activite_ccam <> '4' AND
t_actes_c.ccam_regroupement_code_1 <> 'ADA'
THEN Array[t_actes_c.icr_1,medecin_id] ELSE NULL END),
Array[0,0]
)) AS icr_medecin
FROM
[SCHEMA].p_rss_actes p_rss_actes
JOIN pmsi.t_actes_c ON p_rss_actes.acte_id = t_actes_c.oid
GROUP BY 1,2
ORDER BY 1,2;
-- Médecin RSS de l'exécutant du plus fort ICR du premier RUM
-- Si l'option OPTPMSI_MED_RSS vaut 1
UPDATE [SCHEMA].p_rss SET
medecin_rss_id = subview.medecin_id
FROM
(
SELECT
rss_id,
icr_medecin[2]::bigint as medecin_id
FROM
w_max_icr
where no_rum = 1
) subview, pmsi.t_divers
WHERE 1=1
AND subview.rss_id = p_rss.oid
AND p_rss.medecin_rss_id IS DISTINCT FROM subview.medecin_id
AND t_divers.code = 'OPTPMSI_MED_RSS'
AND t_divers.valeur = '1';
-- Médecin RSS de l'exécutant du plus fort ICR, peu importe le RUM
-- Si l'option OPTPMSI_MED_RSS vaut 0 ou s'il reste des médecins RSS non renseignés
UPDATE [SCHEMA].p_rss SET
medecin_rss_id = subview.medecin_id
FROM
(
SELECT
rss_id,
(MAX(icr_medecin))[2]::bigint as medecin_id
FROM
w_max_icr
GROUP BY 1
) subview, pmsi.t_divers
WHERE 1=1
AND subview.rss_id = p_rss.oid
AND p_rss.medecin_rss_id IS DISTINCT FROM subview.medecin_id
AND t_divers.code = 'OPTPMSI_MED_RSS'
AND (t_divers.valeur = '0' OR medecin_rss_id = 0);
-- S'il reste des séjours sans médecins, on prend le responsable du premier RUM
-- Si l'option OPTPMSI_MED_RSS vaut 1
UPDATE [SCHEMA].p_rss SET
medecin_rss_id = t_medecins.oid
FROM
prod_sim.DATENTREE
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASIDENT = DATENTREE.ENTID
JOIN pmsi.t_medecins ON t_medecins.code = DATPASSAGE.PASRESP,
pmsi.t_divers
where 1=1
AND DATENTREE.ENTNUM = p_rss.no_sejour_administratif
AND DATPASSAGE.PASINDEX = 1
AND medecin_rss_id = 0
AND t_divers.code = 'OPTPMSI_MED_RSS'
AND t_divers.valeur = '1';
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="PMSIENCOURS" label="RECUPERATION DES DOSSIERS PMSI EN-COURS ORBIS SIM">
<NODE label="Paramètres">
<sqlcmd><![CDATA[
--------------------------------------------
-- Médecins
--------------------------------------------
DROP TABLE IF EXISTS w_med;
CREATE TEMP TABLE w_med AS
-- Actes CCAM
(
SELECT
COALESCE(NOMEXECUTANT.CODE, NOMPRAT.CODE) as med_code
,COALESCE(NOMEXECUTANT.LIB, NOMPRAT.LIB) as med_lib
FROM
prod_sim.DATACTESCCAM
LEFT JOIN prod_sim.NOMEXECUTANT ON NOMEXECUTANT.CODE = DATACTESCCAM.ACTEXECCCAM
LEFT JOIN prod_sim.NOMPRAT ON NOMPRAT.CODE = DATACTESCCAM.ACTEXECCCAM
WHERE 1!=1
OR NOMEXECUTANT.CODE IS DISTINCT FROM NULL
OR NOMPRAT.CODE IS DISTINCT FROM NULL
GROUP BY 1, 2
)
UNION
-- Historique Actes CCAM
(
SELECT
COALESCE(NOMEXECUTANT.CODE, NOMPRAT.CODE) as med_code
,COALESCE(NOMEXECUTANT.LIB, NOMPRAT.LIB) as med_lib
FROM
prod_sim.DATACTESCCAMDELETED
LEFT JOIN prod_sim.NOMEXECUTANT ON NOMEXECUTANT.CODE = DATACTESCCAMDELETED.ACTEXECCCAM
LEFT JOIN prod_sim.NOMPRAT ON NOMPRAT.CODE = DATACTESCCAMDELETED.ACTEXECCCAM
WHERE 1!=1
OR NOMEXECUTANT.CODE IS DISTINCT FROM NULL
OR NOMPRAT.CODE IS DISTINCT FROM NULL
GROUP BY 1, 2
)
UNION
-- Médecins responsables de passages
(
SELECT
COALESCE(NOMEXECUTANT.CODE, NOMPRAT.CODE) as med_code
,COALESCE(NOMEXECUTANT.LIB, NOMPRAT.LIB) as med_lib
FROM
prod_sim.DATPASSAGE
LEFT JOIN prod_sim.NOMEXECUTANT ON NOMEXECUTANT.CODE = DATPASSAGE.PASRESP
LEFT JOIN prod_sim.NOMPRAT ON NOMPRAT.CODE = DATPASSAGE.PASRESP
WHERE 1!=1
OR NOMEXECUTANT.CODE IS DISTINCT FROM NULL
OR NOMPRAT.CODE IS DISTINCT FROM NULL
GROUP BY 1, 2
)
ORDER BY 1;
-- Mise à jour des noms des médecins
UPDATE pmsi.t_medecins SET
nom = w_med.med_lib
FROM
w_med
WHERE 1=1
AND t_medecins.nom != w_med.med_lib
AND t_medecins.code = w_med.med_code;
-- Ajout des nouveaux médecins
INSERT INTO pmsi.t_medecins (code, nom)
SELECT
w_med.med_code
,w_med.med_lib
FROM
w_med
LEFT JOIN pmsi.t_medecins ON t_medecins.code = w_med.med_code
WHERE
t_medecins.code IS NULL;
SELECT base.cti_initialize_medecins();
SELECT pmsi.cti_reorganize_medecins_c();
--------------------------------------------
-- Unités médicales
--------------------------------------------
DROP TABLE IF EXISTS w_um;
CREATE TEMP TABLE w_um AS
-- Actes CCAM
(
SELECT
NOMUM.CODE,
NOMUM.LIB,
NOMUM.DEFTYPEAUTOUM
FROM
prod_sim.NOMUM
JOIN prod_sim.DATACTESCCAM ON DATACTESCCAM.ACTCODEUFCCAM = NOMUM.CODE
GROUP BY 1,2,3
)
UNION
-- Historique Actes CCAM
(
SELECT
NOMUM.CODE,
NOMUM.LIB,
NOMUM.DEFTYPEAUTOUM
FROM
prod_sim.NOMUM
JOIN prod_sim.DATACTESCCAMDELETED ON DATACTESCCAMDELETED.ACTCODEUFCCAM = NOMUM.CODE
GROUP BY 1,2,3
)
UNION
-- Rums
(
SELECT
NOMUM.CODE,
NOMUM.LIB,
NOMUM.DEFTYPEAUTOUM
FROM
prod_sim.NOMUM
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASUM = NOMUM.CODE
GROUP BY 1,2,3
)
UNION
-- UM déjà expédiées ATIH
(
SELECT
NOMUM.CODE,
NOMUM.LIB,
NOMUM.DEFTYPEAUTOUM
FROM
prod_sim.NOMUM
JOIN pmsi.t_unites_medicales ON t_unites_medicales.code = NOMUM.CODE
GROUP BY 1,2,3
)
ORDER BY 1;
-- Mise à jour des libellés si code = texte
UPDATE pmsi.t_unites_medicales SET
texte = w_um.LIB
FROM
w_um
WHERE 1=1
AND w_um.CODE = t_unites_medicales.code
AND t_unites_medicales.code = t_unites_medicales.texte;
-- Ajout des nouvelles unités médicales
INSERT INTO pmsi.t_unites_medicales (code, texte, type_autorisation)
SELECT
w_um.CODE
,w_um.LIB
,COALESCE(t_types_autorisations.code::text, ''::text)
FROM
w_um
LEFT JOIN pmsi.t_types_autorisations on t_types_autorisations.code = w_um.DEFTYPEAUTOUM
LEFT JOIN pmsi.t_unites_medicales um on um.code = w_um.CODE
WHERE
um.code IS NULL;
-- Lien vers l'unité d'expédition
UPDATE pmsi.t_unites_medicales SET
um_expedition_id = oid
WHERE
um_expedition_id = 0 OR um_expedition_id IS NULL;
--------------------------------------------
-- Unités fonctionnelles
--------------------------------------------
DROP TABLE IF EXISTS w_uf;
CREATE TEMP TABLE w_uf AS
SELECT
UPPER(DATACTESCCAM.ACTCODEUFCCAM) as code,
COALESCE(NOMUM.LIB, UPPER(DATACTESCCAM.ACTCODEUFCCAM)) as lib
FROM
prod_sim.DATACTESCCAM
LEFT JOIN prod_sim.NOMUM on NOMUM.CODE = UPPER(DATACTESCCAM.ACTCODEUFCCAM)
GROUP BY 1,2
ORDER BY 1;
UPDATE pmsi.t_unites_fonctionnelles SET
texte = w_uf.lib
FROM
w_uf
WHERE 1=1
AND t_unites_fonctionnelles.code = w_uf.code
AND t_unites_fonctionnelles.code = t_unites_fonctionnelles.texte
AND t_unites_fonctionnelles.texte != w_uf.lib;
INSERT INTO pmsi.t_unites_fonctionnelles(oid, code, texte)
SELECT 0, chr(127) || '**', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM pmsi.t_unites_fonctionnelles);
INSERT INTO pmsi.t_unites_fonctionnelles (code, texte)
SELECT
w_uf.code
,w_uf.lib
FROM
w_uf
LEFT JOIN pmsi.t_unites_fonctionnelles uf ON uf.code = w_uf.code
WHERE 1=1
AND uf.code IS NULL
AND w_uf.code IS DISTINCT FROM ''::text
ORDER BY w_uf.code;
--------------------------------------------
-- UCD
--------------------------------------------
INSERT INTO pmsi.t_ucd (code, texte, texte_court)
SELECT
NOMUCD.CODE
,NOMUCD.LIB
,NOMUCD.LIB
FROM
prod_sim.DATUCD
JOIN prod_sim.NOMUCD ON NOMUCD.CODE = DATUCD.UCDCODE
LEFT JOIN pmsi.t_ucd ucd ON ucd.code = NOMUCD.CODE
WHERE
ucd.code is null
GROUP BY 1,2,3;
]]></sqlcmd>
</NODE>
<NODE label="RSS">
<sqlcmd><![CDATA[
-- Séjours existant dans SIM mais pas dans CTI
DROP TABLE IF EXISTS w_sej;
CREATE TEMP TABLE w_sej AS
SELECT
ENTNUM
FROM
prod_sim.DATENTREE
LEFT JOIN pmsi.p_rss ON p_rss.no_sejour_administratif = DATENTREE.ENTNUM
WHERE 1=1
AND p_rss.no_sejour_administratif IS NULL
AND DATENTREE.ENTSORTIELE >= '[ANNEE]0101'
AND DATENTREE.ENTENTREELE <= now();
CREATE INDEX i_rss_11 ON w_sej
USING btree
(ENTNUM);
DROP TABLE IF EXISTS w_rss;
CREATE TEMP TABLE w_rss AS
SELECT
base.cti_to_number(DATENTREE.ENTIPP) AS no_patient
,'[FINESS]'::text as finess
,DATRESUMEMCO.RSSNUMANONYME as no_rss
,''::text as version_groupage
,date(DATPATIENT.IPPNAISSANCE) as date_naissance
,DATRESUMEMCO.RSSSEXE AS sexe
,date(DATENTREE.ENTENTREELE) AS date_entree
,date(DATENTREE.ENTSORTIELE) AS date_sortie
,DATRESUMEMCO.RSSME as mode_entree
,DATRESUMEMCO.RSSPROV as provenance
,DATRESUMEMCO.RSSMS as mode_sortie
,DATRESUMEMCO.RSSDEST as destination
,COALESCE(t_codes_postaux_c.code, ''::text) as code_postal
,DATRESUMEMCO.RSSPOIDS as poids_bebe
,DATRESUMEMCO.RSSIGS as igs2
,''::text as cma
,COALESCE(substr(DATRESUMEMCO.RSSGHM, 3, 1), ''::text) as groupe_ghm
,DATRESUMEMCO.RSSDUREE as duree_sejour
,GREATEST(DATRESUMEMCO.RSSSEANCES,1) as nb_rsa
,DATRESUMEMCO.RSSAGEAN as age
,''::text as supprime
,now() AS date_import
,DATRESUMEMCO.RSSNBRERUM as nb_rum
,''::text as secteur
,DATENTREE.ENTNUM as no_sejour_administratif
,DATRESUMEMCO.RSSSEANCES as nb_seances
,''::text as ghm_fg9
,COALESCE(t_ghm.oid, 0) as ghm_id
,0::bigint as medecin_rss_id
,COALESCE(t_ghs.oid, 0) as ghs_id
,date_part('year', date(DATENTREE.ENTSORTIELE)) * 100 + date_part('month', date(DATENTREE.ENTSORTIELE)) AS mois_sortie
,COALESCE(dp.oid, 0) as diagnostic_principal_id
,COALESCE(dr.oid, 0) as diagnostic_relie_id
,COALESCE(t_ghm.oid, 0) as ghm_production_id
,DATRESUMEMCO.RSSNOCLASSANT as no_rum_principal
,COALESCE(t_unites_medicales.oid, 0) as unite_medicale_principale_id
,nextval('pmsi.s_rss'::regclass) as rss_id
,-1::bigint as import_id
,''::text as etat
,0::bigint as acte_principal_id
,COALESCE(t_codes_postaux_c.oid, 0) as code_postal_id
,0::bigint as patient_id
,0::bigint as prestation_principale_id
,''::text as severite_fg11_simulation_code
,'1'::text as en_cours
,CASE WHEN DATRESUMEMCO.RSSCMD <> '90' THEN 'V'::text ELSE 'S'::text END as en_cours_etat
,0::bigint as base_remboursement
,0::bigint as sejour_facture
,0::bigint as honoraires_factures
,0::bigint as t2a_facture
,0::bigint as dmi_facture
,0::bigint as phc_facture
,0::bigint as ca_ghs_theorique
,0::bigint as nb_ghs
,0::bigint as ca_ghs
,0::bigint as nb_exb
,0::bigint as ca_exb
,0::bigint as nb_exh
,0::bigint as ca_exh
,0::bigint as nb_si
,0::bigint as ca_si
,0::bigint as nb_sur
,0::bigint as ca_sur
,0::bigint as nb_rea
,0::bigint as ca_rea
,0::bigint as nb_neonat
,0::bigint as ca_neonat
,''::text as traitement_epmsi
,''::text as code_retour_groupage
,0::bigint as comite_medical_id
,''::text as rehosp_meme_ghm
,0::bigint as from_oid
,0::bigint as forfait_facture
,DATRESUMEMCO.RSSAGEGEST as age_gestationnel
,'20991231'::date as date_dernieres_regles
,''::text as confirmation_codage
,''::text as type_machine_rdth
,''::text as type_dosimetrie
,''::text as numero_innovation
,0::bigint as rss_mere_id
,0::smallint as nombre_ivg_anterieures
,0::smallint as annee_ivg_precedente
,0::bigint as nombre_naissances_vivantes_anterieures
,0::bigint as nb_ghsmin
FROM
prod_sim.DATENTREE
JOIN w_sej ON DATENTREE.ENTNUM = w_sej.ENTNUM
JOIN prod_sim.DATRESUMEMCO ON DATRESUMEMCO.RSSENTID = DATENTREE.ENTID
JOIN prod_sim.DATPATIENT ON DATPATIENT.IPPID = DATENTREE.ENTIPP
LEFT JOIN pmsi.t_ghm ON t_ghm.code = DATRESUMEMCO.RSSGHM
LEFT JOIN pmsi.t_codes_postaux_c ON t_codes_postaux_c.code = DATRESUMEMCO.RSSCP
LEFT JOIN pmsi.t_ghs ON t_ghs.code_text = DATRESUMEMCO.RSSGHS
LEFT JOIN pmsi.t_diagnostics dp on dp.code = DATRESUMEMCO.RSSDP
LEFT JOIN pmsi.t_diagnostics dr on dr.code = DATRESUMEMCO.RSSDR
LEFT JOIN pmsi.t_unites_medicales ON t_unites_medicales.code = DATRESUMEMCO.RSSUMCLASSANT;
INSERT INTO pmsi.p_rss (
no_patient
,finess
,no_rss
,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
,oid
,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
,forfait_facture
,age_gestationnel
,date_dernieres_regles
,confirmation_codage
,type_machine_rdth
,type_dosimetrie
,numero_innovation
,rss_mere_id
,nombre_ivg_anterieures
,annee_ivg_precedente
,nombre_naissances_vivantes_anterieures
,nb_ghsmin)
SELECT
no_patient
,finess
,no_rss
,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
,rss_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
,forfait_facture
,age_gestationnel
,date_dernieres_regles
,confirmation_codage
,type_machine_rdth
,type_dosimetrie
,numero_innovation
,rss_mere_id
,nombre_ivg_anterieures
,annee_ivg_precedente
,nombre_naissances_vivantes_anterieures
,nb_ghsmin
FROM w_rss;
]]></sqlcmd>
</NODE>
<NODE label="Identités">
<sqlcmd><![CDATA[
INSERT INTO pmsi.p_identites(
no_rss
,nom
,finess
,rss_id
,prenom
,nom_naissance)
SELECT
w_rss.no_rss,
DATPATIENT.IPPNOM AS nom,
w_rss.finess,
w_rss.rss_id,
DATPATIENT.IPPPRENOM AS prenom,
DATPATIENT.IPPNOMEPOUSE AS nom_naissance
FROM w_rss
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = w_rss.no_sejour_administratif
JOIN prod_sim.DATPATIENT ON DATPATIENT.IPPID = DATENTREE.ENTIPP
;
]]></sqlcmd>
</NODE>
<NODE label="Rum">
<sqlcmd><![CDATA[
INSERT INTO pmsi.p_rss_rum(
finess
,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
,rss_id
,igs2
,type_autorisation_lit_dedie
,supplement_code)
SELECT
w_rss.finess as finess
,w_rss.no_rss as no_rss
,DATPASSAGE.PASINDEX as no_rum
,DATPASSAGE.PASENTREELE as date_entree
,DATPASSAGE.PASSORTIELE as date_sortie
,DATPASSAGE.PASME as mode_entree
,DATPASSAGE.PASPROV as provenance
,DATPASSAGE.PASMS as mode_sortie
,DATPASSAGE.PASDEST as destination
,DATPASSAGE.PASDUREE as duree_sejour
,DATINFOPASCS.PCSSEANCES as nb_seances
,DATPASSAGE.PASUM as unite_medicale
,COALESCE(dp.oid, 0) as diagnostic_principal_id
,COALESCE(dr.oid, 0) as diagnostic_relie_id
,t_unites_medicales.oid as unite_medicale_id
,DATPASSAGE.PASAUTORISATIONUM as type_autorisation
,w_rss.rss_id as rss_id
,DATINFOPASCS.PCSIGS2 as igs2
,''::text as type_autorisation_lit_dedie
,''::text as supplement_code
FROM
w_rss
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = w_rss.no_sejour_administratif
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASIDENT = DATENTREE.ENTID
LEFT JOIN prod_sim.DATDIAGS sim_dp ON sim_dp.DIAGIDPASS = DATPASSAGE.PASID
AND sim_dp.DIAGTYPE = 'DP'
LEFT JOIN pmsi.t_diagnostics dp on dp.code = sim_dp.DIAGCODE
LEFT JOIN prod_sim.DATDIAGS sim_dr ON sim_dr.DIAGIDPASS = DATPASSAGE.PASID
AND sim_dr.DIAGTYPE = 'DR'
LEFT JOIN pmsi.t_diagnostics dr on dr.code = sim_dr.DIAGCODE
JOIN prod_sim.DATINFOPASCS ON DATINFOPASCS.PCSID = DATPASSAGE.PASID
JOIN pmsi.t_unites_medicales ON t_unites_medicales.code = DATPASSAGE.PASUM;
]]></sqlcmd>
</NODE>
<NODE label="Diagnostics">
<sqlcmd><![CDATA[
INSERT INTO pmsi.p_rss_diagnostics (
finess
,no_rss
,no_rum
,diagnostic_id
,type_diagnostic
,type_diagnostic_rss
,imprecis
,unite_medicale
,rss_id
,unite_medicale_id
)
SELECT
w_rss.finess as finess
,w_rss.no_rss as no_rss
,DATPASSAGE.PASINDEX as no_rum
,COALESCE(t_diagnostics.oid, 0) as diagnostic_id
,DATDIAGS.DIAGTYPE as type_diagnostic
,CASE
WHEN DATRESUMEMCO.RSSNOCLASSANT <> DATPASSAGE.PASINDEX AND DATDIAGS.DIAGTYPE in ('DP', 'DR') THEn 'DA'
ELSE DATDIAGS.DIAGTYPE
END as type_diagnostic_rss
,''::text as imprecis
,DATPASSAGE.PASUM as unite_medicale
,w_rss.rss_id as rss_id
,COALESCE(t_unites_medicales.oid, 0) as unite_medicale_id
FROM
w_rss
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = w_rss.no_sejour_administratif
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASIDENT = DATENTREE.ENTID
JOIN prod_sim.DATDIAGS ON DATDIAGS.DIAGIDPASS = DATPASSAGE.PASID
JOIN prod_sim.DATRESUMEMCO ON DATRESUMEMCO.RSSENTID = DATENTREE.ENTID
LEFT JOIN pmsi.t_diagnostics on t_diagnostics.code = DATDIAGS.DIAGCODE
LEFT JOIN pmsi.t_unites_medicales ON t_unites_medicales.code = DATPASSAGE.PASUM;
]]></sqlcmd>
</NODE>
<NODE label="Actes">
<sqlcmd><![CDATA[
INSERT INTO pmsi.p_rss_actes (
finess
,no_rss
,no_rum
,unite_medicale
,date_acte
,medecin_id
,acte_id
,phase_ccam
,activite_ccam
,extension_ccam
,modificateur_ccam_1
,modificateur_ccam_2
,modificateur_ccam_3
,modificateur_ccam_4
,remboursement_excp_ccam
,association_nonprevue_ccam
,rss_id
,unite_medicale_id
,condition_gm_ok
,unite_fonctionnelle_id
,nombre
,interventions
)
SELECT
w_rss.finess as finess
,w_rss.no_rss as no_rss
,DATPASSAGE.PASINDEX as no_rum
,DATPASSAGE.PASUM as unite_medicale
,DATACTESCCAM.ACTDATECCAM as date_acte
,COALESCE(t_medecins.oid, 0) as medecin_id
,COALESCE(t_actes.oid, 0) AS acte_id
,DATACTESCCAM.ACTPHASECCAM as phase_ccam
,DATACTESCCAM.ACTACTIVITECCAM as activite_ccam
,DATACTESCCAM.ACTEXTDOCUM as extension_ccam
,DATACTESCCAM.ACTMODIFICATEUR1 as modificateur_ccam_1
,DATACTESCCAM.ACTMODIFICATEUR2 as modificateur_ccam_2
,DATACTESCCAM.ACTMODIFICATEUR3 as modificateur_ccam_3
,DATACTESCCAM.ACTMODIFICATEUR4 as modificateur_ccam_4
,DATACTESCCAM.ACTREMBEXCEP as remboursement_excp_ccam
,DATACTESCCAM.ACTASSONONPREVUE as association_nonprevue_ccam
,w_rss.rss_id as rss_id
,COALESCE(t_unites_medicales.oid, 0) as unite_medicale_id
,''::character(1) as condition_gm_ok
,COALESCE(t_unites_fonctionnelles.oid, 0) as unite_fonctionnelle_id
,count(*) as nombre
,array_agg(ACTNUMINTERVCCAM) as interventions
FROM
w_rss
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = w_rss.no_sejour_administratif
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASIDENT = DATENTREE.ENTID
JOIN prod_sim.DATRESUMEMCO ON DATRESUMEMCO.RSSENTID = DATENTREE.ENTID
JOIN prod_sim.DATACTESCCAM ON DATACTESCCAM.ACTIDPASSCCAM = DATPASSAGE.PASID
LEFT JOIN pmsi.t_medecins ON t_medecins.code = DATACTESCCAM.ACTEXECCCAM
LEFT JOIN pmsi.t_unites_medicales ON t_unites_medicales.code = DATPASSAGE.PASUM
LEFT JOIN pmsi.t_actes ON t_actes.code = DATACTESCCAM.ACTCODECCAM
LEFT JOIN pmsi.t_unites_fonctionnelles ON t_unites_fonctionnelles.code = DATACTESCCAM.ACTCODEUFCCAM
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;
]]></sqlcmd>
</NODE>
<NODE label="UCD">
<sqlcmd><![CDATA[
INSERT INTO pmsi.p_rss_ucd(
finess
,no_rss
,rang
,date_ucd
,ucd_id
,nombre
,coefficient_fractionnement
,prix_unitaire_achat
,prix_unitaire_ecart_indemnisable
,montant_ecart_indemnisable
,montant_facture
,rss_id
,non_pris_en_compte
,prix_unitaire_tr
,montant_tr
,montant_t2a_accorde
)
SELECT
w_rss.finess as finess
,w_rss.no_rss as no_rss
,''::text as rang
,DATUCD.UCDDATEADMIN as date_ucd
,COALESCE(t_ucd.oid, 0) as ucd_id
,DATUCD.UCDNBADMIN as nombre
,0 as coefficient_fractionnement
,DATUCD.UCDPRXACH as prix_unitaire_achat
,0 as prix_unitaire_ecart_indemnisable
,0 as montant_ecart_indemnisable
,0 As montant_facture
,w_rss.rss_id as rss_id
,'0'::text as non_pris_en_compte
,0::bigint as prix_unitaire_tr
,0::numeric as montant_tr
,0::numeric as montant_t2a_accorde
FROM
w_rss
JOIN prod_sim.DATUCD ON DATUCD.UCDENTNUM = w_rss.no_sejour_administratif
LEFT JOIN pmsi.t_ucd ON t_ucd.code = DATUCD.UCDCODE
;
]]></sqlcmd>
</NODE>
<NODE label="Factures">
<sqlcmd><![CDATA[
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
,taux_remboursement
,matricule_assure
,cle_matricule_assure
,forfait_facture
,pat_benef_cmu
,valorise_fides
,no_facture_sejour_mere
,regime_id
,exoneration_tm_id
,nature_pec_id
,code_pec_id
,type_contrat_oc_id
,motif_non_facturation_id
,code_pec_fj_id
,facturation_18euros
,facturation_18euros_id
,code_gestion
,no_organisme_complementaire
,no_at_date_adc
,nb_ghsmin
)
SELECT
w_rss.finess as finess
,w_rss.no_rss as no_rss
,DATVIDHOSP.VHFACTURABLE as code_pec
,DATVIDHOSP.VHRANGBENEF as rang_beneficiaire
,DATVIDHOSP.VHCODEGR as regime
,DATVIDHOSP.VHASSURANCE as nature_pec
,DATVIDHOSP.VHCODEJUSTEXOTM as justificatif_exo
,DATVIDHOSP.VHNUMSEJOUR as no_facture
,'1'::character(1) as code_regularisation
,0::NUMERIC as base_remboursement
,0::NUMERIC as sejour_facture
,0::NUMERIC as sejour_remboursable
,0::NUMERIC as honoraires_factures
,0::NUMERIC as honoraires_remboursable
,0::NUMERIC as t2a_facture
,0::NUMERIC as dmi_facture
,0::NUMERIC as phc_facture
,0::NUMERIC as participation_assure_avant_oc
,0::NUMERIC as sejour_remboursable_2
,0::NUMERIC as honoraires_remboursable_2
,0::NUMERIC as montant_dmi_ghs2006
,DATVALMCO.VALNBJSOINSINT as nb_si
,DATVALMCO.VALSOINSINT as ca_si
,DATVALMCO.VALNBJSURV as nb_sur
,DATVALMCO.VALSURV as ca_sur
,DATVALMCO.VALNBJREA as nb_rea
,DATVALMCO.VALREA as ca_rea
,DATVALMCO.VALNBJNN1 + DATVALMCO.VALNBJNN2 + DATVALMCO.VALNBJNN3 as nb_neonat
,DATVALMCO.VALNN1 + DATVALMCO.VALNN2 + DATVALMCO.VALNN3 as ca_neonat
,DATVALMCO.VALNBJXSUP as nb_exh
,DATVALMCO.VALEHX as ca_exh
,DATVALMCO.VALNBJXINF as nb_exb
,DATVALMCO.VALJXINF as ca_exb
,0::NUMERIC as nb_ghs
,0::NUMERIC as ca_ghs
,w_rss.rss_id as rss_id
,0::NUMERIC as ca_ghs_theorique
,DATVIDHOSP.VHTXREMB as taux_remboursement
,DATVIDHOSP.VHNUMSECU as matricule_assure
,DATVIDHOSP.VHCLEFNUMIMMAT as cle_matricule_assure
,0::NUMERIC as forfait_facture
,base.cti_to_number(DATVIDHOSP.VHBENEFCMU) as pat_benef_cmu
,0::integer as valorise_fides
,DATVIDHOSP.VHNUMSEJMERE as no_facture_sejour_mere
,COALESCE(t_grands_regimes.oid, 0) as regime_id
,COALESCE(t_exoneration_tm.oid, 0) as exoneration_tm_id
,COALESCE(t_nature_assurance.oid, 0) as nature_pec_id
,COALESCE(t_pec.oid, 0) as code_pec_id
,0::bigint as type_contrat_oc_id
,COALESCE(t_motif_non_facturation.oid, 0) as motif_non_facturation_id
,COALESCE(t_pec_fj.oid, 0) as code_pec_fj_id
,DATVIDHOSP.VHFACT18 as facturation_18euros
,COALESCE(t_facturation_18euros.oid, 0) as facturation_18euros_id
,DATVIDHOSP.VHCODEGESTION as code_gestion
,DATVIDHOSP.VHORGCOMPL as no_organisme_complementaire
,DATVIDHOSP.VHNUMDATEACCIDENT as no_at_date_adc
,0::numeric as nb_ghsmin
FROM
w_rss
JOIN prod_sim.DATENTREE ON DATENTREE.ENTNUM = w_rss.no_sejour_administratif
JOIN prod_sim.DATPASSAGE ON DATPASSAGE.PASIDENT = DATENTREE.ENTID
JOIN prod_sim.DATRESUMEMCO ON DATRESUMEMCO.RSSENTID = DATENTREE.ENTID
JOIN prod_sim.DATVALMCO ON DATVALMCO.VALMCOIDPASS = DATPASSAGE.PASIDENT
AND DATPASSAGE.PASINDEX = DATRESUMEMCO.RSSNOCLASSANT
AND DATVALMCO.VALMCOTYPE = 'RSS'
LEFT JOIN prod_sim.DATVIDHOSP ON DATVIDHOSP.VHNUMSEJOUR = w_rss.no_sejour_administratif
LEFT JOIN base.t_grands_regimes ON t_grands_regimes.code = DATVIDHOSP.VHCODEGR
LEFT JOIN base.t_facturation_18euros ON t_facturation_18euros.code = DATVIDHOSP.VHFACT18
LEFT JOIN base.t_pec ON t_pec.code = DATVIDHOSP.VHFACTURABLE
LEFT JOIN base.t_nature_assurance ON t_nature_assurance.code = DATVIDHOSP.VHASSURANCE
LEFT JOIN base.t_exoneration_tm ON t_exoneration_tm.code = DATVIDHOSP.VHCODEJUSTEXOTM
LEFT JOIN base.t_pec_fj ON t_pec_fj.code = DATVIDHOSP.VHCODEPECFJ
LEFT JOIN base.t_type_contrat_oc ON t_type_contrat_oc.code = DATVIDHOSP.VHTYPECONTRAT
LEFT JOIN base.t_motif_non_facturation ON t_motif_non_facturation.code = DATVIDHOSP.VHMOTIFNFAM;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="PMSIETAT" label="RECUPERATION ETAT DES DOSSIERS">
<NODE label="Initialisation">
<sqlcmd><![CDATA[
SELECT pmsi.cti_initialize_rss_etat();
]]></sqlcmd>
</NODE>
<NODE label="Etat des dossiers">
<sqlcmd><![CDATA[
]]></sqlcmd>
</NODE>
</NODE>
</ROOT>