|
|
return: text
|
|
|
lang: plpgsql
|
|
|
parameters:
|
|
|
p0:
|
|
|
type: text
|
|
|
name: i_table_code
|
|
|
src: |
|
|
|
DECLARE
|
|
|
result TEXT;
|
|
|
BEGIN
|
|
|
|
|
|
-- Si public, réplication des classes de prestations PMSI
|
|
|
IF (i_table_code = 'PRESTA_C' OR i_table_code = '*ALL') THEN
|
|
|
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'pmsi' AND tablename = 't_classes') THEN
|
|
|
IF EXISTS (SELECT * FROM activite.p_sejours WHERE est_budget_global = '1' LIMIT 1) THEN
|
|
|
UPDATE activite.t_classes
|
|
|
SET code = 'CTI_RAFA_P'
|
|
|
WHERE code LIKE 'CTI\_RAFA\_P%' AND
|
|
|
code <> 'CTI_RAFA_P'
|
|
|
;
|
|
|
|
|
|
DROP TABLE IF EXISTS w_classes_pmsi
|
|
|
;
|
|
|
CREATE TEMP TABLE w_classes_pmsi AS
|
|
|
SELECT
|
|
|
t_listes_tables.oid AS table_id,
|
|
|
0::bigint AS classe_id,
|
|
|
t_classes.code AS classe_code,
|
|
|
t_classes.texte AS classe_texte,
|
|
|
0::bigint AS section_id,
|
|
|
t_classes_sections.code AS section_code,
|
|
|
t_classes_sections.texte AS section_texte,
|
|
|
t_prestations.code::text AS prestation_code,
|
|
|
t_prestations_activite.oid AS prestation_id
|
|
|
FROM pmsi.t_classes
|
|
|
JOIN pmsi.t_classes_sections ON classe_id = t_classes.oid
|
|
|
JOIN pmsi.t_classes_sections_elements ON section_id = t_classes_sections.oid
|
|
|
JOIN pmsi.t_prestations ON to_id = t_prestations.oid
|
|
|
JOIN activite.t_prestations t_prestations_activite ON t_prestations_activite.code = t_prestations.code
|
|
|
JOIN activite.t_listes_tables ON t_listes_tables.code = 'PRESTA_C'
|
|
|
WHERE t_classes.code IN ('CTI_RAFA_P','CTI_ARRETEVERS')
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_classes(
|
|
|
code,
|
|
|
texte,
|
|
|
table_id,
|
|
|
is_cti,
|
|
|
sequence,
|
|
|
contenu_by_code,
|
|
|
contenu_non_replicable_ailleurs
|
|
|
)
|
|
|
SELECT w_classes_pmsi.classe_code,
|
|
|
w_classes_pmsi.classe_texte,
|
|
|
w_classes_pmsi.table_id,
|
|
|
'1'::text AS is_cti,
|
|
|
(SELECT MAX(t_classes.sequence) FROM activite.t_classes WHERE t_classes.table_id = w_classes_pmsi.table_id AND t_classes.sequence < 30) + row_number() OVER (ORDER BY w_classes_pmsi.classe_code) ,
|
|
|
'0'::text AS contenu_by_code,
|
|
|
'0'::text AS contenu_non_replicable_ailleurs
|
|
|
FROM w_classes_pmsi
|
|
|
LEFT JOIN activite.t_classes ON
|
|
|
w_classes_pmsi.classe_code = t_classes.code AND
|
|
|
w_classes_pmsi.table_id = t_classes.table_id
|
|
|
WHERE t_classes.oid IS NULL
|
|
|
GROUP BY 1,2,3
|
|
|
;
|
|
|
|
|
|
UPDATE w_classes_pmsi
|
|
|
SET classe_id = t_classes.oid
|
|
|
FROM activite.t_classes
|
|
|
WHERE t_classes.code = classe_code AND
|
|
|
t_classes.table_id = w_classes_pmsi.table_id
|
|
|
;
|
|
|
|
|
|
INSERT INTO w_classes_pmsi
|
|
|
SELECT
|
|
|
t_classes.table_id,
|
|
|
t_classes.oid AS classe_id,
|
|
|
t_classes.code AS classe_code,
|
|
|
t_classes.texte AS classe_texte,
|
|
|
0::bigint AS section_id,
|
|
|
'99'::text AS section_code,
|
|
|
'Autres prestations'::text AS section_texte,
|
|
|
t_prestations.code AS prestation_code,
|
|
|
t_prestations.oid AS prestation_id
|
|
|
FROM activite.t_prestations
|
|
|
JOIN activite.t_classes ON t_classes.oid IN (SELECT classe_id FROM w_classes_pmsi)
|
|
|
LEFT JOIn w_classes_pmsi ON
|
|
|
w_classes_pmsi.classe_id = t_classes.oid AND
|
|
|
w_classes_pmsi.prestation_id = t_prestations.oid
|
|
|
WHERE w_classes_pmsi.prestation_id IS NULL
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_classes_sections(
|
|
|
code,
|
|
|
texte,
|
|
|
classe_id,
|
|
|
condition,
|
|
|
include_code,
|
|
|
exclude_code
|
|
|
)
|
|
|
SELECT
|
|
|
w_classes_pmsi.section_code,
|
|
|
w_classes_pmsi.section_texte,
|
|
|
w_classes_pmsi.classe_id,
|
|
|
''::text AS condition,
|
|
|
''::text AS include_code,
|
|
|
''::text AS exclude_code
|
|
|
FROM w_classes_pmsi
|
|
|
LEFT JOIN activite.t_classes_sections ON
|
|
|
t_classes_sections.classe_id = w_classes_pmsi.classe_id AND
|
|
|
t_classes_sections.code = w_classes_pmsi.section_code
|
|
|
WHERE w_classes_pmsi.classe_id <> 0 AND
|
|
|
t_classes_sections IS NULL
|
|
|
GROUP BY 1,2,3
|
|
|
ORDER BY 1
|
|
|
;
|
|
|
|
|
|
UPDATE w_classes_pmsi
|
|
|
SET section_id = t_classes_sections.oid
|
|
|
FROM activite.t_classes_sections
|
|
|
WHERE t_classes_sections.classe_id = w_classes_pmsi.classe_id AND
|
|
|
t_classes_sections.code = w_classes_pmsi.section_code
|
|
|
;
|
|
|
|
|
|
DELETE
|
|
|
FROM activite.t_classes_sections
|
|
|
USING activite.t_classes
|
|
|
WHERE classe_id = t_classes.oid AND
|
|
|
t_classes.oid IN (SELECT classe_id FROM w_classes_pmsi) AND
|
|
|
t_classes.oid::text||'-'||t_classes_sections.oid::text NOT IN (SELECT classe_id::text||'-'||section_id::text FROm w_classes_pmsi)
|
|
|
;
|
|
|
|
|
|
UPDATE activite.t_classes_sections
|
|
|
SET texte = section_texte
|
|
|
FROM w_classes_pmsi
|
|
|
WHERE t_classes_sections.oid = section_id AND
|
|
|
t_classes_sections.texte IS DISTINCT FROM section_texte
|
|
|
;
|
|
|
|
|
|
DELETE FROM activite.t_classes_sections_elements
|
|
|
USING
|
|
|
(
|
|
|
SELECT t_classes_sections_elements.section_id, to_id
|
|
|
FROM activite.t_classes_sections_elements
|
|
|
JOIN activite.t_classes_sections ON section_id = t_classes_sections.oid
|
|
|
JOIN w_classes_pmsi ON
|
|
|
t_classes_sections.classe_id = w_classes_pmsi.classe_id AND
|
|
|
t_classes_sections_elements.to_id = w_classes_pmsi.prestation_id AND
|
|
|
t_classes_sections.oid <> w_classes_pmsi.section_id
|
|
|
GROUP BY 1,2
|
|
|
) subview
|
|
|
WHERE t_classes_sections_elements.section_id = subview.section_id AND
|
|
|
t_classes_sections_elements.to_id = subview.to_id
|
|
|
;
|
|
|
|
|
|
INSERT INTO activite.t_classes_sections_elements (
|
|
|
section_id,
|
|
|
to_id
|
|
|
)
|
|
|
SELECT section_id, prestation_id AS to_id
|
|
|
FROM w_classes_pmsi
|
|
|
LEFT JOIN
|
|
|
(
|
|
|
SELECT classe_id, to_id
|
|
|
FROM activite.t_classes_sections_elements
|
|
|
JOIN activite.t_classes_sections ON section_id = t_classes_sections.oid
|
|
|
GROUP BY 1,2
|
|
|
) subview ON w_classes_pmsi.classe_id = subview.classe_id AND
|
|
|
w_classes_pmsi.prestation_id = subview.to_id
|
|
|
WHERE w_classes_pmsi.classe_id <> 0
|
|
|
AND w_classes_pmsi.section_id <> 0 AND
|
|
|
subview.to_id IS NULL
|
|
|
GROUP BY 1,2
|
|
|
;
|
|
|
|
|
|
DELETE
|
|
|
FROM activite.t_classes_sections
|
|
|
USING activite.t_classes
|
|
|
WHERE classe_id = t_classes.oid AND
|
|
|
t_classes.oid IN (SELECT classe_id FROM w_classes_pmsi) AND
|
|
|
t_classes.oid::text||'-'||t_classes_sections.oid::text NOT IN (SELECT classe_id::text||'-'||section_id::text FROm w_classes_pmsi)
|
|
|
;
|
|
|
|
|
|
END IF;
|
|
|
END IF;
|
|
|
END IF;
|
|
|
|
|
|
-- Si Toutes les tables, mettre à jour oid par codes
|
|
|
IF (i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_initialize_classes_by_code('activite');
|
|
|
PERFORM base.cti_initialize_listes_by_code('activite');
|
|
|
END IF;
|
|
|
|
|
|
IF (i_table_code = 'SERVICE_F' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'SERVICE_F','service_facturation_section');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'SERVICE_F' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_services_facturation', 'SERVICE_F','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'ETAGE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'ETAGE','etage_section');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'ETAGE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_etages', 'ETAGE','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'LIT' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_lits', 'LIT','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'LIT' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'LIT','lit_section');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'UM' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_unites_medicales', 'UM','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'UM' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'UM','unite_medicale_section');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'UF' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'UF','unite_fonctionnelle_section');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'UF' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_unites_fonctionnelles', 'UF','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'MEDECIN' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_medecins_administratifs_c', 'MEDECIN','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'PRESTA_C' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_prestations', 'PRESTA_C','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'RUBRIQUE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_rubriques_facturation', 'RUBRIQUE','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'TIERSP' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_tiers_payant', 'TIERSP','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'FINESS' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('base', 't_finess', 'FINESS','');
|
|
|
UPDATE activite.t_finess_c SET
|
|
|
section_id = t_finess.section_id,
|
|
|
section_code = t_finess.section_code,
|
|
|
section_texte = t_finess.section_texte
|
|
|
FROM base.t_finess
|
|
|
WHERE t_finess.oid = t_finess_c.oid AND
|
|
|
(
|
|
|
t_finess_c.section_id IS DISTINCT FROM t_finess.section_id OR
|
|
|
t_finess_c.section_code IS DISTINCT FROM t_finess.section_code OR
|
|
|
t_finess_c.section_texte IS DISTINCT FROM t_finess.section_texte
|
|
|
)
|
|
|
;
|
|
|
END IF;
|
|
|
IF (i_table_code = 'ACTE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_actes_c', 'ACTE','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'GHM' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_ghm_c', 'GHM','ghm_section');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'GME' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_gme_c', 'GME','gme_section');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'GHMGME' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_ghmgme_c', 'GHMGME','ghmgme_section');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'COMPTE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_compte', 'COMPTE', '');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'DURSEJ' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_durees_sejour_c', 'DURSEJ','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'AGE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_ages_c', 'AGE','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'CODEPOST' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_codes_postaux_c', 'CODEPOST','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'REJETNOEMI' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_rejets_noemie', 'REJETNOEMI','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'BUDGETCLE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_budget_cle', 'BUDGETCLE','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'FORMEACTIVITE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_forme_activite', 'FORMEACTIVITE','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'ETATSEJOUR' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_etat_sejour', 'ETATSEJOUR','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'ACTIVITE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_activites', 'ACTIVITE','');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'ACTIVITE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('activite', 't_lieux_c', 'ACTIVITE','activite_section');
|
|
|
END IF;
|
|
|
IF (i_table_code = 'POLE' OR i_table_code = '*ALL') THEN
|
|
|
PERFORM base.cti_update_classes('base', 't_pole', 'POLE','');
|
|
|
UPDATE activite.t_pole SET
|
|
|
section_id = t_pole.section_id,
|
|
|
section_code = t_pole.section_code,
|
|
|
section_texte = t_pole.section_texte
|
|
|
FROM base.t_pole as t_pole_base
|
|
|
WHERE t_pole.oid = t_pole_base.oid AND
|
|
|
(
|
|
|
t_pole.section_id IS DISTINCT FROM t_pole_base.section_id OR
|
|
|
t_pole.section_code IS DISTINCT FROM t_pole_base.section_code OR
|
|
|
t_pole.section_texte IS DISTINCT FROM t_pole_base.section_texte
|
|
|
)
|
|
|
;
|
|
|
END IF;
|
|
|
|
|
|
RETURN 'OK';
|
|
|
END;
|