Feature

Physical Examination Feature

Physical Examination Feature

Overview

The Physical Examination feature is a critical component of the Klinik Gunung Semeru healthcare system that allows medical staff (nurses and doctors) to conduct comprehensive health assessments of patients who have completed their initial screening questionnaire.

Workflow Process

1. Patient Screening Completion

  • Patient completes initial health screening questionnaire
  • Patient data is stored with screening status "pending"
  • System generates queue number and screening record

2. Physical Examination

  • Nurse conducts physical examination using vital sign measurements
  • Assessment includes blood pressure, heart rate, oxygen saturation, respiratory rate, and body temperature
  • Nurse provides physical assessment and medical advice
  • Health status is determined (healthy, unhealthy with companion, unhealthy)

3. Status Updates

  • Screening status changes from "pending" to "completed"
  • Health status is updated in both screening and patient records
  • QR code is generated for patient identification

4. Documentation & Reporting

  • PDF report generation for physical examination results
  • Telegram notifications for completed examinations
  • Real-time updates via WebSocket broadcasting

API Endpoints

Create Physical Examination

POST /api/screening/physical-examination

Request Body:

{
  "nurse_id": 1,
  "patient_id": 123,
  "blood_pressure": "120/80",
  "heart_rate": 75,
  "oxygen_saturation": 98,
  "respiratory_rate": 16,
  "body_temperature": 36.8,
  "physical_assessment": "Patient appears healthy with normal vital signs",
  "reason": "Routine checkup",
  "medical_advice": "Continue healthy lifestyle",
  "health_status": "sehat",
  "consultation": false,
  "medical_accompaniment": null
}

Response:

{
  "message": "Pemeriksaan fisik berhasil disimpan",
  "examination": {
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "patient_id": 123,
    "nurse_id": 1,
    "blood_pressure": "120/80",
    "heart_rate": 75,
    "oxygen_saturation": 98,
    "respiratory_rate": 16,
    "body_temperature": 36.8,
    "health_status": "sehat",
    "created_at": "2025-01-15T10:30:00Z"
  },
  "patient": {
    "id": 123,
    "name": "John Doe",
    "screening_status": "completed",
    "health_status": "sehat"
  }
}

Update Physical Examination

PUT /api/screening/update/patient/physical-examination/{id}

Request Body:

{
  "blood_pressure": "125/85",
  "heart_rate": 80,
  "oxygen_saturation": 96,
  "physical_assessment": "Updated assessment",
  "health_status": "tidak_sehat_dengan_pendamping"
}

Update Physical Attributes

PUT /api/screening/update/patient/physical-attributes/{id}

Request Body:

{
  "tinggi_badan": 170,
  "berat_badan": 70
}

Generate PDF Report

GET /api/screening/pdf/{uuid}

Response: PDF stream with physical examination results

Get Examination for Editing

GET /api/screening/physical-examination/edit/{uuid}

Data Models

PhysicalExamination Model

Table: physical_examinations

Fields:

  • uuid: Unique identifier (auto-generated)
  • patient_id: Foreign key to patients table
  • nurse_id: Foreign key to nurses table (optional)
  • doctor_id: Foreign key to doctors table (optional)
  • blood_pressure: String (e.g., "120/80")
  • heart_rate: Integer (bpm)
  • oxygen_saturation: Integer (percentage)
  • respiratory_rate: Integer (breaths per minute)
  • body_temperature: Decimal (2 decimal places)
  • physical_assessment: Text assessment by nurse
  • reason: Optional reason for examination
  • medical_advice: Medical advice provided
  • health_status: Enum ("sehat", "tidak_sehat_dengan_pendamping", "tidak_sehat")
  • doctor_advice: Optional doctor's advice

Health Status Values

  • sehat: Healthy - patient can proceed normally
  • tidak_sehat_dengan_pendamping: Unhealthy with companion - requires medical accompaniment
  • tidak_sehat: Unhealthy - requires immediate medical attention

Validation Rules

PhysicalExaminationRequest

Required Fields:

  • nurse_id: Must exist in nurses table
  • patient_id: Must exist in patients table
  • blood_pressure: String format
  • heart_rate: Integer (30-200 bpm)
  • oxygen_saturation: Integer (0-100%)
  • respiratory_rate: Integer (5-60 breaths/min)
  • body_temperature: Numeric (30.0-45.0°C)
  • physical_assessment: Non-empty string
  • health_status: Must be one of the allowed values

Optional Fields:

  • reason: Additional notes
  • medical_advice: Recommendations
  • consultation: Boolean for doctor consultation needed
  • medical_accompaniment: Type of accompaniment needed

Business Logic

Duplicate Prevention

  • System prevents multiple physical examinations for the same patient
  • Returns 422 error if examination already exists

Status Updates

When physical examination is completed:

  1. Screening status → "completed"
  2. Health check status → "completed"
  3. Patient health status updated
  4. QR code generated for patient identification

Notification System

  • Telegram notification sent to medical staff group
  • Message includes patient name and completion timestamp
  • Real-time updates via WebSocket broadcasting

PDF Generation

Features

  • A5 paper size portrait orientation
  • Optimized background image handling
  • QR code integration for patient verification
  • Medical record number display
  • Examiner information

PDF Content

  • Patient personal information
  • Vital signs measurements
  • Physical assessment results
  • Medical advice and recommendations
  • QR code for verification
  • Medical record number and date

Image Optimization

  • Automatic background image resizing for PDF
  • QR code base64 encoding for embedding
  • Memory limit handling for large images

Integration Points

Screening System

  • Receives patients from completed screening process
  • Updates screening records with examination results
  • Maintains relationship between screening and examination data

User Management

  • Links to nurse and doctor user accounts
  • Tracks examination performer information
  • Maintains audit trail of medical activities

Notification System

  • Telegram integration for real-time alerts
  • WebSocket broadcasting for live updates
  • Email notifications (future enhancement)

QR Code System

  • Generates unique patient QR codes
  • Links to patient medical records
  • Enables quick patient identification

Error Handling

Validation Errors

  • Required field validation with custom messages
  • Data type validation for measurements
  • Foreign key constraint validation

Business Logic Errors

  • Duplicate examination prevention
  • Patient not found errors
  • Invalid health status values

System Errors

  • PDF generation failures
  • QR code generation errors
  • Telegram notification failures (logged but don't block process)

Security Considerations

  • Authentication required for all endpoints
  • Role-based access control (nurse/doctor permissions)
  • Input sanitization and validation
  • Audit logging for all examination activities

Performance Optimization

  • Database indexing on frequently queried fields
  • Memory management for PDF generation
  • Image optimization for QR codes and backgrounds
  • Efficient query loading with Eloquent relationships

Monitoring & Analytics

Key Metrics

  • Daily examination completion rates
  • Average examination time per patient
  • Health status distribution
  • Nurse/doctor productivity tracking

Logging

  • All examination activities logged
  • Error tracking and alerting
  • Performance monitoring
  • Audit trail maintenance

Future Enhancements

  • Multi-language Support: PDF reports in multiple languages
  • Digital Signatures: Electronic signature capability for doctors
  • Integration with EMR: Full electronic medical record integration
  • Automated Alerts: Smart notifications based on vital sign thresholds
  • Historical Tracking: Longitudinal health trend analysis
  • Mobile App: Dedicated mobile application for nurses