HH/docs/COMPLAINT_SEEDING_GUIDE.md

323 lines
9.8 KiB
Markdown

# Complaint Seeding Guide
## Overview
The `seed_complaints` management command creates realistic test complaint data with bilingual support (English and Arabic) for testing the PX360 complaint management system.
## Features
- **Bilingual Support**: Creates complaints in both English and Arabic (70% Arabic, 30% English by default)
- **Staff-Mentioned Complaints**: ~60% of complaints mention specific staff members (nurses, physicians, admin staff)
- **General Complaints**: ~40% of complaints are general (facility, billing, wait time, etc.)
- **Severity Distribution**: Critical, High, Medium, Low complaints
- **Priority Distribution**: Urgent, High, Medium, Low priorities
- **Category-Based**: Matches complaints to appropriate categories (clinical_care, staff_behavior, facility, wait_time, billing, communication, other)
- **Timeline Entries**: Automatically creates initial timeline entries
- **Reference Numbers**: Generates unique complaint reference numbers
- **AI Analysis**: Django signals will automatically trigger AI analysis for new complaints
## Prerequisites
Before running this command, ensure you have:
1. **Active Hospitals**: Hospitals with status='active'
```bash
python manage.py seed_departments
```
2. **Complaint Categories**: System-wide complaint categories
```bash
python manage.py seed_complaint_configs
```
3. **Staff Data** (optional but recommended): Staff members in the database
```bash
python manage.py seed_staff
```
## Usage
### Basic Usage (Create 10 complaints)
```bash
python manage.py seed_complaints
```
This creates:
- 10 total complaints
- 7 Arabic complaints (70%)
- 3 English complaints (30%)
- 6 staff-mentioned complaints (60%)
- 4 general complaints (40%)
- All with status: OPEN
### Custom Number of Complaints
```bash
python manage.py seed_complaints --count 50
```
Create 50 complaints with default percentages.
### Custom Language Distribution
```bash
python manage.py seed_complaints --count 20 --arabic-percent 50
```
Create 20 complaints:
- 10 Arabic (50%)
- 10 English (50%)
### Target Specific Hospital
```bash
python manage.py seed_complaints --hospital-code ALH
```
Create complaints only for hospital with code 'ALH'.
### Custom Staff-Mention Percentage
```bash
python manage.py seed_complaints --staff-mention-percent 80
```
Create complaints with 80% staff-mentioned and 20% general.
### Preview Without Creating (Dry Run)
```bash
python manage.py seed_complaints --dry-run
```
Shows what would be created without actually creating complaints.
### Clear Existing Complaints First
```bash
python manage.py seed_complaints --clear
```
Deletes all existing complaints before creating new ones.
### Combined Options
```bash
python manage.py seed_complaints --count 100 --arabic-percent 60 --staff-mention-percent 70 --hospital-code ALH --clear
```
Create 100 complaints for hospital 'ALH':
- 60 Arabic, 40 English
- 70 staff-mentioned, 30 general
- Delete existing complaints first
## Command Arguments
| Argument | Type | Default | Description |
|----------|------|---------|-------------|
| `--count` | int | 10 | Number of complaints to create |
| `--arabic-percent` | int | 70 | Percentage of Arabic complaints (0-100) |
| `--hospital-code` | str | - | Target hospital code (default: all hospitals) |
| `--staff-mention-percent` | int | 60 | Percentage of staff-mentioned complaints (0-100) |
| `--dry-run` | flag | False | Preview without making changes |
| `--clear` | flag | False | Delete existing complaints first |
## Complaint Templates
### English Complaints
**Staff-Mentioned Examples:**
- Rude behavior from nurse during shift
- Physician misdiagnosed my condition
- Nurse ignored call button for over 30 minutes
- Physician did not explain treatment plan clearly
- Nurse made medication error
- Admin staff was unhelpful with billing inquiry
- Nurse was compassionate and helpful
- Physician provided excellent care
**General Complaints:**
- Long wait time in emergency room
- Room was not clean upon admission
- Air conditioning not working properly
- Billing statement has incorrect charges
- Difficulty getting prescription refills
- Parking is inadequate for visitors
- Food quality has declined
### Arabic Complaints
**Staff-Mentioned Examples:**
- سلوك غير مهذب من الممرضة أثناء المناوبة
- الطبيب تشخص خطأ في حالتي
- الممرضة تجاهلت زر الاستدعاء لأكثر من 30 دقيقة
- الطبيب لم يوضح خطة العلاج بوضوح
- الممرضة ارتكبت خطأ في الدواء
- موظف الإدارة كان غير مفيد في استفسار الفوترة
- الممرضة كانت متعاطفة ومساعدة
- الطبيب قدم رعاية ممتازة
**General Complaints:**
- وقت انتظار طويل في الطوارئ
- الغرفة لم تكن نظيفة عند القبول
- التكييف لا يعمل بشكل صحيح
- كشف الفاتورة يحتوي على رسوم غير صحيحة
- صعوبة الحصول على وصفات طبية
- مواقف السيارات غير كافية للزوار
- جودة الطعام انخفضت
## Complaint Categories
| Code | English Name | Arabic Name |
|------|--------------|-------------|
| `clinical_care` | Clinical Care | الرعاية السريرية |
| `staff_behavior` | Staff Behavior | سلوك الموظفين |
| `facility` | Facility & Environment | المرافق والبيئة |
| `wait_time` | Wait Time | وقت الانتظار |
| `billing` | Billing | الفواتير |
| `communication` | Communication | التواصل |
| `other` | Other | أخرى |
## Severity and Priority Distribution
### Staff-Mentioned Complaints
- **Critical/Urgent**: Medication errors, misdiagnosis, severe rude behavior
- **High/High**: Ignored call button, unclear treatment plans
- **Medium/Medium**: Unhelpful admin staff
- **Low/Low**: Positive feedback about compassionate care
### General Complaints
- **High/High**: Long wait times in emergency, incorrect billing charges
- **Medium/Medium**: Unclean rooms, non-working AC, prescription refill issues, food quality
- **Low/Low**: Parking issues, minor facility concerns
## What Gets Created
For each complaint, the command creates:
1. **Complaint Record**:
- Unique reference number (format: CMP-{hospital_code}-{year}-{UUID})
- Title and description (bilingual)
- Severity and priority
- Category assignment
- Hospital and department (linked to staff if applicable)
- Patient name (bilingual)
- Contact information (email/phone)
- Source (patient, family, call_center, online, in_person)
- Status: OPEN
- Mentioned staff (if staff-mentioned complaint)
2. **Timeline Entry**:
- Initial status change to 'open'
- Description: "Complaint created and registered"
- System-created (no user)
3. **Automatic Processing** (via Django signals):
- SLA deadline calculation (based on severity/priority)
- AI analysis (sentiment, categorization, etc.)
- Assignment logic (if configured)
- Notifications (if configured)
## Example Output
```
============================================================
Complaint Data Seeding Command
============================================================
Found 2 hospital(s)
Configuration:
Total complaints to create: 10
Arabic complaints: 7 (70%)
English complaints: 3 (30%)
Staff-mentioned: 6 (60%)
General: 4 (40%)
Status: All OPEN
Dry run: False
============================================================
Summary:
Total complaints created: 10
Arabic: 7
English: 3
Staff-mentioned: 6
General: 4
============================================================
Complaint seeding completed successfully!
```
## Testing SLA with Seeded Complaints
After seeding complaints, you can test the SLA system:
1. **Check SLA Deadlines**:
```bash
python manage.py shell
>>> from apps.complaints.models import Complaint
>>> for c in Complaint.objects.all():
... print(f"{c.reference}: {c.due_at}, Overdue: {c.is_overdue}")
```
2. **Manually Trigger SLA Reminders**:
```bash
python manage.py shell
>>> from apps.complaints.tasks import send_sla_reminders
>>> send_sla_reminders()
```
3. **Run SLA Functionality Tests**:
```bash
python test_sla_functionality.py
```
## Troubleshooting
### No Hospitals Found
```
ERROR: No active hospitals found. Please create hospitals first.
```
**Solution**: Run `python manage.py seed_departments` to create hospitals.
### No Complaint Categories Found
```
ERROR: No complaint categories found. Please run seed_complaint_configs first.
```
**Solution**: Run `python manage.py seed_complaint_configs` to create categories.
### No Staff Found
```
WARNING: No staff found. Staff-mentioned complaints will not have linked staff.
```
**Solution**: Run `python manage.py seed_staff` to create staff data (optional but recommended).
### Import Errors
```
ModuleNotFoundError: No module named 'apps.complaints'
```
**Solution**: Ensure you're running the command from the project root directory.
## Best Practices
1. **Start Small**: Test with 5-10 complaints first using `--dry-run`
2. **Check Data**: Verify complaints in Django Admin before running in production
3. **Monitor AI Analysis**: Check that AI analysis is being triggered via signals
4. **Test SLA**: Use seeded complaints to test SLA reminders and escalation
5. **Clear Carefully**: Use `--clear` option carefully as it deletes all existing complaints
## Related Commands
- `seed_complaint_configs` - Creates SLA configs, categories, thresholds, escalation rules
- `seed_staff` - Creates staff data
- `seed_departments` - Creates hospital and department data
- `test_sla_functionality` - Tests SLA system
## Support
For issues or questions:
1. Check the main documentation: `docs/SLA_TESTING_PLAN.md`
2. Review the code: `apps/complaints/management/commands/seed_complaints.py`
3. Check Django Admin to verify created data