Nutrition Management KPIs & Reporting
KPI Summary
| KPI ID | KPI Name | Formula (Conceptual) | Target | Data Source | Frequency |
|---|---|---|---|---|---|
| KPI-NUT-001 | Nutrition Screening Compliance | (Admissions with screening ≤24h ÷ Total eligible admissions) × 100 | ≥ 95% | nutrition_screening, encounters |
Daily / M |
| KPI-NUT-002 | Dietitian Referral Response Time | AVG(time from high‑risk screen/referral to first nutrition assessment) | ≤ 24 hours | nutrition_screening, nutrition_assessments, encounters |
Weekly / M |
| KPI-NUT-003 | Meal Satisfaction Score | AVG(meal_service_records.patient_satisfaction_score) |
≥ 4.0 / 5.0 | meal_service_records |
Daily / M |
| KPI-NUT-004 | Tray Accuracy Rate | (Trays with correct items delivered ÷ Total trays delivered) × 100 | ≥ 98% | tray_tickets, meal_service_records |
Daily / M |
| KPI-NUT-005 | Calorie Delivery vs. Target | AVG(calories_delivered ÷ calories_target) × 100 for patients with active nutrition care plans | ≥ 80% | meal_service_records, nutrition_assessments, meal_plans |
Daily / M |
| KPI-NUT-006 | Food Waste Rate | AVG(1 − meal_service_records.consumption_percentage) × 100 |
≤ 25% | meal_service_records |
Daily / M |
| KPI-NUT-007 | Malnutrition Documentation Rate | (Patients with malnutrition coded when indicators present ÷ Patients with malnutrition indicators) × 100 | ≥ 90% | nutrition_assessments, patient_problems (EHR), encounters |
Monthly |
| KPI-NUT-008 | TPN Order Accuracy | (TPN orders without pharmacist modification ÷ Total TPN orders) × 100 | ≥ 90% | enteral_parenteral_orders, pharmacy_interventions (PIS) |
Monthly |
Note: “M” in Frequency = Monthly roll‑up; all KPIs should support real‑time/near real‑time refresh where data latency allows.
KPI Definitions
KPI-NUT-001: Nutrition Screening Compliance
Description
Percentage of eligible inpatient admissions that have a completed nutrition screening (e.g., NRS‑2002, MUST) within 24 hours of admission. This supports DOH/DHA quality standards and international best practice for early malnutrition risk identification.
Calculation Formula
Assumptions:
- Inpatient encounters only (
encounters.encounter_type = 'inpatient'). - Screening within 24 hours of
encounters.admit_datetime. - One encounter counted once in numerator if any screening meets the 24h rule.
-- Daily snapshot example (by admit date)
SELECT
CAST(e.admit_datetime AS DATE) AS admit_date,
COUNT(*) AS total_inpatient_admissions,
COUNT(
CASE
WHEN EXISTS (
SELECT 1
FROM nutrition_screening ns
WHERE ns.encounter_id = e.encounter_id
AND ns.screening_date <= e.admit_datetime + INTERVAL '24 hours'
)
THEN 1
END
) AS admissions_with_screening_24h,
COUNT(
CASE
WHEN EXISTS (
SELECT 1
FROM nutrition_screening ns
WHERE ns.encounter_id = e.encounter_id
AND ns.screening_date <= e.admit_datetime + INTERVAL '24 hours'
)
THEN 1
END
) * 100.0 / NULLIF(COUNT(*), 0) AS screening_compliance_pct
FROM encounters e
WHERE e.encounter_type = 'inpatient'
AND e.admit_datetime >= :start_date
AND e.admit_datetime < :end_date
GROUP BY CAST(e.admit_datetime AS DATE);
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Screening within 24h of admit | ≥ 95% | Internal quality target aligned with DOH/DHA hospital accreditation expectations |
Data Sources
encounters.encounter_id,encounter_type,admit_datetime,facility_id,department_idnutrition_screening.screening_id,encounter_id,screening_date,tool_used,risk_level
Dimensions / Filters
- Time: day, week, month, quarter, year
- Facility (
encounters.facility_id) - Department/ward (
encounters.department_id,locations) - Admission type (elective/emergency)
- Screening tool (
nutrition_screening.tool_used)
Visualization
- Primary: Line chart (monthly compliance trend) with 95% target line.
- Drill‑down: Bar chart by department/ward for a selected month.
- Tabular: List of encounters without screening within 24h for operational follow‑up.
Alert Thresholds
- Warning: Compliance < 95% for any facility or department in a given month.
- Critical: Compliance < 90% for two consecutive months or < 85% in any single month.
- Notifications:
- Chief Dietitian
- Nursing Director / Unit Nurse Managers
- Quality & Patient Safety team
KPI-NUT-002: Dietitian Referral Response Time
Description
Average time between identification of high‑risk patients (via screening or explicit referral) and completion of the first comprehensive nutrition assessment by a dietitian. Measures timeliness of specialist nutrition care.
Calculation Formula
Assumptions:
- High‑risk defined as
nutrition_screening.risk_level IN ('moderate','high')ORnutrition_screening.score >= :high_risk_threshold. - First assessment per encounter used.
- Only high‑risk encounters included in denominator.
WITH high_risk AS (
SELECT
ns.encounter_id,
MIN(ns.screening_date) AS first_high_risk_screen_datetime
FROM nutrition_screening ns
JOIN encounters e ON e.encounter_id = ns.encounter_id
WHERE ns.risk_level IN ('moderate', 'high')
AND ns.screening_date >= :start_date
AND ns.screening_date < :end_date
GROUP BY ns.encounter_id
),
first_assessment AS (
SELECT
na.encounter_id,
MIN(na.assessment_date) AS first_assessment_datetime
FROM nutrition_assessments na
GROUP BY na.encounter_id
)
SELECT
AVG(
EXTRACT(EPOCH FROM (fa.first_assessment_datetime - hr.first_high_risk_screen_datetime))
/ 3600.0
) AS avg_response_time_hours
FROM high_risk hr
JOIN first_assessment fa ON fa.encounter_id = hr.encounter_id
WHERE fa.first_assessment_datetime IS NOT NULL;
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Avg response time (high‑risk) | ≤ 24 hours | Internal target aligned with international nutrition standards |
Data Sources
nutrition_screening.encounter_id,screening_date,risk_level,scorenutrition_assessments.encounter_id,assessment_date,assessed_byencounters.facility_id,department_id
Dimensions / Filters
- Time: week, month, quarter
- Facility
- Department/ward
- Risk level (moderate vs high)
- Assessed_by (dietitian)
Visualization
- Primary: Line chart of average response time (hours) by month.
- Secondary: Box‑and‑whisker plot by department (distribution of response times).
Alert Thresholds
- Warning: Monthly average > 24 hours for any facility.
- Critical: Monthly average > 36 hours or > 24 hours for two consecutive months.
- Notifications:
- Chief Dietitian
- Medical Director / Quality team
KPI-NUT-003: Meal Satisfaction Score
Description
Average patient‑reported satisfaction score for inpatient meals, on a 1–5 scale. Reflects quality, taste, cultural appropriateness (including halal compliance), and service.
Calculation Formula
Assumptions:
- Use only non‑null satisfaction scores.
- Optionally exclude pediatric or ICU if not surveyed.
SELECT
CAST(msr.delivered_datetime AS DATE) AS meal_date,
AVG(msr.patient_satisfaction_score) AS avg_satisfaction_score
FROM meal_service_records msr
JOIN encounters e ON e.encounter_id = msr.encounter_id
WHERE msr.delivered_datetime >= :start_date
AND msr.delivered_datetime < :end_date
AND msr.patient_satisfaction_score IS NOT NULL
GROUP BY CAST(msr.delivered_datetime AS DATE);
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Avg satisfaction score | ≥ 4.0 / 5 | Internal service quality target (UAE private/tertiary norms) |
Data Sources
meal_service_records.service_id,encounter_id,delivered_datetime,meal_type,patient_satisfaction_scoreencounters.facility_id,department_id
Dimensions / Filters
- Time: day, week, month
- Facility
- Department/ward
- Meal type (breakfast, lunch, dinner, snack)
- Diet type (via join to
diet_orders/meal_plans) - Age group (via
patients.date_of_birth)
Visualization
- Primary: Line chart (monthly average satisfaction) per facility.
- Secondary: Stacked bar chart by meal type.
- Detail: Table of low‑scoring meals (≤ 2) with comments (if captured).
Alert Thresholds
- Warning: Monthly average < 4.0 for any facility or department.
- Critical: Monthly average < 3.5 or > 10% of meals with score ≤ 2.
- Notifications:
- Kitchen Manager
- Chief Dietitian
- Patient Experience / Quality team
KPI-NUT-004: Tray Accuracy Rate
Description
Percentage of trays delivered that fully match the patient’s active diet order, allergies, and specified menu items. Critical for patient safety (e.g., food allergies, texture modifications) and service quality.
Calculation Formula
Assumptions:
tray_tickets.status = 'delivered'indicates tray was delivered.- A boolean or derived flag
is_accurateis stored or computed based on reconciliation (diet type, allergens, items).
Example with a stored flag:
SELECT
CAST(tt.delivered_datetime AS DATE) AS meal_date,
COUNT(*) AS total_trays_delivered,
COUNT(CASE WHEN tt.is_accurate = TRUE THEN 1 END) AS accurate_trays,
COUNT(CASE WHEN tt.is_accurate = TRUE THEN 1 END) * 100.0
/ NULLIF(COUNT(*), 0) AS tray_accuracy_pct
FROM tray_tickets tt
JOIN encounters e ON e.encounter_id = tt.encounter_id
WHERE tt.delivered_datetime >= :start_date
AND tt.delivered_datetime < :end_date
AND tt.status = 'delivered'
GROUP BY CAST(tt.delivered_datetime AS DATE);
If is_accurate is not stored, it should be computed in ETL/report logic by comparing:
tray_tickets.diet_typevs activediet_orderstray_tickets.allergen_alertsvsfood_allergen_alertstray_tickets.menu_itemsvsmeal_plans.menu_items_json
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Tray accuracy | ≥ 98% | Internal patient safety target (near‑zero diet errors) |
Data Sources
tray_tickets.ticket_id,encounter_id,patient_id,diet_type,allergen_alerts,menu_items,status,delivered_datetime,is_accurateencounters.facility_id,department_iddiet_orders(for validation logic)food_allergen_alerts(for validation logic)
Dimensions / Filters
- Time: day, week, month
- Facility
- Department/ward
- Meal type (via
meal_plans.meal_typeortray_tickets.meal_typeif present) - Diet type (e.g., diabetic, renal, texture‑modified)
- Allergen presence (with vs without allergens)
Visualization
- Primary: Gauge chart (current month tray accuracy vs 98% target).
- Secondary: Bar chart by department/ward.
- Detail: Table of inaccurate trays with error type (wrong diet, allergen exposure, missing item).
Alert Thresholds
- Warning: Monthly accuracy < 98% for any facility or ward.
- Critical: Any documented allergen‑related tray error OR accuracy < 95%.
- Notifications:
- Chief Dietitian
- Kitchen Manager
- Facility Patient Safety Officer
KPI-NUT-005: Calorie Delivery vs. Target
Description
Average percentage of prescribed caloric intake actually delivered to patients with an active nutrition care plan. Supports monitoring of underfeeding/overfeeding, especially in ICU and high‑risk wards.
Calculation Formula
Assumptions:
- Calorie target per day from
nutrition_assessments.calorie_target. - Calories delivered per meal from
meal_service_records.calories_delivered(recommended field) or derived frommeal_plans.menu_items_json+menu_items.calories×consumption_percentage. - Only encounters with active nutrition care plan included.
Example using pre‑calculated calories_delivered per meal:
-- Daily patient-level percentage
WITH daily_intake AS (
SELECT
msr.encounter_id,
CAST(msr.delivered_datetime AS DATE) AS meal_date,
SUM(msr.calories_delivered) AS total_calories_delivered
FROM meal_service_records msr
WHERE msr.delivered_datetime >= :start_date
AND msr.delivered_datetime < :end_date
GROUP BY msr.encounter_id, CAST(msr.delivered_datetime AS DATE)
),
targets AS (
SELECT
na.encounter_id,
na.calorie_target
FROM nutrition_assessments na
WHERE na.is_active_plan = TRUE
)
SELECT
di.meal_date,
AVG(
di.total_calories_delivered * 100.0
/ NULLIF(t.calorie_target, 0)
) AS avg_calorie_delivery_pct
FROM daily_intake di
JOIN targets t ON t.encounter_id = di.encounter_id
GROUP BY di.meal_date;
If calories_delivered is not stored, ETL should compute it from menu composition and consumption_percentage.
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Calorie delivery vs target | ≥ 80% | Internal target; aligns with critical care nutrition guidance |
Data Sources
nutrition_assessments.encounter_id,assessment_date,calorie_target,is_active_planmeal_service_records.encounter_id,delivered_datetime,calories_delivered,consumption_percentagemeal_plans.menu_items_json,menu_items.calories(if derived)
Dimensions / Filters
- Time: day, week, month
- Facility
- Department/ward (especially ICU, oncology)
- Nutrition route (oral vs EN vs TPN; via
enteral_parenteral_orders.nutrition_type) - Risk level (from
nutrition_assessments.malnutrition_risk)
Visualization
- Primary: Line chart of average % calories delivered vs target over time.
- Secondary: Box plot by ward (distribution of % delivered).
- Detail: Table of patients with < 60% delivery for 2+ consecutive days.
Alert Thresholds
- Warning: Unit‑level average < 80% for 3 consecutive days.
- Critical: Any high‑risk patient (< 60% for 2 consecutive days).
- Notifications:
- Assigned Dietitian
- Ward Charge Nurse
- Chief Dietitian (for unit‑level trends)
KPI-NUT-006: Food Waste Rate
Description
Average proportion of food wasted (not consumed) per meal, expressed as a percentage of food served. Supports cost control and sustainability initiatives, and is often linked to patient satisfaction and menu design.
Calculation Formula
Assumptions:
meal_service_records.consumption_percentagestored as decimal between 0 and 1 (e.g., 0.75 = 75% consumed).- Waste per meal = 1 −
consumption_percentage.
SELECT
CAST(msr.delivered_datetime AS DATE) AS meal_date,
AVG((1.0 - msr.consumption_percentage) * 100.0) AS avg_food_waste_pct
FROM meal_service_records msr
WHERE msr.delivered_datetime >= :start_date
AND msr.delivered_datetime < :end_date
AND msr.consumption_percentage IS NOT NULL
GROUP BY CAST(msr.delivered_datetime AS DATE);
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Food waste rate | ≤ 25% | Internal operational target (UAE private sector norms) |
Data Sources
meal_service_records.service_id,encounter_id,delivered_datetime,meal_type,consumption_percentagemeal_plans.diet_order_id,meal_type(for diet‑level analysis)menu_items(for item‑level waste analysis viamenu_items_json)
Dimensions / Filters
- Time: day, week, month
- Facility
- Department/ward
- Meal type
- Diet type
- Menu item / category (e.g., main dish vs side vs dessert)
Visualization
- Primary: Line chart of average waste % over time.
- Secondary: Heatmap (meal type vs ward).
- Detail: Bar chart of top 10 most wasted menu items.
Alert Thresholds
- Warning: Monthly average > 25% for any facility.
- Critical: Monthly average > 35% or any ward > 40%.
- Notifications:
- Kitchen Manager
- Chief Dietitian
- Finance / Operations (for sustained high waste)
KPI-NUT-007: Malnutrition Documentation Rate
Description
Percentage of patients with clinical indicators of malnutrition (per nutrition assessment) who have a corresponding coded diagnosis (ICD‑10‑AM) in the problem list. This affects quality of care, risk adjustment, and reimbursement.
Calculation Formula
Assumptions:
- Malnutrition indicators present if
nutrition_assessments.malnutrition_risk IN ('moderate','high')OR specific fields/criteria. - Malnutrition coded if
patient_problems.icd10_am_codein malnutrition code set (e.g., E40–E46). - One encounter counted once in numerator/denominator.
WITH malnutrition_indicators AS (
SELECT DISTINCT
na.encounter_id,
na.patient_id
FROM nutrition_assessments na
WHERE na.assessment_date >= :start_date
AND na.assessment_date < :end_date
AND na.malnutrition_risk IN ('moderate', 'high')
),
malnutrition_coded AS (
SELECT DISTINCT
pp.encounter_id,
pp.patient_id
FROM patient_problems pp
WHERE pp.icd10_am_code BETWEEN 'E40' AND 'E46' -- example range
AND pp.status IN ('active', 'resolved')
)
SELECT
COUNT(*) AS patients_with_malnutrition_indicators,
COUNT(
CASE
WHEN EXISTS (
SELECT 1
FROM malnutrition_coded mc
WHERE mc.encounter_id = mi.encounter_id
AND mc.patient_id = mi.patient_id
)
THEN 1
END
) AS patients_with_malnutrition_coded,
COUNT(
CASE
WHEN EXISTS (
SELECT 1
FROM malnutrition_coded mc
WHERE mc.encounter_id = mi.encounter_id
AND mc.patient_id = mi.patient_id
)
THEN 1
END
) * 100.0 / NULLIF(COUNT(*), 0) AS documentation_rate_pct
FROM malnutrition_indicators mi;
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| Malnutrition documentation | ≥ 90% | Internal target; supports DOH/DHA coding quality audits |
Data Sources
nutrition_assessments.encounter_id,patient_id,assessment_date,malnutrition_riskpatient_problems.encounter_id,patient_id,icd10_am_code,statusencounters.facility_id,department_id
Dimensions / Filters
- Time: month, quarter, year
- Facility
- Department/ward
- Age group (adult vs pediatric)
- Risk level (moderate vs high)
Visualization
- Primary: Bar chart (documentation rate by facility).
- Secondary: Line chart over time for overall rate.
- Detail: List of encounters with indicators but no malnutrition code.
Alert Thresholds
- Warning: Documentation rate < 90% for any facility in a quarter.
- Critical: Documentation rate < 80% or downward trend for 2+ quarters.
- Notifications:
- Chief Dietitian
- Coding / HIM Manager
- Quality & Clinical Documentation Improvement (CDI) team
KPI-NUT-008: TPN Order Accuracy
Description
Percentage of TPN (Total Parenteral Nutrition) orders that do not require pharmacist modification or clarification before compounding. Indicates quality of EN/TPN prescribing and dietitian‑physician collaboration.
Calculation Formula
Assumptions:
- TPN orders identified via
enteral_parenteral_orders.nutrition_type = 'TPN'. - Pharmacist modification recorded in
pharmacy_interventionswithintervention_type = 'tpn_order_change'or similar. - Denominator: all TPN orders in period.
- Numerator: TPN orders with no associated pharmacist modification.
WITH tpn_orders AS (
SELECT
epo.order_id,
epo.patient_id,
epo.encounter_id,
epo.order_datetime
FROM enteral_parenteral_orders epo
WHERE epo.nutrition_type = 'TPN'
AND epo.order_datetime >= :start_date
AND epo.order_datetime < :end_date
),
tpn_with_modification AS (
SELECT DISTINCT
pi.order_id
FROM pharmacy_interventions pi
WHERE pi.order_id IN (SELECT order_id FROM tpn_orders)
AND pi.intervention_type = 'tpn_order_change'
)
SELECT
COUNT(*) AS total_tpn_orders,
COUNT(
CASE
WHEN t.order_id NOT IN (SELECT order_id FROM tpn_with_modification)
THEN 1
END
) AS tpn_orders_without_modification,
COUNT(
CASE
WHEN t.order_id NOT IN (SELECT order_id FROM tpn_with_modification)
THEN 1
END
) * 100.0 / NULLIF(COUNT(*), 0) AS tpn_order_accuracy_pct
FROM tpn_orders t;
Target / Benchmark
| Metric | Target | Source / Rationale |
|---|---|---|
| TPN order accuracy | ≥ 90% | Internal safety/efficiency target |
Data Sources
enteral_parenteral_orders.order_id,patient_id,encounter_id,nutrition_type,order_datetime,calorie_target,protein_targetpharmacy_interventions.order_id,intervention_type,reason_code,created_datetimeencounters.facility_id,department_id(ICU vs non‑ICU)
Dimensions / Filters
- Time: month, quarter
- Facility
- Department/ward (ICU, NICU, oncology)
- Ordering provider
- Dietitian involvement (flag if dietitian co‑signed)
Visualization
- Primary: Gauge chart (accuracy % vs 90% target).
- Secondary: Bar chart by department or provider.
- Detail: Table of modified TPN orders with reasons.
Alert Thresholds
- Warning: Accuracy < 90% for any facility or ICU.
- Critical: Accuracy < 80% or any serious safety‑related modification (e.g., 2× dose).
- Notifications:
- Pharmacy Manager
- Chief Dietitian
- ICU Director / relevant department head
Standard Reports
| Report ID | Report Name | Purpose | Audience | Frequency | Format |
|---|---|---|---|---|---|
| RPT-NUT-001 | Nutrition Quality KPI Dashboard | Consolidated view of all core nutrition KPIs (KPI‑NUT‑001 to 008) | Chief Dietitian, Quality, CMO | Real‑time / Daily | Interactive dashboard (HTML) |
| RPT-NUT-002 | Nutrition Screening Compliance by Ward | Monitor screening within 24h by ward/facility | Nursing Managers, Dietitians | Weekly / Monthly | Dashboard + Excel export |
| RPT-NUT-003 | Dietitian Workload & Response Time | Track assessments, referrals, and response times per dietitian | Chief Dietitian, HR Planning | Monthly | PDF + Excel |
| RPT-NUT-004 | Meal Satisfaction & Complaints Analysis | Correlate satisfaction scores with complaints and menu items | Kitchen Manager, Patient Experience | Monthly | Dashboard + PDF |
| RPT-NUT-005 | Tray Accuracy & Diet Error Incidents | Monitor tray accuracy and diet‑related safety incidents | Chief Dietitian, Patient Safety | Monthly | PDF (for safety committee) |
| RPT-NUT-006 | Food Waste & Cost Impact | Quantify food waste by ward/meal/menu item and estimate cost | Kitchen Manager, Finance, Operations | Monthly / Quarterly | Excel + Dashboard |
| RPT-NUT-007 | Malnutrition Coding & Case Mix Impact | Compare malnutrition indicators vs coded diagnoses and impact on case mix index | HIM/Coding, Finance, Quality | Quarterly | PDF + Excel |
| RPT-NUT-008 | EN/TPN Utilisation & TPN Order Accuracy | Track EN/TPN usage, TPN order accuracy, and pharmacist interventions | Pharmacy, Dietitians, ICU Leadership | Monthly | Dashboard + PDF |
| RPT-NUT-009 | Religious & Cultural Diet Accommodation | Monitor use of halal, vegetarian, diabetic, and other special diets | Chief Dietitian, Cultural Liaison | Quarterly | Dashboard + Excel |
| RPT-NUT-010 | Regulatory Nutrition Quality Summary (UAE) | Aggregate indicators required for DOH/DHA/MOH quality submissions | Quality Department, Compliance | Quarterly / Annual | PDF (signed) + Excel |
Dashboard Wireframe
Below is an HTML wireframe mockup for the Nutrition Analytics Dashboard (corresponding to screen SCR-NUT-008).
Show HTML code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Nutrition Analytics Dashboard</title>
</head>
<body style="font-family: Arial, sans-serif; margin: 0; padding: 0; background:#f5f5f5;">
<!-- Header & Filters -->
<div style="background:#004b8d; color:#fff; padding:16px 24px;">
<h1 style="margin:0; font-size:20px;">Nutrition Analytics 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 Medical Center</option>
</select>
<span>Department:</span>
<select style="margin-right:8px;">
<option>All</option>
<option>ICU</option>
<option>Medical Ward</option>
<option>Surgical Ward</option>
</select>
<span>Period:</span>
<select style="margin-right:8px;">
<option>Last 30 days</option>
<option>Last 90 days</option>
<option>Year to Date</option>
</select>
<button style="padding:4px 10px; font-size:12px;">Apply</button>
</div>
</div>
<!-- KPI Cards -->
<div style="display:flex; flex-wrap:wrap; padding:16px; gap:12px;">
<div style="flex:1 1 22%; background:#fff; padding:12px; border-radius:4px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:11px; color:#666;">Screening Compliance (24h)</div>
<div style="font-size:22px; font-weight:bold; color:#2e7d32;">96.4%</div>
<div style="font-size:10px; color:#999;">Target ≥ 95% • ▲ 1.2% vs last month</div>
</div>
<div style="flex:1 1 22%; background:#fff; padding:12px; border-radius:4px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:11px; color:#666;">Dietitian Response Time</div>
<div style="font-size:22px; font-weight:bold; color:#f9a825;">21.3 h</div>
<div style="font-size:10px; color:#999;">Target ≤ 24h • ▼ 2.5h vs last month</div>
</div>
<div style="flex:1 1 22%; background:#fff; padding:12px; border-radius:4px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:11px; color:#666;">Meal Satisfaction</div>
<div style="font-size:22px; font-weight:bold; color:#2e7d32;">4.2 / 5</div>
<div style="font-size:10px; color:#999;">Target ≥ 4.0 • ▲ 0.1 vs last month</div>
</div>
<div style="flex:1 1 22%; background:#fff; padding:12px; border-radius:4px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="font-size:11px; color:#666;">Tray Accuracy</div>
<div style="font-size:22px; font-weight:bold; color:#c62828;">97.1%</div>
<div style="font-size:10px; color:#999;">Target ≥ 98% • ▼ 0.6% vs last month</div>
</div>
</div>
<!-- Charts Row 1 -->
<div style="display:flex; flex-wrap:wrap; padding:0 16px 16px 16px; gap:12px;">
<div style="flex:1 1 60%; background:#fff; padding:12px; border-radius:4px; box-shadow:0 1px 3px rgba(0,0,0,0.1); min-height:220px;">
<div style="font-size:12px; font-weight:bold; margin-bottom:4px;">Screening Compliance & Response Time (Trend)</div>
<div style="font-size:11px; color:#777; margin-bottom:8px;">Line chart: monthly screening compliance (%) and average response time (hours).</div>
<div style="border:1px dashed #ccc; height:160px; text-align:center; font-size:11px; color:#bbb; padding-top:70px;">
[Line chart placeholder]
</div>
</div>
<div style="flex:1 1 38%; background:#fff; padding:12px; border-radius:4px; box-shadow:0 1px 3px rgba(0,0,0,0.1); min-height:220px;">
<div style="font-size:12px; font-weight:bold; margin-bottom:4px;">Meal Satisfaction by Ward</div>
<div style="font-size:11px; color:#777; margin-bottom:8px;">Bar chart: average satisfaction score by ward.</div>
<div style="border:1px dashed #ccc; height:160px; text-align:center; font-size:11px; color:#bbb; padding-top:70px;">
[Bar chart placeholder]
</div>
</div>
</div>
<!-- Charts Row 2 -->
<div style="display:flex; flex-wrap:wrap; padding:0 16px 16px 16px; gap:12px;">
<div style="flex:1 1 48%; background:#fff; padding:12px; border-radius:4px; box-shadow:0 1px 3px rgba(0,0,0,0.1); min-height:220px;">
<div style="font-size:12px; font-weight:bold; margin-bottom:4px;">Calorie Delivery vs Target</div>
<div style="font-size:11px; color:#777; margin-bottom:8px;">Box plot or line chart by ward, showing % of target calories delivered.</div>
<div style="border:1px dashed #ccc; height:160px; text-align:center; font-size:11px; color:#bbb; padding-top:70px;">
[Box/line chart placeholder]
</div>
</div>
<div style="flex:1 1 48%; background:#fff; padding:12px; border-radius:4px; box-shadow:0 1px 3px rgba(0,0,0,0.1); min-height:220px;">
<div style="font-size:12px; font-weight:bold; margin-bottom:4px;">Food Waste & Tray Accuracy</div>
<div style="font-size:11px; color:#777; margin-bottom:8px;">Dual‑axis chart: waste % and tray accuracy % over time.</div>
<div style="border:1px dashed #ccc; height:160px; text-align:center; font-size:11px; color:#bbb; padding-top:70px;">
[Dual‑axis chart placeholder]
</div>
</div>
</div>
<!-- Detail Table -->
<div style="padding:0 16px 16px 16px;">
<div style="background:#fff; padding:12px; border-radius:4px; box-shadow:0 1px 3px rgba(0,0,0,0.1);">
<div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:8px;">
<div style="font-size:12px; font-weight:bold;">Patients Requiring Attention</div>
<div>
<button style="font-size:11px; padding:3px 8px; margin-right:4px;">Export CSV</button>
<button style="font-size:11px; padding:3px 8px;">Export Excel</button>
</div>
</div>
<table style="width:100%; border-collapse:collapse; font-size:11px;">
<thead>
<tr style="background:#f0f0f0;">
<th style="border:1px solid #ddd; padding:4px;">MRN</th>
<th style="border:1px solid #ddd; padding:4px;">Patient Name</th>
<th style="border:1px solid #ddd; padding:4px;">Ward</th>
<th style="border:1px solid #ddd; padding:4px;">Risk</th>
<th style="border:1px solid #ddd; padding:4px;">Calorie Delivery</th>
<th style="border:1px solid #ddd; padding:4px;">Last Assessment</th>
<th style="border:1px solid #ddd; padding:4px;">Flag</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #eee; padding:4px;">00012345</td>
<td style="border:1px solid #eee; padding:4px;">Ahmed Al-Maktoum</td>
<td style="border:1px solid #eee; padding:4px;">ICU</td>
<td style="border:1px solid #eee; padding:4px;">High</td>
<td style="border:1px solid #eee; padding:4px; color:#c62828;">54%</td>
<td style="border:1px solid #eee; padding:4px;">2026-02-06 10:30</td>
<td style="border:1px solid #eee; padding:4px; color:#c62828;">Low intake 2 days</td>
</tr>
<tr>
<td style="border:1px solid #eee; padding:4px;">00067890</td>
<td style="border:1px solid #eee; padding:4px;">Fatima Al-Nahyan</td>
<td style="border:1px solid #eee; padding:4px;">Medical Ward</td>
<td style="border:1px solid #eee; padding:4px;">Moderate</td>
<td style="border:1px solid #eee; padding:4px; color:#f9a825;">68%</td>
<td style="border:1px solid #eee; padding:4px;">2026-02-05 15:10</td>
<td style="border:1px solid #eee; padding:4px; color:#f9a825;">Reassess</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
Regulatory Reports
All reporting must align with UAE regulations and local health authority requirements. The nutrition module should support generation of the following regulatory‑oriented outputs.
1. MOH (Federal) – Nutrition & Quality Indicators
While MOH does not currently mandate a standard national nutrition dataset, hospitals are expected to support federal quality and public health initiatives.
Required capabilities:
- Malnutrition Prevalence Summary
- Aggregated counts and rates of moderate/high malnutrition risk by age group and facility.
- Fields: facility, period, total inpatients, patients screened, high‑risk patients, malnutrition coded (ICD‑10‑AM).
-
Export: CSV/PDF for MOH quality submissions on request.
-
Parenteral Nutrition Utilisation
- Volume of TPN use, average duration, and complication flags (if captured).
- Supports MOH medication and high‑risk therapy monitoring.
2. DOH (Abu Dhabi) – Malaffi & Quality Statistics
For Abu Dhabi facilities under DOH:
- DOH Quality Indicators Feed (Nutrition subset)
- Screening within 24h (KPI‑NUT‑001).
- Malnutrition documentation rate (KPI‑NUT‑007).
- EN/TPN utilisation and TPN order accuracy (KPI‑NUT‑008).
-
Output: Structured CSV/Excel or API payload for inclusion in DOH quality submissions.
-
Malaffi Alignment
- Ensure that nutrition‑related diagnoses (ICD‑10‑AM) and procedures (CPT) are correctly coded so they appear in Malaffi clinical summaries.
- Nutrition module must not send data directly to Malaffi but must ensure that EHR‑owned entities (problems, procedures) are complete and accurate.
3. DHA (Dubai) – NABIDH & eClaimLink
For Dubai facilities under DHA:
- NABIDH Compliance Metrics
- Ensure that nutrition‑related diagnoses and procedures are coded and available to the EHR for NABIDH feeds.
-
Nutrition module should support:
- Reporting of malnutrition coding completeness.
- Documentation of EN/TPN procedures using CPT where required.
-
eClaimLink / Claims Support
- Provide accurate nutrition‑related charge capture (dietitian consults, EN/TPN, supplements) to Billing & Claims module.
- Support reconciliation reports:
- Dietitian services documented vs billed.
- EN/TPN orders vs billed items.
4. UAE PDPL (Data Protection) – Audit & Access Reports
Under UAE Federal Decree‑Law No. 45/2021 (PDPL), the system must support:
- Nutrition Data Access Audit Report
- Who accessed or modified nutrition assessments, screening forms, EN/TPN orders, and meal records.
- Fields: user_id, role, patient_id, encounter_id, action (view/update/delete), timestamp, source_ip.
- Filters: date range, facility, user, patient.
-
Export: PDF/CSV for Data Protection Officer and internal audits.
-
Data Subject Request Support
-
Ability to extract all nutrition‑related records for a given patient (screening, assessments, diet orders, EN/TPN orders, meal service records) in a human‑readable format (PDF) and machine‑readable format (JSON/CSV) to support access/portability requests.
-
Breach Investigation Support
- Rapid generation of access logs for specific patients/time windows if a suspected privacy incident involves nutrition data.
5. Internal Compliance & Accreditation
To support UAE accreditation standards (e.g., JCI‑aligned local requirements):
- Nutrition Care Process Compliance Report
- Screening within 24h, high‑risk referral, assessment completion, care plan documentation, and reassessment intervals.
-
Used for internal audits and accreditation surveys.
-
Food Safety & HACCP Support
- While detailed HACCP logs may be in a separate module, the nutrition system should provide:
- Temperature logging compliance summaries (if captured in
kitchen_production_ordersor related tables). - Allergen management reports (from
food_allergen_alertsand tray accuracy data).
- Temperature logging compliance summaries (if captured in
Ad-Hoc Reporting
The nutrition module must expose a rich data model for self‑service analytics and scheduled reporting, while respecting UAE PDPL and role‑based access controls.
Available Data Fields (Examples)
Core nutrition tables (owned by module):
nutrition_screeningscreening_id,patient_id,encounter_id,screened_by,screening_date,tool_used,score,risk_level,referred_to_dietitiannutrition_assessmentsassessment_id,patient_id,encounter_id,assessed_by,assessment_date,bmi,weight_kg,height_cm,ideal_body_weight,calorie_target,protein_target,malnutrition_risk,findings,care_plan_text,is_active_plandiet_ordersorder_id,patient_id,encounter_id,ordering_provider_id,diet_type_id,texture_modification,fluid_restriction_ml,supplements,cultural_preference,food_allergens,start_datetime,end_datetime,status,order_datetimemeal_plansplan_id,patient_id,encounter_id,diet_order_id,meal_date,meal_type,menu_items_json,calories_planned,protein_planned,statusmeal_service_recordsservice_id,plan_id,patient_id,encounter_id,meal_type,delivered_datetime,delivered_by,consumption_percentage,calories_delivered,patient_satisfaction_score,notesmenu_itemsitem_id,item_name_en,item_name_ar,category,calories,protein_g,carbs_g,fat_g,fiber_g,sodium_mg,allergens,is_halal,is_vegetarian,is_vegan,texture_suitable_for,is_activemenu_cyclescycle_id,cycle_name,cycle_length_days,facility_id,effective_date,diet_type_id,day_number,meal_type,menu_item_ids,is_activekitchen_production_ordersproduction_id,meal_date,meal_type,facility_id,total_trays,production_items_json,status,completed_datetimetray_ticketsticket_id,production_id,encounter_id,patient_id,bed_location,diet_type,allergen_alerts,menu_items,special_instructions,barcode,status,delivered_datetime,is_accuratefood_allergen_alertsalert_id,patient_id,allergen_type,allergen_detail,source_allergy_id,is_activeenteral_parenteral_ordersorder_id,patient_id,encounter_id,nutrition_type,formula_name,rate_ml_hr,total_volume,calorie_target,protein_target,additives,start_datetime,end_datetime,status,ordered_by,order_datetime
Shared entities (via FK):
patients(fromehr-patient-mgmt): demographics, Emirates ID, age, gender, nationality.encounters(fromscheduling): encounter type, admit/discharge datetimes, facility, department, location.providers/users: role, specialty, department.patient_allergies: allergy type (food vs drug), allergen, severity.
Ad-Hoc Query Capabilities
The reporting layer should allow:
- Drag‑and‑drop selection of fields from the above tables (with enforced joins on FK relationships).
- Pre‑defined subject areas:
- “Nutrition Screening & Assessment”
- “Meal Service & Satisfaction”
- “Kitchen Production & Waste”
- “EN/TPN Orders & Interventions”
- Row‑level security:
- Users only see data for facilities/departments they are authorised for.
- Patient identifiers masked or pseudonymised for non‑clinical roles where appropriate, per UAE PDPL.
Export Formats
For all standard and ad‑hoc reports:
- CSV – for data analysis in BI tools.
- Excel (XLSX) – for operational managers and finance.
- PDF – for management review, regulatory submissions, and audit trails.
- JSON – for system‑to‑system integration or advanced analytics pipelines (internal only).
All exports must:
- Respect PDPL (include only necessary identifiers; support de‑identification options).
- Be logged in an audit trail (who exported, when, which dataset).
Scheduled Report Delivery
The system should support scheduling of reports with:
- Parameters:
- Report ID, filters (facility, department, date range), format.
- Frequency:
- Daily, weekly, monthly, quarterly, yearly, or custom cron‑like schedule.
- Delivery Channels:
- Secure email with link to download (no PHI in email body).
- Internal portal/inbox within HIS.
- Secure SFTP drop for enterprise BI tools.
Governance & Security:
- Only authorised roles (e.g., Chief Dietitian, Quality Manager, Compliance Officer) may schedule or receive reports containing patient‑identifiable data.
- All scheduled runs logged with:
report_id,scheduled_by_user_id,run_timestamp,status,recipient_list.- Retention policies for generated files must follow facility policy and UAE PDPL (e.g., automatic deletion after N days).