|
|
return: text
|
|
|
lang: plpgsql
|
|
|
src: |
|
|
|
DECLARE
|
|
|
|
|
|
|
|
|
result TEXT;
|
|
|
BEGIN
|
|
|
-- Paramétrage
|
|
|
INSERT INTO pmsi.t_divers (code, texte, valeur, description)
|
|
|
SELECT
|
|
|
'VENTILUM_MODE_GHS',
|
|
|
'Mode ventilation GHS par UM',
|
|
|
'PMS',
|
|
|
'DUR = Durée séjour, PMS = Durée séjour pondérée par PMS, PMJ = Durée séjour pondérée par PMJ'
|
|
|
WHERE 'VENTILUM_MODE_GHS' NOT IN (SELECT code FROM pmsi.t_divers);
|
|
|
UPDATE pmsi.t_divers
|
|
|
SET valeur = 'PMS'
|
|
|
WHERE code = 'VENTILUM_MODE_GHS' AND
|
|
|
valeur NOT IN ('DUR', 'PMS', 'PMJ');
|
|
|
-- Suppression génération précédente
|
|
|
DELETE FROM pmsi.p_rsf_detail WHERE est_ligne_rss <> '1' AND operation_lamda NOT IN ('1','2');
|
|
|
UPDATE pmsi.p_rsf_detail
|
|
|
SET
|
|
|
no_rum = 0,
|
|
|
unite_medicale_id = 0,
|
|
|
base_remboursement_rum = 0,
|
|
|
base_remboursement_rum_sauf_transition = 0,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame = 0,
|
|
|
sejour_remboursable_rum = 0,
|
|
|
est_ligne_rum = '0'
|
|
|
FROM pmsi.p_rss
|
|
|
WHERE
|
|
|
p_rsf_detail.rss_id = p_rss.oid
|
|
|
AND p_rss.nb_rum > 1
|
|
|
AND operation_lamda NOT IN ('1','2')
|
|
|
AND (no_rum IS DISTINCT FROM 0 OR
|
|
|
unite_medicale_id IS DISTINCT FROM 0 OR
|
|
|
base_remboursement_rum IS DISTINCT FROM 0 OR
|
|
|
sejour_remboursable_rum IS DISTINCT FROM 0 OR
|
|
|
base_remboursement_rum_sauf_transition IS DISTINCT FROM 0 OR
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM 0 OR
|
|
|
est_ligne_rum <> '0');
|
|
|
-- Mono rum
|
|
|
UPDATE pmsi.p_rsf_detail
|
|
|
SET
|
|
|
no_rum = p_rss_rum.no_rum,
|
|
|
unite_medicale_id = p_rss_rum.unite_medicale_id,
|
|
|
base_remboursement_rum = round(p_rsf_detail.base_remboursement,2),
|
|
|
base_remboursement_rum_sauf_transition = round(p_rsf_detail.base_remboursement_sauf_transition,2),
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame = round(p_rsf_detail.base_remboursement_sauf_transition_sauf_ame,2),
|
|
|
sejour_remboursable_rum = round(p_rsf_detail.sejour_remboursable,2),
|
|
|
est_ligne_rum = '1'
|
|
|
FROM pmsi.p_rss_rum
|
|
|
JOIN pmsi.p_rss ON p_rss.oid = p_rss_rum.rss_id
|
|
|
WHERE
|
|
|
p_rsf_detail.rss_id = p_rss.oid
|
|
|
AND p_rss.nb_rum = 1
|
|
|
AND operation_lamda NOT IN ('1','2')
|
|
|
AND (
|
|
|
p_rsf_detail.no_rum IS DISTINCT FROM p_rss_rum.no_rum OR
|
|
|
p_rsf_detail.unite_medicale_id IS DISTINCT FROM p_rss_rum.unite_medicale_id OR
|
|
|
p_rsf_detail.base_remboursement_rum IS DISTINCT FROM round(p_rsf_detail.base_remboursement,2) OR
|
|
|
p_rsf_detail.base_remboursement_rum_sauf_transition IS DISTINCT FROM round(p_rsf_detail.base_remboursement_sauf_transition,2) OR
|
|
|
p_rsf_detail.base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM round(p_rsf_detail.base_remboursement_sauf_transition_sauf_ame,2) OR
|
|
|
p_rsf_detail.sejour_remboursable_rum IS DISTINCT FROM round(p_rsf_detail.sejour_remboursable,2) OR
|
|
|
p_rsf_detail.est_ligne_rum <> '1'
|
|
|
);
|
|
|
UPDATE pmsi.p_rsf_detail
|
|
|
SET
|
|
|
date_fin = CASE WHEN date_fin > date_sortie THEN date_sortie WHEN date_fin < date_entree THEN date_entree ELSE date_fin END,
|
|
|
date_debut = CASE WHEN date_debut > date_sortie THEN date_sortie WHEN date_debut < date_entree THEN date_entree ELSE date_debut END
|
|
|
FROM pmsi.p_rss
|
|
|
WHERE
|
|
|
p_rsf_detail.rss_id = p_rss.oid
|
|
|
AND nb_rum > 1
|
|
|
AND operation_lamda NOT IN ('1','2')
|
|
|
AND (date_fin > date_sortie OR date_debut > date_sortie OR date_fin < date_entree OR date_debut < date_entree);
|
|
|
DROP TABLE IF EXISTS w_rsf_detail_rum;
|
|
|
CREATE TEMP TABLE w_rsf_detail_rum AS
|
|
|
SELECT p_rsf_detail.finess,
|
|
|
p_rsf_detail.no_rss,
|
|
|
nature,
|
|
|
mt,
|
|
|
dmt,
|
|
|
date_debut,
|
|
|
date_fin,
|
|
|
nombre,
|
|
|
coefficient,
|
|
|
prix_unitaire,
|
|
|
0::numeric AS base_remboursement,
|
|
|
taux_remboursement,
|
|
|
0::numeric AS sejour_facture,
|
|
|
0::numeric AS sejour_remboursable,
|
|
|
compteur,
|
|
|
ligne_t2a,
|
|
|
pec_fj,
|
|
|
pec_fj_id,
|
|
|
coefficient_mco,
|
|
|
p_rsf_detail.sejour_remboursable AS sejour_remboursable_2,
|
|
|
p_rsf_detail.ghs_id,
|
|
|
p_rsf_detail.base_remboursement AS base_remboursement_total,
|
|
|
COALESCE(p_rsf_detail.base_remboursement_sauf_transition,p_rsf_detail.base_remboursement) AS base_remboursement_total_sauf_transition,
|
|
|
COALESCE(p_rsf_detail.base_remboursement_sauf_transition_sauf_ame,p_rsf_detail.base_remboursement) AS base_remboursement_total_sauf_transition_sauf_ame,
|
|
|
nature_noemie,
|
|
|
prestation_id,
|
|
|
p_rsf_detail.rss_id,
|
|
|
type,
|
|
|
coefficient_geo,
|
|
|
'0'::text AS est_ligne_rss,
|
|
|
'1'::text AS est_ligne_rum,
|
|
|
p_rss_rum.no_rum,
|
|
|
p_rss_rum.unite_medicale_id,
|
|
|
0::numeric AS base_remboursement_rum,
|
|
|
0::numeric AS base_remboursement_rum_sauf_transition,
|
|
|
0::numeric AS base_remboursement_rum_sauf_transition_sauf_ame,
|
|
|
0::numeric AS sejour_remboursable_rum,
|
|
|
montant_supplement_nf,
|
|
|
date_comptable,
|
|
|
operation_lamda,
|
|
|
fides_detail
|
|
|
FROM
|
|
|
pmsi.p_rss_rum, pmsi.p_rsf_detail, pmsi.p_rss
|
|
|
WHERE p_rsf_detail.rss_id = p_rss_rum.rss_id AND
|
|
|
p_rsf_detail.rss_id = p_rss.oid AND p_rss.nb_rum > 1 AND
|
|
|
operation_lamda NOT IN ('1','2');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS w_rsf_detail_presta;
|
|
|
CREATE TEMP TABLE w_rsf_detail_presta AS
|
|
|
SELECT p_rsf_detail.rss_id,
|
|
|
p_rsf_detail.prestation_id,
|
|
|
SUM(p_rsf_detail.base_remboursement) AS base_remboursement_presta,
|
|
|
SUM(COALESCE(p_rsf_detail.base_remboursement_sauf_transition,p_rsf_detail.base_remboursement)) AS base_remboursement_presta_sauf_transition,
|
|
|
SUM(COALESCE(p_rsf_detail.base_remboursement_sauf_transition_sauf_ame,p_rsf_detail.base_remboursement)) AS base_remboursement_presta_sauf_transition_sauf_ame,
|
|
|
SUM(p_rsf_detail.sejour_remboursable) AS sejour_remboursable_presta
|
|
|
FROM
|
|
|
pmsi.p_rsf_detail
|
|
|
JOIN pmsi.p_rss ON p_rsf_detail.rss_id = p_rss.oid AND p_rss.nb_rum > 1
|
|
|
WHERE est_ligne_rss = '1' AND
|
|
|
operation_lamda NOT IN ('1','2')
|
|
|
GROUP BY 1,2;
|
|
|
|
|
|
|
|
|
TRUNCATE pmsi.p_ventilation_um;
|
|
|
INSERT INTO pmsi.p_ventilation_um(
|
|
|
unite_medicale_id, annee, nb_sejours_monorum, nb_jours_monorum, ca_ghs_monorum, pms, pmj)
|
|
|
SELECT t_unites_medicales.oid AS unite_medicale_id,
|
|
|
round(p_chiffrier.mois / 100,0) AS annee,
|
|
|
0,
|
|
|
0,
|
|
|
0,
|
|
|
0,
|
|
|
0
|
|
|
FROM pmsi.t_unites_medicales, pmsi.p_chiffrier
|
|
|
WHERE t_unites_medicales.oid IN (SELECT DISTINCT unite_medicale_id FROM pmsi.p_rss_rum)
|
|
|
GROUP BY 1,2;
|
|
|
UPDATE pmsi.p_ventilation_um SET
|
|
|
nb_sejours_monorum = subview.nb_rsa,
|
|
|
nb_jours_monorum = subview.duree_sejour
|
|
|
FROM
|
|
|
(
|
|
|
SELECT
|
|
|
date_part('year', p_rss.date_sortie) AS annee,
|
|
|
unite_medicale_principale_id as unite_medicale_id,
|
|
|
SUM(nb_rsa) as nb_rsa,
|
|
|
SUM(duree_sejour+1) as duree_sejour
|
|
|
FROM pmsi.p_rss
|
|
|
WHERE nb_rum = 1 AND
|
|
|
p_rss.ghm_id > 0 AND
|
|
|
p_rss.etat = '' AND p_rss.ca_ghs <> 0
|
|
|
GROUP BY 1,2) subview
|
|
|
WHERE pmsi.p_ventilation_um.unite_medicale_id = subview.unite_medicale_id AND
|
|
|
pmsi.p_ventilation_um.annee = subview.annee;
|
|
|
|
|
|
UPDATE pmsi.p_ventilation_um SET
|
|
|
ca_ghs_monorum = subview.ca_ghs
|
|
|
FROM
|
|
|
(
|
|
|
SELECT
|
|
|
date_part('year', p_rss.date_sortie) AS annee,
|
|
|
unite_medicale_id as unite_medicale_id,
|
|
|
base.cti_division(SUM(p_rsf_detail.base_remboursement), SUM(p_rss.nb_rsa) ) as pms,
|
|
|
COUNT(DISTINCT p_rss.oid) as nb_rsa,
|
|
|
SUM(p_rsf_detail.base_remboursement) as ca_ghs
|
|
|
FROM pmsi.p_rss, pmsi.p_rsf_detail
|
|
|
WHERE p_rss.oid = p_rsf_detail.rss_id AND nb_rum = 1 AND
|
|
|
operation_lamda NOT IN ('1','2') AND p_rss.ghm_id > 0 AND p_rss.etat = '' AND
|
|
|
p_rss.ca_ghs <> 0 AND p_rsf_detail.base_remboursement <> 0 AND
|
|
|
p_rsf_detail.est_ligne_rss = '1' AND prestation_id IN (SELECT oid FROM pmsi.t_prestations WHERE code = 'GHS')
|
|
|
GROUP BY 1,2) subview
|
|
|
WHERE pmsi.p_ventilation_um.unite_medicale_id = subview.unite_medicale_id AND
|
|
|
pmsi.p_ventilation_um.annee = subview.annee;
|
|
|
UPDATE pmsi.p_ventilation_um SET
|
|
|
pms = base.cti_division(ca_ghs_monorum,nb_sejours_monorum),
|
|
|
pmj = base.cti_division(ca_ghs_monorum,nb_jours_monorum);
|
|
|
-- Ajustement PMJ/PMS pour ono rum non significatifs (< 10)
|
|
|
UPDATE pmsi.p_ventilation_um
|
|
|
SET pms = subview.pms, pmj = subview.pmj
|
|
|
FROM (
|
|
|
SELECT annee, AVG(pms) AS pms, AVG(pmj) AS pmj
|
|
|
FROM pmsi.p_ventilation_um
|
|
|
WHERE nb_sejours_monorum >= 10
|
|
|
GROUP BY 1) subview
|
|
|
WHERE p_ventilation_um.annee = subview.annee AND
|
|
|
p_ventilation_um.nb_sejours_monorum < 10;
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS rss_resume;
|
|
|
CREATE TEMP TABLE rss_resume AS
|
|
|
SELECT
|
|
|
rss_id,
|
|
|
date_part('year', p_rss.date_sortie) AS annee,
|
|
|
p_rss.date_sortie,
|
|
|
p_rss.duree_sejour,
|
|
|
p_rss.nb_rum,
|
|
|
SUM(CASE WHEN t_prestations.code = 'GHS' THEN p_rsf_detail.base_remboursement ELSE 0 END) as ca_ghs
|
|
|
FROM pmsi.p_rss, pmsi.p_rsf_detail, pmsi.t_prestations
|
|
|
WHERE p_rss.oid = p_rsf_detail.rss_id
|
|
|
AND nb_rum > 1 AND p_rss.ghm_id > 0 AND p_rss.etat = ''
|
|
|
AND prestation_id = t_prestations.oid
|
|
|
AND p_rsf_detail.est_ligne_rss = '1' AND
|
|
|
operation_lamda NOT IN ('1','2')
|
|
|
GROUP BY 1,2,3,4,5
|
|
|
ORDER BY 1;
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS rum_pmsval;
|
|
|
CREATE TEMP TABLE rum_pmsval AS
|
|
|
SELECT
|
|
|
rss_resume.rss_id ,
|
|
|
rss_resume.ca_ghs as ca_ghs,
|
|
|
v_rss_rum_1.no_rum,
|
|
|
v_rss_rum_1.unite_medicale_id,
|
|
|
t_unites_medicales.type_autorisation,
|
|
|
t_divers.valeur AS type_ventilation_ca_ghs,
|
|
|
type_ventilation_ca AS type_ventilation_ca_special_um,
|
|
|
rss_resume.duree_sejour + rss_resume.nb_rum as duree_sejour,
|
|
|
v_rss_rum_1.duree_sejour_rum + 1 as duree_sejour_rum,
|
|
|
v_rss_rum_1.date_entree_rum, v_rss_rum_1.date_sortie_rum,
|
|
|
(v_rss_rum_1.duree_sejour_rum + 1) / (rss_resume.duree_sejour + rss_resume.nb_rum) as dur_coeff,
|
|
|
pms,
|
|
|
pms * (v_rss_rum_1.duree_sejour_rum + 1) / (rss_resume.duree_sejour + rss_resume.nb_rum) as pms_val,
|
|
|
pmj,
|
|
|
pmj * (v_rss_rum_1.duree_sejour_rum + 1) / (rss_resume.duree_sejour + rss_resume.nb_rum) as pmj_val
|
|
|
FROM pmsi.v_rss_rum_1
|
|
|
JOIN rss_resume ON rss_resume.rss_id = v_rss_rum_1.rss_id
|
|
|
JOIN pmsi.p_ventilation_um ON v_rss_rum_1.unite_medicale_id = p_ventilation_um.unite_medicale_id AND rss_resume.annee = p_ventilation_um.annee
|
|
|
JOIN pmsi.t_unites_medicales ON v_rss_rum_1.unite_medicale_id = t_unites_medicales.oid
|
|
|
JOIN pmsi.t_divers ON t_divers.code = 'VENTILUM_MODE_GHS'
|
|
|
ORDER BY rss_resume.rss_id, v_rss_rum_1.no_rum;
|
|
|
|
|
|
|
|
|
CREATE INDEX rum_pmsval_i1 ON rum_pmsval USING btree (rss_id);
|
|
|
|
|
|
|
|
|
UPDATE rum_pmsval
|
|
|
SET pms_val = ca_ghs, pmj_val = ca_ghs / duree_sejour
|
|
|
WHERE rss_id IN (SELECT rss_id FROM rum_pmsval WHERE pms = 0);
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS rss_pmsval;
|
|
|
CREATE TEMP TABLE rss_pmsval AS
|
|
|
SELECT
|
|
|
rum_pmsval.rss_id,
|
|
|
MIN(rum_pmsval.no_rum) AS premier_rum,
|
|
|
MAX(rum_pmsval.no_rum) AS dernier_rum,
|
|
|
MIN(CASE WHEN type_autorisation LIKE '01%' THEN rum_pmsval.no_rum ELSE 999 END) AS premier_rum_01,
|
|
|
MIN(CASE WHEN type_autorisation LIKE '02%' THEN rum_pmsval.no_rum ELSE 999 END) AS premier_rum_02,
|
|
|
MIN(CASE WHEN type_autorisation LIKE '03%' THEN rum_pmsval.no_rum ELSE 999 END) AS premier_rum_03,
|
|
|
MIN(CASE WHEN type_autorisation LIKE '04%' OR type_autorisation LIKE '05%' OR type_autorisation LIKE '06%' THEN rum_pmsval.no_rum ELSE 999 END) AS premier_rum_04_05_06,
|
|
|
MIN(CASE WHEN type_autorisation LIKE '13%' THEN rum_pmsval.no_rum ELSE 999 END) AS premier_rum_13,
|
|
|
SUM(CASE WHEN type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN pms_val ELSE 0 END) as pms_val,
|
|
|
SUM(CASE WHEN type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN pmj_val ELSE 0 END) as pmj_val,
|
|
|
SUM(CASE WHEN type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN dur_coeff ELSE 0 END) as pms_dur_coeff
|
|
|
FROM rum_pmsval
|
|
|
GROUP BY 1
|
|
|
ORDER BY 1;
|
|
|
|
|
|
|
|
|
CREATE INDEX rss_pmsval_i1 ON rss_pmsval USING btree (rss_id);
|
|
|
|
|
|
|
|
|
UPDATE rss_pmsval SET premier_rum_01 = premier_rum WHERE premier_rum_01 = 999;
|
|
|
UPDATE rss_pmsval SET premier_rum_02 = premier_rum WHERE premier_rum_02 = 999;
|
|
|
UPDATE rss_pmsval SET premier_rum_03 = premier_rum WHERE premier_rum_03 = 999;
|
|
|
UPDATE rss_pmsval SET premier_rum_04_05_06 = premier_rum WHERE premier_rum_04_05_06 = 999;
|
|
|
UPDATE rss_pmsval SET premier_rum_13 = premier_rum WHERE premier_rum_13 = 999;
|
|
|
|
|
|
|
|
|
UPDATE w_rsf_detail_rum p_rsf_detail SET
|
|
|
base_remboursement_rum =
|
|
|
CASE
|
|
|
WHEN type_ventilation_ca_ghs = 'DUR' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base_remboursement_total * dur_coeff,2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMS' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total * pms_dur_coeff * rum_pmsval.pms_val , rss_pmsval.pms_val),2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMJ' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total * pms_dur_coeff * rum_pmsval.pmj_val , rss_pmsval.pmj_val),2)
|
|
|
ELSE round(base_remboursement_total * dur_coeff,2) END,
|
|
|
base_remboursement_rum_sauf_transition =
|
|
|
CASE
|
|
|
WHEN type_ventilation_ca_ghs = 'DUR' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base_remboursement_total_sauf_transition * dur_coeff,2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMS' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total_sauf_transition * pms_dur_coeff * rum_pmsval.pms_val , rss_pmsval.pms_val),2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMJ' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total_sauf_transition * pms_dur_coeff * rum_pmsval.pmj_val , rss_pmsval.pmj_val),2)
|
|
|
ELSE round(base_remboursement_total_sauf_transition * dur_coeff,2) END,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame =
|
|
|
CASE
|
|
|
WHEN type_ventilation_ca_ghs = 'DUR' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base_remboursement_total_sauf_transition_sauf_ame * dur_coeff,2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMS' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total_sauf_transition_sauf_ame * pms_dur_coeff * rum_pmsval.pms_val , rss_pmsval.pms_val),2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMJ' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total_sauf_transition_sauf_ame * pms_dur_coeff * rum_pmsval.pmj_val , rss_pmsval.pmj_val),2)
|
|
|
ELSE round(base_remboursement_total_sauf_transition_sauf_ame * dur_coeff,2) END,
|
|
|
base_remboursement = 0,
|
|
|
sejour_remboursable_rum =
|
|
|
CASE
|
|
|
WHEN type_ventilation_ca_ghs = 'DUR' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(sejour_remboursable_2 * dur_coeff,2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMS' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(sejour_remboursable_2 * pms_dur_coeff * rum_pmsval.pms_val , rss_pmsval.pms_val),2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMJ' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(sejour_remboursable_2 * pms_dur_coeff * rum_pmsval.pmj_val , rss_pmsval.pmj_val),2)
|
|
|
ELSE round(sejour_remboursable_2 * dur_coeff,2) END,
|
|
|
sejour_remboursable = 0
|
|
|
FROM rum_pmsval
|
|
|
JOIN rss_pmsval ON rum_pmsval.rss_id = rss_pmsval.rss_id
|
|
|
, pmsi.t_prestations
|
|
|
WHERE
|
|
|
p_rsf_detail.rss_id = rum_pmsval.rss_id
|
|
|
AND prestation_id = t_prestations.oid
|
|
|
AND p_rsf_detail.no_rum = rum_pmsval.no_rum
|
|
|
AND est_ligne_rum = '1'
|
|
|
AND t_prestations.code IN ('GHS', 'EXH')
|
|
|
AND rss_pmsval.pms_val <> 0
|
|
|
AND (
|
|
|
base_remboursement_rum IS DISTINCT FROM
|
|
|
CASE
|
|
|
WHEN type_ventilation_ca_ghs = 'DUR' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base_remboursement_total * dur_coeff,2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMS' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total * pms_dur_coeff * rum_pmsval.pms_val , rss_pmsval.pms_val),2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMJ' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total * pms_dur_coeff * rum_pmsval.pmj_val , rss_pmsval.pmj_val),2)
|
|
|
ELSE round(base_remboursement_total * dur_coeff,2) END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition IS DISTINCT FROM
|
|
|
CASE
|
|
|
WHEN type_ventilation_ca_ghs = 'DUR' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base_remboursement_total_sauf_transition * dur_coeff,2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMS' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total_sauf_transition * pms_dur_coeff * rum_pmsval.pms_val , rss_pmsval.pms_val),2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMJ' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total_sauf_transition * pms_dur_coeff * rum_pmsval.pmj_val , rss_pmsval.pmj_val),2)
|
|
|
ELSE round(base_remboursement_total_sauf_transition * dur_coeff,2) END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM
|
|
|
CASE
|
|
|
WHEN type_ventilation_ca_ghs = 'DUR' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base_remboursement_total_sauf_transition_sauf_ame * dur_coeff,2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMS' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total_sauf_transition_sauf_ame * pms_dur_coeff * rum_pmsval.pms_val , rss_pmsval.pms_val),2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMJ' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(base_remboursement_total_sauf_transition_sauf_ame * pms_dur_coeff * rum_pmsval.pmj_val , rss_pmsval.pmj_val),2)
|
|
|
ELSE round(base_remboursement_total_sauf_transition_sauf_ame * dur_coeff,2) END
|
|
|
OR
|
|
|
base_remboursement IS DISTINCT FROM 0
|
|
|
OR
|
|
|
sejour_remboursable_rum IS DISTINCT FROM
|
|
|
CASE
|
|
|
WHEN type_ventilation_ca_ghs = 'DUR' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(sejour_remboursable_2 * dur_coeff,2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMS' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(sejour_remboursable_2 * pms_dur_coeff * rum_pmsval.pms_val , rss_pmsval.pms_val),2)
|
|
|
WHEN type_ventilation_ca_ghs = 'PMJ' AND type_ventilation_ca_special_um IS DISTINCT FROM '1' THEN round(base.cti_division(sejour_remboursable_2 * pms_dur_coeff * rum_pmsval.pmj_val , rss_pmsval.pmj_val),2)
|
|
|
ELSE round(sejour_remboursable_2 * dur_coeff,2) END
|
|
|
OR
|
|
|
sejour_remboursable IS DISTINCT FROM 0
|
|
|
);
|
|
|
|
|
|
|
|
|
UPDATE w_rsf_detail_rum p_rsf_detail SET
|
|
|
base_remboursement_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_01 THEN base_remboursement_total ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_01 THEN base_remboursement_total_sauf_transition ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_01 THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END,
|
|
|
sejour_remboursable_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_01 THEN sejour_remboursable_2 ELSE 0 END
|
|
|
FROM rum_pmsval, rss_pmsval, pmsi.t_prestations, rss_resume
|
|
|
WHERE
|
|
|
p_rsf_detail.rss_id = rum_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_resume.rss_id
|
|
|
AND prestation_id = t_prestations.oid
|
|
|
AND p_rsf_detail.no_rum = rum_pmsval.no_rum
|
|
|
AND est_ligne_rum = '1'
|
|
|
AND t_prestations.code = 'REA'
|
|
|
AND (
|
|
|
base_remboursement_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_01 THEN base_remboursement_total ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_01 THEN base_remboursement_total_sauf_transition ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_01 THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END
|
|
|
OR
|
|
|
sejour_remboursable_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_01 THEN sejour_remboursable_2 ELSE 0 END
|
|
|
);
|
|
|
|
|
|
UPDATE w_rsf_detail_rum p_rsf_detail SET
|
|
|
base_remboursement_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_13 THEN base_remboursement_total ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_13 THEN base_remboursement_total_sauf_transition ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_13 THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END,
|
|
|
sejour_remboursable_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_13 THEN sejour_remboursable_2 ELSE 0 END
|
|
|
FROM rum_pmsval, rss_pmsval, pmsi.t_prestations, rss_resume
|
|
|
WHERE
|
|
|
p_rsf_detail.rss_id = rum_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_resume.rss_id
|
|
|
AND prestation_id = t_prestations.oid
|
|
|
AND p_rsf_detail.no_rum = rum_pmsval.no_rum
|
|
|
AND est_ligne_rum = '1'
|
|
|
AND t_prestations.code = 'REP'
|
|
|
AND (
|
|
|
base_remboursement_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_13 THEN base_remboursement_total ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_13 THEN base_remboursement_total_sauf_transition ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_13 THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END
|
|
|
OR
|
|
|
sejour_remboursable_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_13 THEN sejour_remboursable_2 ELSE 0 END
|
|
|
);
|
|
|
|
|
|
|
|
|
UPDATE w_rsf_detail_rum p_rsf_detail SET
|
|
|
base_remboursement_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_02 THEN base_remboursement_total ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_02 THEN base_remboursement_total_sauf_transition ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_02 THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END,
|
|
|
sejour_remboursable_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_02 THEN sejour_remboursable_2 ELSE 0 END
|
|
|
FROM rum_pmsval, rss_pmsval, pmsi.t_prestations, rss_resume
|
|
|
WHERE
|
|
|
p_rsf_detail.rss_id = rum_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_resume.rss_id
|
|
|
AND prestation_id = t_prestations.oid
|
|
|
AND p_rsf_detail.no_rum = rum_pmsval.no_rum
|
|
|
AND est_ligne_rum = '1'
|
|
|
AND t_prestations.code = 'STF'
|
|
|
AND (
|
|
|
base_remboursement_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_02 THEN base_remboursement_total ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_02 THEN base_remboursement_total_sauf_transition ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_02 THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END
|
|
|
OR
|
|
|
sejour_remboursable_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_02 THEN sejour_remboursable_2 ELSE 0 END
|
|
|
);
|
|
|
|
|
|
|
|
|
UPDATE w_rsf_detail_rum p_rsf_detail SET
|
|
|
base_remboursement_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_03 THEN base_remboursement_total ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_03 THEN base_remboursement_total_sauf_transition ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_03 THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END,
|
|
|
sejour_remboursable_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_03 THEN sejour_remboursable_2 ELSE 0 END
|
|
|
FROM rum_pmsval, rss_pmsval, pmsi.t_prestations, rss_resume
|
|
|
WHERE
|
|
|
p_rsf_detail.rss_id = rum_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_resume.rss_id
|
|
|
AND prestation_id = t_prestations.oid
|
|
|
AND p_rsf_detail.no_rum = rum_pmsval.no_rum
|
|
|
AND est_ligne_rum = '1'
|
|
|
AND t_prestations.code = 'SRC'
|
|
|
AND (
|
|
|
base_remboursement_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_03 THEN base_remboursement_total ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_03 THEN base_remboursement_total_sauf_transition ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_03 THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END
|
|
|
OR
|
|
|
sejour_remboursable_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_03 THEN sejour_remboursable_2 ELSE 0 END
|
|
|
);
|
|
|
|
|
|
|
|
|
UPDATE w_rsf_detail_rum p_rsf_detail SET
|
|
|
base_remboursement_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_04_05_06 THEN base_remboursement_total ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_04_05_06 THEN base_remboursement_total_sauf_transition ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_04_05_06 THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END,
|
|
|
sejour_remboursable_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_04_05_06 THEN sejour_remboursable_2 ELSE 0 END
|
|
|
FROM rum_pmsval, rss_pmsval, pmsi.t_prestations, rss_resume
|
|
|
WHERE
|
|
|
p_rsf_detail.rss_id = rum_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_resume.rss_id
|
|
|
AND prestation_id = t_prestations.oid
|
|
|
AND p_rsf_detail.no_rum = rum_pmsval.no_rum
|
|
|
AND est_ligne_rum = '1'
|
|
|
AND t_prestations.code IN ('NN1', 'NN2', 'NN3')
|
|
|
AND (
|
|
|
base_remboursement_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_04_05_06 THEN base_remboursement_total ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_04_05_06 THEN base_remboursement_total_sauf_transition ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_04_05_06 THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END
|
|
|
OR
|
|
|
sejour_remboursable_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.premier_rum_04_05_06 THEN sejour_remboursable_2 ELSE 0 END
|
|
|
);
|
|
|
|
|
|
|
|
|
UPDATE w_rsf_detail_rum p_rsf_detail SET
|
|
|
base_remboursement_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.dernier_rum THEN base_remboursement_total ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.dernier_rum THEN base_remboursement_total_sauf_transition ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.dernier_rum THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END,
|
|
|
sejour_remboursable_rum = CASE WHEN p_rsf_detail.no_rum = rss_pmsval.dernier_rum THEN sejour_remboursable_2 ELSE 0 END
|
|
|
FROM rum_pmsval, rss_pmsval, pmsi.t_prestations, rss_resume
|
|
|
WHERE
|
|
|
p_rsf_detail.rss_id = rum_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_pmsval.rss_id
|
|
|
AND rum_pmsval.rss_id = rss_resume.rss_id
|
|
|
AND prestation_id = t_prestations.oid
|
|
|
AND p_rsf_detail.no_rum = rum_pmsval.no_rum
|
|
|
AND est_ligne_rum = '1'
|
|
|
AND t_prestations.code IN ('FJA', 'FJR', 'FRL')
|
|
|
AND (
|
|
|
base_remboursement_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.dernier_rum THEN base_remboursement_total ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.dernier_rum THEN base_remboursement_total_sauf_transition ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.dernier_rum THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END
|
|
|
OR
|
|
|
sejour_remboursable_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rss_pmsval.dernier_rum THEN sejour_remboursable_2 ELSE 0 END
|
|
|
);
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS rum_by_date;
|
|
|
CREATE TEMP TABLE rum_by_date AS
|
|
|
SELECT p_rss_rum.rss_id, p_calendrier.date, MIN(p_rss_rum.no_rum) as no_rum
|
|
|
FROM pmsi.p_rss_rum, rss_resume, base.p_calendrier
|
|
|
WHERE p_rss_rum.rss_id = rss_resume.rss_id
|
|
|
AND p_calendrier.date BETWEEN p_rss_rum.date_entree AND p_rss_rum.date_sortie
|
|
|
GROUP BY p_rss_rum.rss_id, p_calendrier.date
|
|
|
ORDER BY p_rss_rum.rss_id, p_calendrier.date;
|
|
|
|
|
|
|
|
|
UPDATE w_rsf_detail_rum p_rsf_detail SET
|
|
|
base_remboursement_rum = CASE WHEN p_rsf_detail.no_rum = rum_by_date.no_rum THEN base_remboursement_total ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition = CASE WHEN p_rsf_detail.no_rum = rum_by_date.no_rum THEN base_remboursement_total_sauf_transition ELSE 0 END,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame = CASE WHEN p_rsf_detail.no_rum = rum_by_date.no_rum THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END,
|
|
|
sejour_remboursable_rum = CASE WHEN p_rsf_detail.no_rum = rum_by_date.no_rum THEN sejour_remboursable_2 ELSE 0 END
|
|
|
FROM pmsi.t_prestations, rss_resume, rum_by_date
|
|
|
WHERE
|
|
|
rss_resume.rss_id = p_rsf_detail.rss_id
|
|
|
AND rum_by_date.rss_id = p_rsf_detail.rss_id
|
|
|
AND rum_by_date.date = p_rsf_detail.date_debut
|
|
|
AND prestation_id = t_prestations.oid
|
|
|
AND est_ligne_rum = '1'
|
|
|
AND t_prestations.code NOT IN ('GHS', 'EXH', 'REA', 'RAP', 'REP', 'SRC', 'STF', 'NN1', 'NN2', 'NN2', 'NN3', 'FJA', 'FJR', 'FRL')
|
|
|
AND (
|
|
|
base_remboursement_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rum_by_date.no_rum THEN base_remboursement_total ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rum_by_date.no_rum THEN base_remboursement_total_sauf_transition ELSE 0 END
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rum_by_date.no_rum THEN base_remboursement_total_sauf_transition_sauf_ame ELSE 0 END
|
|
|
OR
|
|
|
sejour_remboursable_rum IS DISTINCT FROM CASE WHEN p_rsf_detail.no_rum = rum_by_date.no_rum THEN sejour_remboursable_2 ELSE 0 END
|
|
|
)
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS w_rsf_detail_rum_presta;
|
|
|
CREATE TEMP TABLE w_rsf_detail_rum_presta AS
|
|
|
SELECT p_rsf_detail.rss_id,
|
|
|
p_rsf_detail.prestation_id,
|
|
|
MIN(CTID) AS from_CTID,
|
|
|
SUM(p_rsf_detail.base_remboursement_rum) AS base_remboursement_rum_presta,
|
|
|
SUM(p_rsf_detail.base_remboursement_rum_sauf_transition) AS base_remboursement_rum_presta_sauf_transition,
|
|
|
SUM(p_rsf_detail.base_remboursement_rum_sauf_transition_sauf_ame) AS base_remboursement_rum_presta_sauf_transition_sauf_ame,
|
|
|
SUM(p_rsf_detail.sejour_remboursable_rum) AS sejour_remboursable_rum_presta,
|
|
|
MIN(CASE WHEN base_remboursement_rum <> 0 THEN no_rum ELSE 999 END) as premier_rum
|
|
|
FROM
|
|
|
w_rsf_detail_rum p_rsf_detail
|
|
|
GROUP BY 1,2;
|
|
|
|
|
|
|
|
|
UPDATE w_rsf_detail_rum p_rsf_detail SET
|
|
|
base_remboursement_rum = base_remboursement_rum + ecart_arrondi,
|
|
|
base_remboursement_rum_sauf_transition = base_remboursement_rum_sauf_transition + ecart_arrondi_ht,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame = base_remboursement_rum_sauf_transition_sauf_ame + ecart_arrondi_hthame,
|
|
|
sejour_remboursable_rum = sejour_remboursable_rum + ecart_arrondi_r
|
|
|
FROM pmsi.t_prestations, (
|
|
|
SELECT w_rsf_detail_presta.rss_id, w_rsf_detail_presta.prestation_id, premier_rum,
|
|
|
base_remboursement_presta - COALESCE(base_remboursement_rum_presta) AS ecart_arrondi,
|
|
|
base_remboursement_presta_sauf_transition - COALESCE(base_remboursement_rum_presta_sauf_transition) AS ecart_arrondi_ht,
|
|
|
base_remboursement_presta_sauf_transition_sauf_ame - COALESCE(base_remboursement_rum_presta_sauf_transition_sauf_ame) AS ecart_arrondi_hthame,
|
|
|
sejour_remboursable_presta - COALESCE(sejour_remboursable_rum_presta) AS ecart_arrondi_r
|
|
|
FROM w_rsf_detail_presta
|
|
|
LEFT JOIN w_rsf_detail_rum_presta ON w_rsf_detail_rum_presta.rss_id = w_rsf_detail_presta.rss_id AND
|
|
|
w_rsf_detail_rum_presta.prestation_id = w_rsf_detail_presta.prestation_id
|
|
|
WHERE
|
|
|
base_remboursement_presta IS DISTINCT FROM COALESCE(base_remboursement_rum_presta) OR
|
|
|
base_remboursement_presta_sauf_transition IS DISTINCT FROM COALESCE(base_remboursement_rum_presta_sauf_transition) OR
|
|
|
base_remboursement_presta_sauf_transition_sauf_ame IS DISTINCT FROM COALESCE(base_remboursement_rum_presta_sauf_transition_sauf_ame) OR
|
|
|
sejour_remboursable_presta IS DISTINCT FROM COALESCE(sejour_remboursable_rum_presta)
|
|
|
) subview
|
|
|
WHERE p_rsf_detail.rss_id = subview.rss_id
|
|
|
AND p_rsf_detail.prestation_id = t_prestations.oid
|
|
|
AND p_rsf_detail.prestation_id = subview.prestation_id
|
|
|
|
|
|
AND p_rsf_detail.no_rum = subview.premier_rum
|
|
|
AND (
|
|
|
base_remboursement_rum IS DISTINCT FROM base_remboursement_rum + ecart_arrondi
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition IS DISTINCT FROM base_remboursement_rum_sauf_transition + ecart_arrondi_ht
|
|
|
OR
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame IS DISTINCT FROM base_remboursement_rum_sauf_transition_sauf_ame + ecart_arrondi_hthame
|
|
|
OR
|
|
|
sejour_remboursable_rum IS DISTINCT FROM sejour_remboursable_rum + ecart_arrondi_r
|
|
|
);
|
|
|
|
|
|
|
|
|
DELETE FROM w_rsf_detail_rum p_rsf_detail WHERE est_ligne_rss <> '1' AND base_remboursement_rum = 0 AND sejour_remboursable_rum = 0;
|
|
|
-- Validation
|
|
|
INSERT INTO pmsi.p_rsf_detail(
|
|
|
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,
|
|
|
nature_noemie,
|
|
|
prestation_id,
|
|
|
rss_id,
|
|
|
type,
|
|
|
coefficient_geo,
|
|
|
est_ligne_rss,
|
|
|
est_ligne_rum,
|
|
|
no_rum,
|
|
|
unite_medicale_id,
|
|
|
base_remboursement_rum,
|
|
|
base_remboursement_rum_sauf_transition,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame,
|
|
|
montant_supplement_nf,
|
|
|
sejour_remboursable_rum,
|
|
|
pec_fj_id,
|
|
|
date_comptable,
|
|
|
operation_lamda,
|
|
|
fides_detail)
|
|
|
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,
|
|
|
nature_noemie,
|
|
|
prestation_id,
|
|
|
rss_id,
|
|
|
type,
|
|
|
coefficient_geo,
|
|
|
est_ligne_rss,
|
|
|
est_ligne_rum,
|
|
|
no_rum,
|
|
|
unite_medicale_id,
|
|
|
base_remboursement_rum,
|
|
|
base_remboursement_rum_sauf_transition,
|
|
|
base_remboursement_rum_sauf_transition_sauf_ame,
|
|
|
montant_supplement_nf,
|
|
|
sejour_remboursable_rum,
|
|
|
pec_fj_id,
|
|
|
date_comptable,
|
|
|
operation_lamda,
|
|
|
fides_detail
|
|
|
FROM w_rsf_detail_rum;
|
|
|
-- Spécial BACLESSE
|
|
|
-- Ventilation suppléments radio à UM SRT
|
|
|
-- Ventilation supplément RAP hors UM 'PRT' dans UM 'SRT' (Tout ce qui n'est pas PRT, on ventile dans SRT)
|
|
|
IF EXISTS (SELECT * FROM base.t_finess WHERE code IN ('140000639', '140000555') LIMIT 1) THEN
|
|
|
UPDATE pmsi.p_rsf_detail SET
|
|
|
unite_medicale_id = (SELECT oid FROM pmsi.t_unites_medicales WHERE code = 'SRT')
|
|
|
WHERE est_ligne_rum = 1 AND prestation_id IN (SELECT oid FROM pmsi.t_prestations WHERE code like 'IRRE%' OR code = 'APHE');
|
|
|
|
|
|
UPDATE pmsi.p_rsf_detail SET
|
|
|
unite_medicale_id = (SELECT oid FROM pmsi.t_unites_medicales WHERE code = 'SRT')
|
|
|
WHERE est_ligne_rum = 1 AND prestation_id IN (SELECT oid FROM pmsi.t_prestations WHERE code = 'RAP') AND
|
|
|
unite_medicale_id <> (SELECT oid FROM pmsi.t_unites_medicales WHERE code = 'PRT') ;
|
|
|
UPDATE pmsi.p_rsf_detail SET
|
|
|
unite_medicale_id = (SELECT oid FROM pmsi.t_unites_medicales WHERE code = 'SRT')
|
|
|
WHERE est_ligne_rum = 1 AND prestation_id IN (SELECT oid FROM pmsi.t_prestations WHERE code = 'RAP') AND
|
|
|
unite_medicale_id <> (SELECT oid FROM pmsi.t_unites_medicales WHERE code = 'PRT');
|
|
|
END IF;
|
|
|
|
|
|
RETURN 'OK';
|
|
|
END;
|