|
|
return: text
|
|
|
lang: plpgsql
|
|
|
src: |
|
|
|
DECLARE
|
|
|
result TEXT;
|
|
|
_module_pmsimco TEXT;
|
|
|
BEGIN
|
|
|
|
|
|
RAISE NOTICE '%' , 'Initialisation formes d''activite';
|
|
|
-- Contenu table
|
|
|
INSERT INTO activite.t_forme_activite (oid, code, texte, texte_court)
|
|
|
SELECT 0, '**', 'Non renseignée', 'Non renseignée'
|
|
|
WHERE 0 NOT IN (SELECT oid FROM activite.t_forme_activite);
|
|
|
|
|
|
|
|
|
-- MCO
|
|
|
INSERT INTO activite.t_forme_activite (code, texte, texte_court)
|
|
|
SELECT code, texte, texte
|
|
|
FROM (
|
|
|
SELECT '111' AS code, 'Hospitalisation complète MCO Médecine' AS texte
|
|
|
UNION
|
|
|
SELECT '112' AS code, 'Hospitalisation complète MCO Chirurgie' AS texte
|
|
|
UNION
|
|
|
SELECT '113' AS code, 'Hospitalisation complète MCO Obstétrique' AS texte
|
|
|
UNION
|
|
|
SELECT '114' AS code, 'Hospitalisation complète MCO Esthétique' AS texte
|
|
|
UNION
|
|
|
SELECT '117' AS code, 'Hospitalisation complète MCO A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '118' AS code, 'Hospitalisation complète MCO A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '119' AS code, 'Hospitalisation complète MCO Autre' AS texte
|
|
|
UNION
|
|
|
SELECT '121' AS code, 'Hospitalisation de jour MCO Médecine' AS texte
|
|
|
UNION
|
|
|
SELECT '122' AS code, 'Hospitalisation de jour MCO Chirurgie' AS texte
|
|
|
UNION
|
|
|
SELECT '123' AS code, 'Hospitalisation de jour MCO Obstétrique' AS texte
|
|
|
UNION
|
|
|
SELECT '124' AS code, 'Hospitalisation de jour MCO Esthétique' AS texte
|
|
|
UNION
|
|
|
SELECT '127' AS code, 'Hospitalisation de jour MCO A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '128' AS code, 'Hospitalisation de jour MCO A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '129' AS code, 'Hospitalisation de jour MCO Autre' AS texte
|
|
|
UNION
|
|
|
SELECT '131' AS code, 'Séances de dialyse' AS texte
|
|
|
UNION
|
|
|
SELECT '132' AS code, 'Séances de chimiothérapie' AS texte
|
|
|
UNION
|
|
|
SELECT '133' AS code, 'Séances de transfusion' AS texte
|
|
|
UNION
|
|
|
SELECT '139' AS code, 'Autres séances' AS texte
|
|
|
UNION
|
|
|
SELECT '211' AS code, 'Hospitalisation complète SSR Soins de Suite Médicalisés' AS texte
|
|
|
UNION
|
|
|
SELECT '212' AS code, 'Hospitalisation complète SSR Rééducation Fonctionnelle' AS texte
|
|
|
UNION
|
|
|
SELECT '217' AS code, 'Hospitalisation complète SSR A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '218' AS code, 'Hospitalisation complète SSR A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '219' AS code, 'Hospitalisation complète SSR Autre' AS texte
|
|
|
UNION
|
|
|
SELECT '221' AS code, 'Hospitalisation de jour SSR Soins de Suite Médicalisés' AS texte
|
|
|
UNION
|
|
|
SELECT '222' AS code, 'Hospitalisation de jour SSR Rééducation Fonctionnelle' AS texte
|
|
|
UNION
|
|
|
SELECT '227' AS code, 'Hospitalisation de jour SSR A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '228' AS code, 'Hospitalisation de jour SSR A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '229' AS code, 'Hospitalisation de jour SSR Autre' AS texte
|
|
|
UNION
|
|
|
SELECT '317' AS code, 'Hospitalisation complète PSY A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '318' AS code, 'Hospitalisation complète PSY A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '319' AS code, 'Hospitalisation complète PSY Autre' AS texte
|
|
|
UNION
|
|
|
SELECT '327' AS code, 'Hospitalisation de jour PSY A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '328' AS code, 'Hospitalisation de jour PSY A préciser' AS texte
|
|
|
UNION
|
|
|
SELECT '329' AS code, 'Hospitalisation de jour PSY Autre' AS texte
|
|
|
UNION
|
|
|
SELECT '401' AS code, 'Hospitalisation à Domicile' AS texte
|
|
|
UNION
|
|
|
SELECT '501' AS code, 'EHPAD' AS texte
|
|
|
UNION
|
|
|
SELECT '502' AS code, 'USLD' AS texte
|
|
|
UNION
|
|
|
SELECT '503' AS code, 'Foyer de vie' AS texte
|
|
|
UNION
|
|
|
SELECT '701' AS code, 'Activité SE' AS texte
|
|
|
UNION
|
|
|
SELECT '702' AS code, 'Urgences' AS texte
|
|
|
UNION
|
|
|
SELECT '709' AS code, 'Activité externe' AS texte
|
|
|
UNION
|
|
|
SELECT '999' AS code, 'Autres formes d''activité' AS texte
|
|
|
) subview
|
|
|
WHERE code NOT IN (SELECT code FROM activite.t_forme_activite WHERE code IS NOT NULL)
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
-- Si consolidation, pas de règle
|
|
|
IF EXISTS (SELECT * FROM activite.t_forme_activite_rule WHERE code = '*NORULE_CONSO') THEN
|
|
|
return 'Pas de règle en consolidation';
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
DELETE FROM activite.t_forme_activite_rule WHERE code LIKE 'CTI%' ;
|
|
|
DELETE FROM activite.t_forme_activite_rule WHERE COALESCE(forme_activite_id,0) = 0 OR
|
|
|
COALESCE(priorite,0) = 0;
|
|
|
|
|
|
RAISE NOTICE '%' , 'Generation regles CTI';
|
|
|
|
|
|
DROP SEQUENCE IF EXISTS w_priorite;
|
|
|
CREATE TEMP SEQUENCE w_priorite;
|
|
|
|
|
|
|
|
|
|
|
|
-- Associations possibles
|
|
|
|
|
|
-- Identification des codes utilisés
|
|
|
DROP TABLE IF EXISTS cti_rfar_w_forme_activite_used;
|
|
|
CREATE TEMP TABLE cti_rfar_w_forme_activite_used AS
|
|
|
SELECT service_facturation_id,
|
|
|
t_services_facturation.code AS service_facturation_code,
|
|
|
t_services_facturation.texte AS service_facturation_texte,
|
|
|
t_services_facturation.dmt_id,
|
|
|
t_services_facturation.mode_traitement_id,
|
|
|
t_services_facturation.type_t2a,
|
|
|
p_sejours.type_sejour,
|
|
|
''::text AS forme_activite_code
|
|
|
FROM activite.p_mouvements_sejour
|
|
|
JOIN activite.p_sejours ON p_mouvements_sejour.no_sejour = p_sejours.no_sejour
|
|
|
JOIN activite.t_lieux ON lieu_id = t_lieux.oid
|
|
|
JOIN activite.t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid
|
|
|
WHERE t_lieux.service_facturation_id <> 0
|
|
|
GROUP BY 1,2,3,4,5,6,7
|
|
|
;
|
|
|
|
|
|
INSERT INTO cti_rfar_w_forme_activite_used
|
|
|
SELECT 0::bigint AS service_facturation_id,
|
|
|
''::text AS service_facturation_code,
|
|
|
''::text AS service_facturation_texte,
|
|
|
0::bigint AS dmt_id,
|
|
|
0::bigint AS mode_traitement_id,
|
|
|
''::text AS type_t2a,
|
|
|
type_sejour,
|
|
|
''::text AS forme_activite_code
|
|
|
FROM cti_rfar_w_forme_activite_used
|
|
|
GROUP BY type_sejour
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
-- Valeurs par défaut par service
|
|
|
|
|
|
|
|
|
UPDATE cti_rfar_w_forme_activite_used
|
|
|
SET forme_activite_code =
|
|
|
CASE
|
|
|
WHEN service_facturation_id = 0 AND type_sejour = '1' THEN '119'
|
|
|
WHEN service_facturation_id = 0 AND type_sejour = '2' THEN '129'
|
|
|
WHEN service_facturation_id = 0 AND type_sejour = '3' THEN '709'
|
|
|
WHEN service_facturation_id = 0 AND type_sejour = '5' THEN '139'
|
|
|
WHEN service_facturation_id = 0 AND type_sejour = '6' THEN '113'
|
|
|
WHEN service_facturation_id = 0 AND type_sejour = '9' THEN '999'
|
|
|
|
|
|
WHEN service_facturation_texte iLIKE '%esthetique%' AND type_sejour = '2' THEN '124'
|
|
|
WHEN service_facturation_texte iLIKE '%esthetique%' THEN '114'
|
|
|
WHEN service_facturation_texte iLIKE '%esthétique%' AND type_sejour = '2' THEN '124'
|
|
|
WHEN service_facturation_texte iLIKE '%esthétique%' THEN '114'
|
|
|
|
|
|
WHEN t_dmt.code = '958' AND type_sejour = '3' THEN '701'
|
|
|
WHEN t_dmt.code = '924' THEN '501'
|
|
|
WHEN t_dmt.code = '657' THEN '501'
|
|
|
WHEN t_dmt.code = '273' THEN '502'
|
|
|
WHEN t_dmt.code = '936' THEN '503'
|
|
|
WHEN service_facturation_texte LIKE 'FSE%' AND type_sejour = '3' THEN '701'
|
|
|
WHEN service_facturation_texte LIKE 'SEH%' AND type_sejour = '3' THEN '701'
|
|
|
|
|
|
WHEN t_modes_traitement.code = '10' THEN '702'
|
|
|
|
|
|
WHEN t_dmt.code IN ('552','553','554','555','556','723','796','797','798') THEN '131'
|
|
|
WHEN t_modes_traitement.code = '19' AND t_dmt.code = '302' THEN '132'
|
|
|
|
|
|
WHEN t_modes_traitement.code = '03' AND type_t2a = '2' THEN '219'
|
|
|
WHEN t_modes_traitement.code = '03' AND t_dmt.texte ILIKE '%SSR%' THEN '219'
|
|
|
WHEN t_modes_traitement.code = '04' AND type_t2a = '2' THEN '229'
|
|
|
WHEN t_modes_traitement.code = '04' AND t_dmt.texte ILIKE '%SSR%' THEN '229'
|
|
|
WHEN t_modes_traitement.code = '19' AND type_t2a = '2' THEN '229'
|
|
|
WHEN t_modes_traitement.code = '19' AND t_dmt.texte ILIKE '%SSR%' THEN '229'
|
|
|
WHEN t_modes_traitement.code = '22' AND type_t2a = '2' THEN '229'
|
|
|
WHEN t_modes_traitement.code = '22' AND t_dmt.texte ILIKE '%SSR%' THEN '229'
|
|
|
WHEN t_modes_traitement.code = '03' AND type_t2a = '3' THEN '319'
|
|
|
WHEN t_modes_traitement.code = '03' AND t_dmt.texte ILIKE '%PSY%' THEN '319'
|
|
|
WHEN t_modes_traitement.code = '04' AND type_t2a = '3' THEN '329'
|
|
|
WHEN t_modes_traitement.code = '04' AND t_dmt.texte ILIKE '%PSY%' THEN '329'
|
|
|
WHEN t_modes_traitement.code = '19' AND type_t2a = '3' THEN '329'
|
|
|
WHEN t_modes_traitement.code = '19' AND t_dmt.texte ILIKE '%PSY%' THEN '329'
|
|
|
WHEN t_modes_traitement.code = '22' AND type_t2a = '3' THEN '329'
|
|
|
WHEN t_modes_traitement.code = '22' AND t_dmt.texte ILIKE '%PSY%' THEN '329'
|
|
|
WHEN type_t2a = '4' THEN '401'
|
|
|
WHEN service_facturation_texte iLIKE '%EHPAD%' THEN '501'
|
|
|
WHEN service_facturation_texte iLIKE '%USLD%' THEN '502'
|
|
|
WHEN service_facturation_texte iLIKE '%FOVAH%' THEN '503'
|
|
|
WHEN t_modes_traitement.code = '06' THEN '401'
|
|
|
|
|
|
ELSE ''
|
|
|
END
|
|
|
FROM base.t_modes_traitement,base.t_dmt
|
|
|
WHERE mode_traitement_id = t_modes_traitement.oid AND
|
|
|
dmt_id = t_dmt.oid
|
|
|
;
|
|
|
|
|
|
UPDATE cti_rfar_w_forme_activite_used
|
|
|
SET forme_activite_code = '212'
|
|
|
WHERE forme_activite_code = '219' AND
|
|
|
(
|
|
|
service_facturation_code LIKE 'REE%' OR
|
|
|
service_facturation_texte ILIKE '%rééducation%' OR
|
|
|
service_facturation_texte ILIKE '%reeducation%'
|
|
|
)
|
|
|
;
|
|
|
|
|
|
UPDATE cti_rfar_w_forme_activite_used
|
|
|
SET forme_activite_code = '222'
|
|
|
WHERE forme_activite_code = '229' AND
|
|
|
(
|
|
|
service_facturation_code LIKE 'REE%' OR
|
|
|
service_facturation_texte ILIKE '%rééducation%' OR
|
|
|
service_facturation_texte ILIKE '%reeducation%'
|
|
|
)
|
|
|
;
|
|
|
|
|
|
-- Les premiers 1000 oid sont réservés à CTI
|
|
|
PERFORM setval('activite.s_forme_activite_rule', (SELECT GREATEST(COALESCE(max(oid),0),1000) FROM activite.t_forme_activite_rule), true);
|
|
|
|
|
|
UPDATE activite.t_forme_activite_rule
|
|
|
SET oid = nextval('activite.s_forme_activite_rule'::regclass)
|
|
|
WHERE oid < 1000;
|
|
|
|
|
|
|
|
|
PERFORM setval('w_priorite', 70000, true);
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_service)
|
|
|
SELECT code,
|
|
|
texte,
|
|
|
forme_activite_id,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
liste_type_sejour,
|
|
|
liste_service
|
|
|
FROM
|
|
|
(
|
|
|
SELECT 'CTI#' || service_facturation_code || '#' || type_sejour AS code,
|
|
|
'Valeur par défaut CTI ' ||
|
|
|
service_facturation_texte || '(' || service_facturation_code || ')' || ' - ' ||
|
|
|
CASE type_sejour
|
|
|
WHEN '1' THEN 'Hospitalisés'
|
|
|
WHEN '2' THEN 'Ambulatoires'
|
|
|
WHEN '3' THEn 'Externes'
|
|
|
WHEN '5' THEN 'Séances'
|
|
|
WHEN '6' THEN 'Bébés'
|
|
|
WHEN '9' THEN 'Séjours fictifs'
|
|
|
END AS texte
|
|
|
,
|
|
|
t_forme_activite.oid AS forme_activite_id,
|
|
|
type_sejour AS liste_type_sejour,
|
|
|
service_facturation_code AS liste_service
|
|
|
FROM cti_rfar_w_forme_activite_used
|
|
|
JOIN activite.t_forme_activite ON t_forme_activite.code = forme_activite_code AND forme_activite_code <> ''
|
|
|
WHERE service_facturation_id <> 0
|
|
|
ORDER BY 1
|
|
|
) subview
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_service_entree)
|
|
|
SELECT code,
|
|
|
texte,
|
|
|
forme_activite_id,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
liste_type_sejour,
|
|
|
liste_service
|
|
|
FROM
|
|
|
(
|
|
|
SELECT 'CTI#' || service_facturation_code || '#' || type_sejour AS code,
|
|
|
'Valeur par défaut CTI ' ||
|
|
|
service_facturation_texte || '(' || service_facturation_code || ')' || ' - ' ||
|
|
|
CASE type_sejour
|
|
|
WHEN '1' THEN 'Hospitalisés'
|
|
|
WHEN '2' THEN 'Ambulatoires'
|
|
|
WHEN '3' THEn 'Externes'
|
|
|
WHEN '5' THEN 'Séances'
|
|
|
WHEN '6' THEN 'Bébés'
|
|
|
WHEN '9' THEN 'Séjours fictifs'
|
|
|
END AS texte
|
|
|
,
|
|
|
t_forme_activite.oid AS forme_activite_id,
|
|
|
type_sejour AS liste_type_sejour,
|
|
|
service_facturation_code AS liste_service
|
|
|
FROM cti_rfar_w_forme_activite_used
|
|
|
JOIN activite.t_forme_activite ON t_forme_activite.code = forme_activite_code AND forme_activite_code <> ''
|
|
|
WHERE service_facturation_id <> 0
|
|
|
ORDER BY 1
|
|
|
) subview
|
|
|
;
|
|
|
|
|
|
PERFORM setval('w_priorite', 99000, true);
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour)
|
|
|
SELECT code,
|
|
|
texte,
|
|
|
forme_activite_id,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
liste_type_sejour
|
|
|
FROM
|
|
|
(
|
|
|
SELECT 'CTI#'||type_sejour AS code,
|
|
|
'Valeur par défaut CTI ' ||
|
|
|
CASE type_sejour
|
|
|
WHEN '1' THEN 'Hospitalisés'
|
|
|
WHEN '2' THEN 'Ambulatoires'
|
|
|
WHEN '3' THEn 'Externes'
|
|
|
WHEN '5' THEN 'Séances'
|
|
|
WHEN '6' THEN 'Bébés'
|
|
|
WHEN '9' THEN 'Séjours fictifs'
|
|
|
END AS texte
|
|
|
,
|
|
|
t_forme_activite.oid AS forme_activite_id,
|
|
|
type_sejour AS liste_type_sejour
|
|
|
FROM cti_rfar_w_forme_activite_used
|
|
|
JOIN activite.t_forme_activite ON t_forme_activite.code = forme_activite_code AND forme_activite_code <> ''
|
|
|
WHERE service_facturation_id = 0
|
|
|
ORDER BY 1
|
|
|
) subview
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
-- Spécifique selon les GHM
|
|
|
PERFORM setval('w_priorite', 10000, true);
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#GHM1415#1',
|
|
|
'Valeur par défaut CTI CMD 14 et 15 - Hospitalisés',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'1',
|
|
|
'14* 15*'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '113'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#GHM1415#2',
|
|
|
'Valeur par défaut CTI CMD 14 et 15 - Ambulatoires',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'2',
|
|
|
'14* 15*'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '123'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#GHM09Z02#1',
|
|
|
'Valeur par défaut CTI GHM 09Z02, 23Z03 - Hospitalisés',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'1',
|
|
|
'09Z02* 23Z03*'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '114'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#GHM09Z02#2',
|
|
|
'Valeur par défaut CTI GHM 09Z02, 23Z03 - Ambulatoires',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'2',
|
|
|
'09Z02* 23Z03*'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '124'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#GHM28DIA',
|
|
|
'Valeur par défaut CTI GHM Dialyse - Séances',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'5',
|
|
|
'28Z01Z 28Z02Z 28Z03Z 28Z04Z 28Z05Z 28Z06Z'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '131'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#GHM28CHM',
|
|
|
'Valeur par défaut CTI GHM Chimio - Séances',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'5',
|
|
|
'28Z07Z 28Z17Z'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '132'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#GHM28TRF',
|
|
|
'Valeur par défaut CTI GHM Dialyse - Séances',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'5',
|
|
|
'28Z14Z'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '133'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#GHM28AUT',
|
|
|
'Valeur par défaut CTI - Autres séances',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'5',
|
|
|
'28*'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '139'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#GHM28CHM1',
|
|
|
'Valeur par défaut CTI GHM Chimio - Hospit = Médecine',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'1',
|
|
|
'28*'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '111'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#GHM28CHM1',
|
|
|
'Valeur par défaut CTI GHM Chimio - Ambu = Médecine',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'2',
|
|
|
'28*'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '121'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
-- Spécifique selon les classes de GHM
|
|
|
PERFORM setval('w_priorite', 50100, true);
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#CASC#1',
|
|
|
'Valeur par défaut CTI CAS C - Hospitalisés',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'1',
|
|
|
'[CAS:C]'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '112'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#CASC#1',
|
|
|
'Valeur par défaut CTI CAS C - Ambulatoires',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'2',
|
|
|
'[CAS:C]'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '122'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#CASCKX#1',
|
|
|
'Valeur par défaut CTI CAS KX - Hospitalisés',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'1',
|
|
|
'[CAS:K] [CAS:X]'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '111'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_ghm)
|
|
|
SELECT 'CTI#CASKX#1',
|
|
|
'Valeur par défaut CTI CAS KX - Ambulatoires',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'2',
|
|
|
'[CAS:K] [CAS:X]'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '121'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
|
|
|
-- Spécifique selon les rubriques
|
|
|
PERFORM setval('w_priorite', 50200, true);
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_prestation)
|
|
|
SELECT 'CTI#SEH#3',
|
|
|
'Valeur par défaut CTI SEh - Externes',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'3',
|
|
|
'SE1 SE2 SE3 SE4 SE5 SE6 SE7'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '701'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_prestation)
|
|
|
SELECT 'CTI#GHS#1',
|
|
|
'Valeur par défaut CTI GHS - Hospitalisés',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'1',
|
|
|
'GHS'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '119'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_prestation)
|
|
|
SELECT 'CTI#GHS#2',
|
|
|
'Valeur par défaut CTI GHS - Ambulatoires',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'2',
|
|
|
'GHS'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '129'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite, liste_type_sejour, liste_prestation)
|
|
|
SELECT 'CTI#ATU#3',
|
|
|
'Valeur par défaut CTI ATU - Externes',
|
|
|
t_forme_activite.oid,
|
|
|
nextval('w_priorite'::regclass),
|
|
|
'3',
|
|
|
'ATU FPU FPV FPX FPL FPM'
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '702'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
-- Autres
|
|
|
INSERT INTO activite.t_forme_activite_rule (code, texte, forme_activite_id, priorite)
|
|
|
SELECT 'CTI#999',
|
|
|
'Autres formes',
|
|
|
t_forme_activite.oid,
|
|
|
99999
|
|
|
FROM activite.t_forme_activite
|
|
|
WHERE t_forme_activite.code = '999'
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
|
|
|
PERFORM setval('activite.s_forme_activite_rule', (SELECT GREATEST(COALESCE(max(oid),0),1000) FROM activite.t_forme_activite_rule), true);
|
|
|
|
|
|
UPDATE activite.t_forme_activite_rule
|
|
|
SET oid = nextval('activite.s_forme_activite_rule'::regclass)
|
|
|
WHERE oid < 1000;
|
|
|
|
|
|
PERFORM setval('activite.s_forme_activite_rule', 1, true);
|
|
|
|
|
|
|
|
|
|
|
|
RAISE NOTICE '%' , 'Application des regles';
|
|
|
|
|
|
-- pmsi mco ?
|
|
|
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'pmsi' AND tablename = 'p_rss') THEN
|
|
|
_module_pmsimco = '1';
|
|
|
RAISE NOTICE '%' , 'Application des regles. Avec PMSI MCO';
|
|
|
ELSE
|
|
|
_module_pmsimco = '0';
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
-- Sejours et RSS à Traiter
|
|
|
|
|
|
RAISE NOTICE '%' , 'Application des regles. Identification des sejours';
|
|
|
DROP SEQUENCE IF EXISTS w_sejours_rss_sequence;
|
|
|
CREATE SEQUENCE w_sejours_rss_sequence;
|
|
|
DROP TABLE IF EXISTS w_sejours_rss;
|
|
|
|
|
|
IF _module_pmsimco = '1' THEN
|
|
|
-- si pmsi mco
|
|
|
CREATE TEMP TABLE w_sejours_rss AS
|
|
|
SELECT
|
|
|
nextval('w_sejours_rss_sequence'::regclass) AS oid,
|
|
|
COALESCE(t_finess.oid,0) AS finess_id,
|
|
|
p_sejours.oid AS sejour_id,
|
|
|
p_sejours.no_sejour AS no_sejour,
|
|
|
COALESCE(p_rss.oid,0) AS rss_id,
|
|
|
diagnostic_principal_id,
|
|
|
diagnostic_relie_id,
|
|
|
NULL::bigint[] AS diagnostic_associe_liste_rule_id,
|
|
|
NULL::bigint[] AS acte_liste_rule_id,
|
|
|
NULL::bigint[] AS prestation_liste_rule_id,
|
|
|
NULL::bigint[] AS rubrique_liste_rule_id,
|
|
|
p_rss.ghm_id AS ghm_pmsi_id,
|
|
|
p_sejours.ghm_id AS ghm_activite_id,
|
|
|
COALESCE(medecin_rss_id,0) AS medecin_rss_id,
|
|
|
medecin_sejour_id,
|
|
|
COALESCE(t_medecins_pmsi.specialite_id,0) AS specialite_rss_id,
|
|
|
COALESCE(t_medecins_base.specialite_id,0) AS specialite_sejour_id,
|
|
|
p_sejours.type_sejour,
|
|
|
t_lieux.unite_fonctionnelle_id,
|
|
|
t_lieux.service_facturation_id,
|
|
|
t_lits.etage_id,
|
|
|
t_lieux.unite_fonctionnelle_id AS unite_fonctionnelle_entree_id,
|
|
|
t_lieux.service_facturation_id AS service_facturation_entree_id,
|
|
|
t_lits.etage_id AS etage_entree_id,
|
|
|
t_lieux.activite_id,
|
|
|
0::bigint AS forme_activite_id,
|
|
|
0::bigint AS forme_activite_priorite
|
|
|
FROM activite.p_sejours
|
|
|
JOIN activite.t_lieux ON lieu_sortie_id = t_lieux.oid
|
|
|
JOIN activite.t_lits ON t_lieux.lit_id = t_lits.oid
|
|
|
LEFT JOIN pmsi.p_rss ON no_sejour_administratif = no_sejour AND p_sejours.date_sortie = p_rss.date_sortie AND p_rss.etat = ''
|
|
|
LEFT JOIN pmsi.t_medecins t_medecins_pmsi ON medecin_rss_id = t_medecins_pmsi.oid
|
|
|
LEFT JOIN activite.t_medecins_administratifs ON medecin_sejour_id = t_medecins_administratifs.oid
|
|
|
LEFT JOIN base.t_medecins t_medecins_base ON t_medecins_administratifs.medecin_id = t_medecins_base.oid
|
|
|
LEFT JOIN base.t_finess ON p_sejours.finess = t_finess.code;
|
|
|
INSERT INTO w_sejours_rss
|
|
|
SELECT
|
|
|
nextval('w_sejours_rss_sequence'::regclass) AS oid,
|
|
|
COALESCE(t_finess.oid,0) AS finess_id,
|
|
|
0 AS sejour_id,
|
|
|
'' AS no_sejour,
|
|
|
p_rss.oid AS rss_id,
|
|
|
diagnostic_principal_id,
|
|
|
diagnostic_relie_id,
|
|
|
NULL::bigint[] AS diagnostic_associe_liste_rule_id,
|
|
|
NULL::bigint[] AS acte_liste_rule_id,
|
|
|
NULL::bigint[] AS prestation_liste_rule_id,
|
|
|
NULL::bigint[] AS rubrique_liste_rule_id,
|
|
|
p_rss.ghm_id AS ghm_pmsi_id,
|
|
|
0 AS ghm_activite_id,
|
|
|
medecin_rss_id,
|
|
|
0::bigint AS medecin_sejour_id,
|
|
|
COALESCE(t_medecins_pmsi.specialite_id,0) AS specialite_rss_id,
|
|
|
0::bigint AS specialite_sejour_id,
|
|
|
''::text AS type_sejour,
|
|
|
0::bigint AS unite_fonctionnelle_id,
|
|
|
0::bigint AS service_facturation_id,
|
|
|
0::bigint AS etage_id,
|
|
|
0::bigint AS unite_fonctionnelle_entree_id,
|
|
|
0::bigint AS service_facturation_entree_id,
|
|
|
0::bigint AS etage_entree_id,
|
|
|
0::bigint AS activite_id,
|
|
|
0::bigint AS forme_activite_id,
|
|
|
0::bigint AS forme_activite_priorite
|
|
|
FROM pmsi.p_rss
|
|
|
LEFT JOIN pmsi.t_medecins t_medecins_pmsi ON medecin_rss_id = t_medecins_pmsi.oid
|
|
|
LEFT JOIN base.t_finess ON p_rss.finess = t_finess.code
|
|
|
WHERE date_sortie >= '20100101' AND p_rss.oid NOT IN (SELECt rss_id FROM w_sejours_rss);
|
|
|
UPDATE w_sejours_rss SET
|
|
|
medecin_rss_id = t_medecins.oid,
|
|
|
specialite_rss_id = t_medecins.specialite_id
|
|
|
FROM activite.t_medecins_administratifs_c
|
|
|
JOIN pmsi.t_medecins ON t_medecins_administratifs_c.adm_code = t_medecins.code
|
|
|
WHERE medecin_sejour_id = t_medecins_administratifs_c.oid AND
|
|
|
t_medecins.oid <> 0 AND
|
|
|
(t_medecins.oid IS DISTINCT FROM medecin_rss_id OR
|
|
|
specialite_rss_id IS DISTINCT FROM t_medecins.specialite_id)
|
|
|
;
|
|
|
ELSE
|
|
|
-- si pas pmsi mco
|
|
|
CREATE TEMP TABLE w_sejours_rss AS
|
|
|
SELECT
|
|
|
nextval('w_sejours_rss_sequence'::regclass) AS oid,
|
|
|
COALESCE(t_finess.oid,0) AS finess_id,
|
|
|
p_sejours.oid AS sejour_id,
|
|
|
p_sejours.no_sejour AS no_sejour,
|
|
|
0 AS rss_id,
|
|
|
0::bigint AS diagnostic_principal_id,
|
|
|
0::bigint AS diagnostic_relie_id,
|
|
|
NULL::bigint[] AS diagnostic_associe_liste_rule_id,
|
|
|
NULL::bigint[] AS acte_liste_rule_id,
|
|
|
NULL::bigint[] AS prestation_liste_rule_id,
|
|
|
NULL::bigint[] AS rubrique_liste_rule_id,
|
|
|
0::bigint AS ghm_pmsi_id,
|
|
|
p_sejours.ghm_id AS ghm_activite_id,
|
|
|
0 AS medecin_rss_id,
|
|
|
medecin_sejour_id,
|
|
|
0 AS specialite_rss_id,
|
|
|
COALESCE(t_medecins_base.specialite_id,0) AS specialite_sejour_id,
|
|
|
p_sejours.type_sejour,
|
|
|
t_lieux.unite_fonctionnelle_id,
|
|
|
t_lieux.service_facturation_id,
|
|
|
t_lits.etage_id,
|
|
|
t_lieux.unite_fonctionnelle_id AS unite_fonctionnelle_entree_id,
|
|
|
t_lieux.service_facturation_id AS service_facturation_entree_id,
|
|
|
t_lits.etage_id AS etage_entree_id,
|
|
|
t_lieux.activite_id,
|
|
|
0::bigint AS forme_activite_id,
|
|
|
0::bigint AS forme_activite_priorite
|
|
|
FROM activite.p_sejours
|
|
|
JOIN activite.t_lieux ON lieu_sortie_id = t_lieux.oid
|
|
|
JOIN activite.t_lits ON t_lieux.lit_id = t_lits.oid
|
|
|
LEFT JOIN base.t_finess ON p_sejours.finess = t_finess.code
|
|
|
LEFT JOIN activite.t_medecins_administratifs ON medecin_sejour_id = t_medecins_administratifs.oid
|
|
|
LEFT JOIN base.t_medecins t_medecins_base ON t_medecins_administratifs.medecin_id = t_medecins_base.oid;
|
|
|
END IF;
|
|
|
|
|
|
-- Unites d'entrées
|
|
|
UPDATE w_sejours_rss SET
|
|
|
unite_fonctionnelle_entree_id = t_lieux.unite_fonctionnelle_id,
|
|
|
service_facturation_entree_id = t_lieux.service_facturation_id,
|
|
|
etage_entree_id = t_lits.etage_id
|
|
|
FROM activite.p_mouvements_sejour
|
|
|
JOIN activite.t_lieux ON p_mouvements_sejour.lieu_id = t_lieux.oid
|
|
|
JOIN activite.t_lits ON t_lieux.lit_id = t_lits.oid
|
|
|
WHERE w_sejours_rss.no_sejour = p_mouvements_sejour.no_sejour AND nb_entrees_directes = 1 AND
|
|
|
(
|
|
|
t_lieux.unite_fonctionnelle_id <> unite_fonctionnelle_entree_id OR
|
|
|
t_lieux.service_facturation_id <> service_facturation_entree_id OR
|
|
|
t_lits.etage_id <> etage_entree_id
|
|
|
)
|
|
|
;
|
|
|
|
|
|
|
|
|
-- GHM sur services non MCO
|
|
|
-- Verrouillé pour l'instant (on verra par la suite)
|
|
|
-- UPDATE w_sejours_rss SET
|
|
|
-- ghm_pmsi_id = 0,
|
|
|
-- ghm_activite_id = 0
|
|
|
-- FROM activite.t_services_facturation
|
|
|
-- WHERE service_facturation_id = t_services_facturation .oid AND
|
|
|
-- type_t2a <> '1' AND
|
|
|
-- service_facturation_id <> 0 AND
|
|
|
-- (ghm_pmsi_id > 0 OR
|
|
|
-- ghm_activite_id > 0)
|
|
|
-- ;
|
|
|
|
|
|
--
|
|
|
UPDATE w_sejours_rss SET
|
|
|
medecin_rss_id = 0,
|
|
|
specialite_rss_id = 0
|
|
|
WHERE medecin_sejour_id <> 0;
|
|
|
UPDATE w_sejours_rss
|
|
|
SET finess_id = (SELECT MAX(finess_id) FROM w_sejours_rss WHERE finess_id <> 0)
|
|
|
WHERE finess_id = 0 AND (SELECT MAX(finess_id) FROM w_sejours_rss WHERE finess_id <> 0) <> 0;
|
|
|
UPDATE w_sejours_rss
|
|
|
SET finess_id = (SELECT MAX(oid) FROM base.t_finess)
|
|
|
WHERE finess_id = 0;
|
|
|
CREATE INDEX w_sejours_rss_i0 ON w_sejours_rss USING btree (oid);
|
|
|
CREATE INDEX w_sejours_rss_i1 ON w_sejours_rss USING btree (rss_id);
|
|
|
CREATE INDEX w_sejours_rss_i2 ON w_sejours_rss USING btree (sejour_id);
|
|
|
CREATE INDEX w_sejours_rss_i3 ON w_sejours_rss USING btree (no_sejour);
|
|
|
|
|
|
-- Traduction des règles en oid
|
|
|
RAISE NOTICE '%' , 'Application des regles. Traduction en oid';
|
|
|
DROP TABLE IF EXISTS w_forme_activite_rule;
|
|
|
CREATE TEMP TABLE w_forme_activite_rule AS
|
|
|
SELECT
|
|
|
t_forme_activite_rule.oid,
|
|
|
forme_activite_id,
|
|
|
CASE WHEN priorite <> 0 THEN priorite WHEN liste_diagnostic_principal <> '' THEN 90000 ELSE 999999 END AS priorite,
|
|
|
CASE WHEN liste_finess <> '' THEN '1' ELSE '0' END AS a_liste_finess,
|
|
|
string_to_array(translate(liste_finess,'*,','% '),' ') AS liste_finess,
|
|
|
NULL::bigint[] AS liste_finess_id ,
|
|
|
CASE WHEN liste_diagnostic_principal <> '' THEN '1' ELSE '0' END AS a_liste_diagnostic_principal,
|
|
|
string_to_array(translate(liste_diagnostic_principal,'*,','% '),' ') AS liste_diagnostic_principal,
|
|
|
NULL::bigint[] AS liste_diagnostic_principal_id ,
|
|
|
CASE WHEN liste_diagnostic_relie <> '' THEN '1' ELSE '0' END AS a_liste_diagnostic_relie,
|
|
|
string_to_array(translate(liste_diagnostic_relie,'*,','% '),' ') AS liste_diagnostic_relie,
|
|
|
NULL::bigint[] AS liste_diagnostic_relie_id ,
|
|
|
CASE WHEN liste_diagnostic_associe <> '' THEN '1' ELSE '0' END AS a_liste_diagnostic_associe,
|
|
|
string_to_array(translate(liste_diagnostic_associe,'*,','% '),' ') AS liste_diagnostic_associe,
|
|
|
NULL::bigint[] AS liste_diagnostic_associe_id ,
|
|
|
CASE WHEN liste_acte <> '' THEN '1' ELSE '0' END AS a_liste_acte,
|
|
|
string_to_array(translate(liste_acte,'*,','% '),' ') AS liste_acte,
|
|
|
NULL::bigint[] AS liste_acte_pmsi_id ,
|
|
|
NULL::bigint[] AS liste_acte_base_id ,
|
|
|
CASE WHEN liste_ghm <> '' THEN '1' ELSE '0' END AS a_liste_ghm,
|
|
|
string_to_array(translate(liste_ghm,'*,','% '),' ') AS liste_ghm,
|
|
|
NULL::bigint[] AS liste_ghm_pmsi_id,
|
|
|
NULL::bigint[] AS liste_ghm_activite_id,
|
|
|
liste_ghm AS liste_ghm_origine,
|
|
|
CASE WHEN liste_sauf_ghm <> '' THEN '1' ELSE '0' END AS a_liste_sauf_ghm,
|
|
|
string_to_array(translate(liste_sauf_ghm,'*,','% '),' ') AS liste_sauf_ghm,
|
|
|
NULL::bigint[] AS liste_sauf_ghm_pmsi_id ,
|
|
|
NULL::bigint[] AS liste_sauf_ghm_activite_id ,
|
|
|
liste_sauf_ghm AS liste_sauf_ghm_origine,
|
|
|
CASE WHEN liste_type_sejour <> '' THEN '1' ELSE '0' END AS a_liste_type_sejour,
|
|
|
string_to_array(translate(liste_type_sejour,'*,','% '),' ') AS liste_type_sejour,
|
|
|
NULL::text[] AS liste_type_sejour_id ,
|
|
|
CASE WHEN liste_unite_fonctionnelle <> '' THEN '1' ELSE '0' END AS a_liste_unite_fonctionnelle,
|
|
|
string_to_array(translate(liste_unite_fonctionnelle,'*,','% '),' ') AS liste_unite_fonctionnelle,
|
|
|
NULL::bigint[] AS liste_unite_fonctionnelle_id ,
|
|
|
CASE WHEN liste_service <> '' THEN '1' ELSE '0' END AS a_liste_service,
|
|
|
string_to_array(translate(liste_service,'*,','% '),' ') AS liste_service,
|
|
|
NULL::bigint[] AS liste_service_id ,
|
|
|
CASE WHEN liste_etage <> '' THEN '1' ELSE '0' END AS a_liste_etage,
|
|
|
string_to_array(translate(liste_etage,'*,','% '),' ') AS liste_etage,
|
|
|
NULL::bigint[] AS liste_etage_id ,
|
|
|
CASE WHEN liste_unite_fonctionnelle_entree <> '' THEN '1' ELSE '0' END AS a_liste_unite_fonctionnelle_entree,
|
|
|
string_to_array(translate(liste_unite_fonctionnelle_entree,'*,','% '),' ') AS liste_unite_fonctionnelle_entree,
|
|
|
NULL::bigint[] AS liste_unite_fonctionnelle_entree_id ,
|
|
|
CASE WHEN liste_service_entree <> '' THEN '1' ELSE '0' END AS a_liste_service_entree,
|
|
|
string_to_array(translate(liste_service_entree,'*,','% '),' ') AS liste_service_entree,
|
|
|
NULL::bigint[] AS liste_service_entree_id ,
|
|
|
CASE WHEN liste_etage_entree <> '' THEN '1' ELSE '0' END AS a_liste_etage_entree,
|
|
|
string_to_array(translate(liste_etage_entree,'*,','% '),' ') AS liste_etage_entree,
|
|
|
NULL::bigint[] AS liste_etage_entree_id ,
|
|
|
NULL::bigint[] AS liste_activite_id ,
|
|
|
CASE WHEN liste_medecin <> '' THEN '1' ELSE '0' END AS a_liste_medecin,
|
|
|
string_to_array(CASE WHEN liste_medecin NOT LIKE '%**%' THEN translate(liste_medecin,'*,','% ') ELSE liste_medecin END,' ') AS liste_medecin,
|
|
|
NULL::bigint[] AS liste_medecin_pmsi_id ,
|
|
|
NULL::bigint[] AS liste_medecin_activite_id ,
|
|
|
CASE WHEN liste_specialite <> '' THEN '1' ELSE '0' END AS a_liste_specialite,
|
|
|
string_to_array(translate(liste_specialite,'*,','% '),' ') AS liste_specialite,
|
|
|
NULL::bigint[] AS liste_specialite_pmsi_id ,
|
|
|
NULL::bigint[] AS liste_specialite_activite_id ,
|
|
|
CASE WHEN liste_rubrique <> '' THEN '1' ELSE '0' END AS a_liste_rubrique,
|
|
|
string_to_array(translate(liste_rubrique,'*,','% '),' ') AS liste_rubrique,
|
|
|
NULL::bigint[] AS liste_rubrique_id,
|
|
|
CASE WHEN liste_prestation <> '' THEN '1' ELSE '0' END AS a_liste_prestation,
|
|
|
string_to_array(translate(liste_prestation,'*,','% '),' ') AS liste_prestation,
|
|
|
NULL::bigint[] AS liste_prestation_id
|
|
|
FROM activite.t_forme_activite_rule
|
|
|
JOIN activite.t_forme_activite ON forme_activite_id = t_forme_activite.oid
|
|
|
ORDER BY priorite, forme_activite_id;
|
|
|
|
|
|
|
|
|
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_finess_id = (SELECT base.cti_group_array3(oid) FROM base.t_finess WHERE code LIKE ANY (liste_finess))
|
|
|
WHERE a_liste_finess = '1';
|
|
|
|
|
|
IF _module_pmsimco = '1' THEN
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_diagnostic_principal_id = (SELECT base.cti_group_array3(oid) FROM pmsi.t_diagnostics WHERE code LIKE ANY (liste_diagnostic_principal))
|
|
|
WHERE a_liste_diagnostic_principal = '1';
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_diagnostic_relie_id = (SELECT base.cti_group_array3(oid) FROM pmsi.t_diagnostics WHERE code LIKE ANY (liste_diagnostic_relie))
|
|
|
WHERE a_liste_diagnostic_relie = '1';
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_diagnostic_associe_id = (SELECT base.cti_group_array3(oid) FROM pmsi.t_diagnostics WHERE code LIKE ANY (liste_diagnostic_associe))
|
|
|
WHERE a_liste_diagnostic_associe = '1';
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_acte_pmsi_id = (SELECT base.cti_group_array3(oid) FROM pmsi.t_actes WHERE code LIKE ANY (liste_acte))
|
|
|
WHERE a_liste_acte = '1';
|
|
|
DROP TABLE IF EXISTS w_forme_activite_rule_actes_pmsi;
|
|
|
CREATE TEMP TABLE w_forme_activite_rule_actes_pmsi AS
|
|
|
SELECT t_actes.oid AS rule_acte_id, w_forme_activite_rule.oid AS rule_id
|
|
|
FROM pmsi.t_actes
|
|
|
JOIN w_forme_activite_rule ON code LIKE ANY (liste_acte);
|
|
|
CREATE INDEX w_forme_activite_rule_actes_pmsi_i1 ON w_forme_activite_rule_actes_pmsi USING btree (rule_acte_id);
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS w_forme_activite_rule_actes_base;
|
|
|
CREATE TEMP TABLE w_forme_activite_rule_actes_base AS
|
|
|
SELECT t_actes.oid AS rule_acte_id, w_forme_activite_rule.oid AS rule_id
|
|
|
FROM base.t_actes
|
|
|
JOIN w_forme_activite_rule ON code LIKE ANY (liste_acte);
|
|
|
CREATE INDEX w_forme_activite_rule_actes_base_i1 ON w_forme_activite_rule_actes_base USING btree (rule_acte_id);
|
|
|
|
|
|
DROP TABLE IF EXISTS w_forme_activite_rule_rubriques;
|
|
|
CREATE TEMP TABLE w_forme_activite_rule_rubriques AS
|
|
|
SELECT t_rubriques_facturation.oid AS rule_rubrique_id, w_forme_activite_rule.oid AS rule_id
|
|
|
FROM activite.t_rubriques_facturation
|
|
|
JOIN w_forme_activite_rule ON code LIKE ANY (liste_rubrique);
|
|
|
CREATE INDEX w_forme_activite_rule_rubriques_i1 ON w_forme_activite_rule_rubriques USING btree (rule_rubrique_id);
|
|
|
|
|
|
DROP TABLE IF EXISTS w_forme_activite_rule_prestations;
|
|
|
CREATE TEMP TABLE w_forme_activite_rule_prestations AS
|
|
|
SELECT t_prestations.oid AS rule_prestation_id, w_forme_activite_rule.oid AS rule_id
|
|
|
FROM activite.t_prestations
|
|
|
JOIN w_forme_activite_rule ON code LIKE ANY (liste_prestation);
|
|
|
CREATE INDEX w_forme_activite_rule_prestations_i1 ON w_forme_activite_rule_prestations USING btree (rule_prestation_id);
|
|
|
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_acte_base_id = (SELECT base.cti_group_array3(oid) FROM base.t_actes WHERE code LIKE ANY (liste_acte))
|
|
|
WHERE a_liste_acte = '1'
|
|
|
;
|
|
|
|
|
|
IF _module_pmsimco = '1' THEN
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_ghm_pmsi_id = (SELECT base.cti_group_array3(oid) FROM pmsi.t_ghm WHERE code LIKE ANY (liste_ghm))
|
|
|
WHERE a_liste_ghm = '1';
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_ghm_pmsi_id =
|
|
|
array_cat(liste_ghm_pmsi_id,
|
|
|
(SELECT base.cti_group_array3(t_ghm.oid) FROM pmsi.t_ghm JOIN base.t_cas ON cas_id = t_cas.oid WHERE '[CAS:'||t_cas.code||']' LIKE ANY (liste_ghm))
|
|
|
)
|
|
|
WHERE a_liste_ghm = '1' AND
|
|
|
liste_ghm_origine LIKE '%[CAS:%'
|
|
|
;
|
|
|
END IF;
|
|
|
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_ghm_activite_id = (SELECT base.cti_group_array3(oid) FROM base.t_ghm WHERE code LIKE ANY (liste_ghm))
|
|
|
WHERE a_liste_ghm = '1'
|
|
|
;
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_ghm_activite_id =
|
|
|
array_cat(liste_ghm_activite_id,
|
|
|
(SELECT base.cti_group_array3(t_ghm.oid) FROM base.t_ghm JOIN base.t_cas ON cas_id = t_cas.oid WHERE '[CAS:'||t_cas.code||']' LIKE ANY (liste_ghm))
|
|
|
)
|
|
|
WHERE a_liste_ghm = '1' AND
|
|
|
liste_ghm_origine LIKE '%[CAS:%'
|
|
|
;
|
|
|
IF _module_pmsimco = '1' THEN
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_sauf_ghm_pmsi_id = (SELECT base.cti_group_array3(oid) FROM pmsi.t_ghm WHERE code LIKE ANY (liste_sauf_ghm))
|
|
|
WHERE a_liste_sauf_ghm = '1';
|
|
|
END IF;
|
|
|
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_sauf_ghm_activite_id = (SELECT base.cti_group_array3(oid) FROM base.t_ghm WHERE code LIKE ANY (liste_sauf_ghm))
|
|
|
WHERE a_liste_sauf_ghm = '1'
|
|
|
;
|
|
|
IF _module_pmsimco = '1' THEN
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_medecin_pmsi_id = (
|
|
|
SELECT base.cti_group_array3(t_medecins_pmsi.oid)
|
|
|
FROM pmsi.t_medecins t_medecins_pmsi
|
|
|
JOIN base.t_medecins ON t_medecins_pmsi.medecin_reference_id = t_medecins.oid
|
|
|
WHERE t_medecins_pmsi.oid <> 0 AND t_medecins_pmsi.code <> '' AND t_medecins_pmsi.code LIKE ANY (liste_medecin) AND liste_medecin[1] <> '(R)' OR
|
|
|
t_medecins.oid <> 0 AND t_medecins.code <> '' AND t_medecins.code LIKE ANY (liste_medecin) AND liste_medecin[1] = '(R)'
|
|
|
)
|
|
|
WHERE a_liste_medecin = '1';
|
|
|
END IF;
|
|
|
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_medecin_activite_id = (
|
|
|
SELECT base.cti_group_array3(t_medecins_administratifs.oid)
|
|
|
FROM activite.t_medecins_administratifs
|
|
|
JOIN base.t_medecins ON t_medecins_administratifs.medecin_id = t_medecins.oid
|
|
|
WHERE t_medecins_administratifs.oid <> 0 AND t_medecins_administratifs.code <> '' AND t_medecins_administratifs.code LIKE ANY (liste_medecin) AND liste_medecin[1] <> '(R)' OR
|
|
|
t_medecins.oid <> 0 AND t_medecins.code <> '' AND t_medecins.code LIKE ANY (liste_medecin) AND liste_medecin[1] = '(R)'
|
|
|
)
|
|
|
WHERE a_liste_medecin = '1'
|
|
|
;
|
|
|
IF _module_pmsimco = '1' THEN
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_specialite_pmsi_id = (SELECT base.cti_group_array3(oid) FROM pmsi.t_specialites_medecin WHERE code LIKE ANY (liste_specialite))
|
|
|
WHERE a_liste_specialite = '1';
|
|
|
END IF;
|
|
|
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_specialite_activite_id = (SELECT base.cti_group_array3(oid) FROM base.t_specialites_medecin WHERE code LIKE ANY (liste_specialite))
|
|
|
WHERE a_liste_specialite = '1'
|
|
|
;
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_type_sejour_id = (SELECT base.cti_group_array3(code) FROM activite.t_type_sejour WHERE code <> '' AND code LIKE ANY (liste_type_sejour))
|
|
|
WHERE a_liste_type_sejour = '1'
|
|
|
;
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_unite_fonctionnelle_id = (SELECT base.cti_group_array3(oid) FROM activite.t_unites_fonctionnelles WHERE code LIKE ANY (liste_unite_fonctionnelle))
|
|
|
WHERE a_liste_unite_fonctionnelle = '1'
|
|
|
;
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_service_id = (SELECT base.cti_group_array3(oid) FROM activite.t_services_facturation WHERE code LIKE ANY (liste_service))
|
|
|
WHERE a_liste_service = '1'
|
|
|
;
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_etage_id = (SELECT base.cti_group_array3(oid) FROM activite.t_etages WHERE code LIKE ANY (liste_etage))
|
|
|
WHERE a_liste_etage = '1'
|
|
|
;
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_unite_fonctionnelle_entree_id = (SELECT base.cti_group_array3(oid) FROM activite.t_unites_fonctionnelles WHERE code LIKE ANY (liste_unite_fonctionnelle_entree))
|
|
|
WHERE a_liste_unite_fonctionnelle_entree = '1'
|
|
|
;
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_service_entree_id = (SELECT base.cti_group_array3(oid) FROM activite.t_services_facturation WHERE code LIKE ANY (liste_service_entree))
|
|
|
WHERE a_liste_service_entree = '1'
|
|
|
;
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_etage_entree_id = (SELECT base.cti_group_array3(oid) FROM activite.t_etages WHERE code LIKE ANY (liste_etage_entree))
|
|
|
WHERE a_liste_etage_entree = '1'
|
|
|
;
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_rubrique_id = (SELECT base.cti_group_array3(oid) FROM activite.t_rubriques_facturation WHERE code LIKE ANY (liste_rubrique))
|
|
|
WHERE a_liste_rubrique = '1'
|
|
|
;
|
|
|
UPDATE w_forme_activite_rule
|
|
|
SET liste_prestation_id = (SELECT base.cti_group_array3(oid) FROM activite.t_prestations WHERE code LIKE ANY (liste_prestation))
|
|
|
WHERE a_liste_prestation = '1'
|
|
|
;
|
|
|
|
|
|
|
|
|
-- Association cles aux rubriques
|
|
|
RAISE NOTICE '%' , 'Application des regles. Traitement des rubriques';
|
|
|
DROP TABLE IF EXISTS w_factures_rubriques;
|
|
|
CREATE TEMP TABLE w_factures_rubriques AS
|
|
|
SELECT
|
|
|
p_factures.no_sejour, rule_id
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN w_forme_activite_rule_rubriques ON p_factures_lignes_c.rubrique_facturation_id = rule_rubrique_id
|
|
|
WHERE p_factures_lignes_c.montant_facture <> 0
|
|
|
GROUP BY 1,2
|
|
|
HAVING SUM(p_factures_lignes_c.montant_facture) > 0
|
|
|
UNION
|
|
|
SELECT
|
|
|
p_factures.no_sejour, rule_id
|
|
|
FROM activite.p_factures_lignes_non_facturees_c
|
|
|
JOIN activite.p_factures ON p_factures.no_facture = p_factures_lignes_non_facturees_c.no_facture
|
|
|
JOIN w_forme_activite_rule_rubriques ON p_factures_lignes_non_facturees_c.rubrique_facturation_id = rule_rubrique_id
|
|
|
;
|
|
|
CREATE INDEX w_factures_rubriques_i1 ON w_factures_rubriques USING btree (no_sejour);
|
|
|
|
|
|
DROP TABLE IF EXISTS w_forme_activite_rubriques;
|
|
|
CREATE TEMP TABLE w_forme_activite_rubriques AS
|
|
|
|
|
|
SELECT oid, base.cti_group_array3(rubrique_rule_id) AS rubrique_liste_rule_id
|
|
|
FROM
|
|
|
(
|
|
|
SELECT
|
|
|
w_sejours_rss.oid, rule_id AS rubrique_rule_id
|
|
|
FROM w_factures_rubriques
|
|
|
JOIN w_sejours_rss ON w_factures_rubriques.no_sejour = w_sejours_rss.no_sejour
|
|
|
) subview
|
|
|
GROUP BY 1;
|
|
|
ALTER TABLE w_forme_activite_rubriques ADD CONSTRAINT w_forme_activite_rubriques_pkey PRIMARY KEY(oid);
|
|
|
UPDATE w_sejours_rss
|
|
|
SET rubrique_liste_rule_id = w_forme_activite_rubriques.rubrique_liste_rule_id
|
|
|
FROM w_forme_activite_rubriques
|
|
|
WHERE w_forme_activite_rubriques.oid = w_sejours_rss.oid;
|
|
|
|
|
|
|
|
|
|
|
|
-- Association cles aux prestations
|
|
|
RAISE NOTICE '%' , 'Application des regles. Traitement des prestations';
|
|
|
DROP TABLE IF EXISTS w_factures_prestations;
|
|
|
CREATE TEMP TABLE w_factures_prestations AS
|
|
|
SELECT
|
|
|
p_factures.no_sejour, rule_id
|
|
|
FROM activite.p_factures_lignes_c
|
|
|
JOIN activite.p_factures ON p_factures.no_facture = p_factures_lignes_c.no_facture
|
|
|
JOIN w_forme_activite_rule_prestations ON p_factures_lignes_c.prestation_id = rule_prestation_id
|
|
|
WHERE p_factures_lignes_c.montant_facture <> 0
|
|
|
GROUP BY 1,2
|
|
|
HAVING SUM(p_factures_lignes_c.montant_facture) > 0
|
|
|
UNION
|
|
|
SELECT
|
|
|
p_factures.no_sejour, rule_id
|
|
|
FROM activite.p_factures_lignes_non_facturees_c
|
|
|
JOIN activite.p_factures ON p_factures.no_facture = p_factures_lignes_non_facturees_c.no_facture
|
|
|
JOIN w_forme_activite_rule_prestations ON p_factures_lignes_non_facturees_c.prestation_id = rule_prestation_id
|
|
|
GROUP BY 1,2
|
|
|
;
|
|
|
CREATE INDEX w_factures_prestations_i1 ON w_factures_prestations USING btree (no_sejour);
|
|
|
|
|
|
DROP TABLE IF EXISTS w_forme_activite_prestations;
|
|
|
CREATE TEMP TABLE w_forme_activite_prestations AS
|
|
|
|
|
|
SELECT oid, base.cti_group_array3(prestation_rule_id) AS prestation_liste_rule_id
|
|
|
FROM
|
|
|
(
|
|
|
SELECT
|
|
|
w_sejours_rss.oid, rule_id AS prestation_rule_id
|
|
|
FROM w_factures_prestations
|
|
|
JOIN w_sejours_rss ON w_factures_prestations.no_sejour = w_sejours_rss.no_sejour
|
|
|
) subview
|
|
|
GROUP BY 1;
|
|
|
ALTER TABLE w_forme_activite_prestations ADD CONSTRAINT w_forme_activite_prestations_pkey PRIMARY KEY(oid);
|
|
|
UPDATE w_sejours_rss
|
|
|
SET prestation_liste_rule_id = w_forme_activite_prestations.prestation_liste_rule_id
|
|
|
FROM w_forme_activite_prestations
|
|
|
WHERE w_forme_activite_prestations.oid = w_sejours_rss.oid;
|
|
|
|
|
|
|
|
|
-- Association cles aux actes
|
|
|
RAISE NOTICE '%' , 'Application des regles. Traitement des actes';
|
|
|
DROP TABLE IF EXISTS w_factures_actes;
|
|
|
CREATE TEMP TABLE w_factures_actes AS
|
|
|
SELECT
|
|
|
no_facture, rule_id
|
|
|
FROM activite.p_factures_lignes_h
|
|
|
JOIN w_forme_activite_rule_actes_base ON p_factures_lignes_h.acte_id = rule_acte_id
|
|
|
WHERE activite_ccam <> '4'
|
|
|
UNION
|
|
|
SELECT
|
|
|
no_facture, rule_id
|
|
|
FROM activite.p_factures_lignes_non_facturees_h
|
|
|
JOIN w_forme_activite_rule_actes_base ON p_factures_lignes_non_facturees_h.acte_id = rule_acte_id
|
|
|
WHERE activite_ccam <> '4';
|
|
|
CREATE INDEX w_factures_actes_i1 ON w_factures_actes USING btree (no_facture);
|
|
|
|
|
|
DROP TABLE IF EXISTS w_forme_activite_actes;
|
|
|
IF _module_pmsimco = '1' THEN
|
|
|
CREATE TEMP TABLE w_forme_activite_actes AS
|
|
|
SELECT oid, base.cti_group_array3(acte_rule_id) AS acte_liste_rule_id
|
|
|
FROM
|
|
|
(
|
|
|
SELECT
|
|
|
w_sejours_rss.oid, rule_id AS acte_rule_id
|
|
|
FROM pmsi.p_rss_actes
|
|
|
JOIN w_sejours_rss ON p_rss_actes.rss_id = w_sejours_rss.rss_id
|
|
|
JOIN w_forme_activite_rule_actes_pmsi ON p_rss_actes.acte_id = rule_acte_id
|
|
|
UNION
|
|
|
SELECT
|
|
|
w_sejours_rss.oid, rule_id AS acte_rule_id
|
|
|
FROM w_factures_actes
|
|
|
JOIN activite.p_factures ON w_factures_actes.no_facture = p_factures.no_facture
|
|
|
JOIN w_sejours_rss ON p_factures.no_sejour = w_sejours_rss.no_sejour
|
|
|
|
|
|
) subview
|
|
|
GROUP BY 1;
|
|
|
ELSE
|
|
|
CREATE TEMP TABLE w_forme_activite_actes AS
|
|
|
SELECT oid, base.cti_group_array3(acte_rule_id) AS acte_liste_rule_id
|
|
|
FROM
|
|
|
(
|
|
|
SELECT
|
|
|
w_sejours_rss.oid, rule_id AS acte_rule_id
|
|
|
FROM w_factures_actes
|
|
|
JOIN activite.p_factures ON w_factures_actes.no_facture = p_factures.no_facture
|
|
|
JOIN w_sejours_rss ON p_factures.no_sejour = w_sejours_rss.no_sejour
|
|
|
|
|
|
) subview
|
|
|
GROUP BY 1;
|
|
|
END IF;
|
|
|
ALTER TABLE w_forme_activite_actes ADD CONSTRAINT w_forme_activite_actes_pkey PRIMARY KEY(oid);
|
|
|
UPDATE w_sejours_rss
|
|
|
SET acte_liste_rule_id = w_forme_activite_actes.acte_liste_rule_id
|
|
|
FROM w_forme_activite_actes
|
|
|
WHERE w_forme_activite_actes.oid = w_sejours_rss.oid;
|
|
|
|
|
|
-- Diagnostics
|
|
|
IF _module_pmsimco = '1' THEN
|
|
|
RAISE NOTICE '%' , 'Application des regles. Traitement des diagnostics';
|
|
|
DROP TABLE IF EXISTS w_forme_activite_diagnostics;
|
|
|
CREATE TEMP TABLE w_forme_activite_diagnostics AS
|
|
|
SELECT
|
|
|
w_sejours_rss.oid, base.cti_group_array3(w_forme_activite_rule.oid) AS diagnostic_associe_liste_rule_id
|
|
|
FROM pmsi.p_rss_diagnostics
|
|
|
JOIN w_forme_activite_rule ON type_diagnostic_rss IN ('DA', 'DS') AND diagnostic_id = ANY (liste_diagnostic_associe_id)
|
|
|
JOIN w_sejours_rss ON p_rss_diagnostics.rss_id = w_sejours_rss.rss_id
|
|
|
WHERE a_liste_diagnostic_associe <> '0'
|
|
|
GROUP BY 1;
|
|
|
ALTER TABLE w_forme_activite_diagnostics ADD CONSTRAINT w_forme_activite_diagnostics_pkey PRIMARY KEY(oid);
|
|
|
UPDATE w_sejours_rss
|
|
|
SET diagnostic_associe_liste_rule_id = w_forme_activite_diagnostics.diagnostic_associe_liste_rule_id
|
|
|
FROM w_forme_activite_diagnostics
|
|
|
WHERE w_forme_activite_diagnostics.oid = w_sejours_rss.oid;
|
|
|
END IF;
|
|
|
|
|
|
-- Mise à jour des cles venant des données du PMSI
|
|
|
RAISE NOTICE '%' , 'Application des regles. Attribution des formes activite venant du pmsi';
|
|
|
DROP TABLE IF EXISTS w_sejours_forme_activite;
|
|
|
CREATE TEMP TABLE w_sejours_forme_activite AS
|
|
|
SELECT w_sejours_rss.oid,
|
|
|
MIN(priorite)+1 AS forme_activite_priorite,
|
|
|
(MIN(ARRAY[priorite,w_forme_activite_rule.forme_activite_id]))[2] AS forme_activite_id
|
|
|
FROM w_sejours_rss
|
|
|
JOIN w_forme_activite_rule ON
|
|
|
(a_liste_finess = '0' OR finess_id = ANY (liste_finess_id)) AND
|
|
|
(a_liste_medecin = '0' OR medecin_rss_id = ANY (liste_medecin_pmsi_id)) AND
|
|
|
(a_liste_type_sejour = '0') AND
|
|
|
(a_liste_unite_fonctionnelle = '0') AND
|
|
|
(a_liste_service = '0') AND
|
|
|
(a_liste_etage = '0') AND
|
|
|
(a_liste_unite_fonctionnelle_entree = '0') AND
|
|
|
(a_liste_service_entree = '0') AND
|
|
|
(a_liste_etage_entree = '0') AND
|
|
|
(a_liste_specialite = '0' OR specialite_rss_id = ANY (liste_specialite_pmsi_id)) AND
|
|
|
(a_liste_diagnostic_principal = '0' OR diagnostic_principal_id = ANY (liste_diagnostic_principal_id)) AND
|
|
|
(a_liste_diagnostic_relie = '0' OR diagnostic_relie_id = ANY (liste_diagnostic_relie_id)) AND
|
|
|
(a_liste_diagnostic_associe = '0' OR w_forme_activite_rule.oid = ANY(diagnostic_associe_liste_rule_id)) AND
|
|
|
(a_liste_acte = '0' OR w_forme_activite_rule.oid = ANY(acte_liste_rule_id)) AND
|
|
|
(a_liste_ghm = '0' OR ghm_pmsi_id = ANY (liste_ghm_pmsi_id)) AND
|
|
|
(a_liste_sauf_ghm = '0' OR ghm_pmsi_id <> ALL (liste_sauf_ghm_pmsi_id)) AND
|
|
|
(a_liste_prestation = '0') AND
|
|
|
(a_liste_rubrique = '0')
|
|
|
WHERE w_sejours_rss.rss_id <> 0
|
|
|
GROUP BY 1
|
|
|
ORDER BY 1;
|
|
|
UPDATE w_sejours_rss SET
|
|
|
forme_activite_id = w_sejours_forme_activite.forme_activite_id,
|
|
|
forme_activite_priorite = w_sejours_forme_activite.forme_activite_priorite
|
|
|
FROM w_sejours_forme_activite
|
|
|
WHERE w_sejours_rss.oid = w_sejours_forme_activite.oid;
|
|
|
-- Mise à jour des cles venant des données d'activite
|
|
|
RAISE NOTICE '%' , 'Application des regles. Attribution des formes activite venant de la GAP';
|
|
|
DROP TABLE IF EXISTS w_sejours_forme_activite;
|
|
|
CREATE TEMP TABLE w_sejours_forme_activite AS
|
|
|
SELECT w_sejours_rss.oid,
|
|
|
MIN(priorite) AS forme_activite_priorite,
|
|
|
(MIN(ARRAY[priorite,w_forme_activite_rule.forme_activite_id]))[2] AS forme_activite_id
|
|
|
FROM w_sejours_rss
|
|
|
JOIN w_forme_activite_rule ON
|
|
|
(a_liste_finess = '0' OR finess_id = ANY (liste_finess_id)) AND
|
|
|
(a_liste_type_sejour = '0' OR type_sejour = ANY (liste_type_sejour_id)) AND
|
|
|
(a_liste_unite_fonctionnelle = '0' OR unite_fonctionnelle_id = ANY (liste_unite_fonctionnelle_id)) AND
|
|
|
(a_liste_service = '0' OR service_facturation_id = ANY (liste_service_id)) AND
|
|
|
(a_liste_etage = '0' OR etage_id = ANY (liste_etage_id)) AND
|
|
|
(a_liste_unite_fonctionnelle_entree = '0' OR unite_fonctionnelle_entree_id = ANY (liste_unite_fonctionnelle_entree_id)) AND
|
|
|
(a_liste_service_entree = '0' OR service_facturation_entree_id = ANY (liste_service_entree_id)) AND
|
|
|
(a_liste_etage_entree = '0' OR etage_entree_id = ANY (liste_etage_entree_id)) AND
|
|
|
(a_liste_medecin = '0' OR medecin_sejour_id = ANY (liste_medecin_activite_id)) AND
|
|
|
(a_liste_specialite = '0' OR specialite_sejour_id = ANY (liste_specialite_activite_id)) AND
|
|
|
(a_liste_diagnostic_principal = '0' OR diagnostic_principal_id = ANY (liste_diagnostic_principal_id)) AND
|
|
|
(a_liste_diagnostic_relie = '0' OR diagnostic_relie_id = ANY (liste_diagnostic_relie_id)) AND
|
|
|
(a_liste_diagnostic_associe = '0' OR w_forme_activite_rule.oid = ANY(diagnostic_associe_liste_rule_id)) AND
|
|
|
(a_liste_acte = '0' OR w_forme_activite_rule.oid = ANY(acte_liste_rule_id)) AND
|
|
|
(a_liste_rubrique = '0' OR w_forme_activite_rule.oid = ANY(rubrique_liste_rule_id)) AND
|
|
|
(a_liste_prestation = '0' OR w_forme_activite_rule.oid = ANY(prestation_liste_rule_id)) AND
|
|
|
(a_liste_ghm = '0' OR ghm_activite_id = ANY (liste_ghm_activite_id)) AND
|
|
|
(a_liste_sauf_ghm = '0' OR ghm_activite_id <> ALL (liste_sauf_ghm_activite_id))
|
|
|
WHERE w_sejours_rss.sejour_id <> 0
|
|
|
GROUP BY 1
|
|
|
ORDER BY 1;
|
|
|
UPDATE w_sejours_rss SET
|
|
|
forme_activite_id = w_sejours_forme_activite.forme_activite_id,
|
|
|
forme_activite_priorite = w_sejours_forme_activite.forme_activite_priorite
|
|
|
FROM w_sejours_forme_activite
|
|
|
WHERE w_sejours_rss.oid = w_sejours_forme_activite.oid AND
|
|
|
(w_sejours_rss.forme_activite_priorite > w_sejours_forme_activite.forme_activite_priorite OR w_sejours_rss.forme_activite_priorite = 0);
|
|
|
|
|
|
|
|
|
|
|
|
RAISE NOTICE '%' , 'Application des regles. Deductions depuis utilisation';
|
|
|
|
|
|
-- Valeurs par defaut des médecins
|
|
|
DROP TABLE IF EXISTS w_dft;
|
|
|
CREATE TEMP TABLE w_dft AS
|
|
|
SELECT medecin_sejour_id, type_sejour,
|
|
|
(MAX(ARRAY[to_char(nb,'FM000000000000'),forme_activite_id::text]))[2]::bigint AS forme_activite_id,
|
|
|
MAX(forme_activite_div_id) AS forme_activite_div_id,
|
|
|
(MAX(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) / SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END)) AS pct
|
|
|
FROM
|
|
|
(
|
|
|
SELECT medecin_sejour_id, type_sejour, forme_activite_id, count(*) AS nb,
|
|
|
MAX(CASE WHEN t_forme_activite.code LIKE '%9' THEN '1' ELSE '0' END) AS is_div,
|
|
|
MAX(CASE WHEN t_forme_activite.code LIKE '%9' THEN forme_activite_id ELSE 0 END) AS forme_activite_div_id
|
|
|
FROM w_sejours_rss
|
|
|
JOIN activite.t_forme_activite ON forme_activite_id = t_forme_activite.oid
|
|
|
WHERE type_sejour <> '9' AND medecin_sejour_id <> 0 AND sejour_id <> 0
|
|
|
GROUP BY 1,2,3
|
|
|
) subview
|
|
|
GROUP BY 1,2
|
|
|
HAVING MAX(is_div) = '1' AND
|
|
|
MIN(is_div) = '0' AND
|
|
|
(MAX(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) / SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END)) > 0.95 AND
|
|
|
SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) > 50 AND
|
|
|
(MAX(ARRAY[to_char(nb,'FM000000000000'),forme_activite_id::text]))[2]::bigint <> MAX(forme_activite_div_id)
|
|
|
;
|
|
|
|
|
|
DELETE FROM w_dft
|
|
|
USING
|
|
|
activite.t_forme_activite,
|
|
|
activite.t_forme_activite t_forme_activite_div
|
|
|
WHERE forme_activite_id = t_forme_activite.oid AND
|
|
|
forme_activite_div_id = t_forme_activite_div.oid AND
|
|
|
substr(t_forme_activite.code,1,2) <> substr(t_forme_activite_div.code,1,2)
|
|
|
;
|
|
|
|
|
|
UPDATE w_sejours_rss
|
|
|
SET forme_activite_id = w_dft.forme_activite_id
|
|
|
FROM w_dft
|
|
|
WHERE w_sejours_rss.medecin_sejour_id = w_dft.medecin_sejour_id AND
|
|
|
w_sejours_rss.type_sejour = w_dft.type_sejour AND
|
|
|
w_sejours_rss.forme_activite_id = w_dft.forme_activite_div_id
|
|
|
;
|
|
|
|
|
|
-- Defaut selon medecin et service de sortie
|
|
|
DROP TABLE IF EXISTS w_dft;
|
|
|
CREATE TEMP TABLE w_dft AS
|
|
|
SELECT service_facturation_id, medecin_sejour_id, type_sejour,
|
|
|
(MAX(ARRAY[to_char(nb,'FM000000000000'),forme_activite_id::text]))[2]::bigint AS forme_activite_id,
|
|
|
MAX(forme_activite_div_id) AS forme_activite_div_id,
|
|
|
(MAX(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) / SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END)) AS pct
|
|
|
FROM
|
|
|
(
|
|
|
SELECT service_facturation_id,medecin_sejour_id, type_sejour, forme_activite_id, count(*) AS nb,
|
|
|
MAX(CASE WHEN t_forme_activite.code LIKE '%9' THEN '1' ELSE '0' END) AS is_div,
|
|
|
MAX(CASE WHEN t_forme_activite.code LIKE '%9' THEN forme_activite_id ELSE 0 END) AS forme_activite_div_id
|
|
|
FROM w_sejours_rss
|
|
|
JOIN activite.t_forme_activite ON forme_activite_id = t_forme_activite.oid
|
|
|
WHERE type_sejour <> '9' AND medecin_sejour_id <> 0 AND service_facturation_id <> 0 AND sejour_id <> 0
|
|
|
GROUP BY 1,2,3,4
|
|
|
) subview
|
|
|
GROUP BY 1,2,3
|
|
|
HAVING MAX(is_div) = '1' AND
|
|
|
MIN(is_div) = '0' AND
|
|
|
(MAX(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) / SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END)) > 0.90 AND
|
|
|
SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) > 50 AND
|
|
|
(MAX(ARRAY[to_char(nb,'FM000000000000'),forme_activite_id::text]))[2]::bigint <> MAX(forme_activite_div_id)
|
|
|
;
|
|
|
|
|
|
DELETE FROM w_dft
|
|
|
USING
|
|
|
activite.t_forme_activite,
|
|
|
activite.t_forme_activite t_forme_activite_div
|
|
|
WHERE forme_activite_id = t_forme_activite.oid AND
|
|
|
forme_activite_div_id = t_forme_activite_div.oid AND
|
|
|
substr(t_forme_activite.code,1,2) <> substr(t_forme_activite_div.code,1,2)
|
|
|
;
|
|
|
|
|
|
UPDATE w_sejours_rss
|
|
|
SET forme_activite_id = w_dft.forme_activite_id
|
|
|
FROM w_dft
|
|
|
WHERE w_sejours_rss.medecin_sejour_id = w_dft.medecin_sejour_id AND
|
|
|
w_sejours_rss.type_sejour = w_dft.type_sejour AND
|
|
|
w_sejours_rss.service_facturation_id = w_dft.service_facturation_id AND
|
|
|
w_sejours_rss.forme_activite_id = w_dft.forme_activite_div_id
|
|
|
;
|
|
|
|
|
|
-- Defaut selon service sortie
|
|
|
DROP TABLE IF EXISTS w_dft;
|
|
|
CREATE TEMP TABLE w_dft AS
|
|
|
SELECT service_facturation_id, type_sejour,
|
|
|
(MAX(ARRAY[to_char(nb,'FM000000000000'),forme_activite_id::text]))[2]::bigint AS forme_activite_id,
|
|
|
MAX(forme_activite_div_id) AS forme_activite_div_id,
|
|
|
(MAX(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) / SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END)) AS pct
|
|
|
FROM
|
|
|
(
|
|
|
SELECT service_facturation_id,type_sejour, forme_activite_id, count(*) AS nb,
|
|
|
MAX(CASE WHEN t_forme_activite.code LIKE '%9' THEN '1' ELSE '0' END) AS is_div,
|
|
|
MAX(CASE WHEN t_forme_activite.code LIKE '%9' THEN forme_activite_id ELSE 0 END) AS forme_activite_div_id
|
|
|
FROM w_sejours_rss
|
|
|
JOIN activite.t_forme_activite ON forme_activite_id = t_forme_activite.oid
|
|
|
WHERE type_sejour <> '9' AND service_facturation_id <> 0 AND sejour_id <> 0
|
|
|
GROUP BY 1,2,3
|
|
|
) subview
|
|
|
GROUP BY 1,2
|
|
|
HAVING MAX(is_div) = '1' AND
|
|
|
MIN(is_div) = '0' AND
|
|
|
(MAX(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) / SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END)) > 0.95 AND
|
|
|
SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) > 50 AND
|
|
|
(MAX(ARRAY[to_char(nb,'FM000000000000'),forme_activite_id::text]))[2]::bigint <> MAX(forme_activite_div_id)
|
|
|
;
|
|
|
|
|
|
DELETE FROM w_dft
|
|
|
USING
|
|
|
activite.t_forme_activite,
|
|
|
activite.t_forme_activite t_forme_activite_div
|
|
|
WHERE forme_activite_id = t_forme_activite.oid AND
|
|
|
forme_activite_div_id = t_forme_activite_div.oid AND
|
|
|
substr(t_forme_activite.code,1,2) <> substr(t_forme_activite_div.code,1,2)
|
|
|
;
|
|
|
|
|
|
UPDATE w_sejours_rss
|
|
|
SET forme_activite_id = w_dft.forme_activite_id
|
|
|
FROM w_dft
|
|
|
WHERE w_sejours_rss.type_sejour = w_dft.type_sejour AND
|
|
|
w_sejours_rss.service_facturation_id = w_dft.service_facturation_id AND
|
|
|
w_sejours_rss.forme_activite_id = w_dft.forme_activite_div_id
|
|
|
;
|
|
|
|
|
|
-- Defaut selon medecin et service d'entree
|
|
|
DROP TABLE IF EXISTS w_dft;
|
|
|
CREATE TEMP TABLE w_dft AS
|
|
|
SELECT service_facturation_entree_id, medecin_sejour_id, type_sejour,
|
|
|
(MAX(ARRAY[to_char(nb,'FM000000000000'),forme_activite_id::text]))[2]::bigint AS forme_activite_id,
|
|
|
MAX(forme_activite_div_id) AS forme_activite_div_id,
|
|
|
(MAX(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) / SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END)) AS pct
|
|
|
FROM
|
|
|
(
|
|
|
SELECT service_facturation_entree_id,medecin_sejour_id, type_sejour, forme_activite_id, count(*) AS nb,
|
|
|
MAX(CASE WHEN t_forme_activite.code LIKE '%9' THEN '1' ELSE '0' END) AS is_div,
|
|
|
MAX(CASE WHEN t_forme_activite.code LIKE '%9' THEN forme_activite_id ELSE 0 END) AS forme_activite_div_id
|
|
|
FROM w_sejours_rss
|
|
|
JOIN activite.t_forme_activite ON forme_activite_id = t_forme_activite.oid
|
|
|
WHERE type_sejour <> '9' AND medecin_sejour_id <> 0 AND service_facturation_entree_id <> 0 AND sejour_id <> 0
|
|
|
GROUP BY 1,2,3,4
|
|
|
) subview
|
|
|
GROUP BY 1,2,3
|
|
|
HAVING MAX(is_div) = '1' AND
|
|
|
MIN(is_div) = '0' AND
|
|
|
(MAX(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) / SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END)) > 0.90 AND
|
|
|
SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) > 50 AND
|
|
|
(MAX(ARRAY[to_char(nb,'FM000000000000'),forme_activite_id::text]))[2]::bigint <> MAX(forme_activite_div_id)
|
|
|
;
|
|
|
|
|
|
DELETE FROM w_dft
|
|
|
USING
|
|
|
activite.t_forme_activite,
|
|
|
activite.t_forme_activite t_forme_activite_div
|
|
|
WHERE forme_activite_id = t_forme_activite.oid AND
|
|
|
forme_activite_div_id = t_forme_activite_div.oid AND
|
|
|
substr(t_forme_activite.code,1,2) <> substr(t_forme_activite_div.code,1,2)
|
|
|
;
|
|
|
|
|
|
UPDATE w_sejours_rss
|
|
|
SET forme_activite_id = w_dft.forme_activite_id
|
|
|
FROM w_dft
|
|
|
WHERE w_sejours_rss.medecin_sejour_id = w_dft.medecin_sejour_id AND
|
|
|
w_sejours_rss.type_sejour = w_dft.type_sejour AND
|
|
|
w_sejours_rss.service_facturation_entree_id = w_dft.service_facturation_entree_id AND
|
|
|
w_sejours_rss.forme_activite_id = w_dft.forme_activite_div_id
|
|
|
;
|
|
|
|
|
|
|
|
|
-- Defaut selon service entree
|
|
|
DROP TABLE IF EXISTS w_dft;
|
|
|
CREATE TEMP TABLE w_dft AS
|
|
|
SELECT service_facturation_entree_id, type_sejour,
|
|
|
(MAX(ARRAY[to_char(nb,'FM000000000000'),forme_activite_id::text]))[2]::bigint AS forme_activite_id,
|
|
|
MAX(forme_activite_div_id) AS forme_activite_div_id,
|
|
|
(MAX(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) / SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END)) AS pct
|
|
|
FROM
|
|
|
(
|
|
|
SELECT service_facturation_entree_id,type_sejour, forme_activite_id, count(*) AS nb,
|
|
|
MAX(CASE WHEN t_forme_activite.code LIKE '%9' THEN '1' ELSE '0' END) AS is_div,
|
|
|
MAX(CASE WHEN t_forme_activite.code LIKE '%9' THEN forme_activite_id ELSE 0 END) AS forme_activite_div_id
|
|
|
FROM w_sejours_rss
|
|
|
JOIN activite.t_forme_activite ON forme_activite_id = t_forme_activite.oid
|
|
|
WHERE type_sejour <> '9' AND service_facturation_entree_id <> 0 AND sejour_id <> 0
|
|
|
GROUP BY 1,2,3
|
|
|
) subview
|
|
|
GROUP BY 1,2
|
|
|
HAVING MAX(is_div) = '1' AND
|
|
|
MIN(is_div) = '0' AND
|
|
|
(MAX(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) / SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END)) > 0.95 AND
|
|
|
SUM(CASE WHEN is_div <> '1' THEN nb ELSE 0 END) > 50 AND
|
|
|
(MAX(ARRAY[to_char(nb,'FM000000000000'),forme_activite_id::text]))[2]::bigint <> MAX(forme_activite_div_id)
|
|
|
;
|
|
|
|
|
|
DELETE FROM w_dft
|
|
|
USING
|
|
|
activite.t_forme_activite,
|
|
|
activite.t_forme_activite t_forme_activite_div
|
|
|
WHERE forme_activite_id = t_forme_activite.oid AND
|
|
|
forme_activite_div_id = t_forme_activite_div.oid AND
|
|
|
substr(t_forme_activite.code,1,2) <> substr(t_forme_activite_div.code,1,2)
|
|
|
;
|
|
|
|
|
|
UPDATE w_sejours_rss
|
|
|
SET forme_activite_id = w_dft.forme_activite_id
|
|
|
FROM w_dft
|
|
|
WHERE w_sejours_rss.type_sejour = w_dft.type_sejour AND
|
|
|
w_sejours_rss.service_facturation_entree_id = w_dft.service_facturation_entree_id AND
|
|
|
w_sejours_rss.forme_activite_id = w_dft.forme_activite_div_id
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RAISE NOTICE '%' , 'Application des regles. Validation des forme activite';
|
|
|
UPDATE activite.p_sejours
|
|
|
SET
|
|
|
forme_activite_id = w_sejours_rss.forme_activite_id
|
|
|
FROM w_sejours_rss
|
|
|
WHERE p_sejours.oid = w_sejours_rss.sejour_id AND
|
|
|
p_sejours.oid <> 0 AND
|
|
|
(
|
|
|
p_sejours.forme_activite_id IS DISTINCT FROM w_sejours_rss.forme_activite_id
|
|
|
);
|
|
|
|
|
|
ANALYSE activite.p_sejours
|
|
|
;
|
|
|
|
|
|
|
|
|
INSERT INTO activite.p_oids (code_table, oid)
|
|
|
SELECT 'forme_activite', forme_activite_id
|
|
|
FROM activite.p_sejours
|
|
|
WHERE forme_activite_id NOT IN (SELECT oid FROM activite.p_oids WHERE code_table = 'forme_activite')
|
|
|
GROUP BY 2;
|
|
|
|
|
|
REINDEX INDEX activite.i_sejours_forme_activite_id;
|
|
|
RETURN 'OK';
|
|
|
END;
|