HH/COMPLAINTS_GAP_ANALYSIS.md
2025-12-25 17:11:40 +03:00

786 lines
22 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Complaints App - Gap Analysis & Improvement Plan
**Date:** December 25, 2025
**Analyst:** AI Assistant
**Status:** Ready for Implementation
---
## Executive Summary
The complaints app has a solid foundation with core CRUD operations, SLA tracking, and UI templates. However, several critical features from the initial prompt are missing or incomplete. This document outlines the gaps and provides a systematic implementation plan.
---
## Current Implementation Status
### ✅ What's Working Well
1. **Models**
- ✅ Complaint model with comprehensive fields
- ✅ ComplaintAttachment for file uploads
- ✅ ComplaintUpdate for timeline tracking
- ✅ Inquiry model for non-complaint requests
- ✅ SLA due_at calculation on creation
- ✅ Overdue checking mechanism
2. **API Views (DRF)**
- ✅ ComplaintViewSet with RBAC filtering
- ✅ Custom actions: assign, change_status, add_note
- ✅ ComplaintAttachmentViewSet
- ✅ InquiryViewSet with respond action
- ✅ Audit logging integration
3. **UI Views**
- ✅ Complaint list with advanced filters
- ✅ Complaint detail with tabs (details, timeline, attachments, actions)
- ✅ Complaint create form
- ✅ Action handlers: assign, change_status, add_note, escalate
- ✅ RBAC enforcement
4. **Templates**
- ✅ Modern Bootstrap 5 UI
- ✅ Responsive design
- ✅ Filter panel with collapsible functionality
- ✅ Statistics cards
- ✅ Timeline visualization
- ✅ Status and severity badges
5. **Celery Tasks**
- ✅ check_overdue_complaints (periodic)
- ✅ send_complaint_resolution_survey (triggered on close)
- ✅ create_action_from_complaint (stub for Phase 6)
---
## 🔴 Critical Gaps Identified
### 1. Configuration Models Missing
**Current State:** SLA durations are hardcoded in settings.py
**Required:** Database-driven configuration per hospital/severity
**Missing Models:**
- `ComplaintSLAConfig` - Configure SLA hours by hospital, severity, priority
- `ComplaintCategory` - Custom categories per hospital (not hardcoded choices)
- `EscalationRule` - Define escalation hierarchy (flexible, not hardcoded)
- `ComplaintThreshold` - Configure thresholds (e.g., resolution survey score < 50%)
**Impact:** Cannot customize SLA rules, categories, or escalation per hospital
---
### 2. Resolution Satisfaction Survey Workflow Incomplete
**Current State:**
- Survey is sent when complaint closes
- No automatic detection of low scores
- No automatic PX Action creation on low scores
- No threshold configuration
**Required:**
- Detect when resolution survey score < 50% (configurable threshold)
- Automatically create PX Action when threshold breached
- Link PX Action to both complaint and survey
- Audit log the trigger
**Impact:** Manual intervention required for negative satisfaction scores
---
### 3. Complaint-to-PXAction Automation Missing
**Current State:**
- Task stub exists: `create_action_from_complaint`
- Not implemented
- Not triggered on complaint creation
**Required:**
- Automatic PX Action creation on complaint creation (if configured)
- Automatic PX Action creation on negative resolution survey
- Configuration per hospital: auto_create_action_on_complaint (boolean)
- Proper linking via GenericForeignKey
**Impact:** PX Actions must be created manually
---
### 4. Export Functionality Not Implemented
**Current State:**
- UI has export buttons (CSV, Excel)
- No backend implementation
- exportData() JavaScript function does nothing
**Required:**
- CSV export with all complaint fields
- Excel export with formatting
- PDF export for individual complaint (detail view)
- Respect current filters when exporting
- Include related data (patient, hospital, timeline)
**Impact:** Users cannot export data for reporting
---
### 5. Bulk Actions Not Implemented
**Current State:**
- UI has checkboxes for selection
- "Select All" functionality
- No bulk action handlers
**Required:**
- Bulk assign to user
- Bulk status change
- Bulk escalate
- Bulk export selected
- Confirmation modals for destructive actions
**Impact:** Users must process complaints one by one
---
### 6. Dashboard Integration Missing
**Current State:**
- No complaint metrics in command center dashboard
- No complaint trends visualization
- No SLA compliance tracking
- No resolution rate metrics
**Required (in dashboard app):**
- Complaint trends chart (daily/weekly/monthly)
- SLA compliance percentage and trend
- Resolution rate by hospital/department
- Average resolution time
- Top complaint categories
- Overdue complaints widget
- Recent high-severity complaints feed
**Impact:** No executive visibility into complaint performance
---
### 7. Escalation Logic Incomplete
**Current State:**
- Manual escalation via UI
- escalated_at timestamp recorded
- No automatic escalation on SLA breach
- No configurable escalation rules
- No escalation hierarchy
**Required:**
- Automatic escalation when overdue
- Configurable escalation rules per hospital
- Escalation hierarchy: Assigned User Dept Manager Hospital Admin PX Admin
- Notification on escalation
- Audit trail
**Impact:** Overdue complaints don't automatically escalate
---
### 8. Complaint Categories Hardcoded
**Current State:**
- Categories are hardcoded in model choices
- Cannot add/edit/delete categories
- Same categories for all hospitals
**Required:**
- ComplaintCategory model
- CRUD UI for managing categories
- Per-hospital categories
- Active/inactive status
- Subcategories support
**Impact:** Cannot customize categories per hospital needs
---
### 9. Notification Integration Incomplete
**Current State:**
- Resolution survey sends notification
- No notifications for: complaint created, assigned, overdue, escalated
**Required:**
- Notification on complaint creation (to assigned user/dept manager)
- Notification on assignment (to assignee)
- Notification on overdue (to assignee + manager)
- Notification on escalation (to escalation target)
- Notification on resolution (to patient)
- Configurable notification preferences
**Impact:** Users miss important complaint events
---
### 10. Advanced Features Missing
**Current State:** Basic CRUD implemented
**Missing from Prompt Requirements:**
- Saved filter views (user can save frequently used filters)
- Complaint resolution satisfaction dashboard
- Dissatisfied complaints list with drill-down
- Evidence attachment requirements (before closure)
- Approval workflow for closure (if configured)
- Integration with journey stages (link complaint to journey stage)
- MOH/CHI complaint reporting
**Impact:** Missing advanced workflow and reporting capabilities
---
## 📋 Systematic Implementation Plan
### Phase 1: Configuration Models & Admin (Priority: CRITICAL)
**Deliverables:**
1. Create `ComplaintSLAConfig` model
- Fields: hospital, severity, priority, sla_hours, is_active
- Admin interface
- Migration
- Update `Complaint.calculate_sla_due_date()` to use DB config
2. Create `ComplaintCategory` model
- Fields: hospital, name_en, name_ar, code, parent (self-FK), is_active, order
- Admin interface
- Migration
- Update Complaint model to use FK instead of choices
- Data migration to convert existing categories
3. Create `EscalationRule` model
- Fields: hospital, from_role, to_role, trigger_condition, order, is_active
- Admin interface
- Migration
4. Create `ComplaintThreshold` model
- Fields: hospital, threshold_type, threshold_value, action_type, is_active
- Admin interface
- Migration
- Default: resolution_survey_score < 50 create_px_action
**Acceptance Criteria:**
- All models created with migrations
- Admin interfaces functional
- SLA calculation uses DB config
- Categories are dynamic
- Default configurations seeded
**Estimated Effort:** 4-6 hours
---
### Phase 2: Resolution Survey Integration (Priority: HIGH)
**Deliverables:**
1. Create signal handler in surveys app
- Listen for SurveyInstance score update
- Check if linked to complaint (via metadata)
- Check threshold from ComplaintThreshold
- Trigger PX Action creation if threshold breached
2. Update `send_complaint_resolution_survey` task
- Store complaint_id in survey metadata
- Create proper linkage
3. Create `create_px_action_from_survey` task
- Create PXAction with proper fields
- Link to both complaint and survey
- Set priority based on score severity
- Audit log
4. Update complaint detail UI
- Show resolution survey score prominently
- Show linked PX Action if created
- Visual indicator for low scores
**Acceptance Criteria:**
- Survey completion triggers threshold check
- Low score (<50%) creates PX Action automatically
- PX Action properly linked
- Audit trail complete
- UI shows linkage
**Estimated Effort:** 3-4 hours
---
### Phase 3: Complaint-to-PXAction Automation (Priority: HIGH)
**Deliverables:**
1. Add field to Hospital model (or create HospitalComplaintConfig)
- auto_create_action_on_complaint (boolean)
- default_action_priority
- default_action_assignee_role
2. Implement `create_action_from_complaint` task
- Check hospital configuration
- Create PXAction if enabled
- Set appropriate fields
- Link via GenericForeignKey
- Audit log
3. Update complaint creation views
- Trigger task after complaint created
- Both API and UI views
4. Add configuration UI
- Hospital admin can toggle auto-creation
- Set default priority/assignee
**Acceptance Criteria:**
- Complaint creation triggers PX Action (if configured)
- Configuration per hospital works
- PX Action properly linked
- Can be disabled per hospital
**Estimated Effort:** 2-3 hours
---
### Phase 4: Export Functionality (Priority: MEDIUM)
**Deliverables:**
1. Create export utility functions
- `export_complaints_csv(queryset, filters)`
- `export_complaints_excel(queryset, filters)`
- `export_complaint_pdf(complaint_id)`
2. Add export views
- `/complaints/export/csv/`
- `/complaints/export/excel/`
- `/complaints/<id>/export/pdf/`
3. Update UI
- Wire export buttons to proper endpoints
- Add loading indicators
- Handle errors gracefully
4. Libraries needed
- csv (built-in)
- openpyxl (Excel)
- reportlab or weasyprint (PDF)
**Acceptance Criteria:**
- CSV export works with all fields
- Excel export has formatting
- PDF export for single complaint
- Exports respect filters
- File downloads properly
**Estimated Effort:** 3-4 hours
---
### Phase 5: Bulk Actions (Priority: MEDIUM)
**Deliverables:**
1. Create bulk action views
- `bulk_assign_complaints`
- `bulk_change_status`
- `bulk_escalate`
2. Add JavaScript for bulk operations
- Collect selected IDs
- Show confirmation modal
- Submit to bulk endpoint
- Show results/errors
3. Add bulk action UI
- Toolbar with bulk action buttons
- Enabled only when items selected
- Confirmation modals
4. Add bulk action endpoints to API
- POST `/api/complaints/bulk-assign/`
- POST `/api/complaints/bulk-status/`
- POST `/api/complaints/bulk-escalate/`
**Acceptance Criteria:**
- Can select multiple complaints
- Bulk assign works
- Bulk status change works
- Bulk escalate works
- Confirmation required
- Results shown to user
- Audit logs created
**Estimated Effort:** 3-4 hours
---
### Phase 6: Dashboard Integration (Priority: HIGH)
**Deliverables:**
1. Create complaint analytics service
- `get_complaint_trends(hospital, date_range)`
- `get_sla_compliance(hospital, date_range)`
- `get_resolution_rate(hospital, date_range)`
- `get_top_categories(hospital, date_range)`
- `get_overdue_complaints(hospital)`
2. Update dashboard views
- Add complaint metrics to command center
- Create dedicated complaints dashboard
3. Add charts to command center template
- Complaint trends line chart
- SLA compliance gauge
- Resolution rate by department
- Top categories bar chart
- Overdue complaints table widget
4. Add API endpoints
- `/api/analytics/complaints/trends/`
- `/api/analytics/complaints/sla-compliance/`
- `/api/analytics/complaints/resolution-rate/`
**Acceptance Criteria:**
- Command center shows complaint metrics
- Charts are interactive
- Data updates in real-time
- RBAC filters apply
- Date range filters work
**Estimated Effort:** 4-5 hours
---
### Phase 7: Escalation Automation (Priority: HIGH)
**Deliverables:**
1. Update `check_overdue_complaints` task
- When complaint overdue, trigger escalation
- Use EscalationRule to determine target
- Create ComplaintUpdate entry
- Send notification
- Audit log
2. Create `escalate_complaint` task
- Get escalation rules for hospital
- Find next escalation target
- Reassign complaint
- Update escalated_at
- Notify all parties
3. Add escalation history to UI
- Show escalation chain in timeline
- Visual indicator for escalated complaints
**Acceptance Criteria:**
- Overdue complaints auto-escalate
- Escalation follows configured rules
- Notifications sent
- Audit trail complete
- UI shows escalation history
**Estimated Effort:** 3-4 hours
---
### Phase 8: Category Management UI (Priority: MEDIUM)
**Deliverables:**
1. Create category CRUD views
- List categories
- Create category
- Edit category
- Delete/deactivate category
- Reorder categories
2. Create category templates
- `complaint_category_list.html`
- `complaint_category_form.html`
3. Add to admin menu
- "Complaint Categories" under Settings
4. Update complaint form
- Dynamic category dropdown
- Load from database
- Filter by hospital
**Acceptance Criteria:**
- Can manage categories via UI
- Categories are per-hospital
- Subcategories supported
- Complaint form uses dynamic categories
- Inactive categories hidden
**Estimated Effort:** 2-3 hours
---
### Phase 9: Enhanced Notifications (Priority: MEDIUM)
**Deliverables:**
1. Create notification triggers
- On complaint created
- On complaint assigned
- On complaint overdue
- On complaint escalated
- On complaint resolved
- On complaint closed
2. Update views and tasks
- Add notification calls
- Use NotificationService
3. Add notification preferences
- User can configure which notifications to receive
- Per-event preferences
**Acceptance Criteria:**
- All events trigger notifications
- Notifications sent via configured channels
- Users can configure preferences
- Notification logs created
**Estimated Effort:** 2-3 hours
---
### Phase 10: Advanced Features (Priority: LOW)
**Deliverables:**
1. Saved filter views
- SavedComplaintFilter model
- Save current filters
- Load saved filters
- Share filters with team
2. Resolution satisfaction dashboard
- Dedicated page
- Score distribution
- Dissatisfied list
- Drill-down by hospital/department
3. Evidence requirements
- Configure required attachments before closure
- Validation on status change
4. Approval workflow
- Require PX Admin approval for closure (if configured)
- Approval queue
**Acceptance Criteria:**
- Users can save/load filters
- Resolution dashboard functional
- Evidence requirements enforced
- Approval workflow works
**Estimated Effort:** 6-8 hours
---
## 🎯 Implementation Priority Matrix
| Phase | Priority | Effort | Impact | Dependencies |
|-------|----------|--------|--------|--------------|
| 1. Configuration Models | CRITICAL | 4-6h | HIGH | None |
| 2. Resolution Survey Integration | HIGH | 3-4h | HIGH | Phase 1 |
| 3. Complaint-to-PXAction | HIGH | 2-3h | HIGH | Phase 1 |
| 6. Dashboard Integration | HIGH | 4-5h | HIGH | None |
| 7. Escalation Automation | HIGH | 3-4h | MEDIUM | Phase 1 |
| 4. Export Functionality | MEDIUM | 3-4h | MEDIUM | None |
| 5. Bulk Actions | MEDIUM | 3-4h | MEDIUM | None |
| 8. Category Management | MEDIUM | 2-3h | MEDIUM | Phase 1 |
| 9. Enhanced Notifications | MEDIUM | 2-3h | LOW | None |
| 10. Advanced Features | LOW | 6-8h | LOW | Multiple |
**Total Estimated Effort:** 33-46 hours
---
## 📊 Comparison with Initial Prompt
### Prompt Requirements vs Current Implementation
| Requirement | Status | Notes |
|-------------|--------|-------|
| Complaint CRUD | Complete | Models, API, UI all working |
| SLA tracking | Partial | Works but hardcoded, needs DB config |
| Workflow (openprogressresolvedclosed) | Complete | Status transitions working |
| Resolution satisfaction survey | Partial | Sends survey but no auto-action on low score |
| Low score triggers PX Action | Missing | Not implemented |
| Complaint SLA config | Missing | Hardcoded in settings |
| Escalation on overdue | Partial | Manual only, no auto-escalation |
| Timeline/audit trail | Complete | ComplaintUpdate tracks all changes |
| Attachments | Complete | File upload working |
| RBAC enforcement | Complete | Proper filtering by role |
| API endpoints | Complete | DRF viewsets with actions |
| Modern UI | Complete | Bootstrap 5, responsive |
| Advanced filters | Complete | Comprehensive filter panel |
| Export capability | Missing | UI exists but no backend |
| Bulk actions | Missing | UI exists but no backend |
| Dashboard integration | Missing | No complaint metrics in dashboard |
| Custom categories | Missing | Hardcoded choices |
| Configurable thresholds | Missing | No threshold model |
**Completion Score: 60%**
---
## 🚀 Quick Start Recommendations
### Immediate Actions (Next 2-3 days)
1. **Day 1: Configuration Foundation**
- Implement Phase 1 (Configuration Models)
- This unblocks multiple other phases
- Critical for production readiness
2. **Day 2: Automation & Integration**
- Implement Phase 2 (Resolution Survey Integration)
- Implement Phase 3 (Complaint-to-PXAction)
- Complete the core workflow
3. **Day 3: Visibility & Reporting**
- Implement Phase 6 (Dashboard Integration)
- Implement Phase 4 (Export Functionality)
- Give users visibility into complaint performance
### Week 2 Actions
4. **Days 4-5: Operational Efficiency**
- Implement Phase 5 (Bulk Actions)
- Implement Phase 7 (Escalation Automation)
- Improve user productivity
5. **Days 6-7: Polish & Enhancement**
- Implement Phase 8 (Category Management)
- Implement Phase 9 (Enhanced Notifications)
- Improve user experience
---
## 📝 Technical Debt & Considerations
### Current Technical Debt
1. **Hardcoded Values**
- SLA durations in settings.py
- Complaint categories in model choices
- Escalation logic not configurable
2. **Incomplete Workflows**
- Resolution survey doesn't trigger actions
- No automatic escalation
- Manual PX Action creation
3. **Missing Integrations**
- Dashboard doesn't show complaint metrics
- Limited notification coverage
- No export functionality
### Architectural Considerations
1. **Scalability**
- Current implementation handles single-hospital well
- Multi-hospital filtering works
- Consider caching for dashboard metrics
2. **Performance**
- Add database indexes for common filters
- Use select_related/prefetch_related (already done)
- Consider pagination for large datasets (already done)
3. **Maintainability**
- Good separation of concerns
- Clear model structure
- Well-documented code
---
## 🎓 Knowledge Enrichment Summary
### What I Learned from Your Answers
1. **Threshold Configuration**
- Start with 50% threshold for resolution satisfaction
- Make it configurable in database for future flexibility
- Different hospitals may have different standards
2. **SLA Configuration**
- Must be database-driven, not hardcoded
- Per hospital, per severity configuration needed
- Allows business users to adjust without code changes
3. **PX Action Triggers**
- Both on complaint creation AND negative survey
- Dual trigger points ensure nothing falls through cracks
- Configuration per hospital for flexibility
4. **Export Requirements**
- CSV, Excel, and PDF all needed
- Critical for reporting and compliance
- Must respect current filters
5. **Bulk Operations**
- Assign, escalate, status update are priorities
- Improves operational efficiency
- Reduces repetitive work
6. **Dashboard Integration**
- All dashboard features go in dashboard app
- Complaint trends, resolution rate, SLA compliance needed
- Executive visibility is critical
7. **Escalation Flexibility**
- Start with Department Manager
- Must be configurable for different org structures
- Escalation rules should be data-driven
8. **Survey Template Strategy**
- Each hospital has own resolution satisfaction template
- Questions can be added per journey stage
- All questions sent at journey end
- Flexible, hospital-specific approach
9. **Category Customization**
- Categories must be custom per hospital
- Users need CRUD operations on categories
- Not one-size-fits-all
### Key Insights
- **Flexibility is paramount** - Everything should be configurable
- **Automation is critical** - Reduce manual work through smart triggers
- **Visibility matters** - Dashboard integration is high priority
- **User empowerment** - Give users control over configuration
- **Systematic approach** - Implement in logical sequence
---
## ✅ Next Steps
1. **Review this document** with stakeholders
2. **Prioritize phases** based on business needs
3. **Begin Phase 1** (Configuration Models) immediately
4. **Set up tracking** for implementation progress
5. **Schedule reviews** after each phase completion
---
## 📞 Questions for Further Clarification
1. **MOH/CHI Integration**: Should complaints be reportable to MOH/CHI? What format?
2. **Multi-language**: Should complaint forms support Arabic input?
3. **Patient Portal**: Can patients submit complaints directly via portal?
4. **Anonymous Complaints**: Should system support anonymous complaints?
5. **Complaint Merging**: Should duplicate complaints be mergeable?
6. **Complaint Reopening**: Can closed complaints be reopened?
7. **SLA Pause**: Should SLA timer pause when waiting for external input?
8. **Complaint Routing**: Should complaints auto-route based on category/department?
---
**Document Version:** 1.0
**Last Updated:** December 25, 2025
**Status:** Ready for Implementation