---
name: healthcare-ux-guidelines
description: Healthcare UX design standards for MYCURE products combining WCAG 2.2 Level AA accessibility compliance with patient safety language guidelines. Auto-activates for healthcare UI design, form validation, error messaging, clinical workflows, patient-facing interfaces, and government health system integration. Includes Philippine healthcare context (LGU, RHU, BHS, FHSIS systems).
---
# Healthcare UX Guidelines
Comprehensive healthcare user experience standards ensuring accessibility, patient safety, and usability for MYCURE clinical and government health products.
## When This Skill Activates
- Designing healthcare interfaces (clinical systems, patient portals, LGU health centers)
- Creating forms for patient data, medical records, or health services
- Writing error messages, notifications, or system feedback
- Conducting accessibility audits (WCAG 2.2)
- Implementing clinical workflows (consultation, pharmacy, laboratory)
- Building government health reporting interfaces (FHISIS, PhilHealth)
---
## Core Principles
### 1. Accessibility is Patient Safety
**WCAG 2.2 Level AA compliance is MANDATORY** for all MYCURE interfaces.
**Why it matters:**
- Healthcare access is a right, not a privilege
- Patients with disabilities must have equal access to health services
- Inaccessible interfaces create barriers to care
- Legal requirements in many jurisdictions
### 2. Language Shapes Patient Experience
**Error messages must not alarm or undermine trust.**
**Why it matters:**
- Patients may be anxious about their health
- Healthcare professionals rely on system confidence
- Alarming language increases stress and reduces compliance
- Calm, professional tone maintains therapeutic relationship
### 3. Philippine Healthcare Context
**Design for variable infrastructure and diverse users.**
**Challenges:**
- Low-quality displays in rural health units (RHUs)
- Limited bandwidth in barangay health stations (BHS)
- Mixed technical literacy among government health workers
- Multiple languages (Filipino, English, regional languages)
---
## Quick Reference: Critical Requirements
### ✅ MUST DO (P0 Priority)
1. **Color Contrast**: 4.5:1 minimum for normal text, 3:1 for large text
2. **Focus Indicators**: Visible 3px outline on all interactive elements
3. **Touch Targets**: Minimum 44×44px for all clickable elements
4. **Keyboard Navigation**: All functionality accessible via keyboard
5. **Alt Text**: All images and icons have descriptive alt attributes
6. **Form Labels**: All inputs have visible, associated labels
7. **Patient Safety Language**: NO "Error", "Failed", "Broken", "Denied"
8. **Semantic HTML**: Proper heading hierarchy, list tags, button elements
### ❌ NEVER DO (Critical Violations)
1. **Remove focus indicators** (`outline: none` without replacement)
2. **Use placeholder as label** (placeholders disappear on focus)
3. **Rely on color alone** for status or information
4. **Use alarming terminology** ("Fatal error", "Critical failure")
5. **Make buttons from divs** without proper ARIA roles
6. **Use images of text** instead of actual text
7. **Block keyboard navigation** (keyboard traps)
8. **Ignore screen reader compatibility**
---
## Accessibility Standards (WCAG 2.2 Level AA)
### Perceivable: Users Must Perceive Content
#### Text Alternatives
```html
```
#### Color Contrast
**Test all color combinations:**
```css
/* ✅ Good: High contrast (7.0:1 on white) */
--clinical-blue: #0066CC;
--text-primary: #212529; /* 16.1:1 */
/* ✅ Good: Passes AA (4.54:1 on white) */
--text-secondary: #6C757D;
/* ❌ Bad: Fails AA (2.85:1 on white) */
--text-muted: #ADB5BD; /* Don't use for critical text */
```
**Tools:**
- Chrome DevTools: Inspect element → Contrast ratio indicator
- WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/
#### Status Indicators
```html
CriticalCritical: Requires immediate attention
```
### Operable: Users Must Operate Interface
#### Keyboard Navigation
**All functionality must work via keyboard:**
```html
Save Patient Record
Save Patient Record
```
**Test:** Navigate entire interface using only Tab, Shift+Tab, Enter, Space, Arrow keys.
#### Focus Indicators
```css
/* ✅ Good: Visible focus indicator */
*:focus-visible {
outline: 3px solid var(--clinical-blue);
outline-offset: 2px;
}
/* ❌ Bad: Removing outline without replacement */
button {
outline: none; /* NEVER DO THIS */
}
```
#### Touch Targets (Mobile/Tablet)
```css
/* ✅ Good: 44×44px minimum */
.button {
min-width: 44px;
min-height: 44px;
padding: 12px 24px;
}
/* ✅ Good: Increased padding for small icons */
.icon-button {
width: 24px;
height: 24px;
padding: 10px; /* Total: 44×44px */
}
/* ❌ Bad: Too small for touch */
.tiny-button {
width: 20px;
height: 20px;
padding: 2px; /* Total: 24×24px - TOO SMALL */
}
```
### Understandable: Users Must Understand Content
#### Form Labels
```html
```
#### Error Messages
**See Patient Safety Language section below for complete guidelines.**
```html
Error: Invalid input
Please check the following:
Patient Name is required
Date of Birth must be in MM/DD/YYYY format
```
#### Consistent Navigation
```html
```
### Robust: Works with Assistive Technologies
#### Semantic HTML
```html
```
---
## Patient Safety Language
### Core Principle: Calm, Professional Communication
**Healthcare software must not alarm patients or undermine trust.**
### Word Substitutions
| ❌ Avoid | ✅ Use Instead |
|---------|---------------|
| Error, Failed, Broken | Unable to process, Not completed |
| Invalid, Illegal | Please check, Please verify |
| Denied, Rejected | Unable to access, Needs review |
| Crashed, Down | Temporarily unavailable |
| Fatal error, Critical failure | Please contact support, Needs immediate attention |
| Alert!, Warning! | Please note, Important |
### Message Templates
#### Form Validation
```
❌ Error: Field required
✅ Please enter patient name
❌ Invalid email address
✅ Please enter a valid email address (e.g., name@example.com)
❌ Error: Value too high
✅ Quantity cannot exceed 500 (available stock)
```
#### Data Not Found
```
❌ Fatal error: Patient record not found
✅ This patient record is not currently available.
Please verify the patient ID or contact support if the issue persists.
```
#### Permission Issues
```
❌ Access denied - forbidden
✅ You don't have permission to access this section.
Please contact your administrator for assistance.
```
#### Network/System Issues
```
❌ Server down - error 500
✅ We're experiencing technical difficulties.
Your data is safe. Please try again in a few moments.
```
### Critical Patient Safety Alerts
**When there IS an actual safety concern, be direct:**
```
✅ ALLERGY ALERT: Patient is allergic to Penicillin.
This medication (Amoxicillin) contains Penicillin.
Action required: Do not dispense. Select alternative medication.
[View Alternatives] [Cancel Order]
```
**Use "WARNING" or "ALERT" only for:**
- Actual patient safety risks (allergies, drug interactions)
- Regulatory compliance issues (expired medications)
- Critical system failures affecting patient care
- Data integrity issues impacting treatment decisions
---
## Philippine Healthcare Context
### LGU/Government Health Systems
**Design for:**
- Rural Health Units (RHUs) with limited infrastructure
- Barangay Health Stations (BHS) with basic facilities
- City/Municipal Health Offices (CHO/MHO)
- Provincial Health Offices (PHO)
**Technical Constraints:**
- Low-quality displays (often older monitors)
- Limited bandwidth (2G/3G in rural areas)
- Inconsistent power supply
- Shared/public computers
**Design Adaptations:**
```css
/* High contrast for low-quality displays */
:root {
--text-primary: #1A1A1A; /* Darker than standard */
--border-strong: #000000; /* Pure black for definition */
}
/* Larger minimum font sizes */
body {
font-size: 16px; /* Never below 16px */
}
.data-label {
font-size: 14px; /* Never below 14px */
}
/* Performance: CSS-only animations */
.loading {
animation: pulse 1.5s ease-in-out infinite;
}
/* NO video backgrounds, NO heavy JavaScript animations */
```
### FHISIS Reporting
**Field Health Service Information System (FHISIS) integration:**
```html
Select month and year for FHISIS submission
```
### Multilingual Support
**English + Filipino (Tagalog) minimum:**
```html
Pangalan ng Pasyente
Ilagay ang buong pangalan ng pasyente.
```
---
## Testing Checklist
### Accessibility Testing
**Automated (30% of issues):**
- [ ] axe DevTools browser extension
- [ ] Lighthouse accessibility audit
- [ ] WAVE accessibility checker
**Keyboard Navigation (Manual):**
- [ ] Tab through all interactive elements
- [ ] Verify focus order matches visual order
- [ ] Check focus indicators are visible
- [ ] Test Escape key closes modals/dropouts
- [ ] Verify Enter/Space activates buttons
**Screen Reader (Manual):**
- [ ] Navigate by headings (H key in NVDA/JAWS)
- [ ] Navigate by landmarks (D key)
- [ ] Navigate by form fields (F key)
- [ ] Verify all images have alt text
- [ ] Verify all buttons have accessible names
- [ ] Check ARIA states announce correctly
**Visual Testing:**
- [ ] Zoom to 200% - verify no horizontal scrolling
- [ ] Resize window to 320px - verify content reflows
- [ ] Test in Windows High Contrast Mode
- [ ] Test with increased text spacing
### Patient Safety Language Testing
**Before Release:**
- [ ] All error messages reviewed by healthcare professional
- [ ] No alarming terminology (Error, Failed, Broken, Denied)
- [ ] All messages provide clear next steps
- [ ] Messages appropriate for audience (patient vs. staff)
- [ ] Critical alerts properly identified
- [ ] Spelling and grammar checked
- [ ] Tone is calm, professional, helpful
---
## Common Violations & Fixes
### 1. Missing Focus Indicators
**Problem:**
```css
/* ❌ Removes all focus indicators */
* {
outline: none;
}
```
**Fix:**
```css
/* ✅ Replace with visible focus indicator */
*:focus-visible {
outline: 3px solid var(--clinical-blue);
outline-offset: 2px;
}
```
### 2. Placeholder as Label
**Problem:**
```html
```
**Fix:**
```html
```
### 3. Insufficient Color Contrast
**Problem:**
```css
/* ❌ Light gray on white (2.5:1 - FAILS) */
.text-muted {
color: #CCCCCC;
}
```
**Fix:**
```css
/* ✅ Darker gray (4.54:1 - PASSES AA) */
.text-muted {
color: #6C757D;
}
```
### 4. Alarming Error Messages
**Problem:**
```
❌ Fatal error: Stock transfer failed
```
**Fix:**
```
✅ Unable to complete stock transfer.
Requested quantity (500) exceeds available stock (300).
Please adjust the quantity and try again.
```
---
## Resources
**Reference Documents:**
- [WCAG_COMPLIANCE.md](reference/WCAG_COMPLIANCE.md) - Complete WCAG 2.2 checklist
- [PATIENT_SAFETY_LANGUAGE.md](reference/PATIENT_SAFETY_LANGUAGE.md) - Full messaging guidelines
**Testing Tools:**
- axe DevTools: https://www.deque.com/axe/devtools/
- WAVE: https://wave.webaim.org/extension/
- WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/
- Lighthouse (built into Chrome DevTools)
**Screen Readers:**
- NVDA (Windows, free): https://www.nvaccess.org/
- VoiceOver (macOS, built-in): Cmd+F5
- TalkBack (Android, built-in)
**WCAG Guidelines:**
- WCAG 2.2: https://www.w3.org/WAI/WCAG22/quickref/
- WCAG 2.1: https://www.w3.org/WAI/WCAG21/quickref/
---
## Summary Checklist
Before releasing ANY healthcare interface:
- [ ] **WCAG 2.2 Level AA compliant** (minimum)
- [ ] **Keyboard navigation works** for all functionality
- [ ] **Focus indicators visible** on all interactive elements
- [ ] **Touch targets ≥ 44×44px** for all clickable elements
- [ ] **Color contrast ≥ 4.5:1** for normal text, ≥ 3:1 for large text
- [ ] **All images have alt text** (or alt="" for decorative)
- [ ] **All form inputs have visible labels** (not just placeholders)
- [ ] **Error messages use patient safety language** (no "Error", "Failed", etc.)
- [ ] **Semantic HTML** (proper headings, lists, buttons)
- [ ] **Screen reader compatible** (tested with NVDA/VoiceOver)
- [ ] **Works at 200% zoom** without horizontal scrolling
- [ ] **High contrast mode supported**
- [ ] **Filipino/multilingual support** (where applicable)
- [ ] **Optimized for LGU/low-bandwidth** contexts (where applicable)
**Remember:** Accessibility is not optional in healthcare. It's a patient safety requirement and legal obligation.