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.
 
 

432 lines
10 KiB

return: text
lang: plpgsql
parameters:
p0:
type: text
name: i_conso
default: "'0'::text"
src: |
DECLARE
w_CONSO TEXT;
result TEXT;
BEGIN
result = 'OK';
-- Extraction
DROP TABLE IF EXISTS w_benchmark;
CREATE TEMP TABLE w_benchmark AS
SELECT
'ETR'::text AS type_ligne,
CASE WHEN COALESCE(t_classes.sequence,0) > 0 THEN t_finess.section_id[t_classes.sequence] ELSE 0 END AS region_id,
finess,
mois_sortie AS mois_reference,
'GHM'::text AS type_indicateur,
ghm_id AS parent_id,
ghm5_id,
ARRAY[
sum(CASE WHEN cmd_code <> '28' AND cmd_code <> '15' THEN nb_rsa ELSE 0 END),
sum(nb_rsa),
sum(CASE WHEN cmd_code <> '28' AND cmd_code <> '15' AND duree_sejour > 0 THEN 1 ELSE 0 END),
count(*),
sum(CASE WHEN cmd_code <> '28' AND cmd_code <> '15' AND duree_sejour > 0 THEN nb_rsa ELSE 0 END),
0,
0,
0,
0,
0,
sum(CASE WHEN duree_sejour > 2 AND severite_ghm_code IN ('1','2','3','4') THEN nb_rsa ELSE 0 END),
sum(CASE WHEN cmd_code <> '28' AND cmd_code <> '15' THEN nb_rsa ELSE 0 END),
sum(CASE WHEN cas_code = 'C' THEN nb_rsa ELSE 0 END),
sum(CASE WHEN duree_sejour > 2 AND severite_ghm_code IN ('1','2','3','4') AND ca_ghs > 0 THEN ca_ghs ELSE 0 END),
0,
0,
0,
0,
0,
0
]::numeric[] AS ets_ind1,
ARRAY[
sum(CASE WHEN cmd_code <> '28' THEN duree_sejour ELSE 0 END),
sum(nb_rsa*age),
sum(CASE WHEN cmd_code <> '28' AND cmd_code <> '15' AND mode_sortie = '8' AND duree_sejour > 0 THEN nb_rsa ELSE 0 END)*100,
sum(CASE WHEN mode_sortie = '9' THEN nb_rsa ELSE 0 END)*100,
sum(CASE WHEN cmd_code <> '28' AND cmd_code <> '15' AND duree_sejour > 0 THEN duree_sejour ELSE 0 END),
0,
0,
0,
0,
0,
sum(CASE WHEN duree_sejour > 2 AND severite_ghm_code IN ('2','3','4') THEN nb_rsa ELSE 0 END)*100,
sum(CASE WHEN cmd_code <> '28' AND cmd_code <> '15' AND duree_sejour = 0 THEN nb_rsa ELSE 0 END)*100,
sum(CASE WHEN duree_sejour = 0 AND cas_code = 'C' THEN nb_rsa ELSE 0 END)*100,
sum(CASE WHEN duree_sejour > 2 AND severite_ghm_code IN ('2','3','4') AND ca_ghs > 0 THEN ca_ghs ELSE 0 END),
0,
0,
0,
0,
0,
0
]::numeric[] AS ets_ind2,
ARRAY[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
sum(CASE WHEN duree_sejour > 2 AND severite_ghm_code IN ('1','2','3','4') AND ca_ghs > 0 THEN nb_rsa ELSE 0 END),
0,
0,
0,
0,
0,
0
]::numeric[] AS ets_ind3
FROM pmsi.p_rss
JOIN pmsi.t_ghm_c ON p_rss.ghm_id = t_ghm_c.oid
JOIN base.t_finess ON finess = t_finess.code
LEFT JOIN base.t_classes ON t_classes.code = 'CTI_BENCHF'
WHERE date_sortie >= '20160101' AND
etat = '' AND
ghm_id > 0 AND
cmd_code BETWEEN '01' AND '28'
GROUP BY 1,2,3,4,5,6,7;
INSERT INTO w_benchmark
SELECT
type_ligne,
region_id,
finess,
mois_reference,
'GHM5'::text AS type_indicateur,
ghm5_id,
ghm5_id,
ARRAY[
SUM(ets_ind1[01]),
SUM(ets_ind1[02]),
SUM(ets_ind1[03]),
SUM(ets_ind1[04]),
SUM(ets_ind1[05]),
SUM(ets_ind1[06]),
SUM(ets_ind1[07]),
SUM(ets_ind1[08]),
SUM(ets_ind1[09]),
SUM(ets_ind1[10]),
SUM(ets_ind1[11]),
SUM(ets_ind1[12]),
SUM(ets_ind1[13]),
SUM(ets_ind1[14]),
SUM(ets_ind1[15]),
SUM(ets_ind1[16]),
SUM(ets_ind1[17]),
SUM(ets_ind1[18]),
SUM(ets_ind1[19]),
SUM(ets_ind1[20])
]::numeric[] AS ets_ind1,
ARRAY[
SUM(ets_ind2[01]),
SUM(ets_ind2[02]),
SUM(ets_ind2[03]),
SUM(ets_ind2[04]),
SUM(ets_ind2[05]),
SUM(ets_ind2[06]),
SUM(ets_ind2[07]),
SUM(ets_ind2[08]),
SUM(ets_ind2[09]),
SUM(ets_ind2[10]),
SUM(ets_ind2[11]),
SUM(ets_ind2[12]),
SUM(ets_ind2[13]),
SUM(ets_ind2[14]),
SUM(ets_ind2[15]),
SUM(ets_ind2[16]),
SUM(ets_ind2[17]),
SUM(ets_ind2[18]),
SUM(ets_ind2[19]),
SUM(ets_ind2[20])
]::numeric[] AS ets_ind2,
ARRAY[
SUM(ets_ind3[01]),
SUM(ets_ind3[02]),
SUM(ets_ind3[03]),
SUM(ets_ind3[04]),
SUM(ets_ind3[05]),
SUM(ets_ind3[06]),
SUM(ets_ind3[07]),
SUM(ets_ind3[08]),
SUM(ets_ind3[09]),
SUM(ets_ind3[10]),
SUM(ets_ind3[11]),
SUM(ets_ind3[12]),
SUM(ets_ind3[13]),
SUM(ets_ind3[14]),
SUM(ets_ind3[15]),
SUM(ets_ind3[16]),
SUM(ets_ind3[17]),
SUM(ets_ind3[18]),
SUM(ets_ind3[19]),
SUM(ets_ind3[20])
]::numeric[] AS ets_ind3
FROM w_benchmark
WHERE type_indicateur = 'GHM'
GROUP BY 1,2,3,4,5,6,7
;
-- Total par région
INSERT INTO w_benchmark
SELECT
'REG'::text AS type_ligne,
region_id,
'-1'::text AS finess,
mois_reference,
type_indicateur,
parent_id,
ghm5_id,
ARRAY[
SUM(ets_ind1[01]),
SUM(ets_ind1[02]),
SUM(ets_ind1[03]),
SUM(ets_ind1[04]),
SUM(ets_ind1[05]),
SUM(ets_ind1[06]),
SUM(ets_ind1[07]),
SUM(ets_ind1[08]),
SUM(ets_ind1[09]),
SUM(ets_ind1[10]),
SUM(ets_ind1[11]),
SUM(ets_ind1[12]),
SUM(ets_ind1[13]),
SUM(ets_ind1[14]),
SUM(ets_ind1[15]),
SUM(ets_ind1[16]),
SUM(ets_ind1[17]),
SUM(ets_ind1[18]),
SUM(ets_ind1[19]),
SUM(ets_ind1[20])
]::numeric[] AS ets_ind1,
ARRAY[
SUM(ets_ind2[01]),
SUM(ets_ind2[02]),
SUM(ets_ind2[03]),
SUM(ets_ind2[04]),
SUM(ets_ind2[05]),
SUM(ets_ind2[06]),
SUM(ets_ind2[07]),
SUM(ets_ind2[08]),
SUM(ets_ind2[09]),
SUM(ets_ind2[10]),
SUM(ets_ind2[11]),
SUM(ets_ind2[12]),
SUM(ets_ind2[13]),
SUM(ets_ind2[14]),
SUM(ets_ind2[15]),
SUM(ets_ind2[16]),
SUM(ets_ind2[17]),
SUM(ets_ind2[18]),
SUM(ets_ind2[19]),
SUM(ets_ind2[20])
]::numeric[] AS ets_ind2,
ARRAY[
SUM(ets_ind3[01]),
SUM(ets_ind3[02]),
SUM(ets_ind3[03]),
SUM(ets_ind3[04]),
SUM(ets_ind3[05]),
SUM(ets_ind3[06]),
SUM(ets_ind3[07]),
SUM(ets_ind3[08]),
SUM(ets_ind3[09]),
SUM(ets_ind3[10]),
SUM(ets_ind3[11]),
SUM(ets_ind3[12]),
SUM(ets_ind3[13]),
SUM(ets_ind3[14]),
SUM(ets_ind3[15]),
SUM(ets_ind3[16]),
SUM(ets_ind3[17]),
SUM(ets_ind3[18]),
SUM(ets_ind3[19]),
SUM(ets_ind3[20])
]::numeric[] AS ets_ind3
FROM w_benchmark
GROUP BY 1,2,3,4,5,6,7
;
-- Total groupe
INSERT INTO w_benchmark
SELECT
'GRP'::text AS type_ligne,
-1::bigint AS region_id,
'-1'::text AS finess,
mois_reference,
type_indicateur,
parent_id,
ghm5_id,
ARRAY[
SUM(ets_ind1[01]),
SUM(ets_ind1[02]),
SUM(ets_ind1[03]),
SUM(ets_ind1[04]),
SUM(ets_ind1[05]),
SUM(ets_ind1[06]),
SUM(ets_ind1[07]),
SUM(ets_ind1[08]),
SUM(ets_ind1[09]),
SUM(ets_ind1[10]),
SUM(ets_ind1[11]),
SUM(ets_ind1[12]),
SUM(ets_ind1[13]),
SUM(ets_ind1[14]),
SUM(ets_ind1[15]),
SUM(ets_ind1[16]),
SUM(ets_ind1[17]),
SUM(ets_ind1[18]),
SUM(ets_ind1[19]),
SUM(ets_ind1[20])
]::numeric[] AS ets_ind1,
ARRAY[
SUM(ets_ind2[01]),
SUM(ets_ind2[02]),
SUM(ets_ind2[03]),
SUM(ets_ind2[04]),
SUM(ets_ind2[05]),
SUM(ets_ind2[06]),
SUM(ets_ind2[07]),
SUM(ets_ind2[08]),
SUM(ets_ind2[09]),
SUM(ets_ind2[10]),
SUM(ets_ind2[11]),
SUM(ets_ind2[12]),
SUM(ets_ind2[13]),
SUM(ets_ind2[14]),
SUM(ets_ind2[15]),
SUM(ets_ind2[16]),
SUM(ets_ind2[17]),
SUM(ets_ind2[18]),
SUM(ets_ind2[19]),
SUM(ets_ind2[20])
]::numeric[] AS ets_ind2,
ARRAY[
SUM(ets_ind3[01]),
SUM(ets_ind3[02]),
SUM(ets_ind3[03]),
SUM(ets_ind3[04]),
SUM(ets_ind3[05]),
SUM(ets_ind3[06]),
SUM(ets_ind3[07]),
SUM(ets_ind3[08]),
SUM(ets_ind3[09]),
SUM(ets_ind3[10]),
SUM(ets_ind3[11]),
SUM(ets_ind3[12]),
SUM(ets_ind3[13]),
SUM(ets_ind3[14]),
SUM(ets_ind3[15]),
SUM(ets_ind3[16]),
SUM(ets_ind3[17]),
SUM(ets_ind3[18]),
SUM(ets_ind3[19]),
SUM(ets_ind3[20])
]::numeric[] AS ets_ind3
FROM w_benchmark
WHERE type_ligne = 'REG'
GROUP BY 1,2,3,4,5,6,7
;
-- Consolidation ?
IF i_CONSO = '1' THEN
TRUNCATE pmsi.p_benchmark;
INSERT INTO pmsi.p_benchmark (type_ligne, region_id, finess, parent_id, mois_reference, date_reference, type_indicateur, indicateur_1, indicateur_2, indicateur_3)
SELECT type_ligne,
region_id,
finess,
parent_id,
mois_reference,
(mois_reference||'01')::date,
type_indicateur,
ets_ind1,
ets_ind2,
ets_ind3
FROM w_benchmark
WHERE type_ligne IN ('GRP','REG')
;
INSERT INTO pmsi.p_benchmark (type_ligne, region_id, finess, parent_id, type_indicateur)
SELECT type_ligne,
region_id,
finess,
parent_id,
type_indicateur
FROM w_benchmark
WHERE type_ligne IN ('ETR')
GROUP BY 1,2,3,4,5
;
ELSE
DELETE FROM pmsi.p_benchmark WHERE type_ligne = 'ETS';
INSERT INTO pmsi.p_benchmark (type_ligne, region_id, finess, parent_id, mois_reference, date_reference, type_indicateur, indicateur_1, indicateur_2, indicateur_3)
SELECT 'ETS' AS type_ligne,
region_id,
finess,
parent_id,
mois_reference,
(mois_reference||'01')::date,
type_indicateur,
ets_ind1,
ets_ind2,
ets_ind3
FROM w_benchmark
WHERE type_ligne IN ('GRP')
;
INSERT INTO pmsi.p_benchmark (type_ligne, region_id, finess, parent_id, type_indicateur)
SELECT w_benchmark.type_ligne,
w_benchmark.region_id,
w_benchmark.finess,
w_benchmark.parent_id,
w_benchmark.type_indicateur
FROM w_benchmark
LEFT JOIN pmsi.p_benchmark ON
w_benchmark.type_ligne = p_benchmark.type_ligne AND
w_benchmark.finess = p_benchmark.finess AND
w_benchmark.type_ligne = p_benchmark.type_ligne AND
w_benchmark.parent_id = p_benchmark.parent_id AND
w_benchmark.type_indicateur = p_benchmark.type_indicateur
WHERE w_benchmark.type_ligne IN ('ETR') AND
p_benchmark.type_ligne IS NULL
GROUP BY 1,2,3,4,5
;
END IF;
ANALYSE pmsi.p_benchmark
;
RETURN result;
END;