Nutrition Management Screen Requirements

Nutrition Management Screen Requirements

Screen Inventory

Screen ID Screen Name Primary Actor(s) Workflow(s) Access Level
SCR-NUTRITION-001 Diet Order Entry Physician, Dietitian WF-NUT-001, WF-NUT-005 Ordering providers, Clinical Dietitians
SCR-NUTRITION-002 Patient Dietary Census Dietitian, Diet Technician, Kitchen Manager WF-NUT-001, WF-NUT-003, WF-NUT-006 Nutrition & Kitchen staff
SCR-NUTRITION-003 Nutrition Screening Form Nurse WF-NUT-002 Nursing staff
SCR-NUTRITION-004 Nutrition Assessment Clinical Dietitian WF-NUT-002, WF-NUT-005 Clinical Dietitians, Chief Dietitian
SCR-NUTRITION-005 Menu & Meal Plan Manager Chief Dietitian, Kitchen Manager WF-NUT-001, WF-NUT-003 Dietetics & Kitchen management
SCR-NUTRITION-006 Kitchen Production Dashboard Kitchen Manager, Kitchen Staff WF-NUT-003, WF-NUT-006 Kitchen staff
SCR-NUTRITION-007 Tray Assembly & Delivery Diet Technician, Kitchen Staff, Nursing Assistant WF-NUT-003, WF-NUT-004 Tray line & delivery staff
SCR-NUTRITION-008 Nutrition Analytics Dashboard Chief Dietitian, Quality Officer All workflows (KPIs) Nutrition leadership & quality team

flowchart LR A["Clinical Home / Patient Chart"] --> B["SCR-NUTRITION-001<br>Diet Order Entry"] A --> C["SCR-NUTRITION-003<br>Nutrition Screening Form"] A --> D["SCR-NUTRITION-004<br>Nutrition Assessment"] B --> E["SCR-NUTRITION-002<br>Patient Dietary Census"] C -->|"High/Moderate Risk"| D D --> E F["Nutrition Admin Home"] --> G["SCR-NUTRITION-005<br>Menu & Meal Plan Manager"] F --> H["SCR-NUTRITION-008<br>Nutrition Analytics Dashboard"] I["Kitchen Home"] --> J["SCR-NUTRITION-006<br>Kitchen Production Dashboard"] J --> K["SCR-NUTRITION-007<br>Tray Assembly & Delivery"] E --> J E --> K %% ADT / System-driven L["ADT Events (Scheduling)"] --> E L --> J

Screen Specifications


SCR-NUTRITION-001: Diet Order Entry

Purpose

Electronic entry and modification of inpatient diet orders (oral, enteral, parenteral parameters) with automatic allergen checks, UAE cultural/religious constraints (halal by default), and linkage to meal planning.

Field Specifications

Field Type Required Validation Default Notes
Patient Banner Read-only strip Yes Must have active encounter Standard patient banner (see Common UI Patterns)
Encounter Selector (if multiple) Dropdown Conditional Must select active inpatient encounter Latest inpatient encounter Only shown if >1 active encounter
Current Diet Summary Read-only text No “No active diet order” Shows latest active diet order details
Diet Type Dropdown (searchable) Yes FK → diet_type_definitions.diet_type_id; must be active E.g., Regular, Diabetic, Renal, Low Sodium
Texture Modification Dropdown No Must match IDDSI levels master “Regular” Values from Texture Modification Levels master data
Fluid Restriction (mL/24h) Numeric No Integer ≥ 0; max configurable per facility 0 (no restriction) If >0, flagged on tray tickets
Supplements Multi-select chips No Items must exist in menu_items where category = “Supplement” Oral nutrition supplements, high-protein drinks
Enteral/Parenteral Required? Radio (None/EN/TPN) Yes None If EN/TPN selected, show EN/TPN summary + link to EN/TPN order screen (CPOE/PIS)
Cultural / Religious Preference Multi-select No Values from master (Halal, Vegetarian, Vegan, No Beef, No Pork, etc.) Halal pre-selected (non-editable) Halal enforced for UAE; others optional
Language Preference Radio No IN (Arabic, English, Both) From patient profile Used for printed tray tickets / patient-facing materials
Allergen Display Read-only badges Yes Derived from food_allergen_alerts Highlight severe allergens (e.g., nuts, dairy, gluten)
Special Instructions Textarea No Max 500 chars E.g., “Small frequent meals”, “No spicy food”
Start Date/Time Datetime picker Yes ≥ admission time; cannot be > 7 days in past Now Used for meal plan generation
End Date/Time Datetime picker No > Start Date/Time Optional; if blank, active until changed/discontinued
Ordering Provider Read-only Yes Must be licensed provider Logged-in provider From providers table
Order Status Read-only Yes IN (Draft, Active, On Hold, Discontinued) Draft Updated on submit/sign
Reason for Change Dropdown + text Conditional Required if modifying existing active diet For audit (e.g., “Post-op progression”)
Submit / Sign Button Button Yes Disabled if required fields missing Triggers validation & workflow WF-NUT-001
Cancel Button Button No Returns to previous screen without saving

