From 438e5a3049145ff2dc73ef832b080539fa071f2b Mon Sep 17 00:00:00 2001 From: sonzsara Date: Wed, 15 Jul 2026 16:38:02 +0530 Subject: [PATCH 1/3] Add documentation for Total Doctor Visit Count by Facility query --- ...total_doctor_visit_count_by_facility_kc.md | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Care/Operations/total_doctor_visit_count_by_facility_kc.md diff --git a/Care/Operations/total_doctor_visit_count_by_facility_kc.md b/Care/Operations/total_doctor_visit_count_by_facility_kc.md new file mode 100644 index 0000000..ddd5842 --- /dev/null +++ b/Care/Operations/total_doctor_visit_count_by_facility_kc.md @@ -0,0 +1,67 @@ + +# Total Doctor Visit Count by Facility + +> Count of completed doctor visit questionnaire responses grouped by facility for patients belonging to a given organization + +## Purpose + +Counts completed responses to the doctor visit questionnaire (`questionnaire_id = 68`) per facility, scoped to living patients within a specified organization. + +## Parameters + +| Parameter | Type | Description | Example | +|-----------|------|-------------|---------| +| `organization_id` | TEXT | Organization external ID to scope patients (matched against `emr_organization.external_id`) | `'org-uuid-1234'` | +| `date` | DATE / range | Metabase date filter (typically bound to `emr_questionnaireresponse.created_date`) | `'2026-07-01'` | + +--- + +## Query + +```sql +WITH org_id AS ( + SELECT emr_organization.id + FROM emr_organization + WHERE emr_organization.deleted = FALSE + --AND emr_organization.external_id::text = {{organization_id}} +), +filtered_patients AS ( + SELECT emr_patient.id + FROM emr_patient + INNER JOIN org_id ON TRUE + WHERE emr_patient.deceased_datetime IS NULL + AND emr_patient.organization_cache && ARRAY[org_id.id]::integer[] +), +visits AS ( + SELECT + emr_questionnaireresponse.id AS response_id, + emr_questionnaireresponse.encounter_id + FROM emr_questionnaireresponse + INNER JOIN filtered_patients + ON filtered_patients.id = emr_questionnaireresponse.patient_id + WHERE emr_questionnaireresponse.questionnaire_id = 68 + AND emr_questionnaireresponse.status = 'completed' + AND emr_questionnaireresponse.encounter_id IS NOT NULL + --[[AND {{date}}]] +) +SELECT + facility_facility.name AS facility_name, + COUNT(*) AS visit_count +FROM visits +INNER JOIN emr_encounter + ON emr_encounter.id = visits.encounter_id +INNER JOIN facility_facility + ON facility_facility.id = emr_encounter.facility_id + AND facility_facility.deleted = FALSE +GROUP BY facility_facility.name +ORDER BY visit_count DESC, facility_facility.name; +``` + +## Notes + +- **Hardcoded IDs:** + - `questionnaire_id = 68` — the doctor visit questionnaire at Karunashraya. Update if the questionnaire id changes. +- **`organization_id` is required** (no `[[...]]` wrapper) — the query will not run without a value. +- Results are ordered by visit count descending, then alphabetically by facility name for ties. + +*Last updated: 2026-07-15* From c0e78651ea6697e66d892be24efff0cc4ee3dc8c Mon Sep 17 00:00:00 2001 From: sonzsara Date: Mon, 3 Aug 2026 11:15:13 +0530 Subject: [PATCH 2/3] Refactor Total Doctor Visit Count query to improve filtering and organization handling --- ...total_doctor_visit_count_by_facility_kc.md | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/Care/Operations/total_doctor_visit_count_by_facility_kc.md b/Care/Operations/total_doctor_visit_count_by_facility_kc.md index ddd5842..7696cb4 100644 --- a/Care/Operations/total_doctor_visit_count_by_facility_kc.md +++ b/Care/Operations/total_doctor_visit_count_by_facility_kc.md @@ -22,24 +22,35 @@ Counts completed responses to the doctor visit questionnaire (`questionnaire_id WITH org_id AS ( SELECT emr_organization.id FROM emr_organization - WHERE emr_organization.deleted = FALSE + WHERE emr_organization.deleted = false --AND emr_organization.external_id::text = {{organization_id}} ), -filtered_patients AS ( - SELECT emr_patient.id - FROM emr_patient - INNER JOIN org_id ON TRUE - WHERE emr_patient.deceased_datetime IS NULL - AND emr_patient.organization_cache && ARRAY[org_id.id]::integer[] +filtered_encounters AS ( + SELECT + emr_encounter.id, + emr_encounter.patient_id, + emr_encounter.facility_id + FROM emr_encounter + INNER JOIN facility_facility + ON facility_facility.id = emr_encounter.facility_id + AND facility_facility.deleted = false + INNER JOIN org_id + ON facility_facility.geo_organization_cache && ARRAY[org_id.id]::integer[] + WHERE emr_encounter.status NOT IN ('entered_in_error', 'cancelled') ), visits AS ( SELECT emr_questionnaireresponse.id AS response_id, emr_questionnaireresponse.encounter_id FROM emr_questionnaireresponse - INNER JOIN filtered_patients - ON filtered_patients.id = emr_questionnaireresponse.patient_id - WHERE emr_questionnaireresponse.questionnaire_id = 68 + INNER JOIN filtered_encounters + ON filtered_encounters.id = emr_questionnaireresponse.encounter_id + INNER JOIN emr_patient + ON emr_patient.id = emr_questionnaireresponse.patient_id + AND emr_patient.deleted = false + AND emr_patient.deceased_datetime IS NULL + WHERE emr_questionnaireresponse.deleted = false + AND emr_questionnaireresponse.questionnaire_id = 68 AND emr_questionnaireresponse.status = 'completed' AND emr_questionnaireresponse.encounter_id IS NOT NULL --[[AND {{date}}]] @@ -50,11 +61,12 @@ SELECT FROM visits INNER JOIN emr_encounter ON emr_encounter.id = visits.encounter_id + AND emr_encounter.deleted = false INNER JOIN facility_facility ON facility_facility.id = emr_encounter.facility_id - AND facility_facility.deleted = FALSE + AND facility_facility.deleted = false GROUP BY facility_facility.name -ORDER BY visit_count DESC, facility_facility.name; +ORDER BY facility_facility.name; ``` ## Notes From e96b53516528d5515280ff0929496ea2210cc6ea Mon Sep 17 00:00:00 2001 From: Sona Sara Shibu Date: Mon, 3 Aug 2026 15:26:55 +0530 Subject: [PATCH 3/3] Update total_doctor_visit_count_by_facility_kc.md --- Care/Operations/total_doctor_visit_count_by_facility_kc.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Care/Operations/total_doctor_visit_count_by_facility_kc.md b/Care/Operations/total_doctor_visit_count_by_facility_kc.md index 7696cb4..c4effd6 100644 --- a/Care/Operations/total_doctor_visit_count_by_facility_kc.md +++ b/Care/Operations/total_doctor_visit_count_by_facility_kc.md @@ -45,10 +45,6 @@ visits AS ( FROM emr_questionnaireresponse INNER JOIN filtered_encounters ON filtered_encounters.id = emr_questionnaireresponse.encounter_id - INNER JOIN emr_patient - ON emr_patient.id = emr_questionnaireresponse.patient_id - AND emr_patient.deleted = false - AND emr_patient.deceased_datetime IS NULL WHERE emr_questionnaireresponse.deleted = false AND emr_questionnaireresponse.questionnaire_id = 68 AND emr_questionnaireresponse.status = 'completed'