EHR & Patient Management KPIs & Reporting

EHR & Patient Management KPIs & Reporting

KPI Summary

KPI ID KPI Name Formula (Conceptual) Target Data Source Frequency
KPI-EHR-001 Registration Completion Rate Completed registrations / total registrations × 100 ≥ 98% patients, patient_demographics, patient_identifiers, audit_log Daily / Monthly
KPI-EHR-002 Average Registration Time AVG(registration_end_time − registration_start_time) ≤ 5 min (new), ≤ 2 min (returning) audit_log (registration workflow events), patients Daily / Monthly
KPI-EHR-003 Duplicate Detection Rate Flagged duplicates / new registrations × 100 ≤ 2% duplicate_suspects, patients Monthly
KPI-EHR-004 Duplicate Resolution Time AVG(resolved_at − flagged_at) for resolved suspects ≤ 24 hours duplicate_suspects, users Weekly / Monthly
KPI-EHR-005 Allergy Documentation Rate Patients with allergy status (documented/NKA/NKDA) / active patients × 100 ≥ 95% patients, patient_allergies Monthly
KPI-EHR-006 Problem List Currency Encounters where problem list reviewed / total encounters × 100 ≥ 90% patient_problems, encounters, audit_log Monthly
KPI-EHR-007 Clinical Note Completion Rate Notes signed within 24h / total notes × 100 ≥ 90% within 24 hours clinical_notes, encounters, providers Weekly / Monthly
KPI-EHR-008 Consent Compliance Rate Encounters with required consents / total encounters × 100 ≥ 99% patient_consents, encounters, facilities, departments Monthly
KPI-EHR-009 Break-the-Glass Rate BTG access events / total access events × 100 ≤ 1% audit_log, users, roles Monthly
KPI-EHR-010 NABIDH/Malaffi Submission Success Rate ADT messages with ACK=AA / total ADT messages × 100 ≥ 99.5% integration_message_log Daily / Monthly
KPI-EHR-011 Patient Portal Adoption Rate Patients with portal account / active patients × 100 ≥ 40% (Y1), ≥ 70% (Y2) users (role='patient'), patients, patient_identifiers Monthly / Quarterly
KPI-EHR-012 Paper Document Scan Backlog Count(documents pending scan > 48h) 0 (no backlog beyond 48 hours) patient_documents, audit_log Daily

Note: encounters table is referenced from the Scheduling module; integration_message_log is assumed to be owned by the integration layer but queried by this module.


KPI Definitions

KPI-EHR-001: Registration Completion Rate

Definition

Measures the percentage of patient registrations where all mandatory demographic and identifier fields are fully populated at the end of the registration workflow. This reflects registration quality and reduces downstream claim rejections and MPI issues, aligned with DOH/DHA data quality expectations and NABIDH/Malaffi minimum dataset requirements.

Calculation Formula (SQL example)

Assumptions:

  • Mandatory fields: patients.mrn, patients.emirates_id (or verified alternative ID), patients.first_name_en, patients.last_name_en, patients.date_of_birth, patients.gender, patient_demographics.mobile_phone, patient_demographics.emirate.
  • Registration period determined by patients.created_at.
SQL
SELECT
    DATE(p.created_at) AS registration_date,
    COUNT(*) AS total_registrations,
    COUNT(
        CASE
            WHEN p.mrn IS NOT NULL
             AND (
                   (p.emirates_id IS NOT NULL AND p.emirates_id <> '')
                   OR EXISTS (
                       SELECT 1
                       FROM patient_identifiers pi
                       WHERE pi.patient_id = p.patient_id
                         AND pi.identifier_type IN ('passport', 'visa')
                         AND pi.verification_status = 'verified'
                   )
                 )
             AND p.first_name_en IS NOT NULL
             AND p.last_name_en IS NOT NULL
             AND p.date_of_birth IS NOT NULL
             AND p.gender IS NOT NULL
             AND pd.mobile_phone IS NOT NULL
             AND pd.emirate IS NOT NULL
            THEN 1
        END
    ) AS completed_registrations,
    COUNT(
        CASE
            WHEN p.mrn IS NOT NULL
             AND (
                   (p.emirates_id IS NOT NULL AND p.emirates_id <> '')
                   OR EXISTS (
                       SELECT 1
                       FROM patient_identifiers pi
                       WHERE pi.patient_id = p.patient_id
                         AND pi.identifier_type IN ('passport', 'visa')
                         AND pi.verification_status = 'verified'
                   )
                 )
             AND p.first_name_en IS NOT NULL
             AND p.last_name_en IS NOT NULL
             AND p.date_of_birth IS NOT NULL
             AND p.gender IS NOT NULL
             AND pd.mobile_phone IS NOT NULL
             AND pd.emirate IS NOT NULL
            THEN 1
        END
    ) * 100.0 / COUNT(*) AS registration_completion_rate_pct
FROM patients p
LEFT JOIN patient_demographics pd
       ON pd.patient_id = p.patient_id
      AND pd.effective_date = (
          SELECT MAX(effective_date)
          FROM patient_demographics
          WHERE patient_id = p.patient_id
      )
WHERE p.created_at >= :start_date
  AND p.created_at < :end_date
GROUP BY DATE(p.created_at);

Target / Benchmark

Metric Target Source / Rationale
Registration Completion Rate ≥ 98% Internal quality target aligned with DOH/DHA/NABIDH/Malaffi demographic completeness requirements and UAE payer data quality expectations

Data Source

  • patients(patient_id, mrn, emirates_id, first_name_en, last_name_en, date_of_birth, gender, created_at)
  • patient_demographics(patient_id, mobile_phone, emirate, effective_date)
  • patient_identifiers(patient_id, identifier_type, verification_status)

Dimensions / Filters

  • Time: day, week, month, quarter, year
  • Facility: facility_id (via MRN prefix or encounter linkage)
  • Registration location/department: via locations or departments if captured in audit
  • Registration clerk: audit_log.user_id where action='registration_completed'