HTML Wireframe Mockup

Show HTML code
HTML
<div style="font-family: Arial, sans-serif; max-width: 960px; margin: 0 auto; border: 1px solid #ccc; border-radius: 8px; overflow: hidden;">
  <div style="background: #1a73e8; color: white; padding: 12px 20px;">
    <h3 style="margin: 0;">Diet Order Entry</h3>
  </div>

  <!-- Patient Banner -->
  <div style="background:#f5f5f5; padding: 10px 20px; border-bottom:1px solid #ddd; display:flex; justify-content:space-between; font-size: 13px;">
    <div>
      <strong>Ahmed Al-Maktoum</strong> (MRN: 00123456) • Emirates ID: 784-1990-1234567-1
    </div>
    <div>
      Room 502B • Male • 35 yrs • Allergies: <span style="color:#b00020;">Peanuts, Dairy</span>
    </div>
  </div>

  <div style="padding: 20px;">
    <!-- Current Diet Summary -->
    <div style="margin-bottom: 16px; padding: 10px; background:#f0f4f8; border-radius:4px;">
      <strong>Current Diet:</strong> Regular, IDDSI 7 (Regular), No restriction • Started: 07-Feb-2026 08:00
    </div>

    <!-- Form Grid -->
    <div style="display:flex; flex-wrap:wrap; gap:16px;">
      <div style="flex:1 1 260px;">
        <label for="dietType" style="display:block; font-weight:bold; margin-bottom:4px;">Diet Type *</label>
        <select id="dietType" style="width:100%; padding:6px;">
          <option>-- Select Diet Type --</option>
          <option>Regular</option>
          <option>Diabetic (1800 kcal)</option>
          <option>Renal (Low Protein)</option>
        </select>
      </div>

      <div style="flex:1 1 260px;">
        <label for="texture" style="display:block; font-weight:bold; margin-bottom:4px;">Texture Modification</label>
        <select id="texture" style="width:100%; padding:6px;">
          <option>Regular (IDDSI 7)</option>
          <option>Soft &amp; Bite-Sized (IDDSI 6)</option>
          <option>Minced &amp; Moist (IDDSI 5)</option>
          <option>Pureed (IDDSI 4)</option>
        </select>
      </div>

      <div style="flex:1 1 200px;">
        <label for="fluidRestriction" style="display:block; font-weight:bold; margin-bottom:4px;">Fluid Restriction (mL/24h)</label>
        <input id="fluidRestriction" type="number" min="0" style="width:100%; padding:6px;" placeholder="0 = none" />
      </div>
    </div>

    <div style="margin-top:16px; display:flex; flex-wrap:wrap; gap:16px;">
      <div style="flex:2 1 360px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Supplements</label>
        <div style="border:1px solid #ccc; padding:6px; border-radius:4px; min-height:38px;">
          <span style="display:inline-block; padding:2px 6px; margin:2px; background:#e3f2fd; border-radius:12px; font-size:12px;">High Protein Drink</span>
          <span style="display:inline-block; padding:2px 6px; margin:2px; background:#e3f2fd; border-radius:12px; font-size:12px;">Renal Supplement</span>
        </div>
      </div>

      <div style="flex:1 1 220px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Cultural / Religious</label>
        <div>
          <label style="display:block; font-size:13px;"><input type="checkbox" checked disabled /> Halal (required)</label>
          <label style="display:block; font-size:13px;"><input type="checkbox" /> Vegetarian</label>
          <label style="display:block; font-size:13px;"><input type="checkbox" /> No Beef</label>
        </div>
      </div>

      <div style="flex:1 1 220px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Enteral / Parenteral</label>
        <div>
          <label style="display:block; font-size:13px;"><input type="radio" name="npType" checked /> None</label>
          <label style="display:block; font-size:13px;"><input type="radio" name="npType" /> Enteral (EN)</label>
          <label style="display:block; font-size:13px;"><input type="radio" name="npType" /> TPN</label>
        </div>
      </div>
    </div>

    <div style="margin-top:16px;">
      <label style="display:block; font-weight:bold; margin-bottom:4px;">Allergens</label>
      <div>
        <span style="display:inline-block; padding:2px 6px; margin:2px; background:#ffebee; color:#b00020; border-radius:12px; font-size:12px;">Peanuts</span>
        <span style="display:inline-block; padding:2px 6px; margin:2px; background:#ffebee; color:#b00020; border-radius:12px; font-size:12px;">Dairy</span>
      </div>
    </div>

    <div style="margin-top:16px; display:flex; flex-wrap:wrap; gap:16px;">
      <div style="flex:1 1 220px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Start Date/Time *</label>
        <input type="datetime-local" style="width:100%; padding:6px;" />
      </div>
      <div style="flex:1 1 220px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">End Date/Time</label>
        <input type="datetime-local" style="width:100%; padding:6px;" />
      </div>
    </div>

    <div style="margin-top:16px;">
      <label style="display:block; font-weight:bold; margin-bottom:4px;">Special Instructions</label>
      <textarea rows="3" style="width:100%; padding:6px;"></textarea>
    </div>

    <!-- Footer -->
    <div style="margin-top:20px; display:flex; justify-content:flex-end; gap:8px;">
      <button type="button" style="padding:8px 16px; border:1px solid #999; background:#fff; border-radius:4px;">Cancel</button>
      <button type="button" style="padding:8px 16px; border:none; background:#1a73e8; color:#fff; border-radius:4px;">Submit &amp; Sign</button>
    </div>
  </div>
