Advertisement
temaon_lieto

Employees counters SQL

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