# 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 Assignments [People icon] Case Manager [Person Badge icon] Admin who will manage this complaint [Dropdown: Select manager...] [Assign button] 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