</div>

Validation Messages

Condition Message Severity
No active encounter “An active inpatient encounter is required to place a diet order.” Error
Diet Type not selected “Diet type is required.” Error
Start Date/Time in past beyond allowed window “Start date/time cannot be more than 7 days in the past.” Error
End Date/Time ≤ Start Date/Time “End date/time must be after the start date/time.” Error
Fluid Restriction < 0 “Fluid restriction must be zero or a positive value.” Error
Selected diet conflicts with known food allergen “Selected diet/menu may contain [allergen]. Please choose an alternative or update instructions.” Warning (may be hard stop based on policy)
EN/TPN selected but no corresponding EN/TPN order “Enteral/TPN support selected. Please complete the EN/TPN order in the nutrition support screen.” Warning
Missing Reason for Change when modifying “Reason for change is required when modifying an active diet order.” Error

Actions / Buttons

  • Submit & Sign
  • Validates all required fields.
  • Creates/updates record in diet_orders.
  • Triggers:
    • Meal plan generation (meal_plans).
    • Kitchen production updates (kitchen_production_orders, tray_tickets).
    • Notifications to nursing.
  • Cancel
  • Discards unsaved changes.
  • Returns to previous screen (patient chart or census).
  • Link to EN/TPN Order (if EN/TPN selected)
  • Navigates to EN/TPN ordering workflow (WF-NUT-005 / CPOE integration).

Accessibility (WCAG 2.1 AA)

  • All inputs have <label> elements; required fields indicated with “*” and aria-required="true".
  • Error messages displayed inline and associated via aria-describedby.
  • All allergen warnings announced in an aria-live="assertive" region.
  • Colour-coded badges (e.g., allergens) also include text labels; colour not sole indicator.
  • Fully keyboard navigable; logical tab order; visible focus outline.

Responsive / Mobile

  • On screens < 768px:
  • Layout collapses to single column; patient banner stacks name and demographics.
  • Buttons become full-width with increased height (≥ 44px).
  • Multi-select chips for supplements become vertical list with checkboxes.
  • On tablets used on wards:
  • Larger font size (≥ 14px) and touch-friendly controls.
  • Date/time pickers use native mobile controls where available.

SCR-NUTRITION-002: Patient Dietary Census

Purpose

Real-time view of all inpatients and their diet orders by ward/bed for kitchen planning, tray assembly, and census management.

Field Specifications

Field Type Required Validation Default Notes
Facility Filter Dropdown Yes FK → facilities User’s default facility
Ward/Unit Filter Dropdown No FK → departments / locations All wards
Meal Type Filter Dropdown No IN (Breakfast, Lunch, Dinner, Snack) Current upcoming meal
Date Filter Date picker Yes Valid calendar date Today
Search Patient Text No Min 2 chars Filters by name/MRN/bed
Patient List Table Table Yes See columns below
Export Button Button No Export to CSV/PDF for kitchen use

Patient List Table – Key Columns

