16 KiB
SLA Testing Plan for Complaints
Overview
This document provides a comprehensive testing plan for the SLA (Service Level Agreement) system in the PX360 complaint management system.
System Components
1. Complaint Model SLA Fields
due_at- SLA deadline calculated based on severity/priorityis_overdue- Boolean flag for overdue statusreminder_sent_at- Timestamp for first SLA remindersecond_reminder_sent_at- Timestamp for second SLA reminderescalated_at- Timestamp when complaint was escalatedmetadata['escalation_level']- Current escalation level
2. ComplaintSLAConfig Model
Configures SLA per hospital, severity, and priority:
sla_hours- Hours until SLA deadlinereminder_hours_before- Send first reminder X hours before deadlinesecond_reminder_enabled- Enable second remindersecond_reminder_hours_before- Send second reminder X hours before deadlinethank_you_email_enabled- Send thank you email on closure
3. EscalationRule Model
Configures automatic escalation:
escalation_level- Current escalation level (1, 2, 3...)max_escalation_level- Maximum level before stoppingtrigger_on_overdue- Trigger when overduetrigger_hours_overdue- Trigger X hours after overduereminder_escalation_enabled- Enable escalation after reminderreminder_escalation_hours- Escalate X hours after reminderescalate_to_role- Who to escalate to (department_manager, hospital_admin, px_admin, ceo, specific_user)
4. Celery Tasks
send_sla_reminders- Hourly task to send first and second reminderscheck_overdue_complaints- Every 15 minutes to check and mark overdueescalate_complaint_auto- Triggered when complaint becomes overdueescalate_after_reminder- Triggered after reminder if no action
Test Scenarios
Scenario 1: SLA Deadline Calculation
Objective: Verify SLA deadline is calculated correctly on complaint creation
Steps:
- Configure ComplaintSLAConfig for hospital:
- Severity: Medium, Priority: Medium
- SLA hours: 48
- Create a complaint with medium severity and priority
- Verify
due_atis set to 48 hours from creation time - Verify
is_overdueis False - Verify
reminder_sent_atis None - Verify
second_reminder_sent_atis None
Expected Result:
due_at = created_at + 48 hoursis_overdue = False- Reminder timestamps are None
Scenario 2: First SLA Reminder
Objective: Verify first reminder is sent at configured time
Prerequisites:
- ComplaintSLAConfig with
reminder_hours_before = 24 - Complaint due in 26 hours (triggers reminder at 24 hours before)
Steps:
- Create complaint due in 26 hours
- Wait until 24 hours before deadline
- Run
send_sla_reminderstask - Verify:
- Email sent to assigned user or department manager
reminder_sent_atis set- ComplaintUpdate created with update_type='note'
- Audit log created for SLA reminder sent
Expected Result:
- Email sent successfully
reminder_sent_atpopulated- Timeline entry shows "SLA reminder sent"
- Hours remaining in email = 24
Scenario 3: Second SLA Reminder
Objective: Verify second reminder is sent at configured time
Prerequisites:
- ComplaintSLAConfig with:
second_reminder_enabled = Truesecond_reminder_hours_before = 6
- First reminder already sent
- Complaint due in 7 hours
Steps:
- Create complaint due in 7 hours
- Ensure first reminder already sent
- Wait until 6 hours before deadline
- Run
send_sla_reminderstask - Verify:
- Second email sent with URGENT subject
second_reminder_sent_atis set- ComplaintUpdate created
- Audit log created
escalate_after_remindertask triggered
Expected Result:
- Second email sent successfully
second_reminder_sent_atpopulated- Timeline entry shows "SECOND SLA reminder sent"
- Escalation check triggered
Scenario 4: Overdue Detection
Objective: Verify complaints are marked as overdue past deadline
Steps:
- Create complaint due in 1 hour
- Wait until due_at passes
- Run
check_overdue_complaintstask - Verify:
is_overduechanged to Trueescalate_complaint_autotask triggered
Expected Result:
is_overdue = True- Automatic escalation initiated
- Warning logged about overdue complaint
Scenario 5: Overdue Escalation (Level 1)
Objective: Verify first level escalation works
Prerequisites:
- EscalationRule configured:
escalation_level = 1trigger_on_overdue = Truetrigger_hours_overdue = 0(immediate)escalate_to_role = department_manager
Steps:
- Create complaint due in 1 hour
- Wait until overdue
- Run
escalate_complaint_autotask - Verify:
- Assigned to department manager
escalated_atis setmetadata['escalation_level'] = 1- ComplaintUpdate created with update_type='escalation'
- Notification sent
- Audit log created
Expected Result:
- Reassigned to department manager
- Escalation level set to 1
- Timeline shows escalation details
- Email notification sent
Scenario 6: Reminder-Based Escalation (Level 2)
Objective: Verify escalation after reminder if no action
Prerequisites:
- EscalationRule configured:
escalation_level = 2trigger_on_overdue = Falsereminder_escalation_enabled = Truereminder_escalation_hours = 12escalate_to_role = hospital_admin
- First reminder sent 13+ hours ago
- No updates to complaint since reminder
Steps:
- Create complaint with first reminder sent 13 hours ago
- Run
escalate_after_remindertask - Verify:
- Assigned to hospital admin
escalated_atupdatedmetadata['escalation_level'] = 2- ComplaintUpdate created
- Metadata includes
reminder_escalationinfo
Expected Result:
- Escalated to hospital admin
- Escalation level incremented to 2
- Timeline shows "Reminder-based escalation"
- Hours since reminder logged
Scenario 7: Multi-Level Escalation
Objective: Verify multiple escalation levels work sequentially
Prerequisites:
- 3 escalation rules configured:
- Level 1: Department Manager (immediate overdue)
- Level 2: Hospital Admin (12 hours after reminder)
- Level 3: PX Admin (24 hours after level 2)
Steps:
- Create complaint due in 1 hour
- Trigger level 1 escalation (immediate overdue)
- Wait 13 hours after reminder
- Trigger level 2 escalation (reminder-based)
- Wait 24 hours more
- Trigger level 3 escalation (reminder-based)
- Verify:
- Escalation level increments correctly
- Assigned user changes at each level
- Timeline shows all escalations
- Metadata tracks escalation history
Expected Result:
- Level 1 → Department Manager
- Level 2 → Hospital Admin
- Level 3 → PX Admin
- Each escalation logged correctly
Scenario 8: Max Escalation Level
Objective: Verify escalation stops at max level
Prerequisites:
- EscalationRule with
max_escalation_level = 3 - Complaint already escalated to level 3
Steps:
- Trigger escalation on level 3 complaint
- Verify:
- No further escalation occurs
- Log message: "reached max escalation level 3"
- Complaint remains with level 3 assignee
Expected Result:
- Escalation stops at max level
- No reassignment occurs
- Warning logged
Scenario 9: Thank You Email on Closure
Objective: Verify thank you email sent when complaint is closed
Prerequisites:
- ComplaintSLAConfig with
thank_you_email_enabled = True - Patient has email/phone
Steps:
- Create complaint with resolved status
- Change status to closed
- Verify:
- Thank you email sent to patient
- Email contains complaint details
- Timeline entry created
- Audit log created
Expected Result:
- Thank you email sent
- Patient notification received
- Timeline shows thank you sent
Scenario 10: Resolution Satisfaction Survey
Objective: Verify survey is sent when complaint is closed
Steps:
- Create complaint with patient
- Resolve complaint
- Close complaint
- Verify:
- SurveyInstance created
- Survey linked to complaint
resolution_survey_sent_atis set- SMS/email sent to patient
- Survey status = 'active'
Expected Result:
- Survey created and linked
- Patient receives survey invitation
- Timeline shows "Resolution satisfaction survey sent"
Scenario 11: Low Survey Score Threshold
Objective: Verify PX Action created for low survey scores
Prerequisites:
- ComplaintThreshold configured:
threshold_type = resolution_survey_scorethreshold_value = 50comparison_operator = lt(less than)action_type = create_px_action
Steps:
- Close complaint (triggers survey)
- Complete survey with score 30
- Run
check_resolution_survey_thresholdtask - Verify:
- PXAction created
- Action title includes "Low Resolution Satisfaction"
- Action linked to complaint
- Survey score in metadata
- Threshold value in metadata
- Audit log created
Expected Result:
- PX Action created automatically
- Action shows low satisfaction details
- Audit trail exists
Scenario 12: Bilingual Email Content
Objective: Verify emails are sent in both English and Arabic
Steps:
- Trigger SLA reminder
- Check email content:
- Contains English text
- Contains Arabic translation
- Both languages properly formatted
- RTL direction for Arabic text
Expected Result:
- Bilingual email sent
- Both languages readable
- Proper formatting maintained
Scenario 13: No Assignee Reminder Handling
Objective: Verify reminder sent to department manager if no assignee
Prerequisites:
- Complaint has no assigned_to user
- Department has manager configured
Steps:
- Create complaint without assignee
- Set department with manager
- Trigger SLA reminder
- Verify:
- Reminder sent to department manager
- No error for missing assignee
- Timeline entry shows recipient
Expected Result:
- Department manager receives reminder
- No assignment needed for reminder
- System handles gracefully
Scenario 14: Multiple Reminders Not Sent
Objective: Verify reminders are not sent multiple times
Steps:
- Create complaint due in 24 hours
- Trigger first reminder
- Immediately trigger reminder task again
- Verify:
- Second trigger skips already-sent reminder
- Only one email sent
reminder_sent_atnot updated again
Expected Result:
- Reminders sent only once
- Task checks timestamps before sending
- No duplicate emails
Scenario 15: SLA Configuration Not Found
Objective: Verify fallback to default SLA when no config exists
Prerequisites:
- No ComplaintSLAConfig for hospital/severity/priority
- settings.SLA_DEFAULTS configured
Steps:
- Create complaint with medium severity/priority
- Verify
due_atcalculated - Check calculation used default value from settings
Expected Result:
- SLA calculated from defaults
- Complaint creation successful
- Warning logged about missing config
Test Execution
Automated Testing
Run the automated test script:
python test_sla_functionality.py
This script tests:
- SLA configuration setup
- First reminder logic
- Second reminder logic
- Escalation rules
- Timeline tracking
Manual Testing
Using Django Admin
- Create ComplaintSLAConfig for test hospital
- Create EscalationRule(s) for test hospital
- Create test complaint
- Manually update
due_atto trigger reminders - Run Celery tasks manually
- Verify emails received
- Check complaint timeline
- Verify escalation in database
Using API
- Create complaint via API
- Update complaint status to closed
- Trigger survey threshold check
- Verify PX Action created via API
- Check audit logs
Testing with Real Time
For production testing:
- Configure Celery Beat to run tasks on schedule
- Create complaints with various due times
- Monitor logs for task execution
- Verify emails sent at correct times
- Check escalation behavior
- Monitor for errors
Data Requirements
Required Test Data
- Hospital with active status
- Department with manager assigned
- Users with different roles:
- Hospital Admin
- Department Manager
- PX Admin
- Regular Staff
- Patient with phone/email
- ComplaintCategory configured
- ComplaintSLAConfig for multiple severity/priority combos
- EscalationRules for different levels
- ComplaintThreshold for survey scores
Configuration Checklist
- Email backend configured (SMTP or console)
- SMS service configured (for surveys)
- Celery worker running
- Celery Beat scheduler running
- SITE_URL configured in settings
- SLA_DEFAULTS configured in settings
- NotificationService methods available
- Audit logging enabled
Success Criteria
Functional Requirements
- SLA calculated correctly for all severity/priority combinations
- First reminder sent at configured time
- Second reminder sent at configured time
- Overdue detection works correctly
- Level 1 escalation triggers on overdue
- Level 2+ escalation triggers after reminder
- Max escalation level respected
- Escalation targets correct users
- Timeline entries created for all events
- Audit logs created for all events
- Emails sent in both English and Arabic
- Survey sent on closure
- PX Action created for low survey scores
- Thank you email sent on closure
Non-Functional Requirements
- Tasks execute within SLA time windows
- No duplicate emails sent
- System handles missing data gracefully
- Fallback to defaults works
- Error handling is robust
- Logging is comprehensive
- Performance is acceptable
Monitoring & Logging
Key Logs to Monitor
-
SLA Reminders:
- "SLA reminder sent for complaint {id}"
- "Second SLA reminder sent for complaint {id}"
- Hours remaining values
-
Overdue Detection:
- "Complaint {id} is overdue"
- Hours overdue values
-
Escalation:
- "Escalated complaint {id} to {user}"
- "Reminder-based escalation triggered"
- "reached max escalation level {level}"
-
Surveys:
- "Resolution satisfaction survey sent"
- "survey score {score} breaches threshold"
-
Errors:
- Any ERROR level logs
- Exception traces
- Failed email sending
Metrics to Track
- SLA breach rate
- Average time to resolution
- Escalation frequency by level
- Reminder effectiveness (action taken after reminder)
- Survey response rate
- PX Action creation rate
Troubleshooting
Common Issues
Issue: Reminders not sending
- Check: Celery worker running
- Check: Celery Beat scheduler running
- Check: Email backend configured
- Check: Complaint status (must be OPEN or IN_PROGRESS)
- Check:
reminder_sent_attimestamp
Issue: Escalation not triggering
- Check: EscalationRule exists and is_active=True
- Check: Severity/priority filters match complaint
- Check: Hours overdue criteria met
- Check: Escalation target user exists
- Check: Already assigned to same user
Issue: Survey not sending
- Check: SurveyTemplate exists for hospital
- Check: Patient has phone/email
- Check: Complaint status changed to CLOSED
- Check: NotificationService.send_survey_invitation available
Issue: PX Action not created
- Check: ComplaintThreshold exists and is_active=True
- Check: Threshold comparison logic
- Check: Survey score breaches threshold
- Check: Action type configured correctly
Conclusion
This comprehensive SLA testing plan covers all aspects of the SLA system including:
- SLA calculation and deadline tracking
- First and second reminders
- Overdue detection and escalation
- Multi-level escalation with max level
- Resolution satisfaction surveys
- Threshold-based PX Action creation
- Bilingual email support
- Timeline and audit logging
- Edge cases and error handling
Follow this plan to ensure the SLA system functions correctly in production.