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 tablenurse_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 nursereason: Optional reason for examinationmedical_advice: Medical advice providedhealth_status: Enum ("sehat", "tidak_sehat_dengan_pendamping", "tidak_sehat")doctor_advice: Optional doctor's advice
Health Status Values
sehat: Healthy - patient can proceed normallytidak_sehat_dengan_pendamping: Unhealthy with companion - requires medical accompanimenttidak_sehat: Unhealthy - requires immediate medical attention
Validation Rules
PhysicalExaminationRequest
Required Fields:
nurse_id: Must exist in nurses tablepatient_id: Must exist in patients tableblood_pressure: String formatheart_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 stringhealth_status: Must be one of the allowed values
Optional Fields:
reason: Additional notesmedical_advice: Recommendationsconsultation: Boolean for doctor consultation neededmedical_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:
- Screening status → "completed"
- Health check status → "completed"
- Patient health status updated
- 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