Column Description
Bed Bed/room location (e.g., 5E-12B)
Patient Name Full name (Arabic/English as per preference)
MRN Medical record number
Diet Type Current active diet
Texture Texture modification level
Fluid Restriction mL/24h or “None”
Allergens Icons/badges for key allergens
Meal Status Planned / Prepared / Delivered / Cancelled
Special Instructions Truncated text with tooltip for full view

Validation Messages

Condition Message Severity
No facility selected “Please select a facility to view dietary census.” Error
No records for selected filters “No patients found for the selected filters.” Info
ADT data delayed “Census may be delayed due to ADT update latency. Refresh or contact IT if issue persists.” Warning

Actions / Buttons

  • Refresh
  • Reloads census from ADT and diet orders.
  • Export
  • Exports current filtered view for offline reference (no PHI beyond what is necessary; respect UAE PDPL).
  • Open Diet Order
  • Clicking a patient row opens SCR-NUTRITION-001 for that patient.

Accessibility

  • Table uses <th scope="col"> for headers.
  • Row hover not required; selection indicated by border and aria-selected.
  • Filters accessible via keyboard; screen reader labels for all filters.

Responsive / Mobile

  • On small screens, table becomes stacked cards:
  • Each card shows Bed, Name, Diet, Allergens, Meal Status.
  • Horizontal scrolling avoided; vertical scroll only.

SCR-NUTRITION-003: Nutrition Screening Form

Purpose

Nursing interface to complete initial nutrition screening (e.g., NRS-2002, MUST), auto-calculate risk, and trigger dietitian referrals.

Field Specifications

Field Type Required Validation Default Notes
Patient Banner Read-only Yes Active encounter required
Screening Tool Dropdown Yes IN (NRS-2002, MUST, SGA) Facility default From Nutrition Screening Tools master
Screening Date/Time Datetime picker Yes ≤ now; ≥ admission time Now
Screened By Read-only Yes Must be user with nutrition_screening permission Logged-in nurse
Tool-Specific Questions Various Yes Per tool scoring rules E.g., weight loss %, BMI, intake change
Score Read-only numeric Yes Auto-calculated Derived from responses
Risk Level Read-only badge Yes Derived from score Low / Moderate / High
Auto-Refer to Dietitian Checkbox (locked) Conditional Auto-checked if risk ≥ threshold Based on risk Creates referral task
Notes Textarea No Max 500 chars Additional clinical context
Save & Close Button Yes Persists to nutrition_screening
Save & Start Assessment Button No Opens SCR-NUTRITION-004 if user is dietitian

HTML Wireframe Mockup

Show HTML code
HTML
<div style="font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; border: 1px solid #ccc; border-radius: 8px; overflow: hidden;">
  <div style="background: #1a73e8; color: white; padding: 12px 20px;">
    <h3 style="margin: 0;">Nutrition Screening</h3>
  </div>

  <div style="background:#f5f5f5; padding: 10px 20px; border-bottom:1px solid #ddd; font-size: 13px;">
    <strong>Fatima Al-Nahyan</strong> (MRN: 00987654) • Ward 3C • Admitted: 07-Feb-2026 09:15
  </div>

  <div style="padding: 20px;">
    <div style="display:flex; gap:16px; flex-wrap:wrap; margin-bottom:16px;">
      <div style="flex:1 1 220px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Screening Tool *</label>
        <select style="width:100%; padding:6px;">
          <option>NRS-2002</option>
          <option>MUST</option>
          <option>SGA</option>
        </select>
      </div>
      <div style="flex:1 1 220px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Screening Date/Time *</label>
        <input type="datetime-local" style="width:100%; padding:6px;" />
      </div>
    </div>

    <fieldset style="border:1px solid #ddd; padding:12px; border-radius:4px; margin-bottom:16px;">
      <legend style="font-weight:bold;">NRS-2002 Questions</legend>
      <div style="margin-bottom:8px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Impaired nutritional status *</label>
        <select style="width:100%; padding:6px;">
          <option>0 - Normal</option>
          <option>1 - Mild</option>
          <option>2 - Moderate</option>
          <option>3 - Severe</option>
        </select>
      </div>
      <div style="margin-bottom:8px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Severity of disease *</label>
        <select style="width:100%; padding:6px;">
          <option>0 - Normal</option>
          <option>1 - Mild</option>
          <option>2 - Moderate</option>
          <option>3 - Severe</option>
        </select>
      </div>
      <div style="margin-bottom:8px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Age ≥ 70 years</label>
        <label><input type="checkbox" /> Yes</label>
      </div>
    </fieldset>

    <div style="display:flex; gap:16px; flex-wrap:wrap; margin-bottom:16px;">
      <div style="flex:1 1 160px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Score</label>
        <input type="number" readonly value="3" style="width:100%; padding:6px; background:#f5f5f5;" />
      </div>
      <div style="flex:1 1 160px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Risk Level</label>
        <div style="padding:6px 10px; background:#ffebee; color:#b00020; border-radius:4px;">High Risk</div>
      </div>
      <div style="flex:2 1 260px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Dietitian Referral</label>
        <label><input type="checkbox" checked disabled /> Auto-referral created (High risk)</label>
      </div>
    </div>

    <div style="margin-bottom:16px;">
      <label style="display:block; font-weight:bold; margin-bottom:4px;">Notes</label>
      <textarea rows="3" style="width:100%; padding:6px;"></textarea>
    </div>

    <div style="display:flex; justify-content:flex-end; gap:8px;">
      <button type="button" style="padding:8px 16px; border:1px solid #999; background:#fff; border-radius:4px;">Save &amp; Close</button>
      <button type="button" style="padding:8px 16px; border:none; background:#1a73e8; color:#fff; border-radius:4px;">Save &amp; Start Assessment</button>
    </div>
  </div>
</div>

Validation Messages

Condition Message Severity
Required question unanswered “All required screening questions must be completed.” Error
Screening Date/Time > now “Screening date/time cannot be in the future.” Error
Duplicate screening within configured interval “A screening has already been completed within the last [X] hours. Proceed only if clinically indicated.” Warning

Actions / Buttons

  • Save & Close
  • Saves screening to nutrition_screening.
  • Updates KPIs (screening compliance).
  • Save & Start Assessment
  • Same as Save & Close, then opens SCR-NUTRITION-004 (if user has dietitian role).
  • Auto-Referral
  • System creates dietitian task if risk level ≥ configured threshold.

Accessibility

  • Tool questions grouped in <fieldset> with <legend> for screen readers.
  • Score and risk level announced via aria-live="polite" when recalculated.
  • Clear focus order from top to bottom.

Responsive / Mobile

  • Questions stacked vertically.
  • Buttons full-width at bottom on small screens.

SCR-NUTRITION-004: Nutrition Assessment

Purpose

Dietitian interface for comprehensive nutrition assessment, including anthropometrics, lab values, dietary history, malnutrition risk, and care plan with calorie/protein targets.

Field Specifications

Field Type Required Validation Default Notes
Patient Banner Read-only Yes Includes latest weight, BMI if available
Assessment Date/Time Datetime picker Yes ≤ now Now
Assessed By Read-only Yes Must have assess_nutrition permission Logged-in dietitian
Height (cm) Numeric No 50–250 cm
Weight (kg) Numeric Yes 2–300 kg
Weight History Structured inputs No % weight loss over time
BMI Read-only numeric Yes Auto-calculated from height/weight
Lab Values Read-only table No From LIS (albumin, prealbumin, electrolytes, glucose)
Dietary Intake Summary Textarea Yes Max 1000 chars
Malnutrition Risk Dropdown Yes IN (None, At Risk, Moderate, Severe) Derived suggestion from tool Can override with justification
Calorie Target (kcal/day) Numeric Yes 500–6000
Protein Target (g/day) Numeric Yes 10–400
Care Plan Text Textarea Yes Max 2000 chars Interventions, follow-up plan
Reassessment Interval Dropdown No IN (Daily, Every 3 days, Weekly, Other) Facility default
Next Review Date Date picker Conditional Required if interval = Other
Save Draft Button No
Finalize Assessment Button Yes All required fields Locks record, writes to clinical notes

Validation Messages

Condition Message Severity
Weight missing “Current weight is required for nutrition assessment.” Error
Height missing but BMI required “Height is required to calculate BMI.” Error
Calorie/Protein target out of range “Please verify calorie/protein targets; values appear outside typical clinical range.” Warning
Finalize without care plan “Care plan text is required before finalizing assessment.” Error

Actions / Buttons

  • Save Draft
  • Saves partial data to nutrition_assessments with status “Draft”.
  • Finalize Assessment
  • Validates required fields.
  • Sets status “Completed”.
  • Writes summary note to EHR clinical notes (integration INT-NUT-003).
  • Updates KPIs (malnutrition documentation, calorie delivery vs target).

Accessibility

  • Sections separated with headings (e.g., “Anthropometrics”, “Lab Values”, “Care Plan”) for screen reader navigation.
  • Lab table accessible with proper headers.

Responsive / Mobile

  • Multi-section form collapses into accordion panels on small screens.
  • Numeric fields use numeric keypad on mobile.

SCR-NUTRITION-005: Menu & Meal Plan Manager

