Advertisement
temaon_lieto

Api::V1::DiseaseProgresses::PatientsController#index

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