|
|
return: text
|
|
|
lang: plpgsql
|
|
|
src: |
|
|
|
DECLARE
|
|
|
|
|
|
BEGIN
|
|
|
IF NOT EXISTS (SELECT * FROM pg_class WHERE relnamespace = pg_my_temp_schema() AND relname = 'w_rss_rum_ventil') THEN
|
|
|
CREATE TEMP TABLE w_rss_rum_ventil
|
|
|
(
|
|
|
rss_id bigint,
|
|
|
unite_medicale_id bigint,
|
|
|
type_eclatement char(1),
|
|
|
unite_medicale_code text,
|
|
|
unite_medicale_texte text,
|
|
|
unite_medicale_type_autorisation text,
|
|
|
medecin_rss_id bigint,
|
|
|
nb_rum numeric(5,0),
|
|
|
unite_medicale_1_id numeric,
|
|
|
unite_medicale_v_id bigint,
|
|
|
unite_medicale_v_code text,
|
|
|
unite_medicale_v_texte text
|
|
|
);
|
|
|
END IF;
|
|
|
|
|
|
TRUNCATE w_rss_rum_ventil;
|
|
|
|
|
|
INSERT INTO w_rss_rum_ventil
|
|
|
SELECT p_rss_rum.rss_id,
|
|
|
p_rss_rum.unite_medicale_id,
|
|
|
t_unites_medicales.type_eclatement,
|
|
|
t_unites_medicales.code AS unite_medicale_code,
|
|
|
t_unites_medicales.texte AS unite_medicale_texte,
|
|
|
t_unites_medicales.type_autorisation AS unite_medicale_type_autorisation,
|
|
|
p_rss.medecin_rss_id,
|
|
|
p_rss.nb_rum,
|
|
|
(MIN(Array[p_rss_rum_un.no_rum,p_rss_rum_un.unite_medicale_id]))[2] AS unite_medicale_1_id,
|
|
|
0::bigint AS unite_medicale_v_id,
|
|
|
''::text AS unite_medicale_v_code,
|
|
|
''::text AS unite_medicale_v_texte
|
|
|
FROM pmsi.p_rss_rum
|
|
|
JOIN pmsi.p_rss ON p_rss.oid = p_rss_rum.rss_id
|
|
|
JOIN pmsi.t_unites_medicales ON p_rss_rum.unite_medicale_id = t_unites_medicales.oid
|
|
|
LEFT JOIN pmsi.p_rss_rum p_rss_rum_un ON p_rss_rum.rss_id = p_rss_rum_un.rss_id AND p_rss_rum.unite_medicale_id <> p_rss_rum_un.unite_medicale_id
|
|
|
LEFT JOIN pmsi.t_unites_medicales t_unites_medicales_un ON p_rss_rum_un.unite_medicale_id = t_unites_medicales_un.oid
|
|
|
WHERE
|
|
|
(t_unites_medicales.type_eclatement IN ('1') AND p_rss_rum_un.rss_id IS NOT NULL AND COALESCE(t_unites_medicales_un.type_eclatement,'') = '' OR
|
|
|
t_unites_medicales.type_eclatement IN ('1') AND p_rss_rum_un.rss_id IS NULL AND p_rss.nb_rum = 1 OR
|
|
|
t_unites_medicales.type_eclatement IN ('2') AND medecin_rss_id <> 0
|
|
|
)
|
|
|
GROUP BY 1,2,3,4,5,6,7,8;
|
|
|
UPDATE w_rss_rum_ventil SET
|
|
|
unite_medicale_v_code = unite_medicale_code || '-' || t_unites_medicales.code,
|
|
|
unite_medicale_v_texte = unite_medicale_texte || '-' || t_unites_medicales.texte
|
|
|
FROM pmsi.t_unites_medicales
|
|
|
WHERE w_rss_rum_ventil.type_eclatement = '1' AND
|
|
|
w_rss_rum_ventil.unite_medicale_1_id = t_unites_medicales.oid;
|
|
|
UPDATE w_rss_rum_ventil SET
|
|
|
unite_medicale_v_code = unite_medicale_code || '-MONO',
|
|
|
unite_medicale_v_texte = unite_medicale_texte || '-MonoRUM'
|
|
|
WHERE w_rss_rum_ventil.type_eclatement = '1' AND
|
|
|
nb_rum = 1;
|
|
|
UPDATE w_rss_rum_ventil SET
|
|
|
unite_medicale_v_code = replace(unite_medicale_code,'-MONO','') || '-' || replace(t_specialites_medecin.code,'.',''),
|
|
|
unite_medicale_v_texte = replace(unite_medicale_texte,'-MonoRUM','') || '-' || t_specialites_medecin.texte
|
|
|
FROM pmsi.t_medecins t_medecins_pmsi
|
|
|
JOIN base.t_medecins ON t_medecins_pmsi.medecin_id = t_medecins.oid
|
|
|
JOIN base.t_specialites_medecin ON t_medecins.specialite_id = t_specialites_medecin.oid
|
|
|
WHERE w_rss_rum_ventil.type_eclatement = '2' AND
|
|
|
w_rss_rum_ventil.medecin_rss_id = t_medecins_pmsi.oid;
|
|
|
|
|
|
INSERT INTO pmsi.t_unites_medicales (code, texte, type_autorisation)
|
|
|
SELECT
|
|
|
unite_medicale_v_code,
|
|
|
unite_medicale_v_texte,
|
|
|
unite_medicale_type_autorisation
|
|
|
FROM w_rss_rum_ventil
|
|
|
WHERE unite_medicale_v_code NOT IN (SELECT code FROM pmsi.t_unites_medicales)
|
|
|
GROUP BY 1,2,3;
|
|
|
UPDATE w_rss_rum_ventil SET
|
|
|
unite_medicale_v_id = t_unites_medicales.oid
|
|
|
FROM pmsi.t_unites_medicales
|
|
|
WHERE w_rss_rum_ventil.unite_medicale_v_code = t_unites_medicales.code;
|
|
|
UPDATE pmsi.t_unites_medicales
|
|
|
SET type_autorisation = unite_medicale_type_autorisation
|
|
|
FROM
|
|
|
(SELECT unite_medicale_v_id, unite_medicale_type_autorisation
|
|
|
FROM w_rss_rum_ventil
|
|
|
GROUP BY 1,2
|
|
|
) subview
|
|
|
WHERE t_unites_medicales.oid = unite_medicale_v_id AND
|
|
|
type_autorisation IS DISTINCT FROM unite_medicale_type_autorisation;
|
|
|
UPDATE pmsi.p_rss
|
|
|
SET unite_medicale_principale_id = unite_medicale_v_id
|
|
|
FROM w_rss_rum_ventil
|
|
|
WHERE w_rss_rum_ventil.rss_id = p_rss.oid AND
|
|
|
w_rss_rum_ventil.unite_medicale_id = p_rss.unite_medicale_principale_id;
|
|
|
UPDATE pmsi.p_rss_rum
|
|
|
SET unite_medicale_id = unite_medicale_v_id
|
|
|
FROM w_rss_rum_ventil
|
|
|
WHERE w_rss_rum_ventil.rss_id = p_rss_rum.rss_id AND
|
|
|
w_rss_rum_ventil.unite_medicale_id = p_rss_rum.unite_medicale_id;
|
|
|
UPDATE pmsi.p_rsf_detail
|
|
|
SET unite_medicale_id = unite_medicale_v_id
|
|
|
FROM w_rss_rum_ventil
|
|
|
WHERE w_rss_rum_ventil.rss_id = p_rsf_detail.rss_id AND
|
|
|
w_rss_rum_ventil.unite_medicale_id = p_rsf_detail.unite_medicale_id AND
|
|
|
p_rsf_detail.est_ligne_rum = '1';
|
|
|
UPDATE pmsi.p_rss_diagnostics
|
|
|
SET unite_medicale_id = unite_medicale_v_id
|
|
|
FROM w_rss_rum_ventil
|
|
|
WHERE w_rss_rum_ventil.rss_id = p_rss_diagnostics.rss_id AND
|
|
|
w_rss_rum_ventil.unite_medicale_id = p_rss_diagnostics.unite_medicale_id;
|
|
|
UPDATE pmsi.p_rss_actes
|
|
|
SET unite_medicale_id = unite_medicale_v_id
|
|
|
FROM w_rss_rum_ventil
|
|
|
WHERE w_rss_rum_ventil.rss_id = p_rss_actes.rss_id AND
|
|
|
w_rss_rum_ventil.unite_medicale_id = p_rss_actes.unite_medicale_id;
|
|
|
INSERT INTO pmsi.p_oids (code_table, oid)
|
|
|
SELECT DISTINCT 'um', unite_medicale_v_id FROM w_rss_rum_ventil WHERE unite_medicale_v_id NOT IN (SELECT oid FROM pmsi.p_oids WHERE code_table = 'um');
|
|
|
|
|
|
UPDATE pmsi.t_unites_medicales SET
|
|
|
type_autorisation = t_unites_medicales_4.type_autorisation,
|
|
|
date_effet_autorisation = t_unites_medicales_4.date_effet_autorisation,
|
|
|
mode_hospitalisation = t_unites_medicales_4.mode_hospitalisation,
|
|
|
nb_lits = t_unites_medicales_4.nb_lits
|
|
|
FROM pmsi.t_unites_medicales t_unites_medicales_4
|
|
|
WHERE length(t_unites_medicales.code) > 4 AND
|
|
|
split_part(t_unites_medicales.code,'-',1) = t_unites_medicales_4.code AND
|
|
|
length(t_unites_medicales_4.code) <= 4 AND
|
|
|
(
|
|
|
t_unites_medicales.type_autorisation IS DISTINCT FROM t_unites_medicales_4.type_autorisation OR
|
|
|
t_unites_medicales.date_effet_autorisation IS DISTINCT FROM t_unites_medicales_4.date_effet_autorisation OR
|
|
|
t_unites_medicales.mode_hospitalisation IS DISTINCT FROM t_unites_medicales_4.mode_hospitalisation OR
|
|
|
t_unites_medicales.nb_lits IS DISTINCT FROM t_unites_medicales_4.nb_lits
|
|
|
);
|
|
|
|
|
|
RETURN 'OK';
|
|
|
END;
|