Purpose

Administrative interface to manage menu items, menu cycles, and preview patient-specific meal plans with nutritional information.

Field Specifications

Field Type Required Validation Default Notes
Menu Cycle Selector Dropdown Yes FK → menu_cycles Active cycle
Day Number Dropdown Yes 1–cycle_length_days 1
Meal Type Dropdown Yes IN (Breakfast, Lunch, Dinner, Snack) Breakfast
Menu Item Library Filter Text + filters No Filter by name, category, halal/vegetarian, allergens
Menu Item List Table Yes From menu_items
Nutritional Info Panel Read-only No Shows calories, macros, allergens
Diet Type Mapping Multi-select Yes At least one diet type Map menu items to diet types
Patient Meal Plan Preview Panel No Shows example patient tray for selected diet

HTML Wireframe Mockup

Show HTML code
HTML
<div style="font-family: Arial, sans-serif; max-width: 1100px; margin: 0 auto; border: 1px solid #ccc; border-radius: 8px; overflow: hidden;">
  <div style="background: #1a73e8; color: white; padding: 12px 20px;">
    <h3 style="margin: 0;">Menu &amp; Meal Plan Manager</h3>
  </div>
  <div style="padding: 16px;">
    <div style="display:flex; flex-wrap:wrap; gap:12px; margin-bottom:12px;">
      <div style="flex:1 1 220px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Menu Cycle</label>
        <select style="width:100%; padding:6px;">
          <option>Winter 4-week Cycle</option>
          <option>Summer 4-week Cycle</option>
        </select>
      </div>
      <div style="flex:0 0 120px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Day</label>
        <select style="width:100%; padding:6px;">
          <option>Day 1</option>
          <option>Day 2</option>
        </select>
      </div>
      <div style="flex:0 0 160px;">
        <label style="display:block; font-weight:bold; margin-bottom:4px;">Meal Type</label>
        <select style="width:100%; padding:6px;">
          <option>Breakfast</option>
          <option>Lunch</option>
          <option>Dinner</option>
        </select>
      </div>
    </div>

    <div style="display:flex; flex-wrap:wrap; gap:16px;">
      <!-- Left: Menu Item Library -->
      <div style="flex:2 1 420px; border:1px solid #ddd; border-radius:4px; padding:8px;">
        <div style="margin-bottom:8px;">
          <input type="text" placeholder="Search menu items..." style="width:100%; padding:6px;" />
        </div>
        <table style="width:100%; border-collapse:collapse; font-size:13px;">
          <thead>
            <tr style="background:#f5f5f5;">
              <th style="border-bottom:1px solid #ddd; text-align:left; padding:4px;">Item</th>
              <th style="border-bottom:1px solid #ddd; text-align:right; padding:4px;">kcal</th>
              <th style="border-bottom:1px solid #ddd; text-align:center; padding:4px;">Halal</th>
              <th style="border-bottom:1px solid #ddd; text-align:center; padding:4px;">Allergens</th>
              <th style="border-bottom:1px solid #ddd; text-align:center; padding:4px;">Add</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td style="padding:4px;">Chicken Harees</td>
              <td style="padding:4px; text-align:right;">450</td>
              <td style="padding:4px; text-align:center;">✓</td>
              <td style="padding:4px; text-align:center;">Gluten</td>
              <td style="padding:4px; text-align:center;"><button style="padding:2px 6px;">+</button></td>
            </tr>
          </tbody>
        </table>
      </div>

      <!-- Right: Nutritional Info & Preview -->
      <div style="flex:1 1 320px; display:flex; flex-direction:column; gap:8px;">
        <div style="border:1px solid #ddd; border-radius:4px; padding:8px;">
          <strong>Nutritional Summary (Meal)</strong>
          <div style="font-size:13px; margin-top:4px;">
            Calories: 650 kcal • Protein: 25 g • Carbs: 80 g • Fat: 20 g
          </div>
        </div>
        <div style="border:1px solid #ddd; border-radius:4px; padding:8px;">
          <strong>Diet Type Mapping</strong>
          <div style="font-size:13px; margin-top:4px;">
            <label><input type="checkbox" checked /> Regular</label><br/>
            <label><input type="checkbox" /> Diabetic</label><br/>
            <label><input type="checkbox" /> Renal</label>
          </div>
        </div>
        <div style="border:1px solid #ddd; border-radius:4px; padding:8px;">
          <strong>Sample Patient Tray</strong>
          <ul style="font-size:13px; padding-left:18px; margin-top:4px;">
            <li>Chicken Harees</li>
            <li>Arabic Bread</li>
            <li>Low-fat Laban</li>
          </ul>
        </div>
      </div>
    </div>

    <div style="margin-top:12px; text-align:right;">
      <button style="padding:8px 16px; border:none; background:#1a73e8; color:#fff; border-radius:4px;">Save Cycle Day</button>
    </div>
  </div>
