Advertisement
temaon_lieto

LE Global counters

Mar 15th, 2024
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. WITH "items" AS (SELECT "mv_stat_lvl_0_ehr_service_requests".*
  2.                  FROM ((SELECT "mv_stat_lvl_0_ehr_service_requests".*
  3.                         FROM ((SELECT mv_stat_lvl_0_ehr_service_requests.id,
  4.                                       mv_stat_lvl_0_ehr_service_requests.asserted_date,
  5.                                       mv_stat_lvl_0_ehr_service_requests.code,
  6.                                       mv_stat_lvl_0_ehr_service_requests.item_type,
  7.                                       mv_stat_lvl_0_ehr_service_requests.status::varchar,
  8.                                       mv_stat_lvl_0_ehr_service_requests.title,
  9.                                       mv_stat_lvl_0_ehr_service_requests.employee_id,
  10.                                       mv_stat_lvl_0_ehr_service_requests.legal_entity_id,
  11.                                       mv_stat_lvl_0_ehr_service_requests.patient_id
  12.                                FROM "mv_stat_lvl_0_ehr_service_requests"
  13.                                WHERE "mv_stat_lvl_0_ehr_service_requests"."asserted_date" BETWEEN '2022-01-01 00:00:00' AND '2024-03-15 23:59:59.999999'
  14.                                  AND "mv_stat_lvl_0_ehr_service_requests"."legal_entity_id" = 3493
  15.                                  AND "mv_stat_lvl_0_ehr_service_requests"."code" IN
  16.                                      ('T34006', 'T34011', 'T34013', 'T34024', 'T34001', 'T34004', 'T34005', 'T34023',
  17.                                       'T34025', 'T34038', 'U67002', 'Y34011', 'Y34003', 'Х41941', 'X41973', '59300-00',
  18.                                       '55070-00', '55076-00', 'D36003', 'D67006', '32084-00', '32090-00', '32084-02',
  19.                                       '32090-02', 'B33006', 'B33012'))
  20.                               UNION
  21.                               (SELECT mv_stat_lvl_0_ehr_diagnostic_reports.id,
  22.                                       mv_stat_lvl_0_ehr_diagnostic_reports.asserted_date,
  23.                                       mv_stat_lvl_0_ehr_diagnostic_reports.code,
  24.                                       mv_stat_lvl_0_ehr_diagnostic_reports.item_type,
  25.                                       mv_stat_lvl_0_ehr_diagnostic_reports.status::varchar,
  26.                                       mv_stat_lvl_0_ehr_diagnostic_reports.title,
  27.                                       mv_stat_lvl_0_ehr_diagnostic_reports.employee_id,
  28.                                       mv_stat_lvl_0_ehr_diagnostic_reports.legal_entity_id,
  29.                                       mv_stat_lvl_0_ehr_diagnostic_reports.patient_id
  30.                                FROM "mv_stat_lvl_0_ehr_diagnostic_reports"
  31.                                WHERE "mv_stat_lvl_0_ehr_diagnostic_reports"."asserted_date" BETWEEN '2022-01-01 00:00:00' AND '2024-03-15 23:59:59.999999'
  32.                                  AND "mv_stat_lvl_0_ehr_diagnostic_reports"."legal_entity_id" = 3493
  33.                                  AND "mv_stat_lvl_0_ehr_diagnostic_reports"."code" IN
  34.                                      ('T34006', 'T34011', 'T34013', 'T34024', 'T34001', 'T34004', 'T34005', 'T34023',
  35.                                       'T34025', 'T34038', 'U67002', 'Y34011', 'Y34003', 'Х41941', 'X41973', '59300-00',
  36.                                       '55070-00', '55076-00', 'D36003', 'D67006', '32084-00', '32090-00', '32084-02',
  37.                                       '32090-02', 'B33006', 'B33012'))) "mv_stat_lvl_0_ehr_service_requests")
  38.                        UNION
  39.                        (SELECT mv_stat_lvl_1_ehr_observations.id,
  40.                                mv_stat_lvl_1_ehr_observations.asserted_date,
  41.                                mv_stat_lvl_1_ehr_observations.code,
  42.                                1                as item_type,
  43.                                'final'::varchar as status,
  44.                                mv_stat_lvl_1_ehr_observations.title,
  45.                                mv_stat_lvl_1_ehr_observations.employee_id,
  46.                                mv_stat_lvl_1_ehr_observations.legal_entity_id,
  47.                                mv_stat_lvl_1_ehr_observations.patient_id
  48.                         FROM "mv_stat_lvl_1_ehr_observations"
  49.                         WHERE "mv_stat_lvl_1_ehr_observations"."asserted_date" BETWEEN '2022-01-01 00:00:00' AND '2024-03-15 23:59:59.999999'
  50.                           AND "mv_stat_lvl_1_ehr_observations"."legal_entity_id" = 3493
  51.                           AND "mv_stat_lvl_1_ehr_observations"."code" IN
  52.                               ('T34006', 'T34011', 'T34013', 'T34024', 'T34001', 'T34004', 'T34005', 'T34023', 'T34025',
  53.                                'T34038', 'U67002', 'Y34011', 'Y34003', 'Х41941', 'X41973', '59300-00', '55070-00',
  54.                                '55076-00', 'D36003', 'D67006', '32084-00', '32090-00', '32084-02', '32090-02', 'B33006',
  55.                                'B33012'))) "mv_stat_lvl_0_ehr_service_requests"),
  56.      "main_counters" AS (SELECT COALESCE(COUNT(DISTINCT mv_stat_lvl_1_declarations.id), 0) AS counter,
  57.                                 mv_stat_lvl_1_declarations.patient_id                      AS patient_id,
  58.                                 CASE
  59.                                     WHEN (("mv_stat_lvl_1_patients"."gender" = 1 AND DATE_PART('YEAR',
  60.                                                                                                AGE('2024-03-15 23:59:59.999999', mv_stat_lvl_1_patients.birth_date)) BETWEEN 50 AND 999) OR
  61.                                           ("mv_stat_lvl_1_patients"."gender" = 0 AND DATE_PART('YEAR',
  62.                                                                                                AGE('2024-03-15 23:59:59.999999', mv_stat_lvl_1_patients.birth_date)) BETWEEN 40 AND 999))
  63.                                         THEN
  64.                                         CASE
  65.                                             WHEN (COUNT(DISTINCT items.code) filter (WHERE "items"."code" IN
  66.                                                                                            ('T34006', 'T34011',
  67.                                                                                             'T34013', 'T34024',
  68.                                                                                             'T34001', 'T34004'))) > 0
  69.                                                 THEN 'done'
  70.                                             ELSE 'need_done'
  71.                                             END
  72.                                     ELSE
  73.                                         'no_need_done'
  74.                                     END                                                       hypertension_state,
  75.                                 CASE
  76.                                     WHEN (DATE_PART('YEAR',
  77.                                                     AGE('2024-03-15 23:59:59.999999', mv_stat_lvl_1_patients.birth_date)) BETWEEN 45 AND 999)
  78.                                         THEN
  79.                                         CASE
  80.                                             WHEN (COUNT(DISTINCT items.code)
  81.                                                   filter (WHERE "items"."code" IN ('T34005', 'T34023', 'T34025', 'T34038', '14743-9'))) >
  82.                                                  0 THEN 'done'
  83.                                             ELSE 'need_done'
  84.                                             END
  85.                                     ELSE
  86.                                         'no_need_done'
  87.                                     END                                                    AS diabetes_state,
  88.                                 CASE
  89.                                     WHEN ("mv_stat_lvl_1_patients"."gender" = 0 AND (DATE_PART('YEAR',
  90.                                                                                                AGE('2024-03-15 23:59:59.999999', mv_stat_lvl_1_patients.birth_date)) BETWEEN 40 AND 999))
  91.                                         THEN
  92.                                         CASE
  93.                                             WHEN (COUNT(DISTINCT items.code)
  94.                                                   filter (WHERE "items"."code" IN ('U67002', 'Y34011', 'Y34003'))) > 0
  95.                                                 THEN 'done'
  96.                                             ELSE 'need_done'
  97.                                             END
  98.                                     ELSE
  99.                                         'no_need_done'
  100.                                     END                                                    AS prostate_cancer_state,
  101.                                 CASE
  102.                                     WHEN ("mv_stat_lvl_1_patients"."gender" = 1 AND (DATE_PART('YEAR',
  103.                                                                                                AGE('2024-03-15 23:59:59.999999', mv_stat_lvl_1_patients.birth_date)) BETWEEN 50 AND 999))
  104.                                         THEN
  105.                                         CASE
  106.                                             WHEN (COUNT(DISTINCT items.code) filter (WHERE "items"."code" IN
  107.                                                                                            ('Х41941', 'X41973',
  108.                                                                                             '59300-00', '55070-00',
  109.                                                                                             '55076-00'))) > 0
  110.                                                 THEN 'done'
  111.                                             ELSE 'need_done'
  112.                                             END
  113.                                     ELSE
  114.                                         'no_need_done'
  115.                                     END                                                    AS breast_cancer_state,
  116.                                 CASE
  117.                                     WHEN ("mv_stat_lvl_1_patients"."gender" = 0 AND (DATE_PART('YEAR',
  118.                                                                                                AGE('2024-03-15 23:59:59.999999', mv_stat_lvl_1_patients.birth_date)) BETWEEN 50 AND 999))
  119.                                         THEN
  120.                                         CASE
  121.                                             WHEN (COUNT(DISTINCT items.code) filter (WHERE "items"."code" IN
  122.                                                                                            ('D36003', 'D67006',
  123.                                                                                             '32084-00', '32090-00',
  124.                                                                                             '32084-02', '32090-02'))) >
  125.                                                  0 THEN 'done'
  126.                                             ELSE 'need_done'
  127.                                             END
  128.                                     ELSE
  129.                                         'no_need_done'
  130.                                     END                                                    AS colorectal_cancer_state,
  131.                                 CASE
  132.                                     WHEN (DATE_PART('YEAR',
  133.                                                     AGE('2024-03-15 23:59:59.999999', mv_stat_lvl_1_patients.birth_date)) BETWEEN 14 AND 999)
  134.                                         THEN
  135.                                         CASE
  136.                                             WHEN (COUNT(DISTINCT items.code)
  137.                                                   filter (WHERE "items"."code" IN ('B33006', 'B33012'))) > 0 THEN 'done'
  138.                                             ELSE 'need_done'
  139.                                             END
  140.                                     ELSE
  141.                                         'no_need_done'
  142.                                     END                                                    AS hiv_state
  143.                          FROM "mv_stat_lvl_1_declarations"
  144.                                   JOIN mv_stat_lvl_1_patients ON mv_stat_lvl_1_patients.legal_entity_id =
  145.                                                                  mv_stat_lvl_1_declarations.legal_entity_id AND
  146.                                                                  mv_stat_lvl_1_patients.id =
  147.                                                                  mv_stat_lvl_1_declarations.patient_id
  148.                                   LEFT JOIN items
  149.                                             ON items.legal_entity_id = mv_stat_lvl_1_declarations.legal_entity_id AND
  150.                                                items.patient_id = mv_stat_lvl_1_declarations.patient_id
  151.                          WHERE "mv_stat_lvl_1_declarations"."legal_entity_id" = 3493
  152.                          GROUP BY mv_stat_lvl_1_declarations.patient_id, mv_stat_lvl_1_patients.birth_date,
  153.                                   mv_stat_lvl_1_patients.gender),
  154.      "diagnoses" AS (SELECT mv_stat_lvl_1_reception_conditions.patient_id, mv_stat_lvl_1_reception_conditions.code
  155.                      FROM "mv_stat_lvl_1_reception_conditions"
  156.                      WHERE "mv_stat_lvl_1_reception_conditions"."asserted_date" BETWEEN '2022-01-01 00:00:00' AND '2024-03-15 23:59:59.999999'
  157.                        AND "mv_stat_lvl_1_reception_conditions"."legal_entity_id" = 3493),
  158.      "observations" AS (SELECT mv_stat_lvl_1_ehr_observations.patient_id, mv_stat_lvl_1_ehr_observations.code
  159.                         FROM "mv_stat_lvl_1_ehr_observations"
  160.                         WHERE "mv_stat_lvl_1_ehr_observations"."asserted_date" BETWEEN '2022-01-01 00:00:00' AND '2024-03-15 23:59:59.999999'
  161.                           AND "mv_stat_lvl_1_ehr_observations"."legal_entity_id" = 3493
  162.                           AND "mv_stat_lvl_1_ehr_observations"."code" IN
  163.                               ('39156-5', '14743-9', '8462-4', '8480-6', '56086-2', '4548-4')),
  164.      "diagnosis_cnt" AS (SELECT diagnoses.patient_id,
  165.                                 COUNT(DISTINCT diagnoses.code)                                                     AS diagnoses_c1_64_counter,
  166.                                 COUNT(DISTINCT diagnoses.code)
  167.                                 filter (WHERE "diagnoses"."code" IN ('A98'))                                       AS diagnoses_a98_counter,
  168.                                 COUNT(DISTINCT diagnoses.code)
  169.                                 filter (WHERE "diagnoses"."code" IN ('K86', 'K87'))                                AS diagnoses_c1_65_counter,
  170.                                 COUNT(DISTINCT diagnoses.code)
  171.                                 filter (WHERE "diagnoses"."code" IN ('K76', 'K74'))                                AS diagnoses_c2_65_counter,
  172.                                 COUNT(DISTINCT diagnoses.code)
  173.                                 filter (WHERE "diagnoses"."code" IN ('T89', 'T90'))                                AS diagnoses_c3_65_counter
  174.                          FROM diagnoses
  175.                          GROUP BY "diagnoses"."patient_id"
  176.                          HAVING (COUNT(DISTINCT diagnoses.code) > 0)),
  177.      "observations_cnt" AS (SELECT observations.patient_id,
  178.                                    COUNT(DISTINCT observations.code)                                                  AS observations_c1_64_counter,
  179.                                    COUNT(DISTINCT observations.code)
  180.                                    filter (WHERE "observations"."code" IN ('39156-5', '14743-9', '8462-4', '8480-6')) AS observations_c1_65_counter,
  181.                                    COUNT(DISTINCT observations.code) filter (WHERE "observations"."code" IN
  182.                                                                                    ('39156-5', '14743-9', '8462-4',
  183.                                                                                     '8480-6',
  184.                                                                                     '56086-2'))                       AS observations_c2_65_counter
  185.                             FROM observations
  186.                             GROUP BY "observations"."patient_id"
  187.                             HAVING (COUNT(DISTINCT observations.code) > 0)),
  188.      "reasons_cnt" AS (SELECT mv_stat_lvl_1_ehr_reasons.patient_id,
  189.                               COUNT(DISTINCT mv_stat_lvl_1_ehr_reasons.code) AS a98_counter
  190.                        FROM "mv_stat_lvl_1_ehr_reasons"
  191.                        WHERE "mv_stat_lvl_1_ehr_reasons"."code" = 'A98'
  192.                          AND "mv_stat_lvl_1_ehr_reasons"."asserted_date" BETWEEN '2022-01-01 00:00:00' AND '2024-03-15 23:59:59.999999'
  193.                          AND "mv_stat_lvl_1_ehr_reasons"."legal_entity_id" = 3493
  194.                        GROUP BY "mv_stat_lvl_1_ehr_reasons"."patient_id"
  195.                        HAVING (COUNT(DISTINCT mv_stat_lvl_1_ehr_reasons.code) > 0)),
  196.      "reports_cnt" AS (SELECT mv_stat_lvl_0_ehr_diagnostic_reports.patient_id,
  197.                               COUNT(DISTINCT mv_stat_lvl_0_ehr_diagnostic_reports.code) AS counter
  198.                        FROM "mv_stat_lvl_0_ehr_diagnostic_reports"
  199.                        WHERE "mv_stat_lvl_0_ehr_diagnostic_reports"."code" IN
  200.                              ('T34001', 'T34006', 'T34024', 'T34011', 'T34013')
  201.                          AND "mv_stat_lvl_0_ehr_diagnostic_reports"."asserted_date" BETWEEN '2022-01-01 00:00:00' AND '2024-03-15 23:59:59.999999'
  202.                          AND "mv_stat_lvl_0_ehr_diagnostic_reports"."legal_entity_id" = 3493
  203.                        GROUP BY "mv_stat_lvl_0_ehr_diagnostic_reports"."patient_id"
  204.                        HAVING (COUNT(DISTINCT mv_stat_lvl_0_ehr_diagnostic_reports.code) > 0)),
  205.      "actions_cnt" AS (SELECT mv_stat_lvl_1_ehr_actions.patient_id,
  206.                               COUNT(DISTINCT mv_stat_lvl_1_ehr_actions.code) AS counter
  207.                        FROM "mv_stat_lvl_1_ehr_actions"
  208.                        WHERE "mv_stat_lvl_1_ehr_actions"."code" IN ('K45', 'D45', 'T45')
  209.                          AND "mv_stat_lvl_1_ehr_actions"."asserted_date" BETWEEN '2022-01-01 00:00:00' AND '2024-03-15 23:59:59.999999'
  210.                          AND "mv_stat_lvl_1_ehr_actions"."legal_entity_id" = 3493
  211.                        GROUP BY "mv_stat_lvl_1_ehr_actions"."patient_id"
  212.                        HAVING (COUNT(DISTINCT mv_stat_lvl_1_ehr_actions.code) > 0)),
  213.      "groups_counter" AS (SELECT mv_stat_lvl_1_patients.id AS patient_id,
  214.                                  CASE
  215.                                      WHEN (DATE_PART('YEAR',
  216.                                                      AGE('2024-03-15 23:59:59.999999', mv_stat_lvl_1_patients.birth_date)) BETWEEN 40 AND 64)
  217.                                          THEN
  218.                                          CASE
  219.                                              WHEN (diagnosis_cnt.diagnoses_a98_counter > 0 OR reasons_cnt.a98_counter > 0) AND
  220.                                                   diagnosis_cnt.diagnoses_c1_64_counter > 0 AND
  221.                                                   observations_cnt.observations_c1_64_counter > 0 THEN 'done'
  222.                                              ELSE 'need_done'
  223.                                              END
  224.                                      ELSE 'no_need_done'
  225.                                      END                   AS visits_from_40_to_64_state,
  226.                                  CASE
  227.                                      WHEN (DATE_PART('YEAR',
  228.                                                      AGE('2024-03-15 23:59:59.999999', mv_stat_lvl_1_patients.birth_date)) BETWEEN 65 AND 999)
  229.                                          THEN
  230.                                          CASE
  231.                                              WHEN (diagnosis_cnt.diagnoses_a98_counter > 0 OR reasons_cnt.a98_counter > 0) AND
  232.                                                   (((diagnosis_cnt.diagnoses_c1_65_counter > 0 OR
  233.                                                      diagnosis_cnt.diagnoses_c2_65_counter > 0) AND
  234.                                                     observations_cnt.observations_c1_65_counter > 0) OR
  235.                                                    (diagnosis_cnt.diagnoses_c3_65_counter > 0 AND
  236.                                                     observations_cnt.observations_c2_65_counter > 0)) THEN 'done'
  237.                                              ELSE 'need_done'
  238.                                              END
  239.                                      ELSE 'no_need_done'
  240.                                      END                   AS visits_upper_65_state
  241.                           FROM "mv_stat_lvl_1_patients"
  242.                                    LEFT JOIN observations_cnt
  243.                                              ON mv_stat_lvl_1_patients.id = observations_cnt.patient_id AND
  244.                                                 (observations_cnt.observations_c1_64_counter > 0 OR
  245.                                                  observations_cnt.observations_c1_65_counter >= 4 OR
  246.                                                  observations_cnt.observations_c2_65_counter >= 5)
  247.                                    LEFT JOIN diagnosis_cnt ON mv_stat_lvl_1_patients.id = diagnosis_cnt.patient_id AND
  248.                                                               (diagnosis_cnt.diagnoses_c1_64_counter > 0 OR
  249.                                                                diagnosis_cnt.diagnoses_c1_65_counter > 0 OR
  250.                                                                diagnosis_cnt.diagnoses_c2_65_counter > 0 OR
  251.                                                                diagnosis_cnt.diagnoses_c3_65_counter > 0)
  252.                                    LEFT JOIN reasons_cnt ON reasons_cnt.patient_id = mv_stat_lvl_1_patients.id
  253.                                    LEFT JOIN reports_cnt ON reports_cnt.patient_id = mv_stat_lvl_1_patients.id
  254.                                    LEFT JOIN actions_cnt ON actions_cnt.patient_id = mv_stat_lvl_1_patients.id
  255.                           WHERE "mv_stat_lvl_1_patients"."legal_entity_id" = 3493
  256.                           GROUP BY mv_stat_lvl_1_patients.id, mv_stat_lvl_1_patients.age,
  257.                                    mv_stat_lvl_1_patients.birth_date, visits_from_40_to_64_state, visits_upper_65_state)
  258. SELECT mv_stat_lvl_1_declarations.legal_entity_id,
  259.        COUNT(main_counters.diabetes_state) filter (WHERE diabetes_state = 'done')                                   as diabetes_counter,
  260.        COUNT(main_counters.hypertension_state)
  261.        filter (WHERE hypertension_state = 'done')                                                                   as hypertension_counter,
  262.        COUNT(main_counters.prostate_cancer_state)
  263.        filter (WHERE prostate_cancer_state = 'done')                                                                as prostate_cancer_counter,
  264.        COUNT(main_counters.breast_cancer_state)
  265.        filter (WHERE breast_cancer_state = 'done')                                                                  as breast_cancer_counter,
  266.        COUNT(main_counters.hiv_state) filter (WHERE hiv_state = 'done')                                             as hiv_counter,
  267.        COUNT(main_counters.colorectal_cancer_state)
  268.        filter (WHERE colorectal_cancer_state = 'done')                                                              as colorectal_cancer_counter,
  269.        COUNT(groups_counter.visits_from_40_to_64_state)
  270.        filter (WHERE visits_from_40_to_64_state = 'done')                                                           as visits_from_40_to_64_counter,
  271.        COUNT(groups_counter.visits_upper_65_state)
  272.        filter (WHERE visits_upper_65_state = 'done')                                                                as visits_upper_65_counter,
  273.  
  274.        COUNT(main_counters.diabetes_state)
  275.        filter (WHERE diabetes_state IN ('done', 'need_done'))                                                       as target_diabetes_counter,
  276.        COUNT(main_counters.hypertension_state)
  277.        filter (WHERE hypertension_state IN ('done', 'need_done'))                                                   as target_hypertension_counter,
  278.        COUNT(main_counters.prostate_cancer_state)
  279.        filter (WHERE prostate_cancer_state IN ('done', 'need_done'))                                                as target_prostate_cancer_counter,
  280.        COUNT(main_counters.breast_cancer_state)
  281.        filter (WHERE breast_cancer_state IN ('done', 'need_done'))                                                  as target_breast_cancer_counter,
  282.        COUNT(main_counters.hiv_state)
  283.        filter (WHERE hiv_state IN ('done', 'need_done'))                                                            as target_hiv_counter,
  284.        COUNT(main_counters.colorectal_cancer_state)
  285.        filter (WHERE colorectal_cancer_state IN ('done', 'need_done'))                                              as target_colorectal_cancer_counter,
  286.        COUNT(groups_counter.visits_from_40_to_64_state)
  287.        filter (WHERE visits_from_40_to_64_state IN ('done', 'need_done'))                                           as target_visits_from_40_to_64_counter,
  288.        COUNT(groups_counter.visits_upper_65_state)
  289.        filter (WHERE visits_upper_65_state IN ('done', 'need_done'))                                                as target_visits_upper_65_counter
  290. FROM "mv_stat_lvl_1_declarations"
  291.          LEFT JOIN main_counters ON mv_stat_lvl_1_declarations.patient_id = main_counters.patient_id
  292.          LEFT JOIN groups_counter ON mv_stat_lvl_1_declarations.patient_id = groups_counter.patient_id
  293. WHERE "mv_stat_lvl_1_declarations"."legal_entity_id" = 3493
  294. GROUP BY "mv_stat_lvl_1_declarations"."legal_entity_id"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement