Patient Portal & Mobile App KPIs & Reporting
KPI Summary
| KPI ID | KPI Name | Formula (Conceptual) | Target | Data Source | Frequency |
|---|---|---|---|---|---|
| KPI-PPT-001 | Portal Adoption Rate | Active portal accounts / Active patients × 100 | ≥ 40% (Year 1), ≥ 70% (Year 2) | portal_accounts, patients |
Monthly |
| KPI-PPT-002 | Monthly Active Users (MAU) | Count of distinct accounts with ≥1 login in last 30 days | Growing month-over-month | portal_sessions, portal_accounts |
Monthly |
| KPI-PPT-003 | Online Appointment Booking Rate | Portal-booked appointments / Total appointments × 100 | ≥ 25% | appointments (with source_module = 'patient-portal') |
Monthly |
| KPI-PPT-004 | Secure Message Response Time | Avg(provider first response datetime − patient message datetime) | ≤ 24 hours | portal_messages, providers, departments |
Weekly |
| KPI-PPT-005 | Online Payment Adoption | Portal payments / Total patient payments × 100 | ≥ 30% | patient_payments (with payment_source), patient_invoices |
Monthly |
| KPI-PPT-006 | Pre-Registration Completion via Portal | Portal-completed pre-registrations / Total pre-registrations × 100 | ≥ 50% | patient_submitted_forms, pre_registration_records (external) |
Monthly |
| KPI-PPT-007 | Telehealth Utilization Rate | Telehealth encounters / Total outpatient encounters × 100 | ≥ 10% | telehealth_sessions, encounters |
Monthly |
| KPI-PPT-008 | Patient Satisfaction Score | Average rating from portal feedback (1–5) | ≥ 4.2 / 5.0 | portal_feedback, encounters, telehealth_sessions |
Monthly |
| KPI-PPT-009 | App Store Rating | Average of iOS and Android store ratings | ≥ 4.0 stars | External: App Store Connect, Google Play Console | Monthly |
| KPI-PPT-010 | Result View Rate | Results viewed by patient within 7 days / Total results released to portal × 100 | ≥ 50% | portal_sessions, result_access_logs, lab_results, radiology_reports, patient_accounts |
Monthly |
Note: Table names for shared entities (e.g.,
patients,appointments,encounters,patient_invoices) are owned by other modules as per shared entity rules. This document assumes those names as defined in their respective03-data-specificationsfiles.
KPI Definitions
KPI-PPT-001: Portal Adoption Rate
Definition
Percentage of active patients who have an active, linked portal account. Measures digital engagement and success of portal rollout. Important for DOH/DHA digital health strategies and for maximizing paperless interactions.
Calculation Formula
-- Denominator: active patients in the period
WITH active_patients AS (
SELECT p.patient_id
FROM patients p
WHERE p.is_active = TRUE
AND p.status IN ('active', 'follow_up') -- as defined in patient master
),
-- Numerator: active patients with active portal accounts
patients_with_portal AS (
SELECT DISTINCT pa.patient_id
FROM portal_accounts pa
JOIN active_patients ap ON ap.patient_id = pa.patient_id
WHERE pa.is_active = TRUE
AND pa.activation_status = 'activated'
AND pa.activation_date <= :period_end
)
SELECT
COUNT(*) FILTER (WHERE ap.patient_id IN (SELECT patient_id FROM patients_with_portal))
* 100.0
/ NULLIF(COUNT(*), 0) AS portal_adoption_rate_pct
FROM active_patients ap;
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Portal Adoption Rate | ≥ 40% in Year 1, ≥ 70% in Year 2 | Internal Gates Group target aligned with GCC peers and DOH/DHA digital front-door initiatives |
Data Source
portal_accountsportal_accounts.patient_idportal_accounts.is_activeportal_accounts.activation_statusportal_accounts.activation_datepatientspatients.patient_idpatients.is_activepatients.status
Dimensions / Filters
- Time: month, quarter, year (based on
activation_dateand patient status at period end) - Facility:
patients.facility_id - Department: primary care vs specialty (via
patients.primary_department_idif available) - Payer:
patients.primary_payer_id(e.g., THIQA, Daman, Oman Insurance) - Emirate: via
facilities.emirate
Visualization
- Primary: Line chart (monthly adoption rate trend with target line).
- Secondary: Bar chart by facility and payer.
Alert Thresholds
- Warning: Adoption rate < 60% of year-specific target for 2 consecutive months.
- Critical: Adoption rate < 50% of year-specific target for 3 consecutive months.
- Notifications:
- Portal Administrator
- Chief Medical Officer / Chief Digital Officer
- Facility Operations Manager
KPI-PPT-002: Monthly Active Users (MAU)
Definition
Number of distinct portal accounts that logged in at least once in the last 30 days. Measures ongoing engagement and usability of the portal/mobile app.
Calculation Formula
SELECT
COUNT(DISTINCT ps.account_id) AS monthly_active_users
FROM portal_sessions ps
JOIN portal_accounts pa ON pa.account_id = ps.account_id
WHERE ps.login_datetime >= :period_start
AND ps.login_datetime < :period_end
AND pa.is_active = TRUE
AND pa.activation_status = 'activated';
For a rolling 30-day MAU, set
:period_start = current_date - INTERVAL '30 days'and:period_end = current_date.
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| MAU | Positive MoM growth (≥ 5%) | Internal engagement target for UAE market |
Data Source
portal_sessionsportal_sessions.session_idportal_sessions.account_idportal_sessions.login_datetimeportal_sessions.device_type,device_osportal_accountsportal_accounts.account_idportal_accounts.is_activeportal_accounts.activation_status
Dimensions / Filters
- Time: daily, weekly, monthly (rolling 30 days)
- Facility: via
portal_accounts.patient_id → patients.facility_id - Device type:
portal_sessions.device_type(web, iOS, Android) - Emirate: via facility
- Language:
portal_accounts.language_preference
Visualization
- Line chart: MAU trend over time.
- Stacked bar: MAU by device type or language.
Alert Thresholds
- Warning: MAU decreases > 10% month-over-month.
- Critical: MAU decreases > 20% month-over-month or 2 consecutive months of decline.
- Notifications:
- Portal Administrator
- IT / Digital Engagement Lead
- Marketing / Communications team
KPI-PPT-003: Online Appointment Booking Rate
Definition
Percentage of all appointments that are booked via the patient portal/mobile app. Indicates success of self-service scheduling and reduction in call-centre load.
Calculation Formula
-- Total appointments in period
WITH total_appts AS (
SELECT a.appointment_id
FROM appointments a
WHERE a.scheduled_datetime >= :period_start
AND a.scheduled_datetime < :period_end
AND a.status IN ('scheduled', 'completed')
),
-- Appointments booked via portal
portal_appts AS (
SELECT a.appointment_id
FROM appointments a
WHERE a.scheduled_datetime >= :period_start
AND a.scheduled_datetime < :period_end
AND a.status IN ('scheduled', 'completed')
AND a.source_module = 'patient-portal'
)
SELECT
COUNT(*) * 100.0 / NULLIF((SELECT COUNT(*) FROM total_appts), 0)
AS online_booking_rate_pct
FROM portal_appts;
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Online Appointment Booking Rate | ≥ 25% | Internal target; aligned with GCC benchmarks |
Data Source
appointmentsappointments.appointment_idappointments.scheduled_datetimeappointments.statusappointments.source_module(e.g.,patient-portal,call-centre,walk-in)appointments.facility_idappointments.department_idappointments.provider_idappointments.appointment_type(in-person, telehealth)
Dimensions / Filters
- Time: day, week, month, quarter
- Facility:
appointments.facility_id - Department:
appointments.department_id - Provider:
appointments.provider_id - Appointment type: new vs follow-up, telehealth vs in-person
- Payer: via
encountersorpre_registration_recordsif linked
Visualization
- Line chart: overall online booking rate trend.
- Bar chart: rate by facility/department.
- Pie chart: booking channels (portal vs phone vs in-person).
Alert Thresholds
- Warning: Rate < 20% for 2 consecutive months.
- Critical: Rate < 15% for 3 consecutive months or sharp drop (>10% points) in one month.
- Notifications:
- Portal Administrator
- Scheduling Manager
- Call Centre Supervisor
KPI-PPT-004: Secure Message Response Time
Definition
Average time taken for providers to respond to patient-initiated secure messages. Measures responsiveness and patient experience.
- Only counts threads where the first message in the thread is from a patient and at least one provider response exists.
Calculation Formula
-- Identify patient-initiated threads and first provider response
WITH patient_threads AS (
SELECT
pm.thread_id,
MIN(pm.sent_datetime) AS patient_first_msg_time
FROM portal_messages pm
WHERE pm.sender_type = 'patient'
GROUP BY pm.thread_id
),
provider_first_response AS (
SELECT
pm.thread_id,
MIN(pm.sent_datetime) AS provider_first_response_time
FROM portal_messages pm
WHERE pm.sender_type = 'provider'
GROUP BY pm.thread_id
),
response_pairs AS (
SELECT
pt.thread_id,
pt.patient_first_msg_time,
pr.provider_first_response_time
FROM patient_threads pt
JOIN provider_first_response pr
ON pr.thread_id = pt.thread_id
WHERE pt.patient_first_msg_time >= :period_start
AND pt.patient_first_msg_time < :period_end
AND pr.provider_first_response_time IS NOT NULL
)
SELECT
AVG(EXTRACT(EPOCH FROM (provider_first_response_time - patient_first_msg_time)) / 3600.0)
AS avg_response_time_hours
FROM response_pairs;
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Avg Secure Message Response Time | ≤ 24 hours | Internal SLA; aligned with UAE patient experience goals |
Data Source
portal_messagesportal_messages.message_idportal_messages.thread_idportal_messages.sender_idportal_messages.sender_type('patient'/'provider')portal_messages.recipient_idportal_messages.recipient_typeportal_messages.sent_datetimeportal_messages.read_datetimeportal_messages.is_urgentportal_messages.encounter_idproviders,departments(for stratification)
Dimensions / Filters
- Time: week, month
- Facility: via
providers.facility_id - Department: via
providers.department_id - Provider:
portal_messages.recipient_idwhererecipient_type = 'provider' - Message type: clinical vs administrative (if coded)
- Urgent flag:
is_urgent
Visualization
- Line chart: average response time by week.
- Bar chart: response time by department/provider.
- Gauge: current month average vs 24-hour target.
Alert Thresholds
- Warning: Average response time > 24 hours for any department for 2 consecutive weeks.
- Critical: Average response time > 48 hours overall or > 72 hours for any provider group.
- Notifications:
- Department Heads
- Chief Medical Officer
- Portal Administrator
KPI-PPT-005: Online Payment Adoption
Definition
Percentage of patient payments that are made via the portal/mobile app vs all patient-originated payments. Reflects success of digital billing and supports paperless transformation.
Calculation Formula
-- Total patient payments
WITH total_payments AS (
SELECT pp.payment_id
FROM patient_payments pp
WHERE pp.payment_datetime >= :period_start
AND pp.payment_datetime < :period_end
AND pp.payment_status = 'posted'
),
-- Payments via portal
portal_payments AS (
SELECT pp.payment_id
FROM patient_payments pp
WHERE pp.payment_datetime >= :period_start
AND pp.payment_datetime < :period_end
AND pp.payment_status = 'posted'
AND pp.payment_source = 'patient-portal'
)
SELECT
COUNT(*) * 100.0 / NULLIF((SELECT COUNT(*) FROM total_payments), 0)
AS online_payment_adoption_pct
FROM portal_payments;
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Online Payment Adoption | ≥ 30% | Internal target for UAE private sector peers |
Data Source
patient_payments(billing-claims module)patient_payments.payment_idpatient_payments.invoice_idpatient_payments.payment_datetimepatient_payments.payment_statuspatient_payments.payment_source('patient-portal','cashier','kiosk', etc.)patient_payments.amountpatient_invoicespatient_invoices.invoice_idpatient_invoices.facility_idpatient_invoices.payer_id
Dimensions / Filters
- Time: month, quarter
- Facility:
patient_invoices.facility_id - Payer:
patient_invoices.payer_id - Payment method: card, Apple Pay, bank transfer (if captured)
- Emirate: via facility
Visualization
- Line chart: online payment adoption over time.
- Stacked bar: payment channels by facility.
- Pie chart: payment channels for latest month.
Alert Thresholds
- Warning: Adoption < 25% for 2 consecutive months.
- Critical: Adoption < 20% or sudden drop > 10% points in a month.
- Notifications:
- Revenue Cycle Manager
- Portal Administrator
- Finance Director
KPI-PPT-006: Pre-Registration Completion via Portal
Definition
Percentage of pre-registration records (for upcoming visits) that are completed online via the portal, including demographics, medical history, and consents. Reduces front-desk workload and supports PDPL-compliant digital consent capture.
Calculation Formula
-- Total pre-registrations for the period
WITH total_pre_regs AS (
SELECT pr.pre_registration_id
FROM pre_registration_records pr
WHERE pr.created_datetime >= :period_start
AND pr.created_datetime < :period_end
),
-- Pre-registrations completed via portal
portal_pre_regs AS (
SELECT DISTINCT pr.pre_registration_id
FROM pre_registration_records pr
JOIN patient_submitted_forms psf
ON psf.target_module = 'patient-access'
AND psf.form_type = 'pre_registration'
AND psf.form_external_ref = pr.pre_registration_id -- FK or mapping field
WHERE psf.submitted_datetime >= :period_start
AND psf.submitted_datetime < :period_end
AND psf.processed = TRUE
)
SELECT
COUNT(*) * 100.0 / NULLIF((SELECT COUNT(*) FROM total_pre_regs), 0)
AS pre_registration_via_portal_pct
FROM portal_pre_regs;
Note:
form_external_refis an assumed mapping field betweenpatient_submitted_formsandpre_registration_records(to be defined in data specs).
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Pre-Registration Completion via Portal | ≥ 50% | Internal target; supports paperless front desk |
Data Source
patient_submitted_formspatient_submitted_forms.form_idpatient_submitted_forms.account_idpatient_submitted_forms.patient_idpatient_submitted_forms.form_typepatient_submitted_forms.form_data_jsonpatient_submitted_forms.submitted_datetimepatient_submitted_forms.processedpatient_submitted_forms.target_modulepatient_submitted_forms.form_external_ref(link to pre-registration)pre_registration_records(patient-access module)pre_registration_records.pre_registration_idpre_registration_records.created_datetimepre_registration_records.facility_idpre_registration_records.appointment_id
Dimensions / Filters
- Time: month, quarter
- Facility:
pre_registration_records.facility_id - Department: via
appointments.department_id - Appointment type: new vs follow-up
- Payer: via linked appointment/encounter
Visualization
- Line chart: portal pre-registration rate trend.
- Bar chart: rate by facility/department.
Alert Thresholds
- Warning: Rate < 40% for 2 consecutive months.
- Critical: Rate < 30% or decline > 15% points in a quarter.
- Notifications:
- Registration / Front Desk Manager
- Portal Administrator
- Quality & Patient Experience Lead
KPI-PPT-007: Telehealth Utilization Rate
Definition
Percentage of outpatient encounters conducted via telehealth (video sessions) vs total outpatient encounters. Measures adoption of digital care delivery.
Calculation Formula
-- Total outpatient encounters
WITH total_outpatient AS (
SELECT e.encounter_id
FROM encounters e
WHERE e.encounter_datetime >= :period_start
AND e.encounter_datetime < :period_end
AND e.encounter_type = 'outpatient'
AND e.status IN ('completed', 'in_progress')
),
-- Telehealth encounters (linked to telehealth sessions)
telehealth_encounters AS (
SELECT DISTINCT ts.encounter_id
FROM telehealth_sessions ts
JOIN encounters e ON e.encounter_id = ts.encounter_id
WHERE e.encounter_datetime >= :period_start
AND e.encounter_datetime < :period_end
AND e.encounter_type = 'outpatient'
AND ts.end_datetime IS NOT NULL
)
SELECT
COUNT(*) * 100.0 / NULLIF((SELECT COUNT(*) FROM total_outpatient), 0)
AS telehealth_utilization_rate_pct
FROM telehealth_encounters;
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Telehealth Utilization Rate | ≥ 10% | Internal target; aligned with post-COVID UAE telehealth adoption |
Data Source
telehealth_sessionstelehealth_sessions.session_idtelehealth_sessions.appointment_idtelehealth_sessions.patient_account_idtelehealth_sessions.provider_idtelehealth_sessions.scheduled_datetimetelehealth_sessions.join_datetime_patienttelehealth_sessions.join_datetime_providertelehealth_sessions.end_datetimetelehealth_sessions.duration_minutestelehealth_sessions.connection_qualitytelehealth_sessions.platformtelehealth_sessions.encounter_idencountersencounters.encounter_idencounters.encounter_datetimeencounters.encounter_typeencounters.facility_idencounters.department_idencounters.provider_id
Dimensions / Filters
- Time: week, month, quarter
- Facility:
encounters.facility_id - Department:
encounters.department_id - Provider:
encounters.provider_id - Payer:
encounters.payer_id - Connection quality:
telehealth_sessions.connection_quality
Visualization
- Line chart: telehealth utilization rate over time.
- Bar chart: rate by facility/department.
- Table: telehealth volume and no-show rate.
Alert Thresholds
- Warning: Rate < 8% for 2 consecutive months (where telehealth is offered).
- Critical: Rate < 5% or sudden drop > 50% in a month.
- Notifications:
- Telehealth Program Lead
- Portal Administrator
- Operations Manager
KPI-PPT-008: Patient Satisfaction Score (Portal/Telehealth)
Definition
Average rating (1–5) submitted by patients via the portal feedback mechanism, including visit-specific (e.g., telehealth) and general portal experience.
Calculation Formula
SELECT
AVG(pf.rating) AS avg_patient_satisfaction_score
FROM portal_feedback pf
WHERE pf.submitted_datetime >= :period_start
AND pf.submitted_datetime < :period_end
AND pf.feedback_type IN ('portal_experience', 'telehealth_visit');
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Patient Satisfaction Score | ≥ 4.2/5 | Internal target; aligned with UAE private hospital benchmarks |
Data Source
portal_feedbackportal_feedback.feedback_idportal_feedback.account_idportal_feedback.feedback_type('portal_experience','telehealth_visit', etc.)portal_feedback.encounter_idportal_feedback.rating(1–5)portal_feedback.commentsportal_feedback.submitted_datetimetelehealth_sessions,encountersfor context
Dimensions / Filters
- Time: month, quarter
- Feedback type: portal vs telehealth
- Facility: via linked
encounters.facility_id - Department: via
encounters.department_id - Provider: via
encounters.provider_id - Device type: via
portal_sessions(if linked by session/account)
Visualization
- Gauge: current average satisfaction vs target.
- Line chart: trend over time.
- Bar chart: satisfaction by facility/department.
Alert Thresholds
- Warning: Score < 4.0 for 2 consecutive months.
- Critical: Score < 3.5 or drop ≥ 0.5 points in a quarter.
- Notifications:
- Quality & Patient Experience Lead
- Portal Administrator
- Facility Medical Director
KPI-PPT-009: App Store Rating
Definition
Average public rating of the patient mobile app across iOS (App Store) and Android (Google Play) for the UAE region. Reflects perceived usability and stability.
Calculation Formula
Data is retrieved from external analytics (App Store Connect, Google Play Console) and stored in an internal table, e.g., mobile_app_store_metrics.
SELECT
(ios.avg_rating * ios.rating_weight + android.avg_rating * android.rating_weight)
/ NULLIF((ios.rating_weight + android.rating_weight), 0) AS combined_app_store_rating
FROM (
SELECT
platform,
AVG(rating) AS avg_rating,
COUNT(*) AS rating_weight
FROM mobile_app_store_metrics
WHERE snapshot_date >= :period_start
AND snapshot_date < :period_end
AND region = 'AE'
AND platform = 'iOS'
GROUP BY platform
) ios,
(
SELECT
platform,
AVG(rating) AS avg_rating,
COUNT(*) AS rating_weight
FROM mobile_app_store_metrics
WHERE snapshot_date >= :period_start
AND snapshot_date < :period_end
AND region = 'AE'
AND platform = 'Android'
GROUP BY platform
) android;
If only summary ratings are stored (not individual reviews), use the latest snapshot per platform and average them.
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| App Store Rating | ≥ 4.0 stars | Internal target; competitive UAE apps |
Data Source
mobile_app_store_metrics(internal integration table)mobile_app_store_metrics.platform('iOS','Android')mobile_app_store_metrics.region('AE')mobile_app_store_metrics.snapshot_datemobile_app_store_metrics.ratingmobile_app_store_metrics.review_count(optional)
Dimensions / Filters
- Time: month, quarter
- Platform: iOS vs Android
- Region: UAE (AE) vs others (if multi-region)
Visualization
- Gauge: current combined rating vs target.
- Bar chart: rating by platform.
- Line chart: rating trend over time.
Alert Thresholds
- Warning: Combined rating < 4.0 or any platform < 3.8.
- Critical: Any platform rating < 3.5 or drop ≥ 0.5 points in a quarter.
- Notifications:
- Portal Administrator
- Mobile Development Team Lead
- Marketing / Communications
KPI-PPT-010: Result View Rate
Definition
Percentage of lab and radiology results released to the portal that are viewed by the patient within 7 days of release. Indicates patient engagement with clinical information and effectiveness of notifications.
Calculation Formula
Assumptions:
lab_resultsandradiology_reportshave areleased_to_portal_datetime.- Result views are logged in
result_access_logs(owned by this module or EHR) withresult_typeandresult_id.
-- All results released to portal in period
WITH released_results AS (
SELECT
'lab' AS result_type,
lr.result_id,
lr.patient_id,
lr.released_to_portal_datetime
FROM lab_results lr
WHERE lr.released_to_portal_datetime >= :period_start
AND lr.released_to_portal_datetime < :period_end
UNION ALL
SELECT
'radiology' AS result_type,
rr.report_id AS result_id,
rr.patient_id,
rr.released_to_portal_datetime
FROM radiology_reports rr
WHERE rr.released_to_portal_datetime >= :period_start
AND rr.released_to_portal_datetime < :period_end
),
-- First view within 7 days
views_within_7d AS (
SELECT DISTINCT
rr.result_type,
rr.result_id
FROM released_results rr
JOIN result_access_logs ral
ON ral.result_type = rr.result_type
AND ral.result_id = rr.result_id
WHERE ral.viewed_datetime <= rr.released_to_portal_datetime + INTERVAL '7 days'
)
SELECT
COUNT(*) * 100.0 / NULLIF((SELECT COUNT(*) FROM released_results), 0)
AS result_view_rate_pct
FROM views_within_7d;
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Result View Rate | ≥ 50% | Internal target; aligns with engaged patient populations |
Data Source
lab_results(LIS)lab_results.result_idlab_results.patient_idlab_results.released_to_portal_datetimeradiology_reports(RIS)radiology_reports.report_idradiology_reports.patient_idradiology_reports.released_to_portal_datetimeresult_access_logs(portal/EHR)result_access_logs.log_idresult_access_logs.account_idresult_access_logs.patient_idresult_access_logs.result_type('lab','radiology')result_access_logs.result_idresult_access_logs.viewed_datetimeportal_accounts,patientsfor stratification
Dimensions / Filters
- Time: month, quarter
- Facility: via
patients.facility_id - Department: ordering department (via orders if linked)
- Result type: lab vs radiology
- Test category: e.g., imaging modality, lab panel
- Payer: via
patients.primary_payer_id
Visualization
- Line chart: overall result view rate trend.
- Bar chart: view rate by result type and facility.
- Table: top tests with low view rates.
Alert Thresholds
- Warning: View rate < 45% for 2 consecutive months.
- Critical: View rate < 35% or sustained decline over 3 months.
- Notifications:
- Portal Administrator
- Quality & Patient Experience Lead
- Laboratory and Radiology Department Heads
Standard Reports
| Report ID | Report Name | Purpose | Audience | Frequency | Format |
|---|---|---|---|---|---|
| RPT-PPT-001 | Portal Adoption & MAU Dashboard | Monitor portal adoption, MAU, and engagement across facilities and payers | CDO, Portal Admin, Facility Managers | Real-time / Daily | Interactive dashboard (HTML) |
| RPT-PPT-002 | Online Scheduling & Telehealth Utilization | Track online booking rate and telehealth utilization by facility, department, provider | Scheduling Manager, Telehealth Lead | Weekly / Monthly | Dashboard + Excel export |
| RPT-PPT-003 | Digital Billing & Payment Adoption | Monitor online payment adoption, amounts, and payer mix | Revenue Cycle Manager, Finance Director | Monthly | PDF + Excel |
| RPT-PPT-004 | Secure Messaging SLA Compliance | Monitor secure message volumes and response times vs SLA | Department Heads, CMO, Portal Admin | Weekly | Dashboard + PDF |
| RPT-PPT-005 | Patient Experience & Feedback (Portal/Telehealth) | Analyse satisfaction scores, comments, and trends | Quality & Patient Experience, Medical Director | Monthly | Dashboard + CSV comments |
| RPT-PPT-006 | Pre-Registration & Digital Forms Completion | Track portal-based pre-registration and form completion rates | Registration Manager, Operations | Monthly | Dashboard + Excel |
| RPT-PPT-007 | Result Engagement Report | Monitor result view rates and identify low-engagement areas | Clinical Governance, Lab/Radiology Heads | Monthly | PDF + Dashboard |
| RPT-PPT-008 | Mobile App Performance & Store Ratings | Track app store ratings, crash reports (if integrated), and device usage | IT, Mobile Dev Team, Portal Admin | Monthly | Dashboard |
| RPT-PPT-009 | UAE PDPL Access & Consent Audit | Provide audit trail of patient access, consent acceptance, and data export requests | DPO, Compliance Officer | Quarterly / On-demand | PDF (signed) |
| RPT-PPT-010 | NABIDH/Malaffi Portal Data Access Summary | Summarise patient-initiated data access and sharing relevant to HIE participation | HIE Liaison, Compliance, IT | Quarterly | PDF + CSV |
Dashboard Wireframe
Below is an HTML wireframe mockup for the Portal Management Dashboard used by Portal Administrators and leadership.
Show HTML code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Patient Portal Management Dashboard</title>
</head>
<body style="font-family: Arial, sans-serif; background:#f5f5f5; margin:0; padding:0;">
<header style="background:#004b8d; color:#fff; padding:16px 24px;">
<h1 style="margin:0; font-size:20px;">Patient Portal & Mobile App Dashboard</h1>
<div style="margin-top:8px; font-size:12px;">
<span>Facility:</span>
<select style="margin-right:8px;">
<option>All Facilities</option>
<option>Dubai General Hospital</option>
<option>Abu Dhabi City Hospital</option>
</select>
<span>Period:</span>
<select>
<option>Last 30 days</option>
<option>Last 90 days</option>
<option>Year to Date</option>
</select>
</div>
</header>
<main style="padding:16px 24px;">
<!-- KPI Cards Row 1 -->
<section style="display:flex; flex-wrap:wrap; gap:12px; margin-bottom:16px;">
<div style="flex:1; min-width:200px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:12px; color:#666;">Portal Adoption Rate</div>
<div style="font-size:24px; font-weight:bold;">68.4%</div>
<div style="font-size:11px; color:#0a8a0a;">▲ +4.2% vs last month</div>
</div>
<div style="flex:1; min-width:200px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:12px; color:#666;">Monthly Active Users (MAU)</div>
<div style="font-size:24px; font-weight:bold;">12,845</div>
<div style="font-size:11px; color:#0a8a0a;">▲ +7.1% MoM</div>
</div>
<div style="flex:1; min-width:200px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:12px; color:#666;">Online Booking Rate</div>
<div style="font-size:24px; font-weight:bold;">31.2%</div>
<div style="font-size:11px; color:#e67e22;">▲ +1.0% (Target ≥ 25%)</div>
</div>
<div style="flex:1; min-width:200px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:12px; color:#666;">Online Payment Adoption</div>
<div style="font-size:24px; font-weight:bold;">27.5%</div>
<div style="font-size:11px; color:#c0392b;">▼ -3.0% vs last month</div>
</div>
</section>
<!-- KPI Cards Row 2 -->
<section style="display:flex; flex-wrap:wrap; gap:12px; margin-bottom:16px;">
<div style="flex:1; min-width:200px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:12px; color:#666;">Telehealth Utilization</div>
<div style="font-size:24px; font-weight:bold;">12.1%</div>
<div style="font-size:11px; color:#0a8a0a;">On Target (≥ 10%)</div>
</div>
<div style="flex:1; min-width:200px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:12px; color:#666;">Avg Message Response Time</div>
<div style="font-size:24px; font-weight:bold;">18.4 h</div>
<div style="font-size:11px; color:#0a8a0a;">Within 24h SLA</div>
</div>
<div style="flex:1; min-width:200px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:12px; color:#666;">Patient Satisfaction (Portal)</div>
<div style="font-size:24px; font-weight:bold;">4.3 / 5</div>
<div style="font-size:11px; color:#0a8a0a;">▲ +0.2 vs last quarter</div>
</div>
<div style="flex:1; min-width:200px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:12px; color:#666;">App Store Rating (AE)</div>
<div style="font-size:24px; font-weight:bold;">4.1 ★</div>
<div style="font-size:11px; color:#e67e22;">Near Target (≥ 4.0)</div>
</div>
</section>
<!-- Charts Row -->
<section style="display:flex; flex-wrap:wrap; gap:16px; margin-bottom:16px;">
<div style="flex:2; min-width:320px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<h2 style="margin:0 0 8px 0; font-size:14px;">Portal Adoption & MAU Trend</h2>
<div style="height:200px; border:1px dashed #ccc; text-align:center; line-height:200px; color:#999; font-size:12px;">
Line chart placeholder (Adoption %, MAU over last 12 months)
</div>
</div>
<div style="flex:1; min-width:260px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<h2 style="margin:0 0 8px 0; font-size:14px;">Channel Breakdown</h2>
<div style="height:200px; border:1px dashed #ccc; text-align:center; line-height:200px; color:#999; font-size:12px;">
Pie / bar chart placeholder (Bookings & Payments by channel)
</div>
</div>
</section>
<!-- Lower Row: Tables -->
<section style="display:flex; flex-wrap:wrap; gap:16px;">
<div style="flex:1; min-width:320px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<h2 style="margin:0 0 8px 0; font-size:14px;">Facilities Overview</h2>
<table style="width:100%; border-collapse:collapse; font-size:12px;">
<thead>
<tr>
<th style="border-bottom:1px solid #ddd; text-align:left; padding:4px;">Facility</th>
<th style="border-bottom:1px solid #ddd; text-align:right; padding:4px;">Adoption %</th>
<th style="border-bottom:1px solid #ddd; text-align:right; padding:4px;">Online Booking %</th>
<th style="border-bottom:1px solid #ddd; text-align:right; padding:4px;">Telehealth %</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border-bottom:1px solid #f0f0f0; padding:4px;">Dubai General Hospital</td>
<td style="border-bottom:1px solid #f0f0f0; padding:4px; text-align:right;">72%</td>
<td style="border-bottom:1px solid #f0f0f0; padding:4px; text-align:right;">35%</td>
<td style="border-bottom:1px solid #f0f0f0; padding:4px; text-align:right;">14%</td>
</tr>
<tr>
<td style="border-bottom:1px solid #f0f0f0; padding:4px;">Abu Dhabi City Hospital</td>
<td style="border-bottom:1px solid #f0f0f0; padding:4px; text-align:right;">65%</td>
<td style="border-bottom:1px solid #f0f0f0; padding:4px; text-align:right;">28%</td>
<td style="border-bottom:1px solid #f0f0f0; padding:4px; text-align:right;">10%</td>
</tr>
</tbody>
</table>
</div>
<div style="flex:1; min-width:320px; background:#fff; border-radius:4px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<h2 style="margin:0 0 8px 0; font-size:14px;">Alerts & SLA Breaches</h2>
<ul style="margin:0; padding-left:16px; font-size:12px;">
<li style="margin-bottom:4px; color:#c0392b;">Online payment adoption below target at Abu Dhabi City Hospital (24%).</li>
<li style="margin-bottom:4px; color:#e67e22;">Average message response time in Cardiology: 26h (near SLA).</li>
<li style="margin-bottom:4px; color:#27ae60;">All other KPIs within thresholds.</li>
</ul>
</div>
</section>
</main>
</body>
</html>
Regulatory Reports
All regulatory references are UAE-specific. The patient portal module primarily supports evidence and audit for compliance rather than direct transactional submissions.
1. MOH (Ministry of Health and Prevention)
While MOH does not typically require a dedicated “portal” report, the following data from the portal supports MOH expectations around digital health and patient safety:
- MOH-DIG-001: Patient Access to Health Information Summary
- Content:
- Number of patients with portal access by emirate and facility.
- Volume of lab and radiology results viewed by patients.
- Telehealth encounter counts (where MOH-licensed facilities).
- Source Tables:
portal_accounts,lab_results,radiology_reports,telehealth_sessions,encounters.
- Frequency: Quarterly (on-demand for inspections).
- Format: PDF with summary tables and charts; CSV annex.
2. DOH (Abu Dhabi) – Malaffi & ADHICS
- DOH-ADHICS-LOG-001: Patient Portal Access Audit (Abu Dhabi Facilities)
- Purpose: Demonstrate compliance with ADHICS logging requirements for patient access to EHR data.
- Content:
- Log of portal sessions (
portal_sessions) including timestamp, device type, IP (pseudonymised where required). - Result access logs for Malaffi-related data (if tagged).
- Summary of failed login attempts and lockouts.
- Log of portal sessions (
- Frequency: On-demand; at least annually for internal audit.
-
Format: CSV export with filters by date and facility.
-
DOH-MAL-ENG-001: Patient Engagement with Shared Data (Malaffi)
- Purpose: Internal report to show how often patients view data that originates from Malaffi-connected sources.
- Content:
- Count of results and documents tagged as “from Malaffi” that are viewed in the portal.
- Source:
patient_documentswithsource_system = 'Malaffi'result_access_logs
- Frequency: Quarterly.
3. DHA (Dubai) – NABIDH & eHealth
- DHA-NAB-ENG-001: NABIDH Data Access via Portal
- Purpose: Demonstrate that patients can access NABIDH-shared data and measure engagement.
- Content:
- Number of NABIDH-tagged documents/results released to portal vs viewed.
- Portal adoption rate for Dubai facilities.
- Source:
patient_documentswithsource_system = 'NABIDH'lab_results,radiology_reportswith NABIDH flags (if any)result_access_logs
- Frequency: Quarterly.
4. UAE PDPL (Federal Decree-Law No. 45/2021)
The portal is a key channel for PDPL-compliant transparency and data subject rights.
- PDPL-PORTAL-001: Data Subject Access & Export Log
- Purpose: Evidence of handling data subject access requests (DSAR) via portal.
- Content:
- List of portal-based data exports (e.g., FHIR export, PDF downloads) with:
account_id,patient_id,export_type,requested_datetime,completed_datetime.
- Source:
portal_audit_log(assumed table) or extendedresult_access_logs/document_download_logs.
-
Frequency: On-demand; at least annually for DPO review.
-
PDPL-PORTAL-002: Consent & Terms Acceptance Report
- Purpose: Demonstrate that patients accepted portal terms and PDPL data consent.
- Content:
portal_accounts.account_id,patient_id,consent_version,consent_accepted_datetime,uae_pass_linkedflag.
- Source:
portal_accountspatient_consents(for detailed consent records).
- Frequency: Quarterly.
5. TDRA / NESA Cybersecurity
- CYBER-PORTAL-001: Authentication & Session Security Report
- Purpose: Support TDRA/NESA-aligned cybersecurity audits.
- Content:
- MFA adoption rate (
portal_accounts.mfa_method). - Session statistics (
portal_sessions): average duration, concurrent sessions, failed logins. - UAE Pass usage rate (
portal_accounts.uae_pass_linked).
- MFA adoption rate (
- Frequency: Quarterly.
Ad-Hoc Reporting
Available Data Fields for Custom Queries
The patient portal module exposes the following key fields for ad-hoc analytics (non-exhaustive; see 03-data-specifications for full schema):
- portal_accounts
account_idpatient_id(FK →patients.patient_id)user_id(FK →users.user_id)emailphoneactivation_statusactivation_datelast_loginmfa_methoduae_pass_linkedlanguage_preference-
is_active -
portal_sessions
session_idaccount_idlogin_datetimelogout_datetimedevice_type(web, iOS, Android)device_osip_address-
auth_method(password, biometric, UAE Pass) -
portal_messages
message_idthread_idsender_idsender_type(patient, provider)recipient_idrecipient_typesubjectsent_datetimeread_datetimeis_urgent-
encounter_id -
portal_notifications
notification_idaccount_idnotification_type(appointment, result, billing, message)channel(email, SMS, push)sent_datetimeread_datetime-
status(sent, delivered, failed) -
portal_preferences
preference_idaccount_idnotification_emailnotification_smsnotification_pushlanguagedisplay_theme-
result_release_preference -
telehealth_sessions
session_idappointment_idpatient_account_idprovider_idscheduled_datetimejoin_datetime_patientjoin_datetime_providerend_datetimeduration_minutesconnection_qualityplatform-
encounter_id -
patient_submitted_forms
form_idaccount_idpatient_idform_typeform_data_jsonsubmitted_datetimeprocessedprocessed_bytarget_module-
form_external_ref(if defined) -
portal_feedback
feedback_idaccount_idfeedback_typeencounter_idratingcomments-
submitted_datetime -
proxy_access_grants
grant_idgrantor_patient_idproxy_account_iddependent_patient_idrelationshipaccess_levelgranted_datetimeexpiry_datetimeis_active
All ad-hoc queries must respect UAE PDPL: access restricted by role-based permissions, with audit logging of query execution.
Export Formats
- CSV: For analytics tools (Power BI, Tableau, Excel).
- Excel (XLSX): For operational managers; includes basic formatting and filters.
- PDF: For formal reports, regulatory submissions, and management packs.
- JSON (FHIR-based): For technical integrations where needed (e.g., exporting patient-initiated data access logs).
Exports must:
- Mask or pseudonymise identifiers where required (e.g., for external benchmarking).
- Include header/footer with:
- Facility name
- Report name and ID
- Generation timestamp
- User who generated the report
Scheduled Report Delivery
- Scheduling Options
- Daily, Weekly, Monthly, Quarterly.
-
Custom date ranges for one-off reports.
-
Delivery Channels
- Secure email with link to download (no PHI in email body).
- Internal portal for managers (reports accessible via role-based access).
-
SFTP drop for integration with enterprise data warehouse.
-
Access Control & Audit
- Only users with
view_analyticsor equivalent permission can schedule or access portal analytics. - All scheduled report executions logged with:
user_idreport_id- parameters (date range, facility)
- generation time
-
Logs retained per ADHICS/PDPL retention policies.
-
Paperless Transformation
The reporting capabilities directly support paperless transformation by:
- Eliminating manual tally sheets and Excel trackers for portal usage.
- Providing digital evidence for regulatory audits (MOH, DOH, DHA, PDPL) without printing.
- Enabling leadership to monitor digital engagement and shift resources away from paper-based processes (e.g., front-desk registration, paper statements, phone scheduling).