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.
 
 

2907 lines
142 KiB

return: text
lang: plpgsql
parameters:
p0:
type: bigint
name: i_import_id
p1:
type: bigint
name: i_mat2a_import_id
src: |
DECLARE
BEGIN
RAISE NOTICE '%' , 'Identification des imports';
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cp_imports') THEN
DROP TABLE IF EXISTS w_cp_imports;
CREATE TEMP TABLE w_cp_imports (import_id bigint, mat2a_import_id bigint, mat2a_annee numeric, mat2a_mois numeric);
END IF;
TRUNCATE w_cp_imports;
INSERT INTO w_cp_imports
SELECT MAX(p_imports.oid) AS import_id, (MAX(Array[p_imports.oid, p_imports.mat2a_import_id]))[2] AS mat2a_import_id, MAX(mat2a_annee) AS mat2a_annee, MAX(mat2a_mois) AS mat2a_mois
FROM pmsi.p_imports
JOIN pmsi.p_mat2a_import ON p_imports.mat2a_import_id = p_mat2a_import.oid
WHERE date_fin BETWEEN '20140101' AND date(now()) AND
mat2a_import_id <> 0 AND
etat = 'G' AND
p_imports.oid IN (SELECT import_id FROM pmsi.p_rss WHERE etat = '') AND
(i_import_id = -1 OR p_imports.oid = i_import_id) AND
(i_mat2a_import_id = -1 OR p_imports.mat2a_import_id = i_mat2a_import_id)
HAVING MAX(p_imports.oid) IS NOT NULL;
--DROP TABLE IF EXISTS temp.w_cp_imports; CREATE TABLE temp.w_cp_imports AS SELECT * FROM w_cp_imports;
--drop table if exists temp.w_cp_cti_fact2a; CREATE Table temp.w_cp_cti_fact2a as select * from w_cp_cti_fact2a;
-- Import à traiter ?
IF NOT EXISTS (SELECT * FROM w_cp_imports LIMIT 1) THEN
return 'Pas d''import à traiter';
END IF;
RAISE NOTICE '%' , 'Initialisations';
UPDATE pmsi.p_mat2a_data
SET data_mat2a[1] = 'CG F Majoration consultation suivi de grossesse Férié'
WHERE data_mat2a[1] ILIKE '%CG Consultation suivi de grossesse Férié%';
UPDATE pmsi.p_mat2a_data
SET data_mat2a[1] = 'CG N Majoration consultation suivi de grossesse Nuit'
WHERE data_mat2a[1] ILIKE '%CG Consultation suivi de grossesse Nuit%';
-- Numéro de table dans la page 2.Q.HPNPC où apparaissent les prestations non prises en compte
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_seq_hpnpc') THEN
DROP TABLE IF EXISTS w_seq_hpnpc;
CREATE TEMP TABLE w_seq_hpnpc (
import_id bigint,
mat2a_import_id bigint,
mat2a_annee numeric,
seq_hpnpc bigint
);
END IF;
TRUNCATE w_seq_hpnpc;
INSERT INTO w_seq_hpnpc
SELECT
w_cp_imports.import_id,
w_cp_imports.mat2a_import_id,
w_cp_imports.mat2a_annee,
MAX(table_sequence) as table_sequence
FROM
pmsi.p_mat2a_data
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE 1=1
AND file_code = 'T2QHPNPC'
AND line_type = 'T'
AND array_to_string(data_mat2a,',') like '%non prises en compte%' OR array_to_string(data_mat2a,',')like '%Lettres clé non valorisées%'
GROUP BY 1,2,3;
-- Réaffectation des prestations non valorisées d'après le tableau mat2a
IF 1 <> 1 THEN
RAISE NOTICE '%' , 'Prestations non valorisees';
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cp_non_valorises') THEN
DROP TABLE IF EXISTS w_cp_non_valorises;
CREATE TEMP TABLE w_cp_non_valorises (rss_id bigint, prestation_id bigint);
CREATE INDEX i_w_cp_non_valorises_1
ON w_cp_non_valorises
USING btree
(rss_id);
CREATE INDEX i_w_cp_non_valorises_2
ON w_cp_non_valorises
USING btree
(prestation_id);
END IF;
TRUNCATE w_cp_non_valorises;
INSERT INTO w_cp_non_valorises
SELECT rss_id, prestation_id
FROM pmsi.p_rss
JOIN pmsi.p_rsf_detail ON p_rsf_detail.rss_id = p_rss.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
WHERE en_cours = '0' AND 1<>1 AND
est_ligne_rss = '1' AND
prestation_id = ANY ( array(
SELECT
t_prestations.oid
FROM
pmsi.p_mat2a_data
JOIN pmsi.t_prestations ON t_prestations.code = split_part(data_mat2a[1],' ',1)
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN w_seq_hpnpc ON w_seq_hpnpc.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE
file_code = 'T2QHPNPC' AND
table_sequence = w_seq_hpnpc.seq_hpnpc AND
line_type IN ('D')
GROUP BY 1
)::bigint[])
GROUP BY 1,2
;
-- Les prestations APC, APV, APY, AVY et APU ne sont valorisées qu'à partir d'octobre 2017
-- Il faut donc partiellement les prendre en compte dans le tableau 'T2QHPNPC'
WITH w_to_delete AS (
SELECT
rss_id,
prestation_id
FROM
pmsi.p_rsf_detail
JOIN pmsi.t_prestations ON t_prestations.oid = p_rsf_detail.prestation_id
WHERE 1=1
AND t_prestations.code IN ('APC','APV','APY','AVY','APU')
AND p_rsf_detail.date_debut >= '20171001'::date
)
DELETE FROM w_cp_non_valorises
USING
w_to_delete
WHERE 1=1
AND w_cp_non_valorises.rss_id = w_to_delete.rss_id
AND w_cp_non_valorises.prestation_id = w_to_delete.prestation_id;
INSERT INTO pmsi.p_rsf_detail_non_valorise(
finess, 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, rss_id, type, coefficient_geo,
est_ligne_rss, est_ligne_rum, no_rum, unite_medicale_id, base_remboursement_rum,
montant_supplement_nf, sejour_remboursable_rum, pec_fj_id, base_remboursement_sauf_transition,
base_remboursement_rum_sauf_transition, regle_id)
SELECT
finess, 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, p_rsf_detail.prestation_id, p_rsf_detail.rss_id, type, coefficient_geo,
est_ligne_rss, est_ligne_rum, no_rum, unite_medicale_id, base_remboursement_rum,
montant_supplement_nf, sejour_remboursable_rum, pec_fj_id, base_remboursement_sauf_transition,
base_remboursement_rum_sauf_transition, COALESCE(t_regles_non_valorisation.oid, 0) as regle_id
FROM pmsi.p_rsf_detail
JOIN w_cp_non_valorises ON w_cp_non_valorises.rss_id = p_rsf_detail.rss_id AND
w_cp_non_valorises.prestation_id = p_rsf_detail.prestation_id AND
est_ligne_rss = '1'
LEFT JOIN pmsi.t_regles_non_valorisation ON t_regles_non_valorisation.code = '09'::text;
DELETE FROM pmsi.p_rsf_detail
USING w_cp_non_valorises
WHERE w_cp_non_valorises.rss_id = p_rsf_detail.rss_id AND
w_cp_non_valorises.prestation_id = p_rsf_detail.prestation_id;
UPDATE pmsi.p_rsf_total SET
base_remboursement = COALESCE(subview.base_remboursement,0),
t2a_facture = COALESCE(subview.t2a_facture,0),
dmi_facture = COALESCE(subview.dmi_facture,0),
phc_facture = COALESCE(subview.phc_facture,0),
forfait_facture = COALESCE(subview.forfait_facture,0),
nb_exh = COALESCE(subview.nb_exh,0),
ca_exh = COALESCE(subview.ca_exh,0),
nb_exb = COALESCE(subview.nb_exb,0),
ca_exb = COALESCE(subview.ca_exb,0),
nb_ghs =COALESCE( subview.nb_ghs,0),
ca_ghs = COALESCE(subview.ca_ghs,0),
nb_ghsmin = COALESCE(subview.nb_ghsmin,0)
FROM pmsi.p_rss
LEFT JOIN (
SELECT rss_id,
SUM(p_rsf_detail.base_remboursement) as base_remboursement,
SUM(CASE WHEN t_prestations.section_code[9] LIKE 'S1%' THEN p_rsf_detail.base_remboursement ELSE 0 END) as t2a_facture,
SUM(CASE WHEN t_prestations.section_code[9] LIKE 'S2%' THEN p_rsf_detail.base_remboursement ELSE 0 END) as dmi_facture,
SUM(CASE WHEN t_prestations.section_code[9] LIKE 'S3%' THEN p_rsf_detail.base_remboursement ELSE 0 END) as phc_facture,
SUM(CASE WHEN t_prestations.code = 'EXH' THEN p_rsf_detail.nombre ELSE 0 END) as nb_exh,
SUM(CASE WHEN t_prestations.code = 'EXH' THEN p_rsf_detail.base_remboursement ELSE 0 END) as ca_exh,
SUM(CASE WHEN t_prestations.code = 'GHS' AND coefficient > 0 AND coefficient < 1 AND t_ghs.code NOT IN (9606,9616) THEN p_rsf_detail.nombre ELSE 0 END) as nb_exb,
SUM(CASE WHEN t_prestations.code = 'GHS' AND coefficient > 0 AND coefficient < 1 AND t_ghs.code NOT IN (9606,9616) THEN p_rsf_detail.base_remboursement ELSE 0 END) as ca_exb,
SUM(CASE WHEN t_prestations.code = 'GHS' AND coefficient > 0 AND coefficient < 1 AND t_ghs.code IN (9606,9616) THEN p_rsf_detail.nombre ELSE 0 END) as nb_ghsmin,
SUM(CASE WHEN t_prestations.code = 'GHS' THEN p_rsf_detail.nombre ELSE 0 END) as nb_ghs,
SUM(CASE WHEN t_prestations.code = 'GHS' THEN p_rsf_detail.base_remboursement ELSE 0 END) as ca_ghs,
SUM(CASE WHEN t_prestations.section_code[9] LIKE 'S13%' THEN p_rsf_detail.base_remboursement ELSE 0 END) as forfait_facture
FROM pmsi.p_rsf_detail
JOIN pmsi.t_prestations ON p_rsf_detail.prestation_id = t_prestations.oid JOIN pmsi.t_ghs ON t_ghs.oid = p_rsf_detail.ghs_id
WHERE p_rsf_detail.type = 'B' AND p_rsf_detail.est_ligne_rss = '1' AND p_rsf_detail.rss_id IN (SELECT rss_id FROM w_cp_non_valorises)
GROUP BY rss_id) subview ON p_rss.oid = subview.rss_id
WHERE p_rsf_total.rss_id = p_rss.oid AND p_rsf_total.rss_id IN (SELECT rss_id FROM w_cp_non_valorises);
UPDATE pmsi.p_rss
SET base_remboursement = p_rsf_total.base_remboursement,
sejour_facture = p_rsf_total.sejour_facture,
honoraires_factures = p_rsf_total.honoraires_factures,
t2a_facture = p_rsf_total.t2a_facture,
dmi_facture = p_rsf_total.dmi_facture,
phc_facture = p_rsf_total.phc_facture,
ca_ghs_theorique = p_rsf_total.ca_ghs_theorique,
nb_ghs = p_rsf_total.nb_ghs,
ca_ghs = p_rsf_total.ca_ghs,
nb_exb = p_rsf_total.nb_exb,
ca_exb = p_rsf_total.ca_exb,
nb_exh = p_rsf_total.nb_exh,
ca_exh = p_rsf_total.ca_exh,
nb_ghsmin = p_rsf_total.nb_ghsmin,
forfait_facture = p_rsf_total.forfait_facture
FROM pmsi.p_rsf_total
WHERE p_rss.oid = p_rsf_total.rss_id AND
p_rss.oid IN (SELECT rss_id FROM w_cp_non_valorises);
END IF;
RAISE NOTICE '%' , 'Cumuls CTI. Sejours T2A';
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cp_cti_sejt2a') THEN
DROP TABLE IF EXISTS w_cp_cti_sejt2a;
CREATE TEMP TABLE w_cp_cti_sejt2a (
import_id bigint,
mat2a_import_id bigint,
cti_transmis numeric,
cti_transmis_2 numeric,
cti_cmd_90 numeric,
cti_non_am numeric,
cti_non_am_2 numeric,
cti_valorises numeric,
cti_valorises_2 numeric,
cti_inter_etablissement numeric,
cti_inter_etablissement_nv numeric,
cti_ghs_9999 numeric,
cti_ivg numeric,
cti_rsa_seances numeric,
cti_seances numeric,
cti_ds_0 numeric
);
END IF;
TRUNCATE w_cp_cti_sejt2a;
/*
Modifs de CLA le 06-11-2015 :
. Visiblement, pour les GHM de préparation aux irradiations (24Z04Z,28Z08Z,28Z09Z,28Z19Z,28Z20Z,28Z21Z,28Z22Z),
OVALIDE ne compte qu'une séance par RSS même si nb_seances > 1
. Pour le décompte des séjours 0 nuit, il faut exclure les séjours de la CMD 90
Modif CLA le 18-03-2016 :
. Visiblement, depuis mars 2015, le décompte des prestations inter-établissements ne concerne pas que les séjours non traités.
A partir de cette date, on compte les PIE à partir des séjours ME=0 et MS=0, peu importe leurs traitements ePMSI
*/
INSERT INTO w_cp_cti_sejt2a
SELECT p_rss.import_id, mat2a_import_id,
count(*) AS cti_transmis,
SUM(CASE WHEN t_ghm_c.cmd_code <> '28' THEN 1 ELSE nb_seances END) AS cti_transmis_2,
SUM(CASE WHEN t_ghm_c.cmd_code = '90' THEN 1 ELSE 0 END) AS cti_cmd_90,
count(CASE WHEN traitement_epmsi IN ('24','31') THEN p_rss.oid ELSE NULL END) AS cti_non_am,
SUM(CASE WHEN traitement_epmsi IN ('24','31') THEN CASE WHEN t_ghm_c.cmd_code <> '28' THEN 1 ELSE nb_seances END ELSE 0 END) AS cti_non_am,
count(CASE WHEN traitement_epmsi = '30' THEN p_rss.oid ELSE NULL END) AS cti_valorises,
SUM(CASE WHEN traitement_epmsi = '30' THEN CASE WHEN t_ghm_c.cmd_code <> '28' THEN 1 ELSE nb_seances END ELSE NULL END) AS cti_valorises_2,
count(CASE WHEN (p_rss.date_sortie >= '20150301' OR traitement_epmsi = '12') AND traitement_epmsi <> '31' AND (mode_entree = '0' AND mode_sortie = '0') THEN p_rss.oid ELSE NULL END) AS cti_inter_etablissement,
count(CASE WHEN traitement_epmsi = '12' THEN p_rss.oid ELSE NULL END) AS cti_inter_etablissement_nv,
count(CASE WHEN traitement_epmsi IN ('13','32') OR (t_ghm_c.code LIKE ANY (ARRAY['14Z08Z', '09Z02%']::text[]) AND traitement_epmsi = '26') THEN p_rss.oid ELSE NULL END) AS cti_ghs_9999,
count(CASE WHEN t_ghm_c.code IN ('14Z08Z') THEN p_rss.oid ELSE NULL END) AS cti_ivg,
SUM(CASE WHEN t_ghm_c.cmd_code = '28' THEN 1 ELSE 0 END) AS cti_rsa_seances,
SUM(CASE WHEN t_ghm_c.code IN ('24Z04Z','28Z08Z','28Z09Z','28Z19Z','28Z20Z','28Z21Z','28Z22Z') THEN 1 WHEN t_ghm_c.cmd_code = '28' THEN nb_seances ELSE 0 END) AS cti_seances,
SUM(CASE WHEN t_ghm_c.cmd_code NOT IN ('28', '90') AND duree_sejour = 0 THEN 1 ELSE 0 END) AS cti_ds_0
FROM pmsi.p_rss
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
JOIN pmsi.t_ghm_c ON ghm_id = t_ghm_c.oid
WHERE en_cours = '0' AND
ghm_id <> 0
GROUP BY 1,2;
-- 2014
UPDATE pmsi.p_mat2a_data SET
data_cti[2] =
CASE
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours transmis%' THEN cti_transmis_2
WHEN file_code = 'T1D2RTP' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Nb de RSA transmis%' THEN cti_transmis
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%séjours en CM 90%' THEN cti_cmd_90
WHEN file_code = 'T1D2RTP' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Nb de RSA en CMD 90%' THEN cti_cmd_90
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours en prestation inter-établissement%' THEN cti_inter_etablissement_nv
WHEN file_code = 'T1D2RTP' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Nb de RSA prestation inter-établissement%' THEN cti_inter_etablissement_nv
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours en GHS 9999%' THEN cti_ghs_9999
WHEN file_code = 'T1D2RTP' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Nb de RSA en GHS 9999%' THEN cti_ghs_9999
WHEN file_code = 'T1D2RTP' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Nb de RSA séances%' THEN cti_rsa_seances
WHEN file_code = 'T1D2RTP' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Nb de séances%' THEN cti_seances
WHEN file_code = 'T1D2RTP' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Nb de RSA DS=0%' THEN cti_ds_0
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours non facturable à l''AM hors PO%' THEN cti_non_am_2
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours valorisés%' THEN cti_valorises_2
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours d''IVG%' THEN cti_ivg
ELSE NULL END
FROM w_cp_cti_sejt2a
WHERE w_cp_cti_sejt2a.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
(file_code = 'T1V5SYNTS' AND table_sequence = 1 OR
file_code = 'T1D2RTP' AND table_sequence = 1
) AND
line_type = 'D';
-- 2012
UPDATE pmsi.p_mat2a_data SET
data_cti[2] =
CASE
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours transmis%' THEN cti_transmis_2
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%séjours en CM 90%' THEN cti_cmd_90
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours en prestation inter-établissement%' THEN cti_inter_etablissement_nv
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours en GHS 9999%' THEN cti_ghs_9999
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours non facturable à l''AM hors PO%' THEN cti_non_am_2
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours valorisés%' THEN cti_valorises_2
WHEN file_code = 'T1V5SYNTS' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Séjours d''IVG%' THEN cti_ivg
ELSE NULL END
FROM w_cp_cti_sejt2a
WHERE w_cp_cti_sejt2a.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V5SYNTS' AND table_sequence = 1 AND
line_type = 'D';
RAISE NOTICE '%' , 'Cumuls CTI. GHS Minoré';
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cp_ghsminor') THEN
DROP TABLE IF EXISTS w_cp_ghsminor;
CREATE TEMP TABLE w_cp_ghsminor (
import_id bigint,
mat2a_import_id bigint,
ghm_id bigint,
ghs_id bigint,
date_sortie date,
taux_remboursement numeric,
nb_ghs_minore numeric
);
END IF;
-- A partir de mars 2015, pour les couples GHS-GHM 9606-28Z07Z et 9616-28Z17Z, si un UCD a été facturé en SUS, une minoration de 40¤ s'applique au GHS
-- modif CLA 25-05-2016, on ne conserve que les séjours Valorisés (hors valo AME)
-- La minoration forfaitaire est annulée à partir du M01 2018
TRUNCATE w_cp_ghsminor;
INSERT INTO w_cp_ghsminor
SELECT
w_cp_imports.import_id,
w_cp_imports.mat2a_import_id,
p_rss.ghm_id,
p_rss.ghs_id,
p_rss.date_sortie,
p_rsf_total.taux_remboursement,
count(distinct CASE WHEN p_rss.mois_sortie >= 201503 AND p_rss_ucd.rss_id is distinct from null THEN p_rss.no_rss ELSE null END) as nb_ghs_minore
FROM pmsi.p_rss
JOIN pmsi.p_rsf_total on p_rsf_total.rss_id = p_rss.oid
JOIN pmsi.t_ghs ON t_ghs.oid = p_rss.ghs_id
JOIN pmsi.t_ghm ON t_ghm.oid = p_rss.ghm_id
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
LEFT JOIN pmsi.p_rss_ucd ON p_rss_ucd.rss_id = p_rss.oid
WHERE 1=1
AND ((t_ghs.code = 9606 AND t_ghm.code = '28Z07Z') OR (t_ghs.code = 9616 AND t_ghm.code = '28Z17Z'))
AND p_rss.en_cours = '0'
AND p_rss.mois_sortie < 201801
AND p_rss.ghm_id <> 0
-- AND p_rss.traitement_epmsi IN ('30','31','32')
AND p_rss.traitement_epmsi = '30'
GROUP BY 1,2,3,4,5,6;
RAISE NOTICE '%' , 'Cumuls CTI. Facturation T2A';
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cp_cti_fact2a') THEN
DROP TABLE IF EXISTS w_cp_cti_fact2a;
CREATE TEMP TABLE w_cp_cti_fact2a (
import_id bigint,
mat2a_import_id bigint,
ghm_id bigint,
ghm_code text,
ghs_id bigint,
ghs_code text,
date_sortie date,
prestation_code text,
pec_amo_ame text,
cti_nb_ghs_minore numeric,
taux_remboursement numeric,
traitement_epmsi text,
cti_nombre numeric,
cti_base_remboursement numeric,
cti_base_remboursement_sauf_transition numeric,
cti_montant_remboursable numeric
);
END IF;
TRUNCATE w_cp_cti_fact2a;
INSERT INTO w_cp_cti_fact2a
SELECT p_rss.import_id,
mat2a_import_id,
p_rss.ghm_id AS ghm_id,
''::text AS ghm_code,
p_rss.ghs_id,
'0'::text AS ghs_code,
p_rss.date_sortie,
t_prestations.code AS prestation_code,
CASE WHEN traitement_epmsi NOT IN ('31','32','33') THEN 'AMO'
WHEN traitement_epmsi IN ('31') THEN 'AME'
WHEN traitement_epmsi IN ('32') THEN 'IVG'
WHEN traitement_epmsi IN ('33') THEN 'SU'
ELSE '' END AS pec_amo_ame,
0::numeric as cti_nb_ghs_minore,
p_rsf_detail.taux_remboursement,
p_rss.traitement_epmsi,
SUM(CASE
WHEN t_prestations.code = 'GHS' THEN 0
ELSE round(p_rsf_detail.nombre * p_rsf_detail.coefficient, 2) END) AS cti_nombre,
SUM(CASE
WHEN t_prestations.code = 'GHS' AND (nb_exb > 0 OR nb_ghsmin > 0) THEN round(p_rsf_detail.prix_unitaire * p_rsf_detail.nombre * p_rsf_detail.coefficient_mco, 2)
ELSE p_rsf_detail.base_remboursement END) AS cti_base_remboursement,
SUM(CASE
WHEN t_prestations.code = 'GHS' AND (nb_exb > 0 OR nb_ghsmin > 0) THEN round(base.Cti_division(p_rsf_detail.base_remboursement_sauf_transition , p_rsf_detail.coefficient), 2)
ELSE p_rsf_detail.base_remboursement_sauf_transition END) AS cti_base_remboursement_sauf_transition,
SUM(CASE
WHEN t_prestations.code = 'GHS' AND (nb_exb > 0 OR nb_ghsmin > 0) AND p_rsf_detail.taux_remboursement <> 100 THEN round(p_rsf_detail.prix_unitaire * p_rsf_detail.nombre * p_rsf_detail.coefficient_mco * p_rsf_detail.taux_remboursement / 100, 2)
WHEN t_prestations.code = 'GHS' AND (nb_exb > 0 OR nb_ghsmin > 0) AND p_rsf_detail.taux_remboursement = 100 THEN round(p_rsf_detail.prix_unitaire * p_rsf_detail.nombre * p_rsf_detail.coefficient_mco, 2) - p_rsf_detail.base_remboursement + p_rsf_detail.sejour_remboursable
ELSE p_rsf_detail.sejour_remboursable END) AS cti_montant_remboursable
FROM pmsi.p_rss
JOIN pmsi.p_rsf_detail ON p_rsf_detail.rss_id = p_rss.oid
JOIN pmsi.t_prestations ON prestation_id = t_prestations.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
JOIN base.t_finess ON p_rss.finess = t_finess.code
WHERE en_cours = '0' AND
ghm_id <> 0 AND
(
traitement_epmsi IN ('30','31','32','33') OR
t_prestations.code LIKE 'TDE%' OR
t_prestations.code LIKE 'TSE%'
) AND
est_ligne_rss = '1'
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12;
INSERT INTO w_cp_cti_fact2a
SELECT p_rss.import_id,
mat2a_import_id,
p_rss.ghm_id AS ghm_id,
''::text AS ghm_code,
p_rss.ghs_id,
'0'::text AS ghs_code,
p_rss.date_sortie,
CASE WHEN rehosp_meme_ghm = '0' THEN 'EXB' ELSE 'EXBR' END AS prestation_code,
CASE WHEN traitement_epmsi NOT IN ('31') THEN 'AMO' ELSE 'AME' END AS pec_amo_ame,
0::numeric as cti_nb_ghs_minore,
p_rsf_detail.taux_remboursement,
p_rss.traitement_epmsi,
0 AS cti_nombre,
SUM(p_rsf_detail.base_remboursement- round(p_rsf_detail.prix_unitaire * p_rsf_detail.nombre * p_rsf_detail.coefficient_mco, 2) ) AS cti_base_remboursement,
SUM(CASE
WHEN t_prestations.code = 'GHS' AND (nb_exb > 0 OR nb_ghsmin > 0) THEN p_rsf_detail.base_remboursement_sauf_transition-round(base.Cti_division(p_rsf_detail.base_remboursement_sauf_transition , p_rsf_detail.coefficient), 2)
ELSE p_rsf_detail.base_remboursement_sauf_transition END) AS cti_base_remboursement_sauf_transition,
SUM(p_rsf_detail.sejour_remboursable - CASE
WHEN t_prestations.code = 'GHS' AND nb_exb > 0 AND p_rsf_detail.taux_remboursement <> 100 THEN round(p_rsf_detail.prix_unitaire * p_rsf_detail.nombre * p_rsf_detail.coefficient_mco * p_rsf_detail.taux_remboursement / 100, 2)
WHEN t_prestations.code = 'GHS' AND nb_exb > 0 AND p_rsf_detail.taux_remboursement = 100 THEN round(p_rsf_detail.prix_unitaire * p_rsf_detail.nombre * p_rsf_detail.coefficient_mco, 2) - p_rsf_detail.base_remboursement + p_rsf_detail.sejour_remboursable
ELSE 0 END) AS cti_montant_remboursable
FROM pmsi.p_rss
JOIN pmsi.p_rsf_detail ON p_rsf_detail.rss_id = p_rss.oid
JOIN pmsi.t_prestations ON prestation_id = t_prestations.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
JOIN base.t_finess ON p_rss.finess = t_finess.code
WHERE en_cours = '0' AND
ghm_id <> 0 AND
traitement_epmsi IN ('30','31') AND
est_ligne_rss = '1' AND
t_prestations.code = 'GHS' AND
nb_exb > 0
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12;
UPDATE w_cp_cti_fact2a
SET ghm_code = t_ghm.code
FROM pmsi.t_ghm
WHERE ghm_id = t_ghm.oid;
UPDATE w_cp_cti_fact2a
SET ghs_code = CASE WHEN t_ghs.code::text = '9618' THEN 'D11'::text WHEN t_ghs.code::text = '9604' THEN 'D24'::text ELSE t_ghs.code::text END
FROM pmsi.t_ghs
WHERE ghs_id = t_ghs.oid;
UPDATE w_cp_cti_fact2a
SET cti_nb_ghs_minore = w_cp_ghsminor.nb_ghs_minore
FROM w_cp_ghsminor
WHERE 1=1
AND w_cp_ghsminor.import_id = w_cp_cti_fact2a.import_id
AND w_cp_ghsminor.mat2a_import_id = w_cp_cti_fact2a.mat2a_import_id
AND w_cp_ghsminor.ghm_id = w_cp_cti_fact2a.ghm_id
AND w_cp_ghsminor.ghs_id = w_cp_cti_fact2a.ghs_id
AND w_cp_ghsminor.date_sortie = w_cp_cti_fact2a.date_sortie
AND w_cp_ghsminor.taux_remboursement = w_cp_cti_fact2a.taux_remboursement
AND w_cp_ghsminor.nb_ghs_minore > 0;
--drop table if exists temp.w_cp_cti_fact2a; CREATE Table temp.w_cp_cti_fact2a as select * from w_cp_cti_fact2a;
-- 2014 Tableau T1V1RAV (lignes et total)
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = '0',
data_cti[5] = '0',
data_cti[6] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V1RAV' AND
table_sequence = 1 AND
line_type IN ('D', 'F') AND
(
data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
data_mat2a[1] ILIKE '%Valorisation extrême bas%' OR
data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%' OR
data_mat2a[1] ILIKE '%Valorisation séjours avec minoration forfaitaire liste en sus%' OR
data_mat2a[1] ILIKE '%Valorisation journées extrême haut%' OR
data_mat2a[1] ILIKE '%Valorisation actes GHS 9615 en Hospit%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments radiothérapie pédiatrique%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
data_mat2a[1] ILIKE '%Valorisation des actes de caissons hyperbares en sus%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments antepartum%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de néonat sans SI%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de néonat avec SI%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de réanimation néonat%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de surveillance continue validés%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de soins intensifs validés%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de réanimation%' AND data_mat2a[1] NOT ILIKE '%néonat%'OR
data_mat2a[1] ILIKE '%Valorisation actes RDTH en Hospit%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de réa pédiatrique%' OR
data_mat2a[1] ILIKE '%Valorisation prélévements d''organe%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments pour pose de défibrillateur%' OR
data_mat2a[1] ILIKE '%Total valorisation%'
);
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = cti_base_remboursement_sauf_transition,
data_cti[5] = cti_base_remboursement,
data_cti[6] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_base_remboursement_sauf_transition) AS cti_base_remboursement_sauf_transition,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE pec_amo_ame ='AMO' AND
file_code = 'T1V1RAV' AND table_sequence = 1 AND
(w_cp_cti_fact2a.prestation_code IN ('GHS','EXB','EXBR','EXH','ANT','APHE','NN1','NN2','NN3','RAP','SRC','LIM_SRC','STF','REA','DIP','D09','D17','D18','D19','OHB','REP','SDC') OR
w_cp_cti_fact2a.prestation_code LIKE 'IRRE%' OR
w_cp_cti_fact2a.prestation_code LIKE 'PO%') AND
(
w_cp_cti_fact2a.prestation_code = 'GHS' AND data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
w_cp_cti_fact2a.prestation_code = 'EXB' AND data_mat2a[1] ILIKE '%Valorisation extrême bas%' OR
w_cp_cti_fact2a.prestation_code = 'EXBR' AND data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%' OR
w_cp_cti_fact2a.prestation_code = 'EXH' AND data_mat2a[1] ILIKE '%Valorisation journées extrême haut%' OR
w_cp_cti_fact2a.prestation_code = 'DIP' AND data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
w_cp_cti_fact2a.prestation_code = 'D09' AND data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
w_cp_cti_fact2a.prestation_code = 'D17' AND data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
w_cp_cti_fact2a.prestation_code = 'D18' AND data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
w_cp_cti_fact2a.prestation_code = 'D19' AND data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
w_cp_cti_fact2a.prestation_code = 'OHB' AND data_mat2a[1] ILIKE '%Valorisation des actes de caissons hyperbares en sus%' OR
w_cp_cti_fact2a.prestation_code = 'ANT' AND data_mat2a[1] ILIKE '%Valorisation suppléments antepartum%' OR
w_cp_cti_fact2a.prestation_code = 'APHE' AND data_mat2a[1] ILIKE '%Valorisation actes GHS 9615 en Hospit%' OR
w_cp_cti_fact2a.prestation_code = 'NN1' AND data_mat2a[1] ILIKE '%Valorisation suppléments de néonat sans SI%' OR
w_cp_cti_fact2a.prestation_code = 'NN2' AND data_mat2a[1] ILIKE '%Valorisation suppléments de néonat avec SI%' OR
w_cp_cti_fact2a.prestation_code = 'NN3' AND data_mat2a[1] ILIKE '%Valorisation suppléments de réanimation néonat%' OR
w_cp_cti_fact2a.prestation_code = 'RAP' AND data_mat2a[1] ILIKE '%Valorisation suppléments radiothérapie pédiatrique%' OR
w_cp_cti_fact2a.prestation_code IN ('SRC', 'LIM_SRC') AND data_mat2a[1] ILIKE '%Valorisation suppléments de surveillance continue validés%' OR
w_cp_cti_fact2a.prestation_code = 'STF' AND data_mat2a[1] ILIKE '%Valorisation suppléments de soins intensifs validés%' OR
w_cp_cti_fact2a.prestation_code = 'REP' AND data_mat2a[1] ILIKE '%Valorisation suppléments de réa pédiatrique%' OR
w_cp_cti_fact2a.prestation_code = 'REA' AND data_mat2a[1] ILIKE '%Valorisation suppléments de réanimation%' AND data_mat2a[1] NOT ILIKE '%néonat%'OR
w_cp_cti_fact2a.prestation_code LIKE 'IRRE%' AND data_mat2a[1] ILIKE '%Valorisation actes RDTH en Hospit%' OR
w_cp_cti_fact2a.prestation_code LIKE 'PO%' AND data_mat2a[1] ILIKE '%Valorisation prélévements d''organe%' OR
w_cp_cti_fact2a.prestation_code = 'SDC' AND data_mat2a[1] ILIKE '%Valorisation suppléments pour pose de défibrillateur%' OR
data_mat2a[1] ILIKE '%Total valorisation%'
)
GROUP BY 1) subview
WHERE file_code = 'T1V1RAV' AND p_mat2a_data.oid = subview.oid;
-- Ajustement EXB (base remboursement entre EXB et GHS si somme identique)
UPDATE pmsi.p_mat2a_data
SET data_cti[4] =
CASE
WHEN data_mat2a[1] ILIKE '%Valorisation des GHS%' THEN base.cti_to_number(data_mat2a[4]) - ecart_base_remboursement_sauf_transition
WHEN data_mat2a[1] ILIKE '%Valorisation extrême bas%' THEN base.cti_to_number(data_mat2a[4])
WHEN data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%' THEN base.cti_to_number(data_mat2a[4])
ELSE base.cti_to_number(data_cti[4]) END,
data_cti[5] =
CASE
WHEN data_mat2a[1] ILIKE '%Valorisation des GHS%' THEN base.cti_to_number(data_mat2a[5]) - ecart_base_remboursement
WHEN data_mat2a[1] ILIKE '%Valorisation extrême bas%' THEN base.cti_to_number(data_mat2a[5])
WHEN data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%' THEN base.cti_to_number(data_mat2a[5])
ELSE base.cti_to_number(data_cti[5]) END
FROM (
SELECT
p_mat2a_data.mat2a_import_id,
SUM(base.cti_to_number(data_mat2a[4])) AS mat2a_base_remboursement_sauf_transition,
SUM(base.cti_to_number(data_cti[4])) AS cti_base_remboursement_sauf_transition,
SUM(base.cti_to_number(data_mat2a[4])) - SUM(base.cti_to_number(data_cti[4])) AS ecart_base_remboursement_sauf_transition,
SUM(base.cti_to_number(data_mat2a[5])) AS mat2a_base_remboursement,
SUM(base.cti_to_number(data_cti[5])) AS cti_base_remboursement,
SUM(base.cti_to_number(data_mat2a[5])) - SUM(base.cti_to_number(data_cti[5])) AS ecart_base_remboursement
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T1V1RAV' AND
(data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
data_mat2a[1] ILIKE '%Valorisation extrême bas%' OR
data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%')
GROUP BY 1
HAVING ABS(SUM(base.cti_to_number(data_mat2a[4])) - SUM(base.cti_to_number(data_cti[4]))) < 0.05 AND
ABS(SUM(base.cti_to_number(data_mat2a[5])) - SUM(base.cti_to_number(data_cti[5]))) < 0.05
) subview
WHERE subview.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V1RAV' AND
(data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
data_mat2a[1] ILIKE '%Valorisation extrême bas%' OR
data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%');
-- Ajustement EXB (ventilation remboursement entre EXB et GHS si somme identique)
UPDATE pmsi.p_mat2a_data
SET data_cti[6] =
CASE
WHEN data_mat2a[1] ILIKE '%Valorisation des GHS%' THEN base.cti_to_number(data_mat2a[6]) - ecart
WHEN data_mat2a[1] ILIKE '%Valorisation extrême bas%' THEN base.cti_to_number(data_mat2a[6])
WHEN data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%' THEN base.cti_to_number(data_mat2a[6])
ELSE base.cti_to_number(data_cti[6]) END
FROM (
SELECT
p_mat2a_data.mat2a_import_id,
SUM(base.cti_to_number(data_mat2a[6])) AS mat2a_remb,
SUM(base.cti_to_number(data_cti[6])) AS cti_remb,
SUM(base.cti_to_number(data_mat2a[6])) - SUM(base.cti_to_number(data_cti[6])) AS ecart
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T1V1RAV' AND
(data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
data_mat2a[1] ILIKE '%Valorisation extrême bas%' OR
data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%')
GROUP BY 1
HAVING ABS(SUM(base.cti_to_number(data_mat2a[4])) - SUM(base.cti_to_number(data_cti[4]))) < 0.05 AND
ABS(SUM(base.cti_to_number(data_mat2a[5])) - SUM(base.cti_to_number(data_cti[5]))) < 0.05 AND
ABS(SUM(base.cti_to_number(data_mat2a[6])) - SUM(base.cti_to_number(data_cti[6]))) < 1
) subview
WHERE subview.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V1RAV' AND
(data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
data_mat2a[1] ILIKE '%Valorisation extrême bas%' OR
data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%');
-- 2015 Minoration forfaire GHS liste en SUS
WITH w_sub as (
SELECT
p_mat2a_data.oid,
w_cp_imports.mat2a_annee,
extract('month' from w_cp_cti_fact2a.date_sortie) as mois_sortie,
SUM(cti_nb_ghs_minore) * -40 AS cti_base_remboursement_sauf_transition,
SUM(cti_nb_ghs_minore) * -40 * CASE WHEN w_cp_imports.mat2a_annee * 100 + extract('month' from w_cp_cti_fact2a.date_sortie) >= 201603 THEN 0.9950 ELSE 0.9965 END AS cti_base_remboursement,
SUM(cti_nb_ghs_minore * base.cti_division(taux_remboursement, 100)) * -40 * CASE WHEN w_cp_imports.mat2a_annee * 100 + extract('month' from w_cp_cti_fact2a.date_sortie) >= 201603 THEN 0.9950 ELSE 0.9965 END AS cti_montant_remboursable
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE 1=1 AND
w_cp_imports.mat2a_annee >= 2015 AND
w_cp_imports.mat2a_annee < 2018 AND
pec_amo_ame ='AMO' AND
file_code = 'T1V1RAV' AND table_sequence = 1 AND
w_cp_cti_fact2a.prestation_code = 'GHS' AND
w_cp_cti_fact2a.cti_nb_ghs_minore >= 1 AND
(
data_mat2a[1] ILIKE '%Valorisation séjours avec minoration forfaitaire liste en sus%' OR
data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
data_mat2a[1] ILIKE '%Total valorisation%'
)
GROUP BY p_mat2a_data.oid, w_cp_imports.mat2a_annee, extract('month' from w_cp_cti_fact2a.date_sortie)
)
UPDATE pmsi.p_mat2a_data SET
data_cti[4] =
CASE
WHEN data_mat2a[1] ILIKE '%Valorisation séjours avec minoration forfaitaire liste en sus%' THEN subview.cti_base_remboursement_sauf_transition
--WHEN data_mat2a[1] ILIKE '%Valorisation des GHS%' THEN base.cti_to_number(data_cti[4]) + subview.cti_base_remboursement_sauf_transition
WHEN mat2a_annee < 2018 AND data_mat2a[1] ILIKE '%Total valorisation%' THEN base.cti_to_number(data_cti[4]) + cti_base_remboursement_sauf_transition
ELSE base.cti_to_number(data_cti[4])
--WHEN data_mat2a[1] ILIKE '%Total valorisation%' THEN base.cti_to_number(data_cti[4]) + cti_base_remboursement_sauf_transition
END,
data_cti[5] =
CASE
WHEN data_mat2a[1] ILIKE '%Valorisation séjours avec minoration forfaitaire liste en sus%' THEN subview.cti_base_remboursement
--WHEN data_mat2a[1] ILIKE '%Valorisation des GHS%' THEN base.cti_to_number(data_cti[5]) + subview.cti_base_remboursement
WHEN mat2a_annee < 2018 AND data_mat2a[1] ILIKE '%Total valorisation%' THEN base.cti_to_number(data_cti[5]) + subview.cti_base_remboursement
ELSE base.cti_to_number(data_cti[5])
--WHEN data_mat2a[1] ILIKE '%Total valorisation%' THEN base.cti_to_number(data_cti[5]) + cti_base_remboursement
--ELSE cti_base_remboursement
END,
data_cti[6] =
CASE
WHEN data_mat2a[1] ILIKE '%Valorisation séjours avec minoration forfaitaire liste en sus%' THEN subview.cti_montant_remboursable
WHEN data_mat2a[1] ILIKE '%Valorisation des GHS%' THEN base.cti_to_number(data_cti[6]) + subview.cti_montant_remboursable
WHEN mat2a_annee < 2018 AND data_mat2a[1] ILIKE '%Total valorisation%' THEN base.cti_to_number(data_cti[6]) + subview.cti_montant_remboursable
ELSE base.cti_to_number(data_cti[6])
--WHEN data_mat2a[1] ILIKE '%Total valorisation%' THEN base.cti_to_number(data_cti[6]) + cti_montant_remboursable
--ELSE cti_montant_remboursable
END
FROM (
SELECT
w_sub.oid,
w_sub.mat2a_annee,
SUM(w_sub.cti_base_remboursement_sauf_transition) as cti_base_remboursement_sauf_transition,
SUM(w_sub.cti_base_remboursement) as cti_base_remboursement,
SUM(w_sub.cti_montant_remboursable) as cti_montant_remboursable
FROM w_sub
GROUP BY
w_sub.oid,
w_sub.mat2a_annee
) subview
WHERE p_mat2a_data.file_code = 'T1V1RAV' AND p_mat2a_data.oid = subview.oid;
-- Nouvelle colonne GHS UCD en 2021
-- 2021 Tableau T1V1CMV (lignes et total)
UPDATE pmsi.p_mat2a_data SET
data_cti = null
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
w_cp_imports.mat2a_annee >= 2021 AND
file_code = 'T1V1CMV' AND
table_sequence = 1 AND
line_type IN ('D', 'F')
;
UPDATE pmsi.p_mat2a_data SET
data_cti[7] = '0',
data_cti[8] = '0',
data_cti[10] = '0',
data_cti[11] = '0',
data_cti[12] = '0',
data_cti[13] = '0',
data_cti[14] = '0',
data_cti[15] = '0',
data_cti[16] = '0',
data_cti[17] = '0',
data_cti[18] = '0',
data_cti[19] = '0',
data_cti[20] = '0',
data_cti[21] = '0',
data_cti[22] = '0',
data_cti[23] = '0',
data_cti[24] = '0',
data_cti[25] = '0',
data_cti[26] = '0',
data_cti[27] = '0',
data_cti[28] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
w_cp_imports.mat2a_annee >= 2021 AND
file_code = 'T1V1CMV' AND
table_sequence = 1 AND
line_type IN ('D', 'F');
UPDATE pmsi.p_mat2a_data SET
data_cti[7] = cti_base_remboursement_ghs - CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_ghsminor ELSE 0 END,
data_cti[8] = cti_base_remboursement_exb,
data_cti[10] = cti_base_remboursement_exbr,
data_cti[11] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_ghsminor ELSE cti_base_remboursement_exh END,
data_cti[12] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_exh ELSE null END,
data_cti[13] = CASE WHEN subview.mat2a_annee < 2018 THEN null ELSE cti_base_remboursement_irre END,
data_cti[14] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_irre ELSE cti_base_remboursement_rap END,
data_cti[15] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_rap ELSE cti_base_remboursement_ant END,
data_cti[16] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_ant ELSE cti_base_remboursement_rea END,
data_cti[17] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_rea ELSE cti_base_remboursement_rep END,
data_cti[18] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_rep ELSE cti_base_remboursement_stf END,
data_cti[19] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_stf ELSE cti_base_remboursement_src END,
data_cti[20] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_src ELSE cti_base_remboursement_dia END,
data_cti[21] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_dia ELSE cti_base_remboursement_nn1 END,
data_cti[22] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_nn1 ELSE cti_base_remboursement_nn2 END,
data_cti[23] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_nn2 ELSE cti_base_remboursement_nn3 END,
data_cti[24] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_nn3 ELSE cti_base_remboursement_po END,
data_cti[25] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_po ELSE cti_base_remboursement_ohb END,
data_cti[26] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_ohb ELSE cti_base_remboursement_aphe END,
data_cti[27] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_aphe ELSE cti_base_remboursement_sdc END,
data_cti[28] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_sdc ELSE null END
FROM (
SELECT p_mat2a_data.oid,
MAX(w_cp_imports.mat2a_annee) AS mat2a_annee,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'GHS' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_ghs,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXB' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_exb,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXBR' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_exbr,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'GHS' THEN cti_nb_ghs_minore ELSE NULL END) * -40 AS cti_base_remboursement_ghsminor,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXH' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_exh,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'ANT' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_ant,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code IN ('DIP', 'D09', 'D17', 'D18', 'D19') THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_dia,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'SRC' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_src,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'STF' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_stf,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'REA' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_rea,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'REP' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_rep,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'RAP' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_rap,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN1' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_nn1,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN2' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_nn2,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN3' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_nn3,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'OHB' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_ohb,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'SDC' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_sdc,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code LIKE 'IRRE%' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_irre,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code LIKE 'APHE%' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_aphe,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code IN ('PO1', 'PO2', 'PO3', 'PO4', 'PO5', 'PO6', 'PO7', 'PO8', 'PO9', 'POA') THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_po
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = w_cp_cti_fact2a.mat2a_import_id
WHERE pec_amo_ame ='AMO' AND
file_code = 'T1V1CMV' AND table_sequence = 1 AND
(w_cp_cti_fact2a.prestation_code IN ('GHS','EXB','EXBR','EXH','ANT','APHE','NN1','NN2','NN3','RAP','SRC','STF','REA','DIP','D09','D17','D18','D19','OHB','SDC') OR
w_cp_cti_fact2a.prestation_code LIKE 'IRRE%' OR
w_cp_cti_fact2a.prestation_code LIKE 'PO%') AND
(
line_type = 'D' AND data_mat2a[1] ILIKE ghs_code AND data_mat2a[3] ILIKE ghm_code || '%' OR
line_type = 'F'
) AND
w_cp_imports.mat2a_annee >= 2021
GROUP BY 1) subview
WHERE file_code = 'T1V1CMV' AND p_mat2a_data.oid = subview.oid;
-- 2015 Tableau T1V1CMV (lignes et total)
UPDATE pmsi.p_mat2a_data SET
data_cti[6] = '0',
data_cti[7] = '0',
data_cti[9] = '0',
data_cti[10] = '0',
data_cti[11] = '0',
data_cti[13] = '0',
data_cti[14] = '0',
data_cti[15] = '0',
data_cti[16] = '0',
data_cti[17] = '0',
data_cti[18] = '0',
data_cti[19] = '0',
data_cti[20] = '0',
data_cti[21] = '0',
data_cti[22] = '0',
data_cti[23] = '0',
data_cti[24] = '0',
data_cti[25] = '0',
data_cti[26] = '0',
data_cti[27] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
w_cp_imports.mat2a_annee BETWEEN 2015 AND 2020 AND
file_code = 'T1V1CMV' AND
table_sequence = 1 AND
line_type IN ('D', 'F');
/*
le montant GHS du tableau OVALIDE (data_mat2a[6]) ne comprend pas la minoration forfaitaire,
il faut donc la rajouter au montant GHS CTI (data_cti[6]) qui en tient déjà compte
Attention, à partir de M01 2018, la minoration forfaitaire n'apparait plus dans le tableau
*/
UPDATE pmsi.p_mat2a_data SET
data_cti[6] = cti_base_remboursement_ghs - CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_ghsminor ELSE 0 END,
data_cti[7] = cti_base_remboursement_exb,
data_cti[9] = cti_base_remboursement_exbr,
data_cti[10] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_ghsminor ELSE cti_base_remboursement_exh END,
data_cti[11] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_exh ELSE null END,
data_cti[12] = CASE WHEN subview.mat2a_annee < 2018 THEN null ELSE cti_base_remboursement_irre END,
data_cti[13] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_irre ELSE cti_base_remboursement_rap END,
data_cti[14] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_rap ELSE cti_base_remboursement_ant END,
data_cti[15] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_ant ELSE cti_base_remboursement_rea END,
data_cti[16] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_rea ELSE cti_base_remboursement_rep END,
data_cti[17] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_rep ELSE cti_base_remboursement_stf END,
data_cti[18] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_stf ELSE cti_base_remboursement_src END,
data_cti[19] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_src ELSE cti_base_remboursement_dia END,
data_cti[20] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_dia ELSE cti_base_remboursement_nn1 END,
data_cti[21] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_nn1 ELSE cti_base_remboursement_nn2 END,
data_cti[22] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_nn2 ELSE cti_base_remboursement_nn3 END,
data_cti[23] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_nn3 ELSE cti_base_remboursement_po END,
data_cti[24] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_po ELSE cti_base_remboursement_ohb END,
data_cti[25] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_ohb ELSE cti_base_remboursement_aphe END,
data_cti[26] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_aphe ELSE cti_base_remboursement_sdc END,
data_cti[27] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_base_remboursement_sdc ELSE null END
FROM (
SELECT p_mat2a_data.oid,
MAX(w_cp_imports.mat2a_annee) AS mat2a_annee,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'GHS' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_ghs,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXB' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_exb,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXBR' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_exbr,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'GHS' THEN cti_nb_ghs_minore ELSE NULL END) * -40 AS cti_base_remboursement_ghsminor,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXH' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_exh,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'ANT' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_ant,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code IN ('DIP', 'D09', 'D17', 'D18', 'D19') THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_dia,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'SRC' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_src,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'STF' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_stf,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'REA' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_rea,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'REP' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_rep,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'RAP' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_rap,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN1' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_nn1,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN2' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_nn2,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN3' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_nn3,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'OHB' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_ohb,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'SDC' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_sdc,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code LIKE 'IRRE%' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_irre,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code LIKE 'APHE%' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_aphe,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code IN ('PO1', 'PO2', 'PO3', 'PO4', 'PO5', 'PO6', 'PO7', 'PO8', 'PO9', 'POA') THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_po
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = w_cp_cti_fact2a.mat2a_import_id
WHERE pec_amo_ame ='AMO' AND
file_code = 'T1V1CMV' AND table_sequence = 1 AND
(w_cp_cti_fact2a.prestation_code IN ('GHS','EXB','EXBR','EXH','ANT','APHE','NN1','NN2','NN3','RAP','SRC','STF','REA','DIP','D09','D17','D18','D19','OHB','SDC') OR
w_cp_cti_fact2a.prestation_code LIKE 'IRRE%' OR
w_cp_cti_fact2a.prestation_code LIKE 'PO%') AND
(
line_type = 'D' AND data_mat2a[1] ILIKE ghs_code AND data_mat2a[2] ILIKE ghm_code || '%' OR
line_type = 'F'
) AND
w_cp_imports.mat2a_annee BETWEEN 2015 AND 2020
GROUP BY 1) subview
WHERE file_code = 'T1V1CMV' AND p_mat2a_data.oid = subview.oid;
-- 2014 Tableau T1V1CMV (lignes et total)
UPDATE pmsi.p_mat2a_data SET
data_cti[6] = '0',
data_cti[7] = '0',
data_cti[9] = '0',
data_cti[10] = '0',
data_cti[12] = '0',
data_cti[13] = '0',
data_cti[14] = '0',
data_cti[15] = '0',
data_cti[16] = '0',
data_cti[17] = '0',
data_cti[18] = '0',
data_cti[19] = '0',
data_cti[20] = '0',
data_cti[21] = '0',
data_cti[22] = '0',
data_cti[23] = '0',
data_cti[24] = '0',
data_cti[25] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
w_cp_imports.mat2a_annee < 2015 AND
file_code = 'T1V1CMV' AND
table_sequence = 1 AND
line_type IN ('D', 'F');
UPDATE pmsi.p_mat2a_data SET
data_cti[6] = cti_base_remboursement_ghs,
data_cti[7] = cti_base_remboursement_exb,
data_cti[9] = cti_base_remboursement_exbr,
data_cti[10] = cti_base_remboursement_exh,
data_cti[12] = cti_base_remboursement_irre,
data_cti[13] = cti_base_remboursement_rap,
data_cti[14] = cti_base_remboursement_ant,
data_cti[15] = cti_base_remboursement_rea,
data_cti[16] = cti_base_remboursement_rep,
data_cti[17] = cti_base_remboursement_stf,
data_cti[18] = cti_base_remboursement_src,
data_cti[19] = cti_base_remboursement_dia,
data_cti[20] = cti_base_remboursement_nn1,
data_cti[21] = cti_base_remboursement_nn2,
data_cti[22] = cti_base_remboursement_nn3,
data_cti[23] = cti_base_remboursement_po,
data_cti[24] = cti_base_remboursement_ohb,
data_cti[25] = cti_base_remboursement_aphe
FROM (
SELECT p_mat2a_data.oid,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'GHS' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_ghs,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXB' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_exb,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXBR' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_exbr,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXH' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_exh,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'ANT' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_ant,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code IN ('DIP', 'D09', 'D17', 'D18', 'D19') THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_dia,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'SRC' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_src,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'STF' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_stf,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'REA' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_rea,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'REP' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_rep,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'RAP' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_rap,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN1' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_nn1,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN2' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_nn2,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN3' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_nn3,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'OHB' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_ohb,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code LIKE 'IRRE%' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_irre,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code LIKE 'APHE%' THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_aphe,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code IN ('PO1', 'PO2', 'PO3', 'PO4', 'PO5', 'PO6', 'PO7', 'PO8', 'PO9', 'POA') THEN cti_base_remboursement_sauf_transition ELSE 0 END) AS cti_base_remboursement_po
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = w_cp_cti_fact2a.mat2a_import_id
WHERE pec_amo_ame ='AMO' AND
file_code = 'T1V1CMV' AND table_sequence = 1 AND
(w_cp_cti_fact2a.prestation_code IN ('GHS','EXB','EXBR','EXH','ANT','APHE','NN1','NN2','NN3','RAP','SRC','STF','REA','DIP','D09','D17','D18','D19','OHB','SDC') OR
w_cp_cti_fact2a.prestation_code LIKE 'IRRE%' OR
w_cp_cti_fact2a.prestation_code LIKE 'PO%') AND
(
line_type = 'D' AND data_mat2a[1] ILIKE ghs_code AND data_mat2a[2] ILIKE ghm_code || '%' OR
line_type = 'F'
) AND
w_cp_imports.mat2a_annee < 2015
GROUP BY 1) subview
WHERE file_code = 'T1V1CMV' AND p_mat2a_data.oid = subview.oid;
-- Reventilation EXB
UPDATE pmsi.p_mat2a_data SET
data_cti[6] = base.cti_to_number(data_mat2a[6])
+ (base.cti_to_number(data_mat2a[6])
+ base.cti_to_number(data_mat2a[7])
+ base.cti_to_number(data_mat2a[9])
- base.cti_to_number(data_cti[6])
- base.cti_to_number(data_cti[7])
- base.cti_to_number(data_cti[9])),
data_cti[7] = data_mat2a[7],
data_cti[9] = data_mat2a[9]
FROM
w_cp_imports
WHERE
w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
w_cp_imports.mat2a_annee < 2015 AND
file_code = 'T1V1CMV' AND
table_sequence = 1 AND
line_type IN ('D', 'F') AND
ABS(base.cti_to_number(data_mat2a[6]) - base.cti_to_number(data_cti[6])) <= 0.05 AND
ABS(base.cti_to_number(data_mat2a[6]) + base.cti_to_number(data_mat2a[7]) + base.cti_to_number(data_mat2a[9])
- base.cti_to_number(data_cti[6])
- base.cti_to_number(data_cti[7])
- base.cti_to_number(data_cti[9])) <= 0.05 AND
(base.cti_to_number(data_cti[7]) <> base.cti_to_number(data_mat2a[7]) OR base.cti_to_number(data_cti[9]) <> base.cti_to_number(data_mat2a[9]));
-- Cas de séjours avec EXB ET GHS Minoré. Si total EXB+GHS minoré OK
UPDATE pmsi.p_mat2a_data SET
data_cti[8] = data_mat2a[8],
data_cti[10] = base.cti_to_number(data_cti[8]) + base.cti_to_number(data_cti[10]) - base.cti_to_number(data_mat2a[8])
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
w_cp_imports.mat2a_annee >= 2023 AND
file_code = 'T1V1CMV' AND
table_sequence = 1 AND
line_type IN ('D', 'F') AND
base.cti_to_number(data_mat2a[8]) <> 0 AND
base.cti_to_number(data_mat2a[10]) <> 0 AND
(
base.cti_to_number(data_mat2a[8]) <> base.cti_to_number(data_cti[8]) OR
base.cti_to_number(data_mat2a[10]) <> base.cti_to_number(data_cti[10])
) AND
ABS(
base.cti_to_number(data_mat2a[8]) + base.cti_to_number(data_mat2a[10]) -
base.cti_to_number(data_cti[8]) - base.cti_to_number(data_cti[10])
) < 1
;
-- Tableau T1V1CP (OQN)
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = 0
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V1CP' AND
table_sequence = 1 AND
(
line_type = 'D' OR
line_type = 'F' AND data_mat2a[1] ILIKE 'lib'
);
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = cti_base_remboursement
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_base_remboursement_sauf_transition) AS cti_base_remboursement
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE pec_amo_ame ='AMO' AND
file_code = 'T1V1CP' AND table_sequence = 1 AND
(
line_type = 'D' AND data_mat2a[1] ILIKE prestation_code OR
line_type = 'D' AND data_mat2a[1] LIKE 'GHS' AND prestation_code = 'EXB' OR
line_type = 'F' AND data_mat2a[1] ILIKE 'lib'
)
GROUP BY 1) subview
WHERE file_code = 'T1V1CP' AND p_mat2a_data.oid = subview.oid;
-- Tableau T1V1CMG (OQN : lignes et total)
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V1CMG' AND
table_sequence = 2 AND
line_type IN ('D', 'F');
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = cti_base_remboursement
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_base_remboursement_sauf_transition) AS cti_base_remboursement
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE pec_amo_ame ='AMO' AND
file_code = 'T1V1CMG' AND table_sequence = 2 AND
(
line_type = 'D' AND data_mat2a[1] ILIKE substr(ghm_code,1,5) || '%' OR
line_type = 'F'
)
GROUP BY 1) subview
WHERE file_code = 'T1V1CMG' AND p_mat2a_data.oid = subview.oid;
-- 2014 Tableau T1V4RAME (AME) (4 = synthèse)
UPDATE pmsi.p_mat2a_data SET
data_cti[2] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V4RAME' AND
table_sequence = 4 AND
line_type IN ('D', 'F') AND
(
data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
data_mat2a[1] ILIKE '%Valorisation extrême bas%' OR
data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%' OR
data_mat2a[1] ILIKE '%Valorisation séjours avec minoration forfaitaire%' OR
data_mat2a[1] ILIKE '%Valorisation journées extrême haut%' OR
data_mat2a[1] ILIKE '%Valorisation actes GHS 9615 en Hospit%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments radiothérapie pédiatrique%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments antepartum%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de réa pédiatrique%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de néonat sans SI%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de néonat avec SI%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de réanimation néonat%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de surveillance continue%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de soins intensifs%' OR
data_mat2a[1] ILIKE '%Valorisation suppléments de réanimation%' AND data_mat2a[1] NOT ILIKE '%néonat%'OR
data_mat2a[1] ILIKE '%Valorisation actes RDTH en Hospit%' OR
data_mat2a[1] ILIKE '%Valorisation des actes de caissons hyperbares%' OR
data_mat2a[1] ILIKE '%Total valorisation%'
);
UPDATE pmsi.p_mat2a_data SET
data_cti[2] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_base_remboursement_sauf_transition) AS cti_base_remboursement_sauf_transition,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE pec_amo_ame ='AME' AND
file_code = 'T1V4RAME' AND table_sequence = 4 AND
(w_cp_cti_fact2a.prestation_code IN ('GHS','EXB','EXBR','EXH','ANT','APHE','NN1','NN2','NN3','RAP','SRC','STF','REA','DIP','D09','D17','D18','D19','OHB','REP') OR
w_cp_cti_fact2a.prestation_code LIKE 'IRRE%') AND
(
w_cp_cti_fact2a.prestation_code = 'GHS' AND data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
w_cp_cti_fact2a.prestation_code = 'EXB' AND data_mat2a[1] ILIKE '%Valorisation extrême bas%' OR
w_cp_cti_fact2a.prestation_code = 'EXBR' AND data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%' OR
w_cp_cti_fact2a.prestation_code = 'EXH' AND data_mat2a[1] ILIKE '%Valorisation journées extrême haut%' OR
w_cp_cti_fact2a.prestation_code = 'DIP' AND data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
w_cp_cti_fact2a.prestation_code = 'D09' AND data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
w_cp_cti_fact2a.prestation_code = 'D17' AND data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
w_cp_cti_fact2a.prestation_code = 'D18' AND data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
w_cp_cti_fact2a.prestation_code = 'D19' AND data_mat2a[1] ILIKE '%Valorisation suppléments de dialyse%' OR
w_cp_cti_fact2a.prestation_code = 'OHB' AND data_mat2a[1] ILIKE '%Valorisation des actes de caissons hyperbares%' OR
w_cp_cti_fact2a.prestation_code = 'ANT' AND data_mat2a[1] ILIKE '%Valorisation suppléments antepartum%' OR
w_cp_cti_fact2a.prestation_code = 'NN1' AND data_mat2a[1] ILIKE '%Valorisation suppléments de néonat sans SI%' OR
w_cp_cti_fact2a.prestation_code = 'NN2' AND data_mat2a[1] ILIKE '%Valorisation suppléments de néonat avec SI%' OR
w_cp_cti_fact2a.prestation_code = 'NN3' AND data_mat2a[1] ILIKE '%Valorisation suppléments de réanimation néonat%' OR
w_cp_cti_fact2a.prestation_code = 'RAP' AND data_mat2a[1] ILIKE '%Valorisation suppléments radiothérapie pédiatrique%' OR
w_cp_cti_fact2a.prestation_code = 'SRC' AND data_mat2a[1] ILIKE '%Valorisation suppléments de surveillance continue%' OR
w_cp_cti_fact2a.prestation_code = 'STF' AND data_mat2a[1] ILIKE '%Valorisation suppléments de soins intensifs%' OR
w_cp_cti_fact2a.prestation_code = 'REP' AND data_mat2a[1] ILIKE '%Valorisation suppléments de réa pédiatrique%' OR
w_cp_cti_fact2a.prestation_code = 'REA' AND data_mat2a[1] ILIKE '%Valorisation suppléments de réanimation%' AND data_mat2a[1] NOT ILIKE '%néonat%'OR
w_cp_cti_fact2a.prestation_code LIKE 'IRRE%' AND data_mat2a[1] ILIKE '%Valorisation actes RDTH en Hospit%' OR
data_mat2a[1] ILIKE '%Total valorisation%'
)
GROUP BY 1) subview
WHERE file_code = 'T1V4RAME' AND p_mat2a_data.oid = subview.oid;
-- Ajustement EXB AME (ventilation remboursement entre EXB et GHS si somme identique)
UPDATE pmsi.p_mat2a_data
SET data_cti[2] =
CASE
WHEN data_mat2a[1] ILIKE '%Valorisation des GHS%' THEN base.cti_to_number(data_mat2a[2]) - ecart
WHEN data_mat2a[1] ILIKE '%Valorisation extrême bas%' THEN base.cti_to_number(data_mat2a[2])
WHEN data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%' THEN base.cti_to_number(data_mat2a[2])
ELSE base.cti_to_number(data_cti[2]) END
FROM (
SELECT
p_mat2a_data.mat2a_import_id,
SUM(base.cti_to_number(data_mat2a[2])) AS mat2a_val,
SUM(base.cti_to_number(data_cti[2])) AS cti_val,
SUM(base.cti_to_number(data_mat2a[2])) - SUM(base.cti_to_number(data_cti[2])) AS ecart
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T1V4RAME' AND table_sequence = 4 AND
(data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
data_mat2a[1] ILIKE '%Valorisation extrême bas%' OR
data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%')
GROUP BY 1
HAVING ABS(SUM(base.cti_to_number(data_mat2a[2])) - SUM(base.cti_to_number(data_cti[2]))) < 0.05
) subview
WHERE subview.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V4RAME' AND table_sequence = 4 AND
(data_mat2a[1] ILIKE '%Valorisation des GHS%' OR
data_mat2a[1] ILIKE '%Valorisation extrême bas%' OR
data_mat2a[1] ILIKE '%Valorisation séjours avec rehosp dans même GHM%');
-- Tableau T1V4RAME (AME) (2 = total et detail par GHS GHM)
UPDATE pmsi.p_mat2a_data SET
data_cti[6] = '0',
data_cti[7] = '0',
data_cti[8] = '0',
--data_cti[9] = '0',
data_cti[10] = '0',
data_cti[11] = '0',
data_cti[12] = '0',
data_cti[13] = '0',
data_cti[14] = '0',
data_cti[15] = '0',
data_cti[16] = '0',
-- data_cti[17] = '0',
data_cti[18] = '0',
data_cti[19] = '0',
data_cti[20] = '0',
data_cti[21] = '0'
--data_cti[22] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V4RAME' AND
table_sequence = 2 AND
line_type IN ('D', 'F');
/* Attention, depuis 2018, la minoration forfaitaire n'apparait plus dans les tableaux */
UPDATE pmsi.p_mat2a_data SET
data_cti[6] = cti_montant_remboursable_ghs,
data_cti[7] = cti_montant_remboursable_exb,
data_cti[8] = cti_montant_remboursable_exbr,
data_cti[9] = CASE WHEN subview.mat2a_annee < 2018 THEN null ELSE cti_montant_remboursable_exh END,
data_cti[10] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_exh ELSE cti_montant_remboursable_irre END,
data_cti[11] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_irre ELSE cti_montant_remboursable_rap END,
data_cti[12] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_rap ELSE cti_montant_remboursable_rea END,
data_cti[13] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_rea ELSE cti_montant_remboursable_rep END,
data_cti[14] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_rep ELSE cti_montant_remboursable_stf END,
data_cti[15] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_stf ELSE cti_montant_remboursable_src END,
data_cti[16] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_src ELSE null END,
data_cti[17] = CASE WHEN subview.mat2a_annee < 2018 THEN null ELSE cti_montant_remboursable_nn1 END,
data_cti[18] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_nn1 ELSE cti_montant_remboursable_nn2 END,
data_cti[19] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_nn2 ELSE cti_montant_remboursable_nn3 END,
data_cti[20] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_nn3 ELSE cti_montant_remboursable_ant END,
data_cti[21] = CASE WHEN subview.mat2a_annee < 2018 THEN cti_montant_remboursable_ant ELSE null END
--data_cti[22] = cti_montant_remboursable_oxh
FROM (
SELECT p_mat2a_data.oid,
MAX(w_cp_imports.mat2a_annee) AS mat2a_annee,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'GHS' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_ghs,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXB' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_exb,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXBR' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_exbr,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'EXH' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_exh,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'ANT' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_ant,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'RAP' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_rap,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'REA' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_rea,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'REP' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_rep,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'SRC' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_src,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'STF' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_stf,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN1' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_nn1,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN2' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_nn2,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code = 'NN3' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_nn3,
SUM(CASE WHEN w_cp_cti_fact2a.prestation_code LIKE 'IRRE%' THEN cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable_irre
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = w_cp_cti_fact2a.mat2a_import_id
WHERE pec_amo_ame ='AME' AND
file_code = 'T1V4RAME' AND table_sequence = 2 AND
(w_cp_cti_fact2a.prestation_code IN ('GHS','EXB','EXBR','EXH','ANT','NN1','NN2','NN3','REA','SRC','STF','RAP','REA') OR
w_cp_cti_fact2a.prestation_code LIKE 'IRRE%') AND
(
line_type = 'D' AND data_mat2a[1] ILIKE ghs_code AND data_mat2a[2] ILIKE ghm_code || '%' OR
line_type = 'F'
)
GROUP BY 1) subview
WHERE file_code = 'T1V4RAME' AND p_mat2a_data.oid = subview.oid;
-- reventilation EXB
UPDATE pmsi.p_mat2a_data SET
data_cti[7] = data_mat2a[7],
data_cti[8] = data_mat2a[8],
data_cti[6] = base.cti_to_number(data_mat2a[6])
+ (base.cti_to_number(data_mat2a[6])
+ base.cti_to_number(data_mat2a[7])
+ base.cti_to_number(data_mat2a[8])
- base.cti_to_number(data_cti[6])
- base.cti_to_number(data_cti[7])
- base.cti_to_number(data_cti[8]))
WHERE file_code = 'T1V4RAME' AND
table_sequence = 2 AND
line_type IN ('D', 'F') AND
ABS(base.cti_to_number(data_mat2a[6]) - base.cti_to_number(data_cti[6])) > 0.05 AND
ABS(base.cti_to_number(data_mat2a[6]) + base.cti_to_number(data_mat2a[7]) + base.cti_to_number(data_mat2a[8])
- base.cti_to_number(data_cti[6])
- base.cti_to_number(data_cti[7])
- base.cti_to_number(data_cti[8])) <= 0.05;
-- 2015 Minoration forfaitaire GHS liste en SUS
UPDATE pmsi.p_mat2a_data SET
data_cti[9] = cti_base_remboursement_sauf_transition
FROM (
SELECT
p_mat2a_data.oid,
SUM(cti_nb_ghs_minore) * -40 AS cti_base_remboursement_sauf_transition
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE 1=1
AND w_cp_imports.mat2a_annee >= 2015
AND pec_amo_ame ='AME'
AND file_code = 'T1V4RAME' AND table_sequence = 2
AND w_cp_cti_fact2a.prestation_code = 'GHS'
AND w_cp_cti_fact2a.cti_nb_ghs_minore >= 1
AND
(
line_type = 'D' AND data_mat2a[1] ILIKE ghs_code AND data_mat2a[2] ILIKE ghm_code || '%' OR
line_type = 'F'
)
GROUP BY 1) subview
WHERE file_code = 'T1V4RAME' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. IVG';
-- 2014 : T1V1VIVG
UPDATE pmsi.p_mat2a_data SET
data_cti[2] = '0',
data_cti[3] = '0',
data_cti[4] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V1VIVG' AND
table_sequence = 1 AND
line_type IN ('D', 'F');
/*
Modif CLA du 12/11/2015
Filtre sur les prestations d'IVG uniquement (chapitre 1.V.1.IVG du guide de lecture OVALIDE DGF 2015)
pour ne pas remonter les autres prestations des séjours valorisés IVG.
Cas avec un séjour ou des prestations PHH et EMI étaient également présentes dans le décompte CTI à tort
*/
UPDATE pmsi.p_mat2a_data SET
data_cti[2] = cti_nombre,
data_cti[3] = cti_base_remboursement,
data_cti[4] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_nombre) AS cti_nombre,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_base_remboursement_sauf_transition) AS cti_base_remboursement_sauf_transition,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE pec_amo_ame='IVG' AND
file_code = 'T1V1VIVG' AND table_sequence = 1 AND
w_cp_cti_fact2a.prestation_code IN ('AMD', 'IMD', 'APD', 'IPD', 'AMF') AND
(line_type = 'D' AND data_mat2a[1] ILIKE prestation_code || '%' OR
line_type = 'F')
GROUP BY 1
) subview
WHERE file_code = 'T1V1VIVG' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. UCD';
DROP TABLE IF EXISTS w_cp_cti_facucd_transmis;
CREATE TEMP TABLE w_cp_cti_facucd_transmis AS
SELECT
p_rss.import_id,
mat2a_import_id,
ucd_id,
t_ucd.code AS ucd_code,
p_rss_ucd.indication,
w_cp_imports.mat2a_annee,
w_cp_imports.mat2a_mois,
SUM(nombre) AS nombre_transmis,
SUM(CASE WHEN traitement_epmsi NOT IN ('30') OR t_ucd.code IN ('9261110','9261104') AND non_pris_en_compte = '1' THEN nombre ELSE 0 END) AS nombre_non_valorise_1,
SUM(CASE WHEN traitement_epmsi IN ('30') AND t_ucd.code NOT IN ('9261110','9261104') AND non_pris_en_compte = '1' THEN nombre ELSE 0 END) AS nombre_non_valorise_2,
0::numeric AS nombre_non_valorise_3,
SUM(CASE WHEN traitement_epmsi IN ('30') AND non_pris_en_compte <> '1' THEN nombre ELSE 0 END) AS nombre_valorise
FROM pmsi.p_rss_ucd
JOIN pmsi.p_rss ON rss_id = p_rss.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
JOIN pmsi.t_ucd ON ucd_id = t_ucd.oid
LEFT JOIN pmsi.t_type_ucd ON t_type_ucd.oid = p_rss_ucd.type_ucd_id
WHERE en_cours = '0' AND
ghm_id <> 0 AND
(t_type_ucd.code = 'SUS' OR t_type_ucd.code = 'ATU' AND t_ucd.code IN ('9261110','9261104') )
GROUP BY 1,2,3,4,5,6,7
;
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cp_cti_facucd') THEN
DROP TABLE IF EXISTS w_cp_cti_facucd;
CREATE TEMP TABLE w_cp_cti_facucd (
import_id bigint,
mat2a_import_id bigint,
ucd_id bigint,
ucd_code text,
indication text,
pec_amo_ame text,
mat2a_annee numeric,
mat2a_mois numeric,
nombre numeric,
montant_facture numeric(13,2),
montant_tr numeric(13,2),
montant_t2a_accorde numeric(13,2)
);
END IF;
TRUNCATE w_cp_cti_facucd;
INSERT INTO w_cp_cti_facucd
SELECT
p_rss.import_id,
mat2a_import_id,
ucd_id,
t_ucd.code AS ucd_code,
p_rss_ucd.indication,
CASE WHEN traitement_epmsi IN ('30') THEN 'AMO' WHEN traitement_epmsi IN ('31') THEN 'AME' WHEN traitement_epmsi IN ('32') THEN 'IVG' ELSE 'SU' END AS pec_amo_ame,
w_cp_imports.mat2a_annee,
w_cp_imports.mat2a_mois,
round(SUM(CASE WHEN p_rss_ucd.non_pris_en_compte <> '1' AND montant_facture <> 0 THEN nombre ELSE 0 END),2) AS nombre,
round(SUM(CASE WHEN p_rss_ucd.non_pris_en_compte <> '1' AND montant_facture <> 0 THEN montant_facture ELSE 0 END),2) AS montant_facture,
round(SUM(CASE WHEN p_rss_ucd.non_pris_en_compte <> '1' AND montant_facture <> 0 THEN montant_tr ELSE 0 END),2) AS montant_tr,
round(SUM(CASE WHEN p_rss_ucd.non_pris_en_compte <> '1' AND montant_facture <> 0 THEN montant_t2a_accorde ELSE 0 END),2) AS montant_t2a_accorde
FROM pmsi.p_rss_ucd
JOIN pmsi.p_rss ON rss_id = p_rss.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
JOIN pmsi.t_ucd ON ucd_id = t_ucd.oid
LEFT JOIN pmsi.t_type_ucd ON t_type_ucd.oid = p_rss_ucd.type_ucd_id
WHERE en_cours = '0' AND
(t_type_ucd.code = 'SUS' OR t_type_ucd.code = 'ATU' AND t_ucd.code IN ('9261104','9261110') AND non_pris_en_compte = '0') AND
montant_tr <> 0 AND
ghm_id <> 0 AND
traitement_epmsi IN ('30','31','32','33')
GROUP BY 1,2,3,4,5,6,7,8;
-- 2015 : T1V2VMED
-- Transmis
UPDATE pmsi.p_mat2a_data SET
data_cti[5] = '0',
data_cti[6] = '0',
data_cti[7] = '0',
data_cti[10] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
w_cp_imports.mat2a_annee >= 2019 AND
file_code = 'T1V2VMED' AND
table_sequence = 1 AND
line_type IN ('D', 'F')
;
UPDATE pmsi.p_mat2a_data SET
data_cti[5] = nombre_transmis,
data_cti[6] = nombre_non_valorise_1,
data_cti[7] = CASE WHEN nombre_non_valorise_2 >= base.cti_to_number(data_mat2a[9]) THEN nombre_non_valorise_2 - base.cti_to_number(data_mat2a[9]) ELSE nombre_non_valorise_2 END,
data_cti[9] = CASE WHEN nombre_non_valorise_2 >= base.cti_to_number(data_mat2a[9]) THEN base.cti_to_number(data_mat2a[9]) ELSE 0 END,
data_cti[10] = nombre_valorise
FROM (
SELECT p_mat2a_data.oid,
SUM(nombre_transmis) AS nombre_transmis,
SUM(nombre_non_valorise_1) AS nombre_non_valorise_1,
SUM(nombre_non_valorise_2) AS nombre_non_valorise_2,
SUM(nombre_non_valorise_3) AS nombre_non_valorise_3,
SUM(nombre_valorise) AS nombre_valorise
FROM w_cp_cti_facucd_transmis
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facucd_transmis.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T1V2VMED' AND
table_sequence = 1 AND
w_cp_cti_facucd_transmis.mat2a_annee >= 2019 AND
(line_type = 'D' AND data_mat2a[2] = ucd_code OR
line_type = 'F') AND
(line_type = 'D' AND data_mat2a[3] = indication OR
line_type = 'F')
GROUP BY 1
) subview
WHERE file_code = 'T1V2VMED' AND p_mat2a_data.oid = subview.oid
;
-- Valorise
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = '0',
data_cti[5] = '0',
data_cti[6] = '0',
data_cti[7] = '0',
data_cti[8] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
w_cp_imports.mat2a_annee >= 2015 AND
file_code = 'T1V2VMED' AND
table_sequence = 2 AND
line_type IN ('D', 'F');
-- Concaténation du code et du texte dans le champ de code
-- A partir de M03 2018, nouvelle colonne "indicatrion" entre le code et le libelle
UPDATE pmsi.p_mat2a_data SET
data_mat2a[2] = trim(split_part(data_mat2a[2]::text,' ',1))|| ' - '::text || CASE WHEN w_cp_imports.mat2a_annee >= 2018 THEN data_mat2a[4]::text ELSE data_mat2a[3]::text END
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V2VMED' AND
table_sequence = 2 AND
line_type = 'D';
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = CASE WHEN subview.mat2a_annee >= 2018 THEN indication ELSE null END,
data_cti[4] = CASE WHEN subview.mat2a_annee >= 2018 THEN null ELSE nombre END,
data_cti[5] = CASE WHEN subview.mat2a_annee >= 2018 THEN nombre ELSE montant_facture END,
data_cti[6] = CASE WHEN subview.mat2a_annee >= 2018 THEN montant_facture ELSE montant_tr END,
data_cti[7] = CASE WHEN subview.mat2a_annee >= 2018 THEN montant_tr ELSE montant_t2a_accorde END,
data_cti[8] = CASE WHEN subview.mat2a_annee >= 2018 THEN montant_t2a_accorde ELSE montant_t2a_accorde - montant_facture END,
data_cti[9] = CASE WHEN subview.mat2a_annee >= 2018 THEN montant_t2a_accorde - montant_facture ELSE null END
FROM (
SELECT
p_mat2a_data.oid,
CASE WHEN line_type = 'F' THEN '' ELSE w_cp_cti_facucd.indication END as indication,
SUM(nombre) AS nombre,
SUM(montant_facture) AS montant_facture,
SUM(montant_tr) AS montant_tr,
SUM(montant_t2a_accorde) AS montant_t2a_accorde,
MAX(w_cp_imports.mat2a_annee) AS mat2a_annee
FROM
w_cp_cti_facucd
JOIN pmsi.p_mat2a_data ON w_cp_cti_facucd.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE
(pec_amo_ame='AMO' OR pec_amo_ame = 'IVG') AND
w_cp_cti_facucd.mat2a_annee >= 2015 AND
file_code = 'T1V2VMED' AND table_sequence = 2 AND
(line_type = 'D'
AND substr(data_mat2a[2], 1, 7) || CASE WHEN w_cp_imports.mat2a_annee >= 2018 THEN data_mat2a[3] ELSE '' END ILIKE ucd_code || indication
OR line_type = 'F')
GROUP BY 1,2
) subview
WHERE file_code = 'T1V2VMED' AND p_mat2a_data.oid = subview.oid;
-- 2014 : T1V2VMED
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = '0',
data_cti[4] = '0',
data_cti[5] = '0',
data_cti[6] = '0',
data_cti[7] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
w_cp_imports.mat2a_annee < 2015 AND
file_code = 'T1V2VMED' AND
table_sequence = 2 AND
line_type IN ('D', 'F');
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = nombre,
data_cti[4] = montant_facture,
data_cti[5] = montant_tr,
data_cti[6] = montant_t2a_accorde,
data_cti[7] = montant_t2a_accorde - montant_facture
FROM (
SELECT p_mat2a_data.oid,
SUM(nombre) AS nombre,
SUM(montant_facture) AS montant_facture,
SUM(montant_tr) AS montant_tr,
SUM(montant_t2a_accorde) AS montant_t2a_accorde
FROM w_cp_cti_facucd
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facucd.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE pec_amo_ame='AMO' AND
w_cp_cti_facucd.mat2a_annee < 2015 AND
file_code = 'T1V2VMED' AND table_sequence = 2 AND
(line_type = 'D' AND data_mat2a[1] ILIKE ucd_code || '%' OR
line_type = 'F')
GROUP BY 1
) subview
WHERE file_code = 'T1V2VMED' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. LPP';
DROP TABLE IF EXISTS w_cp_cti_faclpp_transmis;
CREATE TEMP TABLE w_cp_cti_faclpp_transmis AS
SELECT
p_rss.import_id,
mat2a_import_id,
lpp_id,
t_lpp.code AS lpp_code,
SUM(nombre) AS nombre_transmis,
SUM(CASE WHEN traitement_epmsi NOT IN ('30') THEN nombre ELSE 0 END) AS nombre_non_valorise_1,
SUM(CASE WHEN traitement_epmsi IN ('30') AND non_pris_en_compte = '1' AND prix_unitaire <> 0 THEN nombre ELSE 0 END) AS nombre_non_valorise_2,
SUM(CASE WHEN traitement_epmsi IN ('30') AND non_pris_en_compte = '1' AND prix_unitaire = 0 THEN nombre ELSE 0 END) AS nombre_non_valorise_3,
SUM(CASE WHEN traitement_epmsi IN ('30') AND non_pris_en_compte <> '1' THEN nombre ELSE 0 END) AS nombre_valorise
FROM pmsi.p_rss_lpp
JOIN pmsi.p_rss ON rss_id = p_rss.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
JOIN pmsi.t_lpp ON lpp_id = t_lpp.oid
WHERE en_cours = '0' AND
ghm_id > 0
GROUP BY 1,2,3,4
;
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cp_cti_faclpp') THEN
DROP TABLE IF EXISTS w_cp_cti_faclpp;
CREATE TEMP TABLE w_cp_cti_faclpp (
import_id bigint,
mat2a_import_id bigint,
lpp_id bigint,
lpp_code text,
pec_amo_ame text,
nombre numeric,
montant_facture numeric(13,2),
montant_tr numeric(13,2),
montant_t2a_accorde numeric(13,2)
);
END IF;
TRUNCATE w_cp_cti_faclpp;
INSERT INTO w_cp_cti_faclpp
SELECT
p_rss.import_id,
mat2a_import_id,
lpp_id,
t_lpp.code,
CASE WHEN traitement_epmsi IN ('30') THEN 'AMO' ELSE 'AME' END AS pec_amo_ame,
SUM(CASE WHEN p_rss_lpp.non_pris_en_compte <> '1' AND montant_facture <> 0 THEN nombre ELSE 0 END) AS nombre,
round(SUM(CASE WHEN p_rss_lpp.non_pris_en_compte <> '1' AND montant_facture <> 0 THEN montant_facture ELSE 0 END),2) AS montant_facture,
round(SUM(CASE WHEN p_rss_lpp.non_pris_en_compte <> '1' AND montant_facture <> 0 THEN montant_tr ELSE 0 END),2) AS montant_tr,
round(SUM(CASE WHEN p_rss_lpp.non_pris_en_compte <> '1' AND montant_facture <> 0 THEN montant_t2a_accorde ELSE 0 END),2) AS montant_t2a_accorde
FROM pmsi.p_rss_lpp
JOIN pmsi.p_rss ON rss_id = p_rss.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
JOIN pmsi.t_lpp ON lpp_id = t_lpp.oid
WHERE en_cours = '0' AND
p_rss.ghm_id > 0 AND
traitement_epmsi IN ('30','31')
GROUP BY 1,2,3,4,5;
-- 2014 : T1V3VDMI
-- Transmission
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = '0',
data_cti[4] = '0',
data_cti[5] = '0',
data_cti[6] = '0',
data_cti[7] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V3VDMI' AND
table_sequence = 1 AND
line_type IN ('D');
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = nombre_transmis,
data_cti[4] = nombre_non_valorise_1,
data_cti[5] = nombre_non_valorise_2,
data_cti[6] = nombre_non_valorise_3,
data_cti[7] = nombre_valorise
FROM (
SELECT p_mat2a_data.oid,
SUM(nombre_transmis) AS nombre_transmis,
SUM(nombre_non_valorise_1) AS nombre_non_valorise_1,
SUM(nombre_non_valorise_2) AS nombre_non_valorise_2,
SUM(nombre_non_valorise_3) AS nombre_non_valorise_3,
SUM(nombre_valorise) AS nombre_valorise
FROM w_cp_cti_faclpp_transmis
JOIN pmsi.p_mat2a_data ON
w_cp_cti_faclpp_transmis.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T1V3VDMI' AND table_sequence = 1 AND
line_type = 'D' AND data_mat2a[1] ILIKE lpp_code || '%'
GROUP BY 1
) subview
WHERE file_code = 'T1V3VDMI' AND p_mat2a_data.oid = subview.oid
;
-- Valorisation
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = '0',
data_cti[4] = '0',
data_cti[5] = '0',
data_cti[6] = '0',
data_cti[7] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V3VDMI' AND
table_sequence = 2 AND
line_type IN ('D', 'F');
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = nombre,
data_cti[4] = montant_facture,
data_cti[5] = montant_tr,
data_cti[6] = montant_t2a_accorde,
data_cti[7] = montant_t2a_accorde - montant_facture
FROM (
SELECT p_mat2a_data.oid,
SUM(nombre) AS nombre,
SUM(montant_facture) AS montant_facture,
SUM(montant_tr) AS montant_tr,
SUM(montant_t2a_accorde) AS montant_t2a_accorde
FROM w_cp_cti_faclpp
JOIN pmsi.p_mat2a_data ON
w_cp_cti_faclpp.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE pec_amo_ame='AMO' AND
file_code = 'T1V3VDMI' AND table_sequence = 2 AND
(line_type = 'D' AND data_mat2a[1] ILIKE lpp_code || '%' OR
line_type = 'F')
GROUP BY 1
) subview
WHERE file_code = 'T1V3VDMI' AND p_mat2a_data.oid = subview.oid;
-- A partir de 2015, la partie des UCD dans le tableau T1V4MDAME a une colonne UCD13, on la vire
-- pour n'avoir que 7 colonnes au final
UPDATE pmsi.p_mat2a_data SET
data_mat2a = data_mat2a[2:array_length(data_mat2a, 1)]
--FROM w_cp_imports
WHERE 1=1
--AND w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id
AND line_type IN ('D','F','H')
AND array_length(data_mat2a,1) = 8
AND p_mat2a_data.mat2a_import_id::text || file_code::text || table_sequence::text IN (
SELECT
p_mat2a_data.mat2a_import_id::text || file_code::text || table_sequence::text
FROM
pmsi.p_mat2a_data
JOIN w_cp_imports ON w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE 1=1
AND data_mat2a[2] ilike '%molécules onéreuses%'
AND line_type = 'T'
and file_code = 'T1V4MDAME'
AND w_cp_imports.mat2a_annee >= 2015
);
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = NULL,
data_cti[4] = NULL,
data_cti[5] = '0',
data_cti[6] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V4MDAME' AND
line_type IN ('D', 'F')
AND table_sequence IN (1,2);
UPDATE pmsi.p_mat2a_data SET
data_cti[5] = nombre,
data_cti[6] = montant_facture
FROM (
SELECT p_mat2a_data.oid,
SUM(nombre) AS nombre,
SUM(montant_facture) AS montant_facture
FROM w_cp_cti_faclpp
JOIN pmsi.p_mat2a_data ON
w_cp_cti_faclpp.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE pec_amo_ame='AME' AND
file_code = 'T1V4MDAME' AND table_sequence = 2 AND
(line_type = 'D' AND data_mat2a[1] ILIKE lpp_code || '%' OR
line_type = 'F')
GROUP BY 1
UNION ALL
SELECT p_mat2a_data.oid,
SUM(nombre) AS nombre,
SUM(montant_facture) AS montant_facture
FROM w_cp_cti_facucd
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facucd.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE pec_amo_ame='AME' AND
file_code = 'T1V4MDAME' AND table_sequence = 1 AND
(line_type = 'D' AND data_mat2a[2] = ucd_code OR
line_type = 'F') AND
(line_type = 'D' AND data_mat2a[3] = indication OR
line_type = 'F')
GROUP BY 1
) subview
WHERE file_code = 'T1V4MDAME' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. Prise en charge T2A';
-- Forfait journalier
UPDATE pmsi.p_mat2a_data
SET data_cti[3] = 0
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
p_mat2a_data.file_code = 'T1V1TXR' AND
p_mat2a_data.table_sequence = 2;
UPDATE pmsi.p_mat2a_data
SET data_cti[3] = subview.effectif
FROM
(SELECT mat2a_import_id,
CASE
WHEN p_rss.date_entree - p_rss.date_naissance <= 30 THEN 'Y'
WHEN t_ghm.code IN ('28Z08Z', '28Z09Z', '28Z11Z', '28Z12Z', '28Z13Z', '28Z18Z', '28Z19Z', '28Z20Z', '28Z21Z', '28Z22Z', '28Z23Z', '28Z24Z', '28Z25Z') THEN 'Y'
WHEN 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 ('PO1', 'PO2', 'PO3', 'PO4', 'PO5', 'PO6', 'PO7', 'PO8', 'PO9', 'POA')
) THEN 'Y'
WHEN t_pec.code IN ('2') THEN 'Z'
WHEN duree_sejour = 0 THEN 'X'
WHEN w_cp_imports.mat2a_annee < 2015 AND t_ghm.code LIKE '15%' THEN 'X'
WHEN t_ghm.code LIKE '28%' THEN 'X'
WHEN t_ghm.code in ('23K02Z' , '14Z08Z') THEN 'X'
ELSE t_pec_fj.code END AS pec_fj,
CASE
WHEN p_rss.date_entree - p_rss.date_naissance <= 30 THEN 'E'
WHEN t_ghm.code IN ('28Z08Z', '28Z09Z', '28Z11Z', '28Z12Z', '28Z13Z', '28Z18Z', '28Z19Z', '28Z20Z', '28Z21Z', '28Z22Z', '28Z23Z', '28Z24Z', '28Z25Z') THEN 'X'
WHEN 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 ('PO1', 'PO2', 'PO3', 'PO4', 'PO5', 'PO6', 'PO7', 'PO8', 'PO9', 'POA')
) THEN 'X'
WHEN t_pec.code IN ('2') THEN 'A'
WHEN duree_sejour = 0 THEN 'X'
WHEN w_cp_imports.mat2a_annee < 2015 AND t_ghm.code LIKE '15%' THEN 'X'
WHEN t_ghm.code LIKE '28%' THEN 'X'
WHEN t_ghm.code in ('23K02Z' , '14Z08Z') THEN 'X'
WHEN t_pec_fj.code = 'X' THEN 'X'
WHEN t_pec_fj.code = 'L' AND mat2a_annee >= 2016 THEN 'A'
WHEN t_pec_fj.code = 'L' AND mat2a_annee < 2016 THEN 'E'
WHEN t_pec_fj.code = 'R' THEN 'E'
WHEN w_cp_imports.mat2a_annee < 2015 AND p_vidhosp.nature_pec IN ('13','30','41') THEN 'E'
WHEN w_cp_imports.mat2a_annee > 2014 AND p_vidhosp.nature_pec IN ('13','41') THEN 'E'
WHEN t_pec_fj.code = 'A' THEN 'A'
ELSE '' END AS pec_reel_fj,
count(*) AS effectif
FROM pmsi.p_rss
JOIN pmsi.p_rsf_total ON p_rsf_total.rss_id = p_rss.oid
JOIN base.t_pec ON code_pec_id = t_pec.oid
JOIN base.t_pec_fj ON code_pec_fj_id = t_pec_fj.oid
JOIN pmsi.p_vidhosp ON p_vidhosp.rss_id = p_rss.oid
JOIN pmsi.t_ghm on ghm_id = t_ghm.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
WHERE en_cours = '0' AND
ghm_id <> 0 AND
traitement_epmsi IN ('30')
GROUP BY 1,2,3
ORDER BY 1,2,3) subview
WHERE subview.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
p_mat2a_data.file_code = 'T1V1TXR' AND
p_mat2a_data.table_sequence = 2 AND
(
data_mat2a[1] LIKE 'A:%' AND pec_fj = 'A' OR
data_mat2a[1] LIKE 'L:%' AND pec_fj = 'L' OR
data_mat2a[1] LIKE 'R:%' AND pec_fj = 'R' OR
data_mat2a[1] LIKE '%FJ non applicable%' AND pec_fj = 'X' OR
data_mat2a[1] LIKE '%Nouveaux-nés%' AND pec_fj = 'Y' OR
data_mat2a[1] LIKE '%Séjours en attente%' AND pec_fj = 'Z'
) AND
(
data_mat2a[2] ILIKE '%FJ à la charge de l''assuré%' AND pec_reel_fj = 'A' OR
data_mat2a[2] ILIKE '%exonération du FJ%' AND pec_reel_fj = 'E' OR
data_mat2a[2] ILIKE '%FJ non applicable%' AND pec_reel_fj = 'X'
);
-- Taux de prise en charge
UPDATE pmsi.p_mat2a_data
SET data_cti[3] = subview.effectif
FROM
(
SELECT mat2a_import_id,
to_char(p_rsf_total.taux_remboursement,'FM990') || '%' ||
CASE
WHEN p_rss.date_entree - p_rss.date_naissance <= 30 THEN ' forcé (*)'
WHEN t_ghm.code IN ('28Z08Z', '28Z09Z', '28Z11Z', '28Z12Z', '28Z13Z', '28Z18Z', '28Z19Z', '28Z20Z', '28Z21Z', '28Z22Z', '28Z23Z', '28Z24Z', '28Z25Z') THEN ' forcé (*)'
WHEN 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 ('PO1', 'PO2', 'PO3', 'PO4', 'PO5', 'PO6', 'PO7', 'PO8', 'PO9', 'POA')
) THEN ' forcé (*)'
ELSE CASE WHEN p_rsf_total.code_pec IN ('2') THEN ' en attente de taux' ELSE '' END
END AS taux,
CASE WHEN montant_tm <> 0 THEN 'montant TM numérique' else 'montant TM non numérique ou à 0' END AS montant_tm,
count(*) AS effectif,
MAX(p_rss.oid)
FROM pmsi.p_rss
JOIN pmsi.p_rsf_total ON p_rsf_total.rss_id = p_rss.oid
JOIN pmsi.p_vidhosp ON p_vidhosp.rss_id = p_rss.oid
JOIN pmsi.t_ghm on ghm_id = t_ghm.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
WHERE en_cours = '0' AND
ghm_id <> 0 AND
traitement_epmsi IN ('30')
GROUP BY 1,2,3
ORDER BY 1,2,3
) subview
WHERE subview.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
p_mat2a_data.file_code = 'T1V1TXR' AND
p_mat2a_data.table_sequence = 3 AND
data_mat2a[1] = subview.taux AND
data_mat2a[2] = subview.montant_tm;
RAISE NOTICE '%' , 'Transports 2020';
UPDATE pmsi.p_mat2a_data SET
data_cti[5] = 0,
data_cti[6] = 0
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
p_mat2a_data.file_code = 'T11TRANS' AND
p_mat2a_data.line_type = 'D' AND
mat2a_annee <= 2020;
UPDATE pmsi.p_mat2a_data SET
data_cti[5] = cti_nombre,
data_cti[6] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(w_cp_cti_fact2a.cti_nombre) AS cti_nombre,
SUM(w_cp_cti_fact2a.cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN pmsi.p_mat2a_import ON p_mat2a_data.mat2a_import_id = p_mat2a_import.oid
WHERE file_code = 'T11TRANS' AND table_sequence = 1 AND
p_mat2a_import.mat2a_annee <= 2020 AND
line_type = 'D' AND data_mat2a[1] ILIKE prestation_code
GROUP BY 1) subview
WHERE file_code = 'T11TRANS' AND p_mat2a_data.oid = subview.oid;
UPDATE pmsi.p_mat2a_data SET
data_cti[5] = NULL,
data_cti[6] = NULL
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
p_mat2a_data.file_code = 'T11TRANS' AND
p_mat2a_data.line_type = 'D' AND
mat2a_annee <= 2020;
RAISE NOTICE '%' , 'Transports 2021';
DROP TABLE IF EXISTS w_transports_2021;
CREATE TEMP TABLE w_transports_2021 AS
SELECT
w_cp_imports.mat2a_import_id,
t_prestations.code AS prestation_code,
to_char(date_part('month',date_debut),'FM00') AS mois,
count(*) AS cti_nombre,
SUM(p_rsf_detail.base_remboursement) AS cti_base_remboursement
FROM pmsi.p_rss
JOIN pmsi.p_rsf_detail ON p_rsf_detail.rss_id = p_rss.oid
JOIN pmsi.t_prestations ON prestation_id = t_prestations.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
JOIN base.t_finess ON p_rss.finess = t_finess.code
WHERE en_cours = '0' AND
mat2a_annee >= 2021 AND
ghm_id <> 0 AND
t_prestations.code IN ('TDE', 'TDE1', 'TDE2', 'TDE3', 'TDE4', 'TDE5', 'TSE', 'TSE6', 'TSE7', 'TSE8', 'TSE9' ) AND
est_ligne_rss = '1'
GROUP BY 1,2,3
;
UPDATE pmsi.p_mat2a_data SET
data_cti[7] = 0,
data_cti[8] = 0,
data_mat2a[1] = CASE WHEN data_mat2a[1] = 'TDE' OR data_mat2a[1] = 'TSE' THEN data_mat2a[1] || substr(data_mat2a[3],2,1) ELSE data_mat2a[1] END,
data_mat2a[2] = CASE WHEN data_mat2a[1] LIKE 'TDE%' THEN 'Transport définitif ' || data_mat2a[3] WHEN data_mat2a[1] LIKE 'TSE%' THEN 'Transport provisoire ' || data_mat2a[3] ELSE data_mat2a[2] END
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
p_mat2a_data.file_code = 'T11TRANS' AND
p_mat2a_data.line_type = 'D' AND
mat2a_annee >= 2021;
UPDATE pmsi.p_mat2a_data SET
data_cti[7] = cti_nombre,
data_cti[8] = cti_base_remboursement
FROM w_transports_2021
WHERE file_code = 'T11TRANS' AND
p_mat2a_data.mat2a_import_id = w_transports_2021.mat2a_import_id AND
data_mat2a[1] = w_transports_2021.prestation_code AND
data_mat2a[4] = w_transports_2021.mois
;
UPDATE pmsi.p_mat2a_data SET
data_cti[7] = cti_nombre,
data_cti[8] = cti_base_remboursement
FROM (SELECT mat2a_import_id, SUM(cti_nombre) AS cti_nombre, SUM(cti_base_remboursement) AS cti_base_remboursement FROM w_transports_2021 GROUP BY 1) w_transports_2021
WHERE file_code = 'T11TRANS' AND
p_mat2a_data.mat2a_import_id = w_transports_2021.mat2a_import_id AND
p_mat2a_data.line_type = 'F'
;
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = 0,
data_cti[4] = 0,
data_cti[6] = 0,
data_cti[7] = 0
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
p_mat2a_data.file_code = 'T1V1TRANS' AND
table_sequence = 1 AND
p_mat2a_data.line_type IN ('D','F') AND
mat2a_annee >= 2021;
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_nombre_valorise,
data_cti[6] = cti_base_remboursement_valorise,
data_cti[7] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(w_cp_cti_fact2a.cti_nombre) AS cti_nombre,
SUM(CASE WHEN traitement_epmsi = '30' THEN w_cp_cti_fact2a.cti_nombre ELSE 0 END) AS cti_nombre_valorise,
SUM(CASE WHEN traitement_epmsi = '30' THEN w_cp_cti_fact2a.cti_base_remboursement ELSE 0 END) AS cti_base_remboursement_valorise,
SUM(CASE WHEN traitement_epmsi = '30' THEN w_cp_cti_fact2a.cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN pmsi.p_mat2a_import ON p_mat2a_data.mat2a_import_id = p_mat2a_import.oid
WHERE file_code = 'T1V1TRANS' AND table_sequence = 1 AND
p_mat2a_import.mat2a_annee >= 2021 AND
line_type = 'D' AND substr(data_mat2a[1],1,3) || substr(data_mat2a[2],2,1) ILIKE prestation_code
GROUP BY 1) subview
WHERE file_code = 'T1V1TRANS' AND p_mat2a_data.oid = subview.oid;
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_nombre_valorise,
data_cti[6] = cti_base_remboursement_valorise,
data_cti[7] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(w_cp_cti_fact2a.cti_nombre) AS cti_nombre,
SUM(CASE WHEN traitement_epmsi = '30' THEN w_cp_cti_fact2a.cti_nombre ELSE 0 END) AS cti_nombre_valorise,
SUM(CASE WHEN traitement_epmsi = '30' THEN w_cp_cti_fact2a.cti_base_remboursement ELSE 0 END) AS cti_base_remboursement_valorise,
SUM(CASE WHEN traitement_epmsi = '30' THEN w_cp_cti_fact2a.cti_montant_remboursable ELSE 0 END) AS cti_montant_remboursable
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN pmsi.p_mat2a_import ON p_mat2a_data.mat2a_import_id = p_mat2a_import.oid
WHERE file_code = 'T1V1TRANS' AND table_sequence = 1 AND
p_mat2a_import.mat2a_annee >= 2021 AND
prestation_code IN ('TDE1', 'TDE2', 'TDE3', 'TDE4', 'TDE5', 'TSE6', 'TSE7', 'TSE8', 'TSE9') AND
line_type = 'F'
GROUP BY 1) subview
WHERE file_code = 'T1V1TRANS' AND p_mat2a_data.oid = subview.oid;
-- Transports - SU
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = 0,
data_cti[4] = 0
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
p_mat2a_data.file_code = 'T1V1TRANS' AND
table_sequence = 2 AND
p_mat2a_data.line_type IN ('D','F') AND
mat2a_annee >= 2021;
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(w_cp_cti_fact2a.cti_nombre) AS cti_nombre,
SUM(w_cp_cti_fact2a.cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN pmsi.p_mat2a_import ON p_mat2a_data.mat2a_import_id = p_mat2a_import.oid
WHERE file_code = 'T1V1TRANS' AND table_sequence = 2 AND
p_mat2a_import.mat2a_annee >= 2021 AND
traitement_epmsi = '33' AND
line_type = 'D' AND substr(data_mat2a[1],1,3) || substr(data_mat2a[2],2,1) ILIKE prestation_code
GROUP BY 1) subview
WHERE file_code = 'T1V1TRANS' AND p_mat2a_data.oid = subview.oid;
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(w_cp_cti_fact2a.cti_nombre) AS cti_nombre,
SUM(w_cp_cti_fact2a.cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_fact2a
JOIN pmsi.p_mat2a_data ON
w_cp_cti_fact2a.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN pmsi.p_mat2a_import ON p_mat2a_data.mat2a_import_id = p_mat2a_import.oid
WHERE file_code = 'T1V1TRANS' AND table_sequence = 2 AND
p_mat2a_import.mat2a_annee >= 2021 AND
traitement_epmsi = '33' AND
prestation_code IN ('TDE1', 'TDE2', 'TDE3', 'TDE4', 'TDE5', 'TSE6', 'TSE7', 'TSE8', 'TSE9') AND
line_type = 'F'
GROUP BY 1) subview
WHERE file_code = 'T1V1TRANS' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. Facturation RAFAEL.';
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_cp_cti_facrsf') THEN
DROP TABLE IF EXISTS w_cp_cti_facrsf;
CREATE TEMP TABLE w_cp_cti_facrsf (
import_id bigint,
mat2a_import_id bigint,
mat2a_annee numeric,
dmt text,
type_ligne text,
prestation_chapitre text,
prestation_code text,
prestation_id bigint,
code_pec text,
prix_unitaire numeric,
cti_nombre numeric(13,2),
cti_base_remboursement numeric(13,2),
cti_base_remboursement_sauf_transition numeric(13,2),
cti_montant_remboursable numeric(13,2),
cti_montant_remboursable_fides numeric(13,2),
cti_montant_remboursable_nonfides numeric(13,2),
est_valorise integer
);
END IF;
TRUNCATE w_cp_cti_facrsf;
-- Valorisé
INSERT INTO w_cp_cti_facrsf
SELECT p_rss.import_id,
mat2a_import_id,
mat2a_annee,
dmt,
p_rsf_detail.type AS type_ligne,
''::text AS prestation_chapitre,
t_prestations.code AS prestation_code,
prestation_id,
CASE WHEN traitement_epmsi = '30' THEN '1' ELSE '0' END AS code_pec,
prix_unitaire,
SUM(p_rsf_detail.nombre * p_rsf_detail.coefficient) AS cti_nombre,
SUM(p_rsf_detail.base_remboursement) AS cti_base_remboursement,
SUM(p_rsf_detail.base_remboursement_sauf_transition) AS cti_base_remboursement_sauf_transition,
SUM(p_rsf_detail.sejour_remboursable) AS cti_montant_remboursable,
SUM(CASE WHEN p_rsf_detail.fides_detail = 1 THEN p_rsf_detail.sejour_remboursable ELSE 0 END) AS cti_montant_remboursable_fides,
SUM(CASE WHEN p_rsf_detail.fides_detail <> 1 THEN p_rsf_detail.sejour_remboursable ELSE 0 END) AS cti_montant_remboursable_nonfides,
1 as est_valorise
FROM pmsi.p_rss
JOIN pmsi.p_rsf_detail ON p_rsf_detail.rss_id = p_rss.oid
JOIN pmsi.p_rsf_total ON p_rsf_total.rss_id = p_rss.oid
JOIN base.t_motif_non_facturation ON motif_non_facturation_id = t_motif_non_facturation.oid
JOIN pmsi.t_prestations ON prestation_id = t_prestations.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
WHERE en_cours = '0' AND
ghm_id = 0 AND
est_ligne_rss = '1'
GROUP BY 1,2,3,4,5,6,7,8,9,10;
-- Non Valorisé (on ignore les hors période)
INSERT INTO w_cp_cti_facrsf
SELECT p_rss.import_id,
mat2a_import_id,
mat2a_annee,
dmt,
p_rsf_detail.type AS type_ligne,
''::text AS prestation_chapitre,
t_prestations.code AS prestation_code,
prestation_id,
'0' AS code_pec,
prix_unitaire,
SUM(p_rsf_detail.nombre * p_rsf_detail.coefficient) AS cti_nombre,
SUM(p_rsf_detail.base_remboursement) AS cti_base_remboursement,
SUM(p_rsf_detail.base_remboursement_sauf_transition) AS cti_base_remboursement_sauf_transition,
SUM(p_rsf_detail.sejour_remboursable) AS cti_montant_remboursable,
0 as cti_montant_remboursable_fides,
0 as cti_montant_remboursable_nonfides,
0 as est_valorise
FROM pmsi.p_rss
JOIN pmsi.p_rsf_detail_non_valorise p_rsf_detail ON p_rsf_detail.rss_id = p_rss.oid
JOIN pmsi.t_regles_non_valorisation ON t_regles_non_valorisation.oid = p_rsf_detail.regle_id
JOIN pmsi.t_prestations ON prestation_id = t_prestations.oid
JOIN w_cp_imports ON w_cp_imports.import_id = p_rss.import_id
WHERE en_cours = '0' AND
ghm_id = 0 AND
est_ligne_rss = '1' AND
(t_regles_non_valorisation.code != '16' OR t_regles_non_valorisation.code = '16' AND t_prestations.code IN ('APU', 'APC', 'APV', 'APY', 'AVY') AND mat2a_annee = 2017)
GROUP BY 1,2,3,4,5,6,7,8,9,10;
-- Association chapitre
UPDATE w_cp_cti_facrsf
SET prestation_chapitre = 'T2VVATU'
WHERE prestation_code = 'ATU';
UPDATE w_cp_cti_facrsf
SET prestation_chapitre = 'T2VVFFM'
WHERE prestation_code = 'FFM';
UPDATE w_cp_cti_facrsf
SET prestation_chapitre = 'T2VVDME'
WHERE prestation_code IN ('APE','PII','AP2');
UPDATE w_cp_cti_facrsf
SET prestation_chapitre = 'INNOVATION'
WHERE prestation_code IN ('I01','I02','I03','I04','I05','I14','I15');
UPDATE w_cp_cti_facrsf
SET prestation_chapitre = 'T2VVDME', prestation_code = 'DMI'
WHERE prestation_id IN (SELECT prestation_defaut_id FROM pmsi.t_lpp)
;
UPDATE w_cp_cti_facrsf
SET prestation_chapitre = 'URGENCE'
WHERE prestation_code IN (SELECT split_part(data_mat2a[1],' ',1) AS prestation_code FROM pmsi.p_mat2a_data WHERE file_code IN ('T2VVFU') AND line_type = 'D' GROUP BY 1);
UPDATE w_cp_cti_facrsf
SET prestation_chapitre = file_code
FROM (
SELECT w_cp_cti_facrsf.prestation_code, file_code, est_valorise
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code IN ('T2VVNGAP','T2VVCCAM','T2VVFTN','T2VVSE') AND table_sequence = 1 AND
line_type = 'D' AND
(
data_mat2a[1] || ' ' ILIKE prestation_code || ' %' OR
(1=1
AND split_part(data_mat2a[1], ' ', 1) = split_part(prestation_code, ' ', 1)
AND data_mat2a[1] LIKE ANY (ARRAY['% Férié', '% Nuit'])
AND prestation_code LIKE ANY (ARRAY['% F', '% N'])
) OR
data_mat2a[1] ILIKE '%participation assur%' AND data_mat2a[1] ILIKE '%18 euros%' AND prestation_code = 'PAE' OR
data_mat2a[1] ILIKE '%ticket mod%' AND data_mat2a[1] ILIKE '%rateur forfaitaire%' AND prestation_code = 'PAT'
) AND
prestation_chapitre = '' AND
est_valorise = 1
GROUP BY 1,2,3
ORDER BY 1,2
) subview
WHERE w_cp_cti_facrsf.prestation_code = subview.prestation_code AND
w_cp_cti_facrsf.est_valorise = subview.est_valorise;
-- Chapitre non pris en compte
WITH subview AS (
SELECT w_cp_cti_facrsf.prestation_code, file_code, est_valorise
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN w_seq_hpnpc ON w_cp_cti_facrsf.mat2a_import_id = w_seq_hpnpc.mat2a_import_id
WHERE file_code IN ('T2QHPNPC') AND table_sequence = w_seq_hpnpc.seq_hpnpc AND
line_type = 'D' AND
(prestation_code ILIKE data_mat2a[1] OR prestation_code like '%**%') AND
prestation_chapitre = '' AND
est_valorise = 0
GROUP BY 1,2,3
ORDER BY 1,2
)
UPDATE w_cp_cti_facrsf
SET prestation_chapitre = subview.file_code
FROM subview
WHERE w_cp_cti_facrsf.prestation_code = subview.prestation_code AND
w_cp_cti_facrsf.est_valorise = subview.est_valorise;
RAISE NOTICE '%' , 'Cumuls CTI. Facturation RAFAEL. ATU.';
-- 2014 T2VVATU
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = '0',
data_cti[4] = '0',
data_cti[5] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2VVATU' AND
table_sequence = 1 AND
line_type IN ('F');
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_base_remboursement,
data_cti[5] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_nombre) AS cti_nombre,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T2VVATU' AND table_sequence = 1 AND
line_type = 'F' AND
prestation_code = 'ATU' AND
code_pec = '1'
GROUP BY 1
) subview
WHERE file_code = 'T2VVATU' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. Facturation RAFAEL. FFM.';
-- 2014 T2VVFFM
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = '0',
data_cti[4] = '0',
data_cti[5] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2VVFFM' AND
table_sequence = 1 AND
line_type IN ('F');
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_base_remboursement,
data_cti[5] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_nombre) AS cti_nombre,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T2VVFFM' AND table_sequence = 1 AND
line_type = 'F' AND
prestation_code = 'FFM' AND
code_pec = '1'
GROUP BY 1
) subview
WHERE file_code = 'T2VVFFM' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. Facturation RAFAEL. FTN-FTR.';
-- 2014 T2VVFTN
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = '0',
data_cti[5] = '0',
data_cti[6] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2VVFTN' AND
table_sequence = 1 AND
line_type IN ('D', 'F');
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = cti_nombre,
data_cti[5] = cti_base_remboursement,
data_cti[6] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_nombre) AS cti_nombre,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T2VVFTN' AND table_sequence = 1 AND
(line_type = 'D' AND
data_mat2a[1] ILIKE prestation_code || '%' AND
data_mat2a[2] ILIKE dmt || '%' AND dmt <> '' AND
data_mat2a[3] = prix_unitaire OR
line_type = 'D' AND
data_mat2a[1] ILIKE prestation_code || '%' AND
data_mat2a[2] ILIKE 'Non renseignée' AND dmt = '' AND
data_mat2a[3] = prix_unitaire OR
line_type = 'F') AND
prestation_chapitre = 'T2VVFTN' AND
code_pec = '1'
GROUP BY 1
) subview
WHERE file_code = 'T2VVFTN' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. Facturation RAFAEL. SEH.';
-- 2014 : T2VVSE
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = '0',
data_cti[4] = '0',
data_cti[5] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2VVSE' AND
table_sequence = 1 AND
line_type IN ('F');
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_base_remboursement,
data_cti[5] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_nombre) AS cti_nombre,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T2VVSE' AND table_sequence = 1 AND
line_type = 'F' AND
prestation_chapitre = 'T2VVSE' AND
code_pec = '1'
GROUP BY 1
) subview
WHERE file_code = 'T2VVSE' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. Facturation RAFAEL. CCAM.';
-- 2014 : T2VVCCAM
UPDATE pmsi.p_mat2a_data SET
data_cti[2] = '0',
data_cti[3] = '0',
data_cti[4] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2VVCCAM' AND
table_sequence = 1 AND
line_type IN ('D', 'F');
UPDATE pmsi.p_mat2a_data SET
data_cti[2] = cti_nombre,
data_cti[3] = cti_base_remboursement,
data_cti[4] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_nombre) AS cti_nombre,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T2VVCCAM' AND table_sequence = 1 AND
(line_type = 'D' AND
data_mat2a[1] ILIKE prestation_code || '%' OR
line_type = 'F') AND
prestation_chapitre = 'T2VVCCAM' AND
code_pec = '1'
GROUP BY 1
) subview
WHERE file_code = 'T2VVCCAM' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. Facturation RAFAEL. NGAP.';
-- 2014 : T2VVNGAP
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = '0',
data_cti[4] = '0',
data_cti[5] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2VVNGAP' AND
table_sequence = 1 AND
line_type IN ('D', 'F');
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_base_remboursement,
data_cti[5] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(CASE WHEN prestation_code <> 'PAT' AND prestation_code <> 'PAE' THEN cti_nombre ELSE 0 - cti_nombre END) AS cti_nombre,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T2VVNGAP' AND table_sequence = 1 AND
(
line_type = 'D' AND
trim(substr(data_mat2a[1],1,5)) ILIKE prestation_code AND
abs(base.cti_to_number(data_mat2a[2])) = prix_unitaire
OR
line_type = 'D' AND
(
data_mat2a[1] ILIKE '%Participation assur%' AND
data_mat2a[1] ILIKE '%18 euros%'
OR
data_mat2a[1] ILIKE '%ticket mod%' AND
data_mat2a[1] ILIKE '%rateur forfaitaire%'
) AND
abs(base.cti_to_number(data_mat2a[2])) = prix_unitaire AND
prestation_code = 'PAT'
OR
line_type = 'F'
) AND
prestation_chapitre = 'T2VVNGAP' AND
code_pec = '1'
GROUP BY 1
) subview
WHERE file_code = 'T2VVNGAP' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. Facturation RAFAEL. APE/DMI.';
-- Numéro de table dans la page 2.V.VDME où apparaissent les prestations APE/AP2 externes
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_seq_vdme') THEN
DROP TABLE IF EXISTS w_seq_vdme;
CREATE TEMP TABLE w_seq_vdme (code_vdme text, seq_vdme bigint);
END IF;
TRUNCATE w_seq_vdme;
INSERT INTO w_seq_vdme (code_vdme, seq_vdme)
(
SELECT
'AP2', table_sequence
FROM
pmsi.p_mat2a_data
WHERE 1=1
AND file_code = 'T2VVDME'
AND line_type = 'T'
AND data_mat2a[2] like '%Valorisation des prestations AP2%'
UNION
SELECT
'APE', table_sequence
FROM
pmsi.p_mat2a_data
WHERE 1=1
AND file_code = 'T2VVDME'
AND line_type = 'T'
AND data_mat2a[1] like '%Valorisation des prestations APE (DM)%'
)
;
-- 2014 T2VVDME
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = '0',
data_cti[4] = '0',
data_cti[5] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2VVDME' AND
table_sequence = ANY (ARRAY(SELECT seq_vdme FROM w_seq_vdme)::bigint[]) AND
line_type IN ('F');
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_base_remboursement,
data_cti[5] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_nombre) AS cti_nombre,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id,
w_seq_vdme
WHERE file_code = 'T2VVDME' AND
w_seq_vdme.code_vdme = 'APE' AND
table_sequence = w_seq_vdme.seq_vdme AND
line_type = 'F' AND
prestation_code = 'APE' AND
code_pec = '1'
GROUP BY 1
) subview
WHERE file_code = 'T2VVDME' AND p_mat2a_data.oid = subview.oid;
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_base_remboursement,
data_cti[5] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_nombre) AS cti_nombre,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id,
w_seq_vdme
WHERE file_code = 'T2VVDME' AND
w_seq_vdme.code_vdme = 'AP2' AND
table_sequence = w_seq_vdme.seq_vdme AND
line_type = 'F' AND
prestation_code = 'AP2' AND
code_pec = '1'
GROUP BY 1
) subview
WHERE file_code = 'T2VVDME' AND p_mat2a_data.oid = subview.oid;
RAISE NOTICE '%' , 'Cumuls CTI. Facturation RAFAEL. Lettres cle non prises en charge.';
UPDATE pmsi.p_mat2a_data SET
data_cti[2] = NULL,
data_cti[3] = '0',
data_cti[4] = CASE WHEN w_cp_imports.mat2a_annee >= 2020 THEN NULL ELSE '0' END,
data_cti[5] = CASE WHEN w_cp_imports.mat2a_annee >= 2020 THEN NULL ELSE '0' END
FROM w_cp_imports
JOIN w_seq_hpnpc ON w_cp_imports.mat2a_import_id = w_seq_hpnpc.mat2a_import_id
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2QHPNPC' AND
table_sequence = w_seq_hpnpc.seq_hpnpc AND
line_type IN ('D', 'F');
UPDATE pmsi.p_mat2a_data SET
data_cti[3] = cti_nombre,
data_cti[4] = cti_base_remboursement,
data_cti[5] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_nombre) AS cti_nombre,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
JOIN w_seq_hpnpc ON w_cp_cti_facrsf.mat2a_import_id = w_seq_hpnpc.mat2a_import_id
WHERE file_code = 'T2QHPNPC' AND table_sequence = w_seq_hpnpc.seq_hpnpc AND
(line_type = 'D' AND
(prestation_code ILIKE data_mat2a[1] OR prestation_code ILIKE '%**%') AND
data_mat2a[2] = prix_unitaire OR
line_type = 'F') AND
prestation_chapitre = 'T2QHPNPC'
GROUP BY 1
) subview
WHERE file_code = 'T2QHPNPC' AND p_mat2a_data.oid = subview.oid;
-- Les montants Mat2a sont faux, il ne faut pas d'erreur si nombre identique
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = data_mat2a[4],
data_cti[5] = data_mat2a[5]
FROM w_seq_hpnpc
WHERE w_seq_hpnpc.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2QHPNPC' AND
table_sequence = w_seq_hpnpc.seq_hpnpc AND
line_type IN ('D', 'F') AND
round(base.cti_to_number(data_cti[3]),0) = round(base.cti_to_number(data_mat2a[3]),0);
RAISE NOTICE '%' , 'Cumuls CTI. Facturation RAFAEL. Synthese';
-- 2014 : T2VRAEM
UPDATE pmsi.p_mat2a_data SET
data_cti[2] = '0',
data_cti[3] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2VRAEM' AND
table_sequence = 1 AND
line_type IN ('D', 'F') AND
(
data_mat2a[1] = 'ATU' OR
data_mat2a[1] = 'FFM' OR
data_mat2a[1] = 'FTN' OR
data_mat2a[1] = 'CCAM' OR
data_mat2a[1] = 'SE' OR
data_mat2a[1] = 'NGAP' OR
data_mat2a[1] = 'AP2' OR
data_mat2a[1] = 'DMI' OR
data_mat2a[1] = 'MED' OR
data_mat2a[1] = 'MOP' OR
data_mat2a[1] = 'INNOVATION' OR
data_mat2a[1] = 'URGENCE'
);
UPDATE pmsi.p_mat2a_data SET
data_cti[2] = cti_base_remboursement,
data_cti[3] = cti_montant_remboursable
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_base_remboursement) AS cti_base_remboursement,
SUM(cti_montant_remboursable) AS cti_montant_remboursable
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T2VRAEM' AND table_sequence = 1 AND
(
prestation_chapitre = 'T2VVATU' AND data_mat2a[1] = 'ATU' OR
prestation_chapitre = 'T2VVFFM' AND data_mat2a[1] = 'FFM' OR
prestation_chapitre = 'T2VVFTN' AND data_mat2a[1] = 'FTN' OR
prestation_chapitre = 'T2VVCCAM' AND data_mat2a[1] = 'CCAM' OR
prestation_chapitre = 'T2VVSE' AND data_mat2a[1] = 'SE' OR
prestation_chapitre = 'T2VVNGAP' AND data_mat2a[1] = 'NGAP' OR
prestation_chapitre = 'T2VVDME' AND data_mat2a[1] = 'DMI' AND prestation_code = 'DMI' OR
prestation_chapitre = 'T2VVDME' AND data_mat2a[1] = 'AP2' OR
data_mat2a[1] = 'MOP' AND prestation_code = 'MOPHNG' OR
prestation_chapitre = 'INNOVATION' AND data_mat2a[1] = 'INNOVATION'OR
prestation_chapitre = 'URGENCE' AND data_mat2a[1] = 'URGENCE'
) AND
code_pec = '1'
GROUP BY 1
) subview
WHERE file_code = 'T2VRAEM' AND p_mat2a_data.oid = subview.oid;
-- Tableau T1V1CP (OQN)
UPDATE pmsi.p_mat2a_data SET
data_cti = NULL
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T1V1CP' AND
table_sequence = 2 AND
(
line_type = 'D' OR
line_type = 'F' AND data_mat2a[1] ILIKE 'lib'
);
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = cti_base_remboursement
FROM (
SELECT p_mat2a_data.oid,
SUM(w_cp_cti_facrsf.cti_base_remboursement_sauf_transition) AS cti_base_remboursement
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T1V1CP' AND table_sequence = 2 AND
(
line_type = 'D' AND data_mat2a[1] ILIKE prestation_code OR
line_type = 'F' AND data_mat2a[1] ILIKE 'lib'
)
GROUP BY 1) subview
WHERE file_code = 'T1V1CP' AND p_mat2a_data.oid = subview.oid;
-- Création arrete versement
DELETE FROM pmsi.p_mat2a_data
USING w_cp_imports
WHERE p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id AND
file_code = 'VERSEMENT';
INSERT INTO pmsi.p_mat2a_data (
mat2a_import_id,
file_code,
table_sequence,
row_sequence,
line_type,
data_mat2a,
data_cti)
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 0, 'T',
ARRAY[replace(data_mat2a[1],'1.V.1.RAV','VERSEMENT'),
'Arrété versement',
data_mat2a[3]] AS data_mat2a,
data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'T1V1RAV' AND table_sequence = 1 AND line_type IN ('T');
INSERT INTO pmsi.p_mat2a_data (
mat2a_import_id,
file_code,
table_sequence,
row_sequence,
line_type,
data_mat2a,
data_cti)
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 0, 'H',
ARRAY['Rubrique',
'Montant versé'] AS data_mat2a,
data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'T1V1RAV' AND table_sequence = 1 AND line_type IN ('H');
INSERT INTO pmsi.p_mat2a_data (
mat2a_import_id,
file_code,
table_sequence,
row_sequence,
line_type,
data_mat2a,
data_cti)
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 1, 'D',
ARRAY['GHS y compris suppléments',data_mat2a[6]] AS data_mat2a,
ARRAY[NULL::text,data_cti[6]] AS data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'T1V1RAV' AND table_sequence = 1 AND data_mat2a[1] ILIKE '%Total valorisation%'
UNION
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 2, 'D',
ARRAY['FFM',data_mat2a[3]] AS data_mat2a,
ARRAY[NULL::text,data_cti[3]] AS data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'T2VRAEM' AND table_sequence = 1 AND line_type = 'D' AND data_mat2a[1] = 'FFM'
UNION
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 3, 'D',
ARRAY['IVG',data_mat2a[4]] AS data_mat2a,
ARRAY[NULL::text,data_cti[4]] AS data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'T1V1VIVG' AND table_sequence = 1 AND line_type = 'F'
UNION
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 4, 'D',
ARRAY['Actes et consultations externes',SUM(base.cti_to_number(data_mat2a[3]))::text] AS data_mat2a,
ARRAY[NULL::text,SUM(base.cti_to_number(data_cti[3]))::text] AS data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'T2VRAEM' AND table_sequence = 1 AND line_type = 'D' AND data_mat2a[1] <> 'SE' AND data_mat2a[1] <> 'FFM'
GROUP BY 1
UNION
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 5, 'D',
ARRAY['Forfait sécurité et environnement hospitalier',data_mat2a[3]] AS data_mat2a,
ARRAY[NULL::text,data_cti[3]] AS data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'T2VRAEM' AND table_sequence = 1 AND line_type = 'D' AND data_mat2a[1] = 'SE'
ORDER BY 1,4;
INSERT INTO pmsi.p_mat2a_data (
mat2a_import_id,
file_code,
table_sequence,
row_sequence,
line_type,
data_mat2a,
data_cti)
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 9, 'F',
ARRAY['Total Prestations d''hospitalisation',SUM(base.cti_to_number(data_mat2a[2]))::text] AS data_mat2a,
ARRAY[NULL::text,SUM(base.cti_to_number(data_cti[2]))::text] AS data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'VERSEMENT' AND table_sequence = 1 AND line_type = 'D'
GROUP BY 1;
INSERT INTO pmsi.p_mat2a_data (
mat2a_import_id,
file_code,
table_sequence,
row_sequence,
line_type,
data_mat2a,
data_cti)
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 11, 'D',
ARRAY['Médicaments',data_mat2a[6]] AS data_mat2a,
ARRAY[NULL::text,data_cti[6]] AS data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'T1V2VMED' AND table_sequence = 2 AND line_type = 'F'
UNION
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 12, 'D',
ARRAY['DMI',data_mat2a[6]] AS data_mat2a,
ARRAY[NULL::text,data_cti[6]] AS data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'T1V3VDMI' AND table_sequence = 2 AND line_type = 'F'
UNION
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 21, 'D',
ARRAY['Activité AME',data_mat2a[2]] AS data_mat2a,
ARRAY[NULL::text,data_cti[2]] AS data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'T1V4RAME' AND table_sequence = 4 AND data_mat2a[1] ILIKE '%Total valorisation%'
ORDER BY 1,4;
INSERT INTO pmsi.p_mat2a_data (
mat2a_import_id,
file_code,
table_sequence,
row_sequence,
line_type,
data_mat2a,
data_cti)
SELECT w_cp_imports.mat2a_import_id, 'VERSEMENT', 1, 99, 'F',
ARRAY['Total Général',SUM(base.cti_to_number(data_mat2a[2]))::text] AS data_mat2a,
ARRAY[NULL::text,SUM(base.cti_to_number(data_cti[2]))::text] AS data_cti
FROM pmsi.p_mat2a_data
JOIN w_cp_imports ON p_mat2a_data.mat2a_import_id = w_cp_imports.mat2a_import_id
WHERE file_code = 'VERSEMENT' AND table_sequence = 1 AND line_type = 'D'
GROUP BY 1;
-- 2014 : T2VFIDES
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = '0',
data_cti[5] = '0'
FROM w_cp_imports
WHERE w_cp_imports.mat2a_import_id = p_mat2a_data.mat2a_import_id AND
file_code = 'T2VFIDES' AND
table_sequence = 2 AND
line_type IN ('D');
UPDATE pmsi.p_mat2a_data SET
data_cti[4] = cti_montant_remboursable_nonfides,
data_cti[5] = cti_montant_remboursable_fides
FROM (
SELECT p_mat2a_data.oid,
SUM(cti_montant_remboursable_fides) AS cti_montant_remboursable_fides,
SUM(cti_montant_remboursable_nonfides) AS cti_montant_remboursable_nonfides
FROM w_cp_cti_facrsf
JOIN pmsi.p_mat2a_data ON
w_cp_cti_facrsf.mat2a_import_id = p_mat2a_data.mat2a_import_id
WHERE file_code = 'T2VFIDES' AND
table_sequence = 2 AND
line_type IN ('D') AND
(
prestation_code <> 'MOP' AND prestation_code ILIKE trim(split_part(data_mat2a[1],' ',1)) || '%' OR
prestation_chapitre = 'T2VVCCAM' AND data_mat2a[1] = 'CCAM' OR
prestation_chapitre = 'T2VVNGAP' AND data_mat2a[1] = 'NGAP' OR
prestation_chapitre = 'T2VVFTN' AND data_mat2a[1] = 'FTN' OR
prestation_code = 'MOPHNG' AND data_mat2a[1] = 'MOP' OR
prestation_chapitre = 'INNOVATION' AND data_mat2a[1] = 'INNOVATION' OR
prestation_chapitre = 'URGENCE' AND data_mat2a[1] = 'URGENCE'
) AND
code_pec = '1'
GROUP BY 1
) subview
WHERE file_code = 'T2VFIDES' AND p_mat2a_data.oid = subview.oid;
-- Mise à jour des classes et listes
DROP TABLE IF EXISTS w_prestations;
CREATE TEMP TABLE w_prestations AS
SELECT t_prestations.code, t_prestations.oid AS prestation_id,
CASE file_code
WHEN 'T2VVFTN'::text THEN '14'
WHEN 'T2VVSE'::text THEN '16'
WHEN 'T2VVCCAM'::text THEN '15'
WHEN 'T2VVNGAP'::text THEN '17'
WHEN 'T2VVFU'::text THEN '26'
ELSE '' END AS prestation_section_code
FROM pmsi.t_prestations
JOIN
(
SELECT
file_code,
CASE
WHEN data_mat2a[1] ILIKE 'participation assu%' THEN 'PAE'
WHEN data_mat2a[1] ILIKE 'ticket mod%' THEN 'PAT'
WHEN data_mat2a[1] LIKE 'FSD %' THEN 'FSD'
WHEN substr(data_mat2a[1],5,1) IN ('F','N') THEN left(data_mat2a[1],5)
ELSE split_part(data_mat2a[1],' ',1) END AS prestation_code,
0::bigint AS prestation_id
FROM pmsi.p_mat2a_data
WHERE file_code IN ('T2VVCCAM','T2VVNGAP','T2VVFTN','T2VVSE','T2VVFU') AND
line_type = 'D'
GROUP BY 1,2
ORDER BY 1,2
) subview ON
t_prestations.code = subview.prestation_code
;
INSERT INTO w_prestations
SELECT t_prestations.code, t_prestations.oid AS prestation_id, '23' AS prestation_section_code
FROM pmsi.t_prestations
WHERE code = 'MOPHNG'
;
DELETE FROM pmsi.t_classes_sections_elements
USING
(
SELECT section_id, to_id
FROM w_prestations
JOIN (SELECT t_classes_sections.code AS section_code, section_id, to_id
FROM pmsi.t_classes
JOIN pmsi.t_classes_sections ON classe_id = t_classes.oid
JOIN pmsi.t_classes_sections_elements ON section_id = t_classes_sections.oid
WHERE t_classes.code = 'CTI_RAFA_P'
) subview ON prestation_id = to_id
WHERE section_code <> prestation_section_code AND
prestation_section_code <> ''
) subview
WHERE t_classes_sections_elements.section_id = subview.section_id AND
t_classes_sections_elements.to_id = subview.to_id
;
INSERT INTO pmsi.t_classes_sections_elements(section_id, to_id)
SELECT t_classes_sections.oid, prestation_id
FROM w_prestations
JOIN pmsi.t_classes_sections ON prestation_section_code = t_classes_sections.code
JOIN pmsi.t_classes ON classe_id = t_classes.oid
WHERE t_classes.code = 'CTI_RAFA_P' AND
(t_classes_sections.oid::text || '-' || prestation_id::text) NOT IN (SELECT section_id::text || '-' || to_id::text FROm pmsi.t_classes_sections_elements)
;
RETURN 'OK';
END;