Visualization

  • Primary: Line chart (monthly trend) with target line at 98%.
  • Secondary: Bar chart by facility/department for the selected period.

Alert Thresholds

  • Warning: < 98% for any facility for 2 consecutive weeks.
  • Critical: < 95% for any facility in a given month.
  • Notification recipients:
  • Registration Supervisor (facility-level)
  • HIM Supervisor
  • Quality & Patient Safety Officer (if critical)

KPI-EHR-002: Average Registration Time

Definition

Average time taken to complete a registration from start to finish, separately for new and returning patients. Measures front-desk efficiency and patient experience, relevant to DOH/DHA service-level expectations.

Calculation Formula (SQL example)

Assumptions:

  • audit_log.action values: 'registration_started', 'registration_completed'.
  • New vs returning determined by whether the patient has prior encounters.
SQL
WITH registration_events AS (
    SELECT
        al.patient_id,
        MIN(CASE WHEN al.action = 'registration_started' THEN al.timestamp END) AS start_time,
        MAX(CASE WHEN al.action = 'registration_completed' THEN al.timestamp END) AS end_time
    FROM audit_log al
    WHERE al.action IN ('registration_started', 'registration_completed')
      AND al.timestamp >= :start_date
      AND al.timestamp < :end_date
    GROUP BY al.patient_id, DATE(al.timestamp)
),
patient_type AS (
    SELECT
        re.patient_id,
        re.start_time,
        re.end_time,
        CASE
            WHEN EXISTS (
                SELECT 1
                FROM encounters e
                WHERE e.patient_id = re.patient_id
                  AND e.encounter_start < re.start_time
            )
            THEN 'returning'
            ELSE 'new'
        END AS patient_category
    FROM registration_events re
)
SELECT
    patient_category,
    AVG(EXTRACT(EPOCH FROM (end_time - start_time)) / 60.0) AS avg_registration_time_minutes
FROM patient_type
WHERE end_time IS NOT NULL
GROUP BY patient_category;

Target / Benchmark

Patient Type Target Average Time Rationale
New ≤ 5 minutes Internal operational target for UAE private hospitals
Returning ≤ 2 minutes Expected with pre-populated data and quick verification

Data Source

  • audit_log(audit_id, patient_id, action, timestamp, user_id)
  • encounters(encounter_id, patient_id, encounter_start) (from Scheduling module)

Dimensions / Filters

  • Time: day, week, month
  • Facility, department, registration desk (via locations)
  • Registration clerk (audit_log.user_id)
  • Patient type (new/returning)
  • Visit type (inpatient/outpatient/ED) via encounters.encounter_type

Visualization

  • Bar chart comparing new vs returning average time per month.
  • Box plot by department to show variation.

Alert Thresholds

  • Warning: New > 6 min or Returning > 3 min for 2 consecutive weeks.
  • Critical: New > 8 min or Returning > 5 min in any week.
  • Notification recipients:
  • Registration Supervisor
  • Operations Manager
  • HIM Supervisor (for systemic issues)

KPI-EHR-003: Duplicate Detection Rate

Definition

Percentage of new registrations that are flagged as potential duplicates by the MPI matching engine. A moderate rate indicates effective detection; a very high rate suggests overly sensitive matching, while a very low rate may indicate under-detection.

Calculation Formula (SQL example)

Assumptions:

  • duplicate_suspects.status in ('new', 'under_review', 'resolved').
  • New registrations determined by patients.created_at.
SQL
WITH new_registrations AS (
    SELECT p.patient_id
    FROM patients p
    WHERE p.created_at >= :start_date
      AND p.created_at < :end_date
),
suspects_in_period AS (
    SELECT DISTINCT ds.suspect_id, ds.patient_id_1, ds.patient_id_2
    FROM duplicate_suspects ds
    WHERE ds.created_at >= :start_date
      AND ds.created_at < :end_date
)
SELECT
    COUNT(*) AS new_registrations,
    COUNT(
        DISTINCT CASE
            WHEN nr.patient_id IN (si.patient_id_1, si.patient_id_2)
            THEN nr.patient_id
        END
    ) AS registrations_with_duplicate_flag,
    COUNT(
        DISTINCT CASE
            WHEN nr.patient_id IN (si.patient_id_1, si.patient_id_2)
            THEN nr.patient_id
        END
    ) * 100.0 / COUNT(*) AS duplicate_detection_rate_pct
FROM new_registrations nr
LEFT JOIN suspects_in_period si
       ON nr.patient_id IN (si.patient_id_1, si.patient_id_2);

Target / Benchmark

Metric Target Rationale
Duplicate Detection Rate ≤ 2% From module brief; indicates low actual duplication with effective MPI

Data Source

  • patients(patient_id, created_at)
  • duplicate_suspects(suspect_id, patient_id_1, patient_id_2, status, created_at)

Dimensions / Filters

  • Time: month, quarter
  • Facility (via MRN prefix or encounters)
  • Registration location/department
  • Match score bands (match_score ranges)

Visualization

  • Line chart of detection rate over time.
  • Histogram of match_score distribution.

Alert Thresholds

  • Warning: Rate > 3% for any facility in a month.
  • Critical: Rate > 5% or sudden spike (> 2× previous month).
  • Notification recipients:
  • HIM Supervisor
  • Medical Records Officer
  • IT (for MPI configuration review)

KPI-EHR-004: Duplicate Resolution Time

Definition

Average time taken to resolve flagged duplicate patient records (from flagging to resolution). Measures HIM responsiveness and MPI data quality maintenance.

Calculation Formula (SQL example)

SQL
SELECT
    AVG(EXTRACT(EPOCH FROM (ds.reviewed_at - ds.created_at)) / 3600.0) AS avg_resolution_time_hours
