Advertisement
temaon_lieto

test

May 14th, 2025
1,078
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 41.75 KB | None | 0 0
  1. WITH reporting_periods AS (SELECT rp.*,
  2.                                   toDate32('2025-05-01')                                        AS period_end_date,
  3.                                   IF(original_period_type = 'DAY',
  4.                                      dateDiff('day', period_end_date - INTERVAL original_period_value DAY,
  5.                                               period_end_date),
  6.                                      dateDiff('day', period_end_date - INTERVAL original_period_value YEAR,
  7.                                               period_end_date)
  8.                                   )                                                             AS calculated_period_start_days,
  9.                                   (period_end_date - INTERVAL calculated_period_start_days DAY) AS period_start_date
  10.                            FROM dict_reporting_periods rp),
  11.      period_interval AS (SELECT MIN(reporting_periods.period_start_date) AS period_start,
  12.                                 MAX(reporting_periods.period_end_date)   AS period_end
  13.                          FROM reporting_periods),
  14.      patients AS (SELECT DISTINCT ON (id) IF(declaration_status = 'ACTIVE', declaration_end_date,
  15.                                              declaration_updated_at)                             AS declaration_end_date,
  16.                                           period_interval.period_start,
  17.                                           period_interval.period_end,
  18.                                           declaration_start_date,
  19.                                           age('day', date_of_birth, period_interval.period_end)  AS current_age_in_days,
  20.                                           age('year', date_of_birth, period_interval.period_end) AS current_age_in_years,
  21.                                           cascade_lvl02_patient_declarations.id,
  22.                                           cascade_lvl02_patient_declarations.gender,
  23.                                           cascade_lvl02_patient_declarations.full_address,
  24.                                           cascade_lvl02_patient_declarations.patient_full_name,
  25.                                           cascade_lvl02_patient_declarations.legal_entity_id,
  26.                                           cascade_lvl02_patient_declarations.employee_id,
  27.                                           cascade_lvl02_patient_declarations.doctor_full_name,
  28.                                           cascade_lvl02_patient_declarations.doctor_position,
  29.                                           cascade_lvl02_patient_declarations.division_id
  30.                   FROM cascade_lvl02_patient_declarations,
  31.                        period_interval
  32.                   WHERE cascade_lvl02_patient_declarations.legal_entity_id = 3228
  33.                     AND (declaration_start_date <= toDate32('2025-05-14 23:59:59') AND
  34.                          declaration_end_date >= toDate32('2020-01-01 00:00:00'))),
  35.      joined_resources AS (SELECT cascade_lvl01_progress_diseases_services.id,
  36.                                  cascade_lvl01_progress_diseases_services.code,
  37.                                  cascade_lvl01_progress_diseases_services.employee_id,
  38.                                  cascade_lvl01_progress_diseases_services.legal_entity_id,
  39.                                  cascade_lvl01_progress_diseases_services.asserted_date,
  40.                                  cascade_lvl01_progress_diseases_services.encounter_id,
  41.                                  cascade_lvl01_progress_diseases_services.patient_id,
  42.                                  cascade_lvl01_progress_diseases_services.STATUS,
  43.                                  cascade_lvl01_progress_diseases_services.resource_type
  44.                           FROM cascade_lvl01_progress_diseases_services,
  45.                                period_interval
  46.                           WHERE cascade_lvl01_progress_diseases_services.legal_entity_id = 3228
  47.                             AND cascade_lvl01_progress_diseases_services.resource_type IN
  48.                                 ('observation', 'diagnostic_report', 'service_request')
  49.                             AND (asserted_date >= period_interval.period_start AND
  50.                                  asserted_date <= period_interval.period_end)),
  51.      progress_disease_codes AS (SELECT cascade_lvl00_progress_disease_codes.id,
  52.                                        cascade_lvl00_progress_disease_codes.code,
  53.                                        cascade_lvl00_progress_disease_codes.employee_id,
  54.                                        cascade_lvl00_progress_disease_codes.legal_entity_id,
  55.                                        cascade_lvl00_progress_disease_codes.asserted_date,
  56.                                        cascade_lvl00_progress_disease_codes.encounter_id,
  57.                                        cascade_lvl00_progress_disease_codes.patient_id,
  58.                                        cascade_lvl00_progress_disease_codes.ROLE,
  59.                                        cascade_lvl00_progress_disease_codes.code_type
  60.                                 FROM cascade_lvl00_progress_disease_codes,
  61.                                      period_interval
  62.                                 WHERE cascade_lvl00_progress_disease_codes.legal_entity_id = 3228
  63.                                   AND cascade_lvl00_progress_disease_codes.ehealth_status = 'finished'
  64.                                   AND (asserted_date <= period_interval.period_end)),
  65.      actions AS (SELECT cascade_lvl00_actions.id,
  66.                         cascade_lvl00_actions.code,
  67.                         cascade_lvl00_actions.patient_id,
  68.                         cascade_lvl00_actions.asserted_date
  69.                  FROM cascade_lvl00_actions,
  70.                       period_interval
  71.                  WHERE cascade_lvl00_actions.legal_entity_id = 3228
  72.                    AND cascade_lvl00_actions.code IN ('K45', 'D45', 'T45')
  73.                    AND (asserted_date >= period_interval.period_start AND asserted_date <= period_interval.period_end)),
  74.      joined_groups AS (SELECT cascade_lvl00_progress_disease_groups.*,
  75.                               reporting_periods.original_period_type,
  76.                               reporting_periods.original_period_value,
  77.                               reporting_periods.calculated_period_start_days,
  78.                               reporting_periods.period_start_date,
  79.                               reporting_periods.period_end_date
  80.                        FROM cascade_lvl00_progress_disease_groups
  81.                                 JOIN reporting_periods ON cascade_lvl00_progress_disease_groups.date_restriction =
  82.                                                           reporting_periods.period_name),
  83.      observations AS (SELECT joined_resources.code            AS code,
  84.                              joined_resources.legal_entity_id AS legal_entity_id,
  85.                              joined_resources.asserted_date   AS asserted_date,
  86.                              joined_resources.patient_id      AS patient_id,
  87.                              joined_resources.STATUS          AS STATUS,
  88.                              joined_resources.resource_type   AS resource_type
  89.                       FROM joined_resources
  90.                       WHERE joined_resources.resource_type = 'observation'
  91.                         AND joined_resources.STATUS = 'valid'),
  92.      diagnostic_reports AS (SELECT joined_resources.code            AS code,
  93.                                    joined_resources.legal_entity_id AS legal_entity_id,
  94.                                    joined_resources.asserted_date   AS asserted_date,
  95.                                    joined_resources.patient_id      AS patient_id,
  96.                                    joined_resources.STATUS          AS STATUS,
  97.                                    joined_resources.resource_type   AS resource_type
  98.                             FROM joined_resources
  99.                             WHERE joined_resources.resource_type = 'diagnostic_report'
  100.                               AND joined_resources.STATUS = 'final'),
  101.      service_requests AS (SELECT joined_resources.code            AS code,
  102.                                  joined_resources.legal_entity_id AS legal_entity_id,
  103.                                  joined_resources.asserted_date   AS asserted_date,
  104.                                  joined_resources.patient_id      AS patient_id,
  105.                                  joined_resources.STATUS          AS STATUS,
  106.                                  joined_resources.resource_type   AS resource_type
  107.                           FROM joined_resources
  108.                           WHERE joined_resources.resource_type = 'service_request'
  109.                             AND joined_resources.STATUS IN ('active', 'completed')),
  110.      patient_joined_groups AS (SELECT patients.patient_full_name,
  111.                                       patients.current_age_in_years,
  112.                                       patients.id     AS patient_id,
  113.                                       joined_groups.*,
  114.                                       patients.gender AS patient_gender
  115.                                FROM patients,
  116.                                     joined_groups),
  117.      patient_joined_groups_with_services AS (SELECT patient_joined_groups.patient_id,
  118.                                                     patient_joined_groups.indicator_name,
  119.                                                     patient_joined_groups.group_name,
  120.                                                     jrsr.*
  121.                                              FROM patient_joined_groups
  122.                                                       JOIN service_requests jrsr
  123.                                                            ON patient_joined_groups.need_to_check_service_request_codes =
  124.                                                               TRUE AND
  125.                                                               jrsr.patient_id = patient_joined_groups.patient_id AND
  126.                                                               jrsr.asserted_date >=
  127.                                                               patient_joined_groups.period_start_date AND
  128.                                                               jrsr.asserted_date <=
  129.                                                               patient_joined_groups.period_end_date AND
  130.                                                               (patient_joined_groups.need_to_check_service_statuses AND
  131.                                                                has(patient_joined_groups.service_statuses, jrsr.STATUS))
  132.                                              WHERE (patient_joined_groups.need_to_check_service_request_codes = TRUE AND
  133.                                                     arrayExists(x -> x = jrsr.code,
  134.                                                                 patient_joined_groups.condition_service_request_codes)) SETTINGS allow_experimental_join_condition = 1),
  135.      patient_joined_groups_with_dos AS (SELECT patient_joined_groups.patient_id,
  136.                                                patient_joined_groups.indicator_name,
  137.                                                patient_joined_groups.group_name,
  138.                                                jrdo.*
  139.                                         FROM patient_joined_groups
  140.                                                  JOIN diagnostic_reports jrdo
  141.                                                       ON (patient_joined_groups.need_to_check_diagnostic_report_codes =
  142.                                                           TRUE OR
  143.                                                           patient_joined_groups.need_to_check_optional_observation_codes =
  144.                                                           TRUE) AND
  145.                                                          jrdo.patient_id = patient_joined_groups.patient_id AND
  146.                                                          has(patient_joined_groups.condition_diagnostic_report_codes,
  147.                                                              jrdo.code) AND jrdo.asserted_date >=
  148.                                                                             patient_joined_groups.period_start_date AND
  149.                                                          jrdo.asserted_date <= patient_joined_groups.period_end_date
  150.                                         WHERE (patient_joined_groups.need_to_check_diagnostic_report_codes = TRUE AND
  151.                                                arrayExists(x -> x = jrdo.code,
  152.                                                            patient_joined_groups.condition_diagnostic_report_codes) AND
  153.                                                (NOT patient_joined_groups.need_to_check_optional_observation_codes = TRUE OR
  154.                                                 jrdo.asserted_date <
  155.                                                 toDate('2024-06-01'))) SETTINGS allow_experimental_join_condition = 1),
  156.      patient_joined_groups_with_observations AS (SELECT patient_joined_groups.patient_id,
  157.                                                         patient_joined_groups.indicator_name,
  158.                                                         patient_joined_groups.group_name,
  159.                                                         jro.*
  160.                                                  FROM patient_joined_groups
  161.                                                           JOIN observations jro
  162.                                                                ON (patient_joined_groups.need_to_check_observation_codes =
  163.                                                                    TRUE OR
  164.                                                                    patient_joined_groups.need_to_check_optional_observation_codes =
  165.                                                                    TRUE) AND
  166.                                                                   jro.patient_id = patient_joined_groups.patient_id AND
  167.                                                                   jro.asserted_date >=
  168.                                                                   patient_joined_groups.period_start_date AND
  169.                                                                   jro.asserted_date <=
  170.                                                                   patient_joined_groups.period_end_date AND
  171.                                                                   (has(patient_joined_groups.condition_observation_codes, jro.code) OR
  172.                                                                    has(
  173.                                                                            patient_joined_groups.condition_optional_observation_codes,
  174.                                                                            jro.code))
  175.                                                  WHERE ((patient_joined_groups.need_to_check_observation_codes AND
  176.                                                          arrayExists(x -> x = jro.code,
  177.                                                                      patient_joined_groups.condition_observation_codes)) OR
  178.                                                         (patient_joined_groups.need_to_check_optional_observation_codes AND
  179.                                                          arrayExists(x -> x = jro.code,
  180.                                                                      patient_joined_groups.condition_optional_observation_codes))) SETTINGS allow_experimental_join_condition = 1),
  181.      patient_joined_groups_with_reasons AS (SELECT patient_joined_groups.patient_id,
  182.                                                    patient_joined_groups.indicator_name,
  183.                                                    patient_joined_groups.group_name,
  184.                                                    pdrc.*
  185.                                             FROM patient_joined_groups
  186.                                                      JOIN progress_disease_codes pdrc
  187.                                                           ON patient_joined_groups.need_to_check_reason_code = TRUE AND
  188.                                                              pdrc.patient_id = patient_joined_groups.patient_id AND
  189.                                                              has(patient_joined_groups.condition_reason_code, pdrc.code) AND
  190.                                                              pdrc.asserted_date >=
  191.                                                              patient_joined_groups.period_start_date AND
  192.                                                              pdrc.asserted_date <= patient_joined_groups.period_end_date
  193.                                             WHERE (patient_joined_groups.need_to_check_reason_code AND
  194.                                                    arrayExists(x -> x = pdrc.code,
  195.                                                                patient_joined_groups.condition_reason_code)) SETTINGS allow_experimental_join_condition = 1),
  196.      patient_joined_groups_with_actions AS (SELECT patient_joined_groups.patient_id,
  197.                                                    patient_joined_groups.indicator_name,
  198.                                                    patient_joined_groups.group_name,
  199.                                                    a.*
  200.                                             FROM patient_joined_groups
  201.                                                      JOIN actions a
  202.                                                           ON patient_joined_groups.need_to_check_condition_action_codes =
  203.                                                              TRUE AND
  204.                                                              a.patient_id = patient_joined_groups.patient_id AND
  205.                                                              a.asserted_date >=
  206.                                                              patient_joined_groups.period_start_date AND
  207.                                                              a.asserted_date <=
  208.                                                              patient_joined_groups.period_end_date AND
  209.                                                              has(patient_joined_groups.condition_action_codes, a.code)
  210.                                             WHERE (patient_joined_groups.need_to_check_condition_action_codes = TRUE AND
  211.                                                    arrayExists(x -> x = a.code,
  212.                                                                patient_joined_groups.condition_action_codes)) SETTINGS allow_experimental_join_condition = 1),
  213.      patient_joined_groups_with_pdc AS (SELECT patient_joined_groups.patient_id,
  214.                                                patient_joined_groups.indicator_name,
  215.                                                patient_joined_groups.group_name,
  216.                                                pdc.*
  217.                                         FROM patient_joined_groups
  218.                                                  JOIN progress_disease_codes pdc
  219.                                                       ON (patient_joined_groups.need_to_check_condition_codes = TRUE OR
  220.                                                           patient_joined_groups.need_to_check_condition_exclude_codes =
  221.                                                           TRUE) AND
  222.                                                          pdc.patient_id = patient_joined_groups.patient_id AND
  223.                                                          pdc.asserted_date <= patient_joined_groups.period_end_date AND
  224.                                                          (has(patient_joined_groups.condition_codes, pdc.code) OR
  225.                                                           has(patient_joined_groups.condition_exclude_codes, pdc.code))
  226.                                         WHERE (pdc.asserted_date <= patient_joined_groups.period_end_date AND
  227.                                                ((patient_joined_groups.need_to_check_condition_codes = TRUE AND
  228.                                                  arrayExists(x -> x = pdc.code,
  229.                                                              patient_joined_groups.condition_codes)) OR
  230.                                                 (patient_joined_groups.need_to_check_condition_exclude_codes = TRUE AND
  231.                                                  arrayExists(x -> x = pdc.code,
  232.                                                              patient_joined_groups.condition_exclude_codes)))) SETTINGS allow_experimental_join_condition = 1),
  233.      patient_groups AS (SELECT first_value(patient_joined_groups.patient_full_name),
  234.                                first_value(patient_joined_groups.current_age_in_years),
  235.                                patient_joined_groups.patient_id                                                                                            AS patient_id,
  236.                                patient_joined_groups.indicator_name                                                                                        AS indicator_name,
  237.                                patient_joined_groups.group_name                                                                                            AS group_name,
  238.                                groupUniqArray(patient_joined_groups_with_dos.code)                                                                         AS result_condition_diagnostic_report_codes,
  239.                                groupUniqArray(patient_joined_groups_with_observations.code)                                                                AS result_condition_observation_codes,
  240.                                groupUniqArray(patient_joined_groups_with_services.code)                                                                    AS result_condition_service_request_codes,
  241.                                groupUniqArray(patient_joined_groups_with_reasons.code)                                                                     AS result_reason_codes,
  242.                                groupUniqArray(patient_joined_groups_with_actions.code)                                                                     AS result_action_codes,
  243.                                groupUniqArray(patient_joined_groups_with_pdc.code)                                                                         AS result_condition_codes,
  244.                                first_value(patient_gender)                                                                                                 AS patient_gender,
  245.                                first_value(patient_joined_groups.current_age_in_years)                                                                     AS patient_age,
  246.                                first_value(patient_joined_groups.need_to_check_female_age)                                                                 AS need_to_check_female_age,
  247.                                first_value(patient_joined_groups.need_to_check_male_age)                                                                   AS need_to_check_male_age,
  248.                                first_value(patient_joined_groups.need_to_check_reason_code)                                                                AS need_to_check_reason_code,
  249.                                first_value(patient_joined_groups.need_to_check_condition_codes)                                                            AS need_to_check_condition_codes,
  250.                                first_value(patient_joined_groups.need_to_check_condition_exclude_codes)                                                    AS need_to_check_condition_exclude_codes,
  251.                                first_value(patient_joined_groups.need_to_check_observation_codes)                                                          AS need_to_check_observation_codes,
  252.                                first_value(patient_joined_groups.need_to_check_service_request_codes)                                                      AS need_to_check_service_request_codes,
  253.                                first_value(patient_joined_groups.need_to_check_diagnostic_report_codes)                                                    AS need_to_check_diagnostic_report_codes,
  254.                                first_value(patient_joined_groups.need_to_check_condition_action_codes)                                                     AS need_to_check_action_codes,
  255.                                first_value(patient_joined_groups.need_to_check_optional_observation_codes)                                                 AS need_to_check_optional_observation_codes,
  256.                                first_value(patient_joined_groups.condition_female_age_from)                                                                AS condition_female_age_from,
  257.                                first_value(patient_joined_groups.condition_female_age_to)                                                                  AS condition_female_age_to,
  258.                                first_value(patient_joined_groups.condition_male_age_from)                                                                  AS condition_male_age_from,
  259.                                first_value(patient_joined_groups.condition_male_age_to)                                                                    AS condition_male_age_to,
  260.                                (patient_gender IS NULL OR
  261.                                 (first_value(patient_joined_groups.skip_male) AND patient_gender = 0)
  262.                                    OR (group_name IN
  263.                                        ('hiv_screening_no_risk', 'checkup_40_64_with_risk', 'checkup_65_plus_no_risk',
  264.                                         'tb_screening_no_risk',
  265.                                         'hypertension_eval_no_risk'))
  266.                                    OR (first_value(patient_joined_groups.skip_female) AND patient_gender = 1)
  267.                                    OR (need_to_check_male_age AND patient_gender = 0 AND
  268.                                        patient_age NOT BETWEEN condition_male_age_from AND condition_male_age_to)
  269.                                    OR (need_to_check_female_age AND patient_gender = 1 AND
  270.                                        patient_age NOT BETWEEN condition_female_age_from AND condition_female_age_to)
  271.                                    )                                                                                                                       AS skip_check,
  272.                                first_value(patient_joined_groups.is_no_risk)                                                                               AS is_no_risk,
  273.  
  274.                                first_value(patient_joined_groups.condition_reason_code)                                                                    AS condition_reason_codes,
  275.                                first_value(patient_joined_groups.condition_action_codes)                                                                   AS condition_action_codes,
  276.                                first_value(patient_joined_groups.condition_codes)                                                                          AS condition_codes,
  277.                                first_value(patient_joined_groups.condition_exclude_codes)                                                                  AS condition_exclude_codes,
  278.                                first_value(patient_joined_groups.condition_observation_codes)                                                              AS condition_observation_codes,
  279.                                first_value(patient_joined_groups.condition_optional_observation_codes)                                                     AS condition_optional_observation_codes,
  280.                                first_value(patient_joined_groups.condition_diagnostic_report_codes)                                                        AS condition_diagnostic_report_codes,
  281.                                first_value(patient_joined_groups.condition_service_request_codes)                                                          AS condition_service_request_codes,
  282.  
  283.                                (need_to_check_reason_code AND LENGTH(result_reason_codes) = 0)                                                             AS force_quit_reason_check,
  284.                                (need_to_check_action_codes AND LENGTH(result_action_codes) = 0)                                                            AS force_quit_action_check,
  285.                                (need_to_check_condition_codes AND LENGTH(result_condition_codes) = 0)                                                      AS force_quit_condition_check,
  286.                                (need_to_check_service_request_codes AND
  287.                                 LENGTH(result_condition_service_request_codes) =
  288.                                 0)                                                                                                                         AS force_quit_service_request_check,
  289.                                (need_to_check_observation_codes AND LENGTH(result_condition_observation_codes) =
  290.                                                                     0)                                                                                     AS force_quit_observation_check,
  291.                                (need_to_check_diagnostic_report_codes AND
  292.                                 LENGTH(result_condition_diagnostic_report_codes) =
  293.                                 0)                                                                                                                         AS force_quit_diagnostic_report_check,
  294.                                (need_to_check_condition_exclude_codes AND LENGTH(result_condition_codes) =
  295.                                                                           0)                                                                               AS force_quit_condition_exclude_check,
  296.  
  297.                                IF(skip_check OR NOT need_to_check_diagnostic_report_codes, TRUE,
  298.                                   IF(force_quit_diagnostic_report_check, FALSE,
  299.                                      need_to_check_diagnostic_report_codes AND
  300.                                      arrayExists(x -> has(result_condition_diagnostic_report_codes, x),
  301.                                                  condition_diagnostic_report_codes)
  302.                                   ))                                                                                                                       AS diagnostic_report_check,
  303.                                IF(skip_check OR NOT need_to_check_reason_code, TRUE,
  304.                                   IF(force_quit_reason_check, FALSE,
  305.                                      arrayExists(x -> has(condition_reason_codes, x), result_condition_codes) OR
  306.                                      arrayExists(x -> has(condition_reason_codes, x), result_reason_codes)
  307.                                   ))                                                                                                                       AS reason_check,
  308.                                IF(skip_check OR NOT need_to_check_action_codes, TRUE,
  309.                                   IF(force_quit_action_check, FALSE,
  310.                                      arrayExists(x -> has(condition_action_codes, x), result_action_codes)
  311.                                   ))                                                                                                                       AS action_check,
  312.                                IF(skip_check OR NOT need_to_check_condition_codes, TRUE,
  313.                                   IF(force_quit_condition_check, FALSE, arrayExists(x -> has(condition_codes, x),
  314.                                                                                     result_condition_codes)))                                              AS condition_check,
  315.                                IF(skip_check OR NOT need_to_check_service_request_codes, TRUE,
  316.                                   IF(force_quit_service_request_check, FALSE,
  317.                                      need_to_check_service_request_codes AND
  318.                                      arrayExists(x -> has(condition_service_request_codes, x),
  319.                                                  result_condition_service_request_codes)))                                                                 AS service_request_check,
  320.                                IF(skip_check OR NOT need_to_check_condition_exclude_codes, TRUE,
  321.                                   IF(force_quit_condition_exclude_check, TRUE,
  322.                                      NOT arrayExists(x -> has(condition_exclude_codes, x),
  323.                                                      result_condition_codes)))                                                                             AS condition_exclude_check,
  324.                                IF(skip_check OR NOT need_to_check_observation_codes, TRUE,
  325.                                   IF(force_quit_observation_check, FALSE,
  326.                                      (
  327.                                          (NOT need_to_check_optional_observation_codes AND
  328.                                           LENGTH(arrayIntersect(condition_observation_codes,
  329.                                                                 result_condition_observation_codes)) =
  330.                                           LENGTH(condition_observation_codes))
  331.                                              OR (
  332.                                              need_to_check_optional_observation_codes AND
  333.                                              (
  334.                                                  (LENGTH(arrayIntersect(condition_observation_codes,
  335.                                                                         result_condition_observation_codes)) =
  336.                                                   LENGTH(condition_observation_codes) AND
  337.                                                   ((need_to_check_diagnostic_report_codes AND diagnostic_report_check) OR
  338.                                                    (need_to_check_service_request_codes AND service_request_check)))
  339.                                                      OR LENGTH(arrayIntersect(arrayConcat(condition_observation_codes,
  340.                                                                                           condition_optional_observation_codes),
  341.                                                                               result_condition_observation_codes)) =
  342.                                                         LENGTH(arrayConcat(condition_observation_codes,
  343.                                                                            condition_optional_observation_codes))
  344.                                                  )
  345.                                              )
  346.                                          )
  347.                                   )
  348.                                )                                                                                                                           AS observation_check,
  349.                                CASE
  350.                                    WHEN skip_check OR
  351.                                         (need_to_check_condition_exclude_codes AND NOT condition_exclude_check)
  352.                                        THEN 'no_need_done'
  353.                                    WHEN condition_check AND action_check AND reason_check AND condition_exclude_check
  354.                                        AND IF(need_to_check_optional_observation_codes = TRUE, observation_check,
  355.                                               (need_to_check_observation_codes AND observation_check) OR
  356.                                               ((need_to_check_service_request_codes AND service_request_check) OR
  357.                                                (need_to_check_diagnostic_report_codes AND diagnostic_report_check)))
  358.                                        THEN 'done'
  359.                                    WHEN need_to_check_condition_codes AND condition_check AND
  360.                                         need_to_check_condition_exclude_codes AND condition_exclude_check
  361.                                        THEN 'need_done'
  362.                                    WHEN (is_no_risk AND NOT condition_exclude_check) OR
  363.                                         (NOT is_no_risk AND NOT condition_check) THEN 'no_need_done'
  364.                                    ELSE 'need_done'
  365.                                    END                                                                                                                     AS STATUS,
  366.                                ROW_NUMBER() OVER (PARTITION BY patient_id, indicator_name ORDER BY IF(STATUS = 'done', 1, IF(STATUS = 'need_done', 2, 3))) AS status_rank
  367.                         FROM patient_joined_groups
  368.                                  LEFT JOIN patient_joined_groups_with_dos
  369.                                            USING patient_id, indicator_name, group_name LEFT
  370.                                  JOIN patient_joined_groups_with_services
  371.                                       USING patient_id, indicator_name, group_name LEFT
  372.                                  JOIN patient_joined_groups_with_observations
  373.                                       USING patient_id, indicator_name, group_name LEFT
  374.                                  JOIN patient_joined_groups_with_reasons
  375.                                       USING patient_id, indicator_name, group_name LEFT
  376.                                  JOIN patient_joined_groups_with_actions
  377.                                       USING patient_id, indicator_name, group_name LEFT
  378.                                  JOIN patient_joined_groups_with_pdc USING patient_id, indicator_name, group_name
  379.                         GROUP BY patient_joined_groups.patient_id, patient_joined_groups.indicator_name,
  380.                                  patient_joined_groups.group_name)
  381. SELECT patients.id,
  382.        patients.patient_full_name,
  383.        patients.legal_entity_id,
  384.        patients.current_age_in_years,
  385.        patients.doctor_full_name,
  386.        any(IF(indicators.indicator_name = 'breast_completed', indicators.STATUS, NULL))     AS breast_completed_status,
  387.        any(IF(indicators.indicator_name = 'breast_referral', indicators.STATUS, NULL))      AS breast_referral_status,
  388.        any(IF(indicators.indicator_name = 'checkup_40_64', indicators.STATUS, NULL))        AS checkup_40_64_status,
  389.        any(IF(indicators.indicator_name = 'checkup_65_plus', indicators.STATUS, NULL))      AS checkup_65_plus_status,
  390.        any(IF(indicators.indicator_name = 'colorectal_completed', indicators.STATUS,
  391.               NULL))                                                                        AS colorectal_completed_status,
  392.        any(IF(indicators.indicator_name = 'colorectal_referral', indicators.STATUS,
  393.               NULL))                                                                        AS colorectal_referral_status,
  394.        any(IF(indicators.indicator_name = 'cv_risk_assessment', indicators.STATUS,
  395.               NULL))                                                                        AS cv_risk_assessment_status,
  396.        any(IF(indicators.indicator_name = 'diabetes_screening', indicators.STATUS,
  397.               NULL))                                                                        AS diabetes_screening_status,
  398.        any(IF(indicators.indicator_name = 'hiv_screening', indicators.STATUS, NULL))        AS hiv_screening_status,
  399.        any(IF(indicators.indicator_name = 'hypertension_eval', indicators.STATUS, NULL))    AS hypertension_eval_status,
  400.        any(IF(indicators.indicator_name = 'prostate_completed', indicators.STATUS,
  401.               NULL))                                                                        AS prostate_completed_status,
  402.        any(IF(indicators.indicator_name = 'prostate_referral', indicators.STATUS, NULL))    AS prostate_referral_status,
  403.        any(IF(indicators.indicator_name = 'tb_screening', indicators.STATUS, NULL))         AS tb_screening_status,
  404.        '{' || arrayStringConcat(
  405.                arrayMap(
  406.                        (name, STATUS, sr_codes, do_codes, obs_codes, condition_codes, action_codes) ->
  407.                            concat('"', name, '": {',
  408.                                   '"status": "', STATUS, '",',
  409.                                   '"sr_codes": [', arrayStringConcat(arrayMap(x -> concat('"', x, '"'), sr_codes), ','),
  410.                                   '],',
  411.                                   '"do_codes": [', arrayStringConcat(arrayMap(x -> concat('"', x, '"'), do_codes), ','),
  412.                                   '],',
  413.                                   '"obs_codes": [',
  414.                                   arrayStringConcat(arrayMap(x -> concat('"', x, '"'), obs_codes), ','), '],',
  415.                                   '"action_codes": [',
  416.                                   arrayStringConcat(arrayMap(x -> concat('"', x, '"'), action_codes), ','), ']',
  417.                                   '}'),
  418.                        groupArray(indicators.indicator_name),
  419.                        groupArray(indicators.STATUS),
  420.                        groupArray(indicators.result_condition_service_request_codes),
  421.                        groupArray(indicators.result_condition_diagnostic_report_codes),
  422.                        groupArray(indicators.result_condition_observation_codes),
  423.                        groupArray(indicators.result_condition_codes),
  424.                        groupArray(indicators.result_action_codes)
  425.                ),
  426.                ','
  427.               ) || '}'                                                                      AS indicator_data_json
  428. FROM patients
  429.          JOIN patient_groups indicators ON status_rank = 1 AND patients.id = patient_groups.patient_id
  430. WHERE patient_groups.status_rank = 1
  431. GROUP BY patients.id, patients.patient_full_name, patients.legal_entity_id, patients.current_age_in_years,
  432.          patients.doctor_full_name
  433. ORDER BY patients.patient_full_name ASC NULLS LAST COLLATE 'uk'
  434. LIMIT 15 OFFSET 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement