HH/docs/COMPLAINT_DUAL_ASSIGNMENT_FEATURE.md

433 lines
12 KiB
Markdown

# Complaint Dual Assignment Feature
## Overview
Complaints in PX360 support **two separate assignment types** to clearly distinguish between:
1. **Case Manager** (`assigned_to`) - The admin who will manage and follow up on the complaint
2. **Staff Member** (`staff`) - The specific staff member that the complaint is about
## Assignment Types
### 1. Case Manager Assignment
**Purpose**: Assign an admin to manage the complaint lifecycle
**Field**: `assigned_to` (ForeignKey to User)
**Who can assign**: All admins (PX Admins, Hospital Admins, Department Managers)
**Location**: Sidebar → Assignments section → Case Manager
**API Endpoint**: `POST /complaints/api/complaints/{id}/assign/`
**Features**:
- Dropdown to select from assignable users
- Shows currently assigned manager (if any)
- Creates timeline entry on assignment
- Logs audit event
- Includes assignment timestamp
**Workflow**:
1. Admin opens complaint details
2. In sidebar "Assignments" section, selects case manager from dropdown
3. Clicks submit button
4. Complaint is updated with new `assigned_to` user
5. Timeline entry created: "Assigned to [Manager Name]"
6. Audit event logged: "complaint assigned"
### 2. Staff Member Assignment
**Purpose**: Assign the specific staff member that the complaint is about
**Field**: `staff` (ForeignKey to Staff)
**Who can assign**: PX Admins only (restricted permission)
**Location**:
- Sidebar → Assignments section → Staff Member
- Details tab → Staff Suggestions section
- Staff Selection Modal
**API Endpoint**: `POST /complaints/api/complaints/{id}/assign_staff/`
**Features**:
- AI-powered staff matching with confidence scores
- Manual staff search and selection
- Filter by department
- Shows current staff with edit option
- Supports assignment reasons
- Clears AI "needs_staff_review" flag on manual assignment
**Workflow**:
1. **AI Assignment** (automatic):
- Complaint is created
- AI analyzes complaint text
- Extracts potential staff names
- Matches against staff database
- Assigns staff with highest confidence score
2. **Manual Assignment from Suggestions**:
- PX Admin views complaint details
- In Details tab → Staff Suggestions section
- Views AI-suggested matches with confidence scores
- Clicks "Select" button on desired staff
- Staff is assigned immediately
3. **Manual Assignment from Search**:
- PX Admin clicks "Assign Staff" button in sidebar
- Staff Selection Modal opens
- Filters by department or searches by name/job title
- Selects staff from list
- Provides optional reason for assignment
- Clicks "Assign Selected Staff"
- Staff is assigned
## UI Layout
### Sidebar Assignments Section
```html
<!-- Card Header -->
Assignments [People icon]
<!-- Case Manager Assignment -->
Case Manager [Person Badge icon]
Admin who will manage this complaint
[Dropdown: Select manager...] [Assign button]
<!-- Staff Assignment (PX Admin only) -->
Staff Member [Person icon]
Staff member that complaint is about
[Display current staff] OR [Assign Staff button]
```
### Details Tab - Staff Assignment
When staff is already assigned:
```
Staff Member
[Staff Name] [AI Matched badge]
[Job Title]
AI Extracted Names: ["Name1", "Name2"]
Primary: "Primary Name"
Confidence: 85%
```
When staff needs review:
```
Staff Suggestions [Needs Review badge]
AI Extracted Names: ["Name1", "Name2"]
Primary: "Primary Name"
[Match 1: Name A] [85% confidence] [Select button]
[Match 2: Name B] [70% confidence] [Select button]
[Search All Staff] button
```
### Staff Selection Modal
```
Filter by Department: [Dropdown]
Search Staff: [Input]
[Staff List]
└─ Department A
├─ Staff 1 [Radio]
└─ Staff 2 [Radio]
└─ Department B
├─ Staff 3 [Radio]
└─ Staff 4 [Radio]
[Cancel] [Assign Selected Staff button]
```
## API Endpoints
### Assign Case Manager
**Endpoint**: `POST /complaints/api/complaints/{id}/assign/`
**Request Body**:
```json
{
"user_id": "uuid-of-manager-user"
}
```
**Response**:
```json
{
"message": "Complaint assigned successfully"
}
```
### Assign Staff Member
**Endpoint**: `POST /complaints/api/complaints/{id}/assign_staff/`
**Request Body**:
```json
{
"staff_id": "uuid-of-staff",
"reason": "Manual selection from hospital staff list"
}
```
**Response**:
```json
{
"message": "Staff assigned successfully",
"staff_id": "uuid-of-staff",
"staff_name": "Staff Full Name"
}
```
### Get Hospital Staff
**Endpoint**: `GET /complaints/api/complaints/{id}/hospital_staff/`
**Query Parameters**:
- `department_id` (optional): Filter by department
- `search` (optional): Search by name or job title
**Response**:
```json
{
"hospital_id": "uuid",
"hospital_name": "Hospital Name",
"staff_count": 15,
"staff": [
{
"id": "uuid",
"name_en": "John Doe",
"name_ar": "جون دو",
"job_title": "Nurse",
"specialization": "ICU",
"department": "Emergency",
"department_id": "uuid"
}
]
}
```
### Get Staff Suggestions
**Endpoint**: `GET /complaints/api/complaints/{id}/staff_suggestions/`
**Response**:
```json
{
"extracted_name": "John from nursing",
"staff_matches": [
{
"id": "uuid",
"name_en": "John Doe",
"name_ar": "جون دو",
"confidence": 0.85,
"job_title": "Nurse",
"specialization": "ICU",
"department": "Emergency"
}
],
"current_staff_id": "uuid",
"needs_staff_review": true,
"staff_match_count": 3
}
```
## Workflow Examples
### Example 1: AI Auto-Assignment
1. New complaint submitted about "rude nurse named Sarah"
2. AI analyzes complaint text
3. AI extracts: "Sarah", "nurse"
4. System searches staff database
5. Matches found:
- Sarah Johnson (ICU Nurse) - 92% confidence
- Sarah Ahmed (ER Nurse) - 85% confidence
6. System automatically assigns: Sarah Johnson
7. Timeline entry: "Staff assigned to Sarah Johnson (AI Matched)"
8. Staff Sarah Johnson receives explanation request email
### Example 2: Manual Assignment by PX Admin
1. Complaint created with AI match confidence: 65% (low)
2. System sets: `needs_staff_review = true`
3. PX Admin opens complaint details
4. Sees warning: "This complaint needs staff review"
5. Views AI suggestions:
- Staff A - 65% confidence
- Staff B - 60% confidence
6. Clicks "Search All Staff"
7. Opens Staff Selection Modal
8. Filters by "Emergency" department
9. Searches for "Ahmed"
10. Finds: Dr. Ahmed Al-Farsi (Emergency Physician)
11. Selects and assigns
12. Timeline entry: "Staff assigned to Dr. Ahmed Al-Farsi (Emergency Physician). Manual selection from hospital staff list"
13. Metadata updated: `staff_manually_assigned = true`
### Example 3: Case Manager Assignment
1. Complaint assigned to Dr. Ahmed Al-Farsi
2. Department Manager opens complaint
3. In sidebar, selects Case Manager dropdown
4. Chooses: "Mohammed Hassan" (Patient Relations Manager)
5. Clicks assign
6. Timeline entry: "Assigned to Mohammed Hassan"
7. Mohammed receives notification email
8. Mohammed manages complaint resolution
## Permissions
### Assign Case Manager
- **PX Admin**: Can assign any admin to any complaint
- **Hospital Admin**: Can assign admins from their hospital
- **Department Manager**: Can assign admins from their department
- **Other Users**: Cannot assign (no permission)
### Assign Staff Member
- **PX Admin**: Can assign any staff member (PX-wide)
- **Hospital Admin**: Cannot assign (restricted)
- **Department Manager**: Cannot assign (restricted)
- **Other Users**: Cannot assign (no permission)
## Notifications
### Case Manager Assignment
When a complaint is assigned to a case manager:
1. **Email Notification**: Sent to assigned manager
- Subject: "Complaint Notification - #ID"
- Includes: Complaint details, summary, link to complaint
2. **Timeline Entry**: Created
- Type: "assignment"
- Message: "Assigned to [Manager Name]"
3. **Audit Log**: Created
- Event: "assignment"
- Description: "Complaint assigned to [Manager Name]"
### Staff Member Assignment
When a staff member is assigned:
1. **Email Notification**: Sent to request explanation
- Subject: "Explanation Request - Complaint #ID"
- Includes: Complaint details, explanation submission link
- Only sent if staff has email address
2. **Timeline Entry**: Created
- Type: "assignment"
- Message: "Staff assigned to [Staff Name]"
- Metadata: Includes assignment reason
3. **Audit Log**: Created
- Event: "staff_assigned"
- Description: "Staff [Staff Name] manually assigned to complaint by [User Name]"
- Metadata: Includes old_staff_id, new_staff_id, reason
4. **AI Metadata Updated**:
- `needs_staff_review` = false
- `staff_manually_assigned` = true
- `staff_assigned_by` = user_id
- `staff_assigned_at` = timestamp
- `staff_assignment_reason` = reason
## Best Practices
### For PX Admins
1. **Review AI Suggestions First**: Check AI-matched staff before manual assignment
2. **Use High Confidence Matches**: Accept matches > 80% confidence
3. **Provide Assignment Reasons**: Add reasons for manual assignments for audit trail
4. **Monitor Low Confidence**: Review complaints with `needs_staff_review` flag
### For Case Managers
1. **Own Your Complaints**: When assigned, actively manage the complaint
2. **Request Explanations**: Use explanation request feature early in process
3. **Follow Up Regularly**: Check for staff responses and escalate if needed
4. **Document Actions**: Add notes and timeline entries
### For Hospital Admins
1. **Assign Appropriate Managers**: Match complaint type to manager expertise
2. **Monitor SLA Compliance**: Watch for overdue complaints
3. **Escalate When Needed**: Use escalation feature for complex cases
4. **Review Assignment Patterns**: Analyze staff complaint trends
## Troubleshooting
### Issue: Can't see Staff Assignment
**Cause**: User is not PX Admin
**Solution**:
- Only PX Admins can assign staff members
- Contact PX Admin for staff assignment
- Request PX Admin role if needed
### Issue: No staff in dropdown
**Cause**: No staff created or no staff in hospital
**Solution**:
- Check if staff records exist in hospital
- Import staff data if needed
- Use staff seed command: `python manage.py seed_staff`
### Issue: AI match is wrong
**Cause**: AI misinterpreted complaint text
**Solution**:
- Use "Search All Staff" to manually find correct staff
- Assign manually with reason explaining correction
- Consider updating AI prompts for better matching
### Issue: Can't find staff in search
**Cause**: Staff not in database or search criteria too specific
**Solution**:
- Check staff spelling variations
- Use broader search terms (first name only)
- Filter by department first to narrow results
- Verify staff is active (not terminated)
## Future Enhancements
### Potential Improvements
1. **Staff Assignment to Hospital Admins**: Extend permission to hospital admins
2. **Bulk Assignment**: Assign multiple complaints to same staff
3. **Assignment Templates**: Pre-defined assignment patterns based on department/category
4. **Assignment Dashboard**: Overview of all assignments and workload
5. **Auto-Assignment Rules**: Rule-based auto-assignment based on criteria
6. **Assignment History**: Track assignment changes over time
7. **Performance Metrics**: Track assignment effectiveness and resolution times
8. **Staff Notification Preferences**: Allow staff to set notification preferences
## Related Features
- **Explanation Request**: Request explanation from assigned staff
- **Escalation**: Automatically escalate to manager/staff chain
- **SLA Monitoring**: Track response times against SLA deadlines
- **Timeline Updates**: Complete audit trail of all activities
- **Notification System**: Email notifications for all key events
## Support
For questions or issues with the dual assignment feature:
1. Check documentation in `/docs/` folder
2. Review API endpoints in API documentation
3. Contact PX360 support team
4. Submit issue requests through support channels