FROM duplicate_suspects ds
WHERE ds.status = 'resolved'
  AND ds.reviewed_at IS NOT NULL
  AND ds.created_at >= :start_date
  AND ds.created_at < :end_date;

Target / Benchmark

Metric Target Rationale
Average Resolution Time ≤ 24 hours From module brief; supports safe clinical use and NABIDH/Malaffi data quality

Data Source

  • duplicate_suspects(suspect_id, created_at, reviewed_at, status, reviewed_by, resolution)
  • users(user_id, role_id) for role-based analysis

Dimensions / Filters

  • Time: week, month
  • Facility
  • Reviewer (reviewed_by)
  • Resolution type (merge, false positive, other)

Visualization

  • Line chart of average hours to resolution.
  • Table of unresolved suspects older than 24/48/72 hours.

Alert Thresholds

  • Warning: Average > 24 hours for a week; any suspect unresolved > 72 hours.
  • Critical: Average > 48 hours or > 10 suspects older than 72 hours.
  • Notification recipients:
  • HIM Supervisor
  • Medical Records Officer
  • Privacy Officer (if duplicates involve sensitive patients)

KPI-EHR-005: Allergy Documentation Rate

Definition

Percentage of active patients with an explicit allergy status recorded: at least one active allergy or a documented NKA/NKDA flag. Supports patient safety and is required for safe CPOE use and NABIDH/Malaffi submissions.

Calculation Formula (SQL example)

Assumptions:

  • Active patients: those with at least one encounter in the last 12 months.
  • NKA/NKDA captured as special rows in patient_allergies.status or reaction_type.
SQL
WITH active_patients AS (
    SELECT DISTINCT e.patient_id
    FROM encounters e
    WHERE e.encounter_start >= (CURRENT_DATE - INTERVAL '12 months')
),
allergy_status AS (
    SELECT
        ap.patient_id,
        CASE
            WHEN EXISTS (
                SELECT 1
                FROM patient_allergies pa
                WHERE pa.patient_id = ap.patient_id
                  AND pa.status = 'active'
                  AND pa.allergen_code IS NOT NULL
            ) THEN 'documented_allergy'
            WHEN EXISTS (
                SELECT 1
                FROM patient_allergies pa
                WHERE pa.patient_id = ap.patient_id
                  AND pa.status IN ('NKA', 'NKDA')
            ) THEN 'nka_nkda'
            ELSE 'none'
        END AS allergy_status
    FROM active_patients ap
)
SELECT
    COUNT(*) AS active_patients,
    COUNT(
        CASE
            WHEN allergy_status IN ('documented_allergy', 'nka_nkda')
            THEN 1
        END
    ) AS patients_with_allergy_status,
    COUNT(
        CASE
            WHEN allergy_status IN ('documented_allergy', 'nka_nkda')
            THEN 1
        END
    ) * 100.0 / COUNT(*) AS allergy_documentation_rate_pct
FROM allergy_status;

Target / Benchmark

Metric Target Rationale
Allergy Documentation Rate ≥ 95% From module brief; aligns with international safety practice and UAE accreditation expectations

Data Source

  • encounters(patient_id, encounter_start)
  • patient_allergies(patient_id, allergen_code, status)

Dimensions / Filters

  • Time: month, quarter
  • Facility, department
  • Provider (based on last allergy update verified_by)
  • Encounter type (inpatient/outpatient/ED)

Visualization

  • Gauge showing current rate vs 95% target.
  • Bar chart by department.

Alert Thresholds

  • Warning: < 95% for any inpatient unit or ED.
  • Critical: < 90% overall or < 85% in high-risk areas (ICU, ED).
  • Notification recipients:
  • Chief Medical Officer
  • Nursing Director
  • Pharmacy / Clinical Informatics

KPI-EHR-006: Problem List Currency

Definition

Percentage of encounters where the problem list was reviewed and updated (if needed) during the encounter. Indicates how current the problem list is, supporting accurate coding, care planning, and NABIDH clinical document quality.

Implementation Note

Requires a flag or audit entry when a clinician performs a “problem list review” action. This can be captured in audit_log with resource_type='patient_problems' and action='reviewed' linked to an encounter.

Calculation Formula (SQL example)

SQL
WITH encounters_in_period AS (
    SELECT e.encounter_id, e.patient_id, e.encounter_start
    FROM encounters e
    WHERE e.encounter_start >= :start_date
      AND e.encounter_start < :end_date
),
problem_reviews AS (
    SELECT DISTINCT al.encounter_id
    FROM audit_log al
    WHERE al.resource_type = 'patient_problems'
      AND al.action = 'reviewed'
      AND al.timestamp >= :start_date
      AND al.timestamp < :end_date
)
SELECT
    COUNT(*) AS total_encounters,
    COUNT(
        CASE
            WHEN eip.encounter_id IN (SELECT encounter_id FROM problem_reviews)
            THEN 1
        END
    ) AS encounters_with_problem_review,
    COUNT(
        CASE
            WHEN eip.encounter_id IN (SELECT encounter_id FROM problem_reviews)
            THEN 1
        END
    ) * 100.0 / COUNT(*) AS problem_list_currency_pct
FROM encounters_in_period eip;

Target / Benchmark

Metric Target Rationale
Problem List Currency ≥ 90% From module brief; supports accurate ICD-10-AM coding and chronic disease management

Data Source

  • encounters(encounter_id, patient_id, encounter_start, facility_id, department_id)
  • audit_log(encounter_id, resource_type, action, timestamp, user_id)

Dimensions / Filters

  • Time: month, quarter
  • Facility, department
  • Provider
  • Encounter type

Visualization

  • Line chart of monthly currency rate.
  • Department-level bar chart.

Alert Thresholds

  • Warning: < 90% for any department for 2 consecutive months.
  • Critical: < 80% overall.
  • Notification recipients:
  • Department Chairs
  • HIM Supervisor
  • Coding/RCM Manager (due to impact on ICD-10-AM coding)

KPI-EHR-007: Clinical Note Completion Rate

Definition

Percentage of clinical notes that are signed within 24 hours of the associated encounter event (e.g., visit, procedure). Ensures timely documentation for patient safety, billing, and regulatory compliance.

Calculation Formula (SQL example)

Assumptions:

  • Note creation time is clinical_notes.created_at (or equivalent).
  • Completion defined as status='signed' and signed_datetime within 24 hours of note creation or encounter end.
SQL
SELECT
    COUNT(*) AS total_notes,
    COUNT(
        CASE
            WHEN cn.status = 'signed'
             AND cn.signed_datetime IS NOT NULL
             AND cn.signed_datetime <= cn.created_at + INTERVAL '24 hours'
            THEN 1
        END
    ) AS notes_signed_within_24h,
    COUNT(
        CASE
            WHEN cn.status = 'signed'
             AND cn.signed_datetime IS NOT NULL
             AND cn.signed_datetime <= cn.created_at + INTERVAL '24 hours'
            THEN 1
        END
    ) * 100.0 / COUNT(*) AS note_completion_rate_24h_pct
FROM clinical_notes cn
WHERE cn.created_at >= :start_date
  AND cn.created_at < :end_date;

Target / Benchmark

Metric Target Rationale
Clinical Note Completion Rate ≥ 90% within 24 hours From module brief; aligns with UAE accreditation and payer documentation expectations

Data Source

  • clinical_notes(note_id, patient_id, encounter_id, note_type, status, created_at, signed_datetime, author_id)
  • providers(provider_id, specialty_code, facility_id, department_id)

Dimensions / Filters

  • Time: week, month
  • Facility, department
  • Provider, specialty
  • Note type (H&P, progress, discharge summary, nursing, etc.)

Visualization

  • Line chart of completion rate over time.
  • Table of overdue unsigned notes (age buckets: 24–48h, 48–72h, >72h).

Alert Thresholds

  • Warning: Completion rate < 90% for any department in a month.
  • Critical: > 5% of notes unsigned after 72 hours; any discharge summaries unsigned > 48 hours.
  • Notification recipients:
  • Department Chairs
  • Medical Director
  • HIM Supervisor

Definition

Percentage of encounters where all required consents (general treatment, UAE PDPL data processing, specific procedure, HIE sharing where applicable) are obtained and recorded. Supports UAE PDPL compliance and DOH/DHA licensing requirements.

Calculation Formula (SQL example)

Assumptions:

  • Required consents depend on encounter type and facility configuration (e.g., table consent_requirements not shown here).
  • For simplicity, assume general treatment + PDPL consent required for all encounters.
SQL
WITH encounters_in_period AS (
    SELECT e.encounter_id, e.patient_id, e.facility_id, e.department_id, e.encounter_start
    FROM encounters e
    WHERE e.encounter_start >= :start_date
      AND e.encounter_start < :end_date
),
consent_status AS (
    SELECT
        eip.encounter_id,
        COUNT(DISTINCT CASE WHEN pc.consent_type = 'general_treatment'
                             AND pc.status = 'granted'
                        THEN pc.consent_type END) AS general_treatment_count,
        COUNT(DISTINCT CASE WHEN pc.consent_type = 'pdpl_data_processing'
                             AND pc.status = 'granted'
                        THEN pc.consent_type END) AS pdpl_count
    FROM encounters_in_period eip
    LEFT JOIN patient_consents pc
           ON pc.encounter_id = eip.encounter_id
          AND pc.status = 'granted'
          AND (pc.expiry_datetime IS NULL OR pc.expiry_datetime >= eip.encounter_start)
    GROUP BY eip.encounter_id
)
SELECT
    COUNT(*) AS total_encounters,
    COUNT(
        CASE
            WHEN general_treatment_count >= 1
             AND pdpl_count >= 1
            THEN 1
        END
    ) AS encounters_with_required_consents,
    COUNT(
        CASE
            WHEN general_treatment_count >= 1
             AND pdpl_count >= 1
            THEN 1
        END
    ) * 100.0 / COUNT(*) AS consent_compliance_rate_pct
FROM consent_status;

Target / Benchmark

Metric Target Rationale
Consent Compliance Rate ≥ 99% From module brief; supports UAE PDPL and DOH/DHA licensing inspections

Data Source

  • encounters(encounter_id, patient_id, facility_id, department_id, encounter_start)
  • patient_consents(consent_id, patient_id, encounter_id, consent_type, status, granted_datetime, expiry_datetime)
  • Facility configuration tables for consent requirements (not detailed here)

Dimensions / Filters

  • Time: month, quarter
  • Facility, department
  • Encounter type (inpatient/outpatient/ED)
  • Consent type (general, PDPL, procedure, HIE)

Visualization

  • Gauge for overall compliance.
  • Stacked bar chart by department (compliant vs non-compliant encounters).

Alert Thresholds

  • Warning: < 99% for any facility in a month.
  • Critical: < 97% overall; any pattern of missing PDPL consent.
  • Notification recipients:
  • Privacy Officer
  • HIM Supervisor
  • Facility CEO / Medical Director (for critical)

KPI-EHR-009: Break-the-Glass (BTG) Rate

Definition

Percentage of patient record access events that used the Break-the-Glass override. Indicates privacy risk and appropriateness of access controls under UAE PDPL and ADHICS/DHA security guidelines.

Calculation Formula (SQL example)

SQL
SELECT
    COUNT(*) AS total_access_events,
    COUNT(CASE WHEN al.is_btg = TRUE THEN 1 END) AS btg_access_events,
    COUNT(CASE WHEN al.is_btg = TRUE THEN 1 END) * 100.0 / COUNT(*) AS btg_rate_pct
FROM audit_log al
WHERE al.resource_type = 'patient_record'
  AND al.action = 'view'
  AND al.timestamp >= :start_date
  AND al.timestamp < :end_date;