</div>

Validation Messages

Condition Message Severity
No menu items selected for meal “At least one menu item must be assigned to this meal.” Error
Menu item not halal “All items must be halal-certified for UAE facilities. Please remove non-halal items.” Error
Menu item mapped to incompatible diet “Selected item is not allowed for [diet type] based on diet definition.” Warning

Actions / Buttons

  • Save Cycle Day
  • Persists configuration to menu_cycles.
  • Add Item
  • Adds menu item to selected meal/day/cycle.
  • Remove Item
  • Removes item from meal configuration.

Accessibility

  • Tables with proper headers.
  • Checkboxes labelled clearly for screen readers.
  • Ensure sufficient contrast for nutritional summary text.

Responsive / Mobile

  • Library and preview stack vertically.
  • Table rows become cards with “Add” button prominent.

SCR-NUTRITION-006: Kitchen Production Dashboard

Purpose

Operational dashboard for kitchen to view aggregated production requirements per meal service and track preparation status.

Field Specifications

Field Type Required Validation Default Notes
Facility Dropdown Yes FK → facilities User’s facility
Meal Date Date picker Yes Valid date Today
Meal Type Dropdown Yes IN (Breakfast, Lunch, Dinner, Snack) Next meal
Production Summary Table Table Yes Aggregated by menu item
Total Trays Read-only numeric Yes ≥ 0 From kitchen_production_orders.total_trays
Status Dropdown Yes IN (Planned, In Progress, Completed) Planned
Completed Date/Time Datetime Conditional Required if status = Completed

Production Summary Table – Key Columns

Column Description
Menu Item Name of item
Diet Type Diet types receiving this item
Quantity Required Number of portions
Prepared Quantity Editable numeric field
Status Not started / In progress / Done

Validation Messages

Condition Message Severity
Completed without prepared quantities “Please confirm prepared quantities before marking production as completed.” Error
Prepared Quantity < Required “Prepared quantity is less than required. Confirm if this is intentional.” Warning

Actions / Buttons

  • Start Production
  • Sets status to “In Progress”.
  • Mark Completed
  • Sets status to “Completed”, records completion time.
  • Print Production List
  • Generates printable summary for kitchen.

Accessibility

  • Large font and high contrast for use in kitchen displays.
  • Keyboard and mouse/touch friendly.

Responsive / Mobile

  • Typically used on large screens; on tablets, table scrolls horizontally if needed.

SCR-NUTRITION-007: Tray Assembly & Delivery

Purpose

Tablet-friendly interface for tray line and delivery staff to assemble trays, verify patient identity via barcode, and record delivery and intake.

Field Specifications

Field Type Required Validation Default Notes
Meal Date Date picker Yes Valid date Today
Meal Type Dropdown Yes IN (Breakfast, Lunch, Dinner, Snack) Current meal
Ward/Route Dropdown No All Delivery route grouping
Tray Ticket List List/table Yes From tray_tickets
Barcode Scan (Tray) Text (scanner input) No Must match tray ticket barcode
Barcode Scan (Patient Wristband) Text No Must match patient identifier
Patient Verification Status Read-only badge Yes Match / Mismatch
Delivery Status Dropdown Yes IN (Not Delivered, Delivered, Refused, NPO) Not Delivered
Delivery Time Datetime Conditional Required if Delivered Now
Intake Recording (%) Numeric No 0–100 If required by care plan
Satisfaction Score 1–5 rating No 1–5 integer Optional quick survey

Validation Messages

Condition Message Severity
Tray barcode not found “Tray ticket not found. Please rescan or contact kitchen.” Error
Patient barcode mismatch “Patient ID does not match tray ticket. Do NOT deliver. Verify with nurse.” Error
Delivery marked without time “Delivery time is required when marking as delivered.” Error
Intake > 100 or < 0 “Intake must be between 0% and 100%.” Error

Actions / Buttons

  • Scan Tray
  • Focuses tray barcode field; loads tray ticket details.
  • Scan Patient
  • Verifies patient identity; updates verification status.
  • Save Delivery
  • Saves delivery status, time, intake, satisfaction to meal_service_records.
  • Next Tray
  • Moves to next tray in route.

Accessibility

  • Large buttons and high-contrast design for use in varied lighting.
  • Support for hardware barcode scanners (enter key triggers).

Responsive / Mobile

  • Optimized for 7–10 inch tablets.
  • Single-column layout with large touch targets.

SCR-NUTRITION-008: Nutrition Analytics Dashboard

Purpose

Dashboard for nutrition leadership to monitor KPIs: screening compliance, referral response time, meal satisfaction, tray accuracy, calorie delivery vs target, food waste, malnutrition documentation, TPN order accuracy.

Field Specifications

Field Type Required Validation Default Notes
Date Range Date range picker Yes Start ≤ End; within allowed reporting window Last 30 days
Facility Dropdown Yes FK → facilities All
Ward/Unit Multi-select No FK → departments All
KPI Tiles Cards Yes One per KPI defined in module brief
Trend Charts Line/bar charts No Time-series per KPI
Export Report Button No Export aggregated data only (no direct identifiers)

Validation Messages

Condition Message Severity
Date range too large “Please select a date range of up to [X] days to ensure performance.” Warning
No data for filters “No data available for the selected period and filters.” Info

Actions / Buttons

  • Apply Filters
  • Refreshes all KPI tiles and charts.
  • Export
  • Exports aggregated KPI data (de-identified where applicable) in line with UAE PDPL.

Accessibility

  • Charts accompanied by data tables for screen readers.
  • KPI tiles include numeric values and textual descriptions.

Responsive / Mobile

  • Tiles stack vertically.
  • Charts simplified or hidden with option to “View full chart” on mobile.

Common UI Patterns

Patient Banner

  • Displayed on all clinical screens (SCR-NUTRITION-001, 003, 004, 007).
  • Content:
  • Name (Arabic + English if available)
  • MRN
  • Emirates ID (masked where required by UAE PDPL)
  • Age, sex
  • Ward/bed
  • Key allergies (food and drug)
  • Code status icon (if provided by EHR)
  • Behaviour:
  • Clickable to open full patient summary (from ehr-patient-mgmt).
  • High contrast; always visible at top.

Search Components

  • Debounced text search (300–500 ms) with minimum characters (2–3) for:
  • Patient search (where applicable).
  • Menu item search in SCR-NUTRITION-005.
  • Clear button to reset search.
  • aria-label attributes for screen readers.

Alert / Notification Patterns

  • Inline Validation Errors
  • Red text under field, with icon.
  • Associated via aria-describedby.
  • Warning Banners
  • Yellow background bar at top of form for non-blocking warnings (e.g., allergen conflicts).
  • Critical Alerts
  • Modal dialog for hard stops (e.g., non-halal item selection).
  • All alerts respect:
  • role="alert" or aria-live="assertive" for critical.
  • aria-live="polite" for informational.

Loading States

  • Use of skeleton loaders or spinners when:
  • Fetching census (SCR-NUTRITION-002).
  • Loading lab values (SCR-NUTRITION-004).
  • Generating analytics (SCR-NUTRITION-008).
  • Overlay with semi-transparent background and “Loading…” text.
  • Ensure loading indicators are keyboard focusable only if interactive (usually not).

Arabic/English Bilingual UI Considerations

  • All labels and key text stored as translatable strings.
  • Support for:
  • English (LTR) and Arabic (RTL) layouts.
  • Toggle language at user profile level; per-screen language switch optional.
  • RTL specifics:
  • Alignment of labels and text fields flips.
  • Tables maintain logical column order but text alignment adjusts.
  • Patient-facing elements (e.g., satisfaction questions) available in both languages.
  • Date/time formats configurable to local preferences (e.g., DD-MM-YYYY).

General Accessibility (WCAG 2.1 AA)

  • Colour contrast ratio ≥ 4.5:1 for text.
  • Minimum touch target size 44x44 px on mobile.
  • Keyboard-only navigation supported on all screens.
  • Visible focus indicators on all interactive elements.
  • No information conveyed by colour alone; use icons/text.
  • Timeouts (if any) clearly communicated and extendable.

Responsive / Mobile Design

  • Core clinical workflows (diet order entry, screening, tray delivery) optimized for tablets used on wards and in kitchen.
  • Layout strategy:
  • Desktop: multi-column forms and tables.
  • Tablet: two-column where possible, otherwise stacked.
  • Mobile: single-column, collapsible sections, reduced non-essential data.
  • Performance:
  • Pagination or lazy loading for large lists (census, tray tickets).
  • Avoid heavy charts on low-bandwidth connections; allow user to opt-in.

content/clinical/nutrition/04-screen-requirements.md Generated 2026-02-20 22:54