Nutrition Management KPIs & Reporting

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.
SQL
-- 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_id
  • nutrition_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') OR nutrition_screening.score >= :high_risk_threshold.
  • First assessment per encounter used.
  • Only high‑risk encounters included in denominator.
SQL
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, score
  • nutrition_assessments.encounter_id, assessment_date, assessed_by
  • encounters.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.
SQL
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_score
  • encounters.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_accurate is stored or computed based on reconciliation (diet type, allergens, items).

Example with a stored flag:

SQL
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_type vs active diet_orders
  • tray_tickets.allergen_alerts vs food_allergen_alerts
  • tray_tickets.menu_items vs meal_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_accurate
  • encounters.facility_id, department_id
  • diet_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_type or tray_tickets.meal_type if 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 from meal_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:

SQL
-- 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_plan
  • meal_service_records.encounter_id, delivered_datetime, calories_delivered, consumption_percentage
  • meal_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_percentage stored as decimal between 0 and 1 (e.g., 0.75 = 75% consumed).
  • Waste per meal = 1 − consumption_percentage.
SQL
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_percentage
  • meal_plans.diet_order_id, meal_type (for diet‑level analysis)
  • menu_items (for item‑level waste analysis via menu_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_code in malnutrition code set (e.g., E40–E46).
  • One encounter counted once in numerator/denominator.
SQL
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_risk
  • patient_problems.encounter_id, patient_id, icd10_am_code, status
  • encounters.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_interventions with intervention_type = 'tpn_order_change' or similar.
  • Denominator: all TPN orders in period.
  • Numerator: TPN orders with no associated pharmacist modification.
SQL
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_target
  • pharmacy_interventions.order_id, intervention_type, reason_code, created_datetime
  • encounters.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
HTML
<!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.

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_orders or related tables).
    • Allergen management reports (from food_allergen_alerts and tray accuracy data).

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_screening
  • screening_id, patient_id, encounter_id, screened_by, screening_date, tool_used, score, risk_level, referred_to_dietitian
  • nutrition_assessments
  • assessment_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_plan
  • diet_orders
  • order_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_datetime
  • meal_plans
  • plan_id, patient_id, encounter_id, diet_order_id, meal_date, meal_type, menu_items_json, calories_planned, protein_planned, status
  • meal_service_records
  • service_id, plan_id, patient_id, encounter_id, meal_type, delivered_datetime, delivered_by, consumption_percentage, calories_delivered, patient_satisfaction_score, notes
  • menu_items
  • item_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_active
  • menu_cycles
  • cycle_id, cycle_name, cycle_length_days, facility_id, effective_date, diet_type_id, day_number, meal_type, menu_item_ids, is_active
  • kitchen_production_orders
  • production_id, meal_date, meal_type, facility_id, total_trays, production_items_json, status, completed_datetime
  • tray_tickets
  • ticket_id, production_id, encounter_id, patient_id, bed_location, diet_type, allergen_alerts, menu_items, special_instructions, barcode, status, delivered_datetime, is_accurate
  • food_allergen_alerts
  • alert_id, patient_id, allergen_type, allergen_detail, source_allergy_id, is_active
  • enteral_parenteral_orders
  • order_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 (from ehr-patient-mgmt): demographics, Emirates ID, age, gender, nationality.
  • encounters (from scheduling): 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).

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