Target / Benchmark

Metric Target Rationale
BTG Rate ≤ 1% From module brief; high BTG rates may indicate misuse or misconfigured access rules

Data Source

  • audit_log(audit_id, user_id, patient_id, resource_type, action, timestamp, is_btg, access_reason, ip_address)
  • users(user_id, role_id)
  • roles(role_id, role_name)

Dimensions / Filters

  • Time: month, quarter
  • Facility, department (via user’s primary assignment)
  • User role (physician, nurse, admin, etc.)
  • Access reason (access_reason)

Visualization

  • Line chart of BTG rate over time.
  • Table of top BTG users and reasons.

Alert Thresholds

  • Warning: BTG rate > 1% overall or > 2% in any department.
  • Critical: Any user with > 10 BTG events in a month; BTG without valid reason.
  • Notification recipients:
  • Privacy Officer (primary)
  • IT Security Officer
  • Relevant Department Head (for user-specific issues)

KPI-EHR-010: NABIDH/Malaffi Submission Success Rate

Definition

Percentage of ADT messages (A01/A04/A08/A40) sent to NABIDH (Dubai) and Malaffi (Abu Dhabi) that receive a positive acknowledgment (ACK^AA). Measures HIE integration reliability and regulatory compliance.

Calculation Formula (SQL example)

Assumptions:

  • integration_message_log contains one row per outbound message.
SQL
SELECT
    target_system,
    COUNT(*) AS total_adt_messages_sent,
    COUNT(CASE WHEN ack_status = 'AA' THEN 1 END) AS successful_messages,
    COUNT(CASE WHEN ack_status = 'AA' THEN 1 END) * 100.0 / COUNT(*) AS submission_success_rate_pct
FROM integration_message_log
WHERE message_type IN ('ADT^A01', 'ADT^A04', 'ADT^A08', 'ADT^A40')
  AND direction = 'outbound'
  AND timestamp >= :start_date
  AND timestamp < :end_date
GROUP BY target_system;

Target / Benchmark

Metric Target Rationale
NABIDH/Malaffi Success Rate ≥ 99.5% From module brief; aligns with UAE HIE reliability expectations

Data Source

  • integration_message_log(message_id, message_type, target_system, direction, timestamp, ack_status, patient_id, encounter_id)

Dimensions / Filters

  • Time: day, week, month
  • Target system: NABIDH vs Malaffi
  • Facility
  • Message type (A01, A04, A08, A40)

Visualization

  • Line chart of success rate per HIE over time.
  • Table of failed messages with error codes.

Alert Thresholds

  • Warning: Success rate < 99.5% for any HIE in a day.
  • Critical: Success rate < 98% or > 50 failed messages in 1 hour.
  • Notification recipients:
  • Integration Team / IT
  • HIM Supervisor
  • DOH/DHA liaison (if prolonged issues)

KPI-EHR-011: Patient Portal Adoption Rate

Definition

Percentage of active patients who have an active patient portal account. Supports patient engagement and UAE digital health strategies.

Calculation Formula (SQL example)

Assumptions:

  • Portal users are in users with role mapped to Patient (Portal).
SQL
WITH active_patients AS (
    SELECT DISTINCT e.patient_id
    FROM encounters e
    WHERE e.encounter_start >= (CURRENT_DATE - INTERVAL '12 months')
),
portal_users AS (
    SELECT DISTINCT u.user_id, u.provider_id, ur.role_id
    FROM users u
    JOIN user_roles ur ON ur.user_id = u.user_id
    JOIN roles r ON r.role_id = ur.role_id
    WHERE r.role_name = 'Patient (Portal)'
      AND u.is_active = TRUE
)
SELECT
    COUNT(*) AS active_patients,
    COUNT(
        CASE
            WHEN EXISTS (
                SELECT 1
                FROM portal_users pu
                WHERE pu.provider_id = ap.patient_id
            )
            THEN 1
        END
    ) AS patients_with_portal_account,
    COUNT(
        CASE
            WHEN EXISTS (
                SELECT 1
                FROM portal_users pu
                WHERE pu.provider_id = ap.patient_id
            )
            THEN 1
        END
    ) * 100.0 / COUNT(*) AS portal_adoption_rate_pct
FROM active_patients ap;

Implementation note: For clarity, the schema should explicitly link patient portal users to patients (e.g., users.patient_id instead of overloading provider_id).

Target / Benchmark

Timeframe Target Adoption Rationale
Year 1 ≥ 40% From module brief; realistic ramp-up for UAE facilities
Year 2 ≥ 70% Aligns with digital front-door strategies

Data Source

  • encounters(patient_id, encounter_start)
  • users(user_id, is_active, patient_id or provider_id)
  • roles(role_id, role_name)
  • user_roles(user_id, role_id, facility_id)

Dimensions / Filters

  • Time: quarter, year
  • Facility
  • Age group, nationality (via patients and patient_demographics)
  • Payer (THIQA, Daman, etc.)

Visualization

  • Line chart of adoption over time with Year 1/2 targets.
  • Bar chart by facility.

Alert Thresholds

  • Warning: Adoption growth < 5 percentage points per quarter in first year.
  • Critical: Adoption < 30% at end of Year 1 or < 60% at end of Year 2.
  • Notification recipients:
  • Patient Experience Lead
  • CIO / Digital Health Lead
  • Marketing / Communications (for outreach campaigns)

KPI-EHR-012: Paper Document Scan Backlog

Definition

Number of paper documents pending scanning or indexing for more than 48 hours after receipt. Measures progress toward paperless operations and supports timely availability of external records.

Calculation Formula (SQL example)

Assumptions:

  • Documents awaiting scan/indexing have status='pending_scan'.
  • upload_date or received_date used to measure age.
SQL
SELECT
    COUNT(*) AS documents_pending_scan_gt_48h
FROM patient_documents pd
WHERE pd.status = 'pending_scan'
  AND pd.upload_date <= (CURRENT_TIMESTAMP - INTERVAL '48 hours');

Target / Benchmark

Metric Target Rationale
Pending Scan > 48h (count) 0 From module brief; supports paperless transformation and accreditation

Data Source

  • patient_documents(document_id, patient_id, encounter_id, document_type, status, upload_date)
  • audit_log for detailed workflow timestamps (scan started, indexed, etc.)

Dimensions / Filters

  • Time: daily snapshot
  • Facility, department
  • Document type (referral, consent, external report)

Visualization

  • Daily bar showing count of >48h backlog.
  • Table listing pending items with patient, document type, age.

Alert Thresholds

  • Warning: > 10 documents pending > 48h in any facility.
  • Critical: Any document pending > 5 days; backlog trend increasing for 3 consecutive days.
  • Notification recipients:
  • Medical Records Officer
  • HIM Supervisor
  • Department Managers (for high-backlog areas)

Standard Reports

Report ID Report Name Purpose Audience Frequency Format
RPT-EHR-001 Registration Quality & Efficiency Dashboard Monitor registration completion rate and average registration time by facility/desk. Registration Supervisors, HIM Real-time / Daily Interactive dashboard + CSV export
RPT-EHR-002 MPI Duplicate Management Report Track duplicate detection rate, unresolved suspects, and resolution times. HIM Supervisor, Medical Records Officer Weekly / Monthly PDF + Excel
RPT-EHR-003 Allergy & Problem List Completeness Report Monitor allergy documentation and problem list currency by department/provider. CMO, Department Chairs, Clinical Informatics Monthly Dashboard + Excel
RPT-EHR-004 Clinical Documentation Timeliness Report Track clinical note completion within 24h and list overdue notes. Department Chairs, HIM, Quality Weekly / Monthly Dashboard + PDF
RPT-EHR-005 Consent Compliance & PDPL Audit Report Demonstrate consent compliance for UAE PDPL and DOH/DHA inspections. Privacy Officer, Compliance, HIM Monthly / On-demand PDF (signed) + CSV
RPT-EHR-006 Privacy & BTG Access Audit Review BTG events, high-risk access patterns, and user-level summaries. Privacy Officer, IT Security Monthly PDF + CSV
RPT-EHR-007 HIE Integration Reliability (NABIDH/Malaffi) Monitor ADT submission success and failed messages by error type. Integration Team, HIM, CIO Daily / Monthly Dashboard + Excel
RPT-EHR-008 Patient Portal Adoption & Engagement Track portal sign-ups and usage by facility, age group, payer. CIO, Patient Experience, Marketing Monthly / Quarterly Dashboard + PDF
RPT-EHR-009 Paperless Transformation & Scan Backlog Monitor document scan backlog and paper vs digital document ratios. HIM, Operations, Quality Weekly Dashboard + Excel
RPT-EHR-010 Master Data Governance Status Overview of key master data sets (nationality, document types, consent templates) and update history. System Admin, HIM, Compliance Quarterly PDF + CSV

Dashboard Wireframe

EHR Management Dashboard (HTML Wireframe)

Show HTML code
HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>EHR & Patient Management Dashboard</title>
  <style>
    body { font-family: Arial, sans-serif; margin: 0; padding: 0; background:#f5f6f8; }
    header { background:#004b8d; color:#fff; padding:12px 20px; }
    h1 { margin:0; font-size:20px; }
    .filters { background:#fff; padding:10px 20px; border-bottom:1px solid #ddd; display:flex; gap:15px; align-items:center; }
    .filters label { font-size:12px; color:#555; display:block; }
    .filters select, .filters input { font-size:12px; padding:4px 6px; }
    .container { padding:15px 20px; }
    .kpi-row { display:flex; flex-wrap:wrap; gap:10px; margin-bottom:15px; }
    .kpi-card { background:#fff; border-radius:4px; padding:10px; flex:1 1 180px; min-width:180px; box-shadow:0 1px 2px rgba(0,0,0,0.08); }
    .kpi-title { font-size:12px; color:#666; margin-bottom:4px; }
    .kpi-value { font-size:20px; font-weight:bold; }
    .kpi-sub { font-size:11px; color:#888; }
    .kpi-good { color:#1a7f37; }
    .kpi-warn { color:#c27800; }
    .kpi-bad { color:#b3261e; }
    .grid { display:grid; grid-template-columns:2fr 2fr; gap:15px; margin-bottom:15px; }
    .panel { background:#fff; border-radius:4px; padding:10px; box-shadow:0 1px 2px rgba(0,0,0,0.08); }
    .panel h2 { font-size:14px; margin:0 0 8px 0; border-bottom:1px solid #eee; padding-bottom:4px; }
    .chart-placeholder { border:1px dashed #ccc; height:180px; font-size:11px; color:#999; display:flex; align-items:center; justify-content:center; }
    table { width:100%; border-collapse:collapse; font-size:11px; }
    th, td { border:1px solid #ddd; padding:4px 6px; text-align:left; }
    th { background:#f0f0f0; }
    .scroll { max-height:180px; overflow-y:auto; }
  </style>
</head>
<body>
  <header>
    <h1>EHR & Patient Management – Operational Dashboard</h1>
  </header>

  <div class="filters">
    <div>
      <label for="date-range">Date Range</label>
      <input id="date-range" type="text" value="01 Jan 2026 – 31 Jan 2026">
    </div>
    <div>
      <label for="facility">Facility</label>
      <select id="facility">
        <option>All Facilities</option>
        <option>Dubai General Hospital</option>
        <option>Abu Dhabi Medical Center</option>
      </select>
    </div>
    <div>
      <label for="department">Department</label>
      <select id="department">
        <option>All Departments</option>
        <option>Emergency</option>
        <option>Outpatient Clinics</option>
        <option>Inpatient Wards</option>
      </select>
    </div>
    <div>
      <label for="view">View</label>
      <select id="view">
        <option>Operational</option>
        <option>Privacy & Compliance</option>
        <option>Paperless Transformation</option>
      </select>
    </div>
  </div>

  <div class="container">
    <!-- KPI Cards -->
    <div class="kpi-row">
      <div class="kpi-card">
        <div class="kpi-title">Registration Completion Rate</div>
        <div class="kpi-value kpi-good">99.1%</div>
        <div class="kpi-sub">Target ≥ 98% • Jan 2026</div>
      </div>
      <div class="kpi-card">
        <div class="kpi-title">Avg Registration Time (New)</div>
        <div class="kpi-value kpi-warn">5.8 min</div>
        <div class="kpi-sub">Target ≤ 5 min</div>
      </div>
      <div class="kpi-card">
        <div class="kpi-title">Allergy Documentation Rate</div>
        <div class="kpi-value kpi-good">96.4%</div>
        <div class="kpi-sub">Target ≥ 95%</div>
      </div>
      <div class="kpi-card">
        <div class="kpi-title">Problem List Currency</div>
        <div class="kpi-value kpi-warn">88.7%</div>
        <div class="kpi-sub">Target ≥ 90%</div>
      </div>
      <div class="kpi-card">
        <div class="kpi-title">Clinical Notes Signed &lt; 24h</div>
        <div class="kpi-value kpi-good">91.2%</div>
        <div class="kpi-sub">Target ≥ 90%</div>
      </div>
      <div class="kpi-card">
        <div class="kpi-title">Consent Compliance</div>
        <div class="kpi-value kpi-good">99.6%</div>
        <div class="kpi-sub">Target ≥ 99%</div>
      </div>
      <div class="kpi-card">
        <div class="kpi-title">BTG Access Rate</div>
        <div class="kpi-value kpi-good">0.4%</div>
        <div class="kpi-sub">Target ≤ 1%</div>
      </div>
      <div class="kpi-card">
        <div class="kpi-title">NABIDH/Malaffi Success</div>
        <div class="kpi-value kpi-good">99.8%</div>
        <div class="kpi-sub">Target ≥ 99.5%</div>
      </div>
      <div class="kpi-card">
        <div class="kpi-title">Portal Adoption (Y2)</div>
        <div class="kpi-value kpi-warn">63.5%</div>
        <div class="kpi-sub">Target ≥ 70%</div>
      </div>
      <div class="kpi-card">
        <div class="kpi-title">Scan Backlog &gt; 48h</div>
        <div class="kpi-value kpi-bad">27</div>
        <div class="kpi-sub">Target 0 documents</div>
      </div>
    </div>

    <!-- Charts -->
    <div class="grid">
      <div class="panel">
        <h2>Registration Quality & Time Trend</h2>
        <div class="chart-placeholder">
          Line chart: Registration Completion (%) and Avg Time (min) by week
        </div>
      </div>
      <div class="panel">
        <h2>Allergy & Problem List by Department</h2>
        <div class="chart-placeholder">
          Clustered bar chart: Allergy Documentation & Problem List Currency per department
        </div>
      </div>
      <div class="panel">
        <h2>Clinical Note Completion & Overdue Items</h2>
        <div class="chart-placeholder">
          Stacked bar: Notes completed &lt;24h / 24–72h / &gt;72h by specialty
        </div>
      </div>
      <div class="panel">
        <h2>Privacy & HIE Compliance</h2>
        <div class="chart-placeholder">
          Dual gauge: BTG Rate vs 1% target; HIE Success vs 99.5% target
        </div>
      </div>
    </div>

    <!-- Detailed Tables -->
    <div class="grid">
      <div class="panel">
        <h2>Unresolved Duplicates & Scan Backlog (Top 10)</h2>
        <div class="scroll">
          <table>
            <thead>
              <tr>
                <th>Type</th>
                <th>Patient</th>
                <th>MRN</th>
                <th>Age (days)</th>
                <th>Facility</th>
                <th>Owner</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>Duplicate Suspect</td>
                <td>Ahmed Al-Maktoum</td>
                <td>DXB-0012345</td>
                <td>3</td>
                <td>Dubai General Hospital</td>
                <td>MRO Team</td>
              </tr>
              <tr>
                <td>Pending Scan</td>
                <td>Fatima Al-Nahyan</td>
                <td>AUH-0098765</td>
                <td>5</td>
                <td>Abu Dhabi Medical Center</td>
                <td>HIM – OPD</td>
              </tr>
              <!-- Additional rows populated by application -->
            </tbody>
          </table>
        </div>
      </div>
      <div class="panel">
        <h2>Recent BTG Events (Last 30 Days)</h2>
        <div class="scroll">
          <table>
            <thead>
              <tr>
                <th>Date/Time</th>
                <th>User</th>
                <th>Role</th>
                <th>Patient</th>
                <th>Reason</th>
                <th>Facility</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>03 Feb 2026 14:22</td>
                <td>Dr. Ali Hassan</td>
                <td>Physician</td>
                <td>Salem Al-Falasi</td>
                <td>Emergency – unconscious patient</td>
                <td>Dubai General Hospital</td>
              </tr>
              <!-- Additional rows populated by application -->
            </tbody>
          </table>
        </div>
      </div>
    </div>
  </div>
</body>
</html>

Regulatory Reports

1. MOH / Federal-Level Requirements

Although detailed formats may vary, the HIS must support:

  1. National Health Statistics Extract (Demographics & Encounters)
    - Content:

    • Patient demographics: age, gender, nationality, emirate of residence.
    • Encounter counts by facility, department, encounter type.
    • Source tables: patients, patient_demographics, encounters, facilities, departments.
    • Frequency: Quarterly / Annually (configurable).
    • Format: CSV/Excel with MOH-defined layout; aggregate counts only (no direct identifiers).
    • Privacy: Apply de-identification/pseudonymisation per UAE PDPL where required.
  2. Notifiable Disease & Public Health Surveillance Support
    - While detailed clinical data may come from LIS/RIS, this module must:

    • Provide accurate patient identity and demographics to MOH surveillance systems.
    • Integration: via NABIDH/Malaffi or direct MOH interfaces (outside this document’s scope).

2. DOH (Abu Dhabi) / Malaffi

  1. Malaffi Connectivity & Data Quality Report - KPIs:

    • ADT submission success rate (KPI-EHR-010).
    • Demographic completeness for Malaffi-required fields.
    • Audience: DOH liaison, CIO, HIM.
    • Frequency: Monthly.
    • Format: PDF summary + CSV detail of failed messages.
  2. ADHICS Compliance Evidence (Access & Audit) - Content:

    • BTG rate (KPI-EHR-009).
    • List of BTG events with reason, user, timestamp.
    • Audit sampling of access logs for high-risk roles.
    • Audience: Privacy Officer, IT Security, DOH auditors.
    • Frequency: Quarterly / On-demand.
    • Format: PDF with digital signature; CSV for detailed logs.

3. DHA (Dubai) / NABIDH

  1. NABIDH Interface Performance Report - Similar to Malaffi, focusing on Dubai facilities:

    • ADT success rate.
    • Message volume by type.
    • Frequency: Monthly.
    • Format: Dashboard + CSV.
  2. eClaimLink Support (Demographics & Insurance) - While claims are handled by Billing, this module must:

    • Provide accurate patient demographics and identifiers to RCM.
    • Reporting:
    • Demographic error rates identified by payers (e.g., invalid Emirates ID).
    • Shared with RCM team for data quality improvement.

4. UAE PDPL Compliance Reports

  1. Data Subject Access & Consent Report - Content:

    • Number of PDPL consents granted/withdrawn per period.
    • List of consent withdrawals and downstream impact (e.g., HIE sharing disabled).
    • Source: patient_consents, audit_log.
    • Frequency: Monthly / On-demand.
    • Audience: Privacy Officer, Legal/Compliance.
    • Format: PDF + CSV.
  2. Access Audit & Incident Investigation Support - Content:

    • Full audit trail for specified patient(s) or time period.
    • BTG events, unusual access patterns (e.g., staff accessing VIPs).
    • Source: audit_log, users, roles.
    • Frequency: On-demand.
    • Format: CSV/Excel (for analysis), PDF summary.

5. Accreditation & Quality (NABH/JCI-like, UAE Context)

  1. Medical Record Completeness Report - Combines:
    • Clinical note completion (KPI-EHR-007).
    • Consent compliance (KPI-EHR-008).
    • Allergy documentation (KPI-EHR-005).
    • Audience: Quality & Accreditation teams.
    • Frequency: Monthly.
    • Format: PDF dashboard + Excel detail.

Ad-Hoc Reporting

Available Data Fields (Examples)

The ad-hoc reporting layer should expose a curated semantic model over the underlying tables. Key subject areas:

  1. Patient & Demographics - Patient: patient_id, mrn, emirates_id, first_name_en, last_name_en, date_of_birth, gender, nationality_code, is_active. - Demographics: emirate, city, po_box, mobile_phone, email, preferred_language, marital_status, occupation.

  2. Identifiers & Insurance - Identifiers: identifier_type (MRN, Emirates ID, passport, visa, insurance_member_id), identifier_value, verification_status. - Insurance (via RCM module): payer name, plan, member ID (read-only in this module).

  3. Clinical Summary - Allergies: allergen (code/display), reaction type, severity, status, onset_date. - Problems: ICD-10-AM code, SNOMED code, description, status, onset/resolved dates, treating provider. - Clinical notes: note type, author, status, signed_datetime.

  4. Documents & Consents - Documents: document_type, upload_date, status, retention_date. - Consents: consent_type, status, granted_datetime, expiry_datetime, withdrawal_reason.

  5. Access & Audit - Audit: user, role, patient, action, resource_type, timestamp, is_btg, access_reason, ip_address. - Integration messages: message_type, target_system, ack_status, error_code.

  6. Master Data - Facilities, departments, locations. - Provider specialties, user roles.

Export Formats

  • CSV: Default for data extracts; supports large datasets and import into analytics tools.
  • Excel (XLSX): For business users; includes basic formatting and filters.
  • PDF: For official reports, regulatory submissions, and management summaries.
  • JSON: Optional for technical integrations or API-based analytics.

Scheduled Report Delivery

The reporting engine should support:

  1. Scheduling Options - Frequencies: hourly (for technical), daily, weekly, monthly, quarterly. - Time-of-day configuration per report. - Time zone: Gulf Standard Time (GST, UTC+4).

  2. Delivery Channels - Secure email with link to report (no PHI in email body; links require authentication). - In-application notification center. - Secure SFTP drop for bulk/regulatory extracts.

  3. Access Control - Reports visible only to users with appropriate permissions (e.g., generate_reports, generate_privacy_reports). - Row-level security by facility/department where applicable.

  4. Audit & PDPL Compliance - Log report generation and access in audit_log (who ran which report, when, and with what filters). - For reports containing identifiable data, mark resource_type='report' and include report ID in resource_id.


Shared Entity References

This module owns:

  • patients, patient_demographics, patient_identifiers
  • providers, provider_credentials
  • users, roles, permissions, role_permissions, user_roles
  • facilities, departments, locations
  • patient_allergies, patient_problems, clinical_notes, patient_documents, patient_consents
  • audit_log, duplicate_suspects

It references:

  • encounters from Scheduling (encounters.encounter_id)
  • payers, insurance_plans from Policy & Contract Management

All KPI and reporting queries must respect these ownership and foreign key relationships.

content/clinical/ehr-patient-mgmt/07-kpis-reports.md Generated 2026-02-20 22:54