# Complaint Form Fixes Summary

## Issue Description
The patient records were not appearing in the complaint form, and several AJAX endpoints were pointing to incorrect URLs.

## Root Causes Identified

### 1. Incorrect AJAX Endpoint URLs
The JavaScript was calling non-existent API endpoints:
- `/api/departments/` - Does not exist
- `/complaints/ajax/get-staff-by-department/` - Wrong endpoint name
- `/api/patients/` - Does not exist

### 2. Incorrect API Response Parsing
JavaScript was expecting data in `results` property, but backend returns different formats:
- Departments: returns `data.departments`
- Patients: returns `data.patients`
- Staff: returns `data.staff`

### 3. Missing Classification Section
The form was missing the Classification section (Category, Subcategory, Source) required by the model.

## Fixes Applied

### File: `templates/complaints/complaint_form.html`

#### 1. Fixed AJAX Endpoint URLs

**Before:**
```javascript
fetch(`/api/departments/?hospital=${hospitalId}`)
fetch(`/complaints/ajax/get-staff-by-department/?department_id=${departmentId}`)
fetch(`/api/patients/?search=${encodeURIComponent(searchTerm)}`)
```

**After:**
```javascript
fetch(`/complaints/ajax/departments/?hospital=${hospitalId}`)
fetch(`/complaints/ajax/physicians/?department_id=${departmentId}`)
fetch(`/complaints/ajax/search-patients/?q=${encodeURIComponent(searchTerm)}`)
```

#### 2. Fixed Data Response Parsing

**Before:**
```javascript
data.results.forEach(dept => { ... })
data.results.forEach(patient => { ... })
```

**After:**
```javascript
data.departments.forEach(dept => { ... })
data.patients.forEach(patient => { ... })
data.staff.forEach(staff => { ... })
```

#### 3. Added Patient Search Input
Added a text input and search button for searching patients by MRN or name:
- Search input field with placeholder
- Search button with icon
- Patient select dropdown populated on search
- Minimum 2 characters required for search

#### 4. Added Classification Section
Added missing form fields:
- Category dropdown (required)
- Subcategory dropdown (optional)
- Source dropdown (required) with options: Email, Phone, Walk-in, Online, Social Media, Third Party, Other

#### 5. Improved User Experience
- Added patient search on Enter key
- Added patient search on button click
- Validation for minimum 2 characters for patient search
- Better error messages for loading failures

## URL Configuration

All endpoints are correctly configured in `apps/complaints/urls.py`:
- `/complaints/ajax/departments/` → `get_departments_by_hospital`
- `/complaints/ajax/physicians/` → `get_staff_by_department`
- `/complaints/ajax/search-patients/` → `search_patients`
- `/complaints/public/api/load-categories/` → `api_load_categories`

## Backend View Responses

### `search_patients` (ui_views.py)
Returns: `{'patients': [...]}`
```python
results = [
    {
        'id': str(p.id),
        'mrn': p.mrn,
        'name': p.get_full_name(),
        'phone': p.phone,
        'email': p.email,
    }
    for p in patients
]
return JsonResponse({'patients': results})
```

### `get_staff_by_department` (ui_views.py)
Returns: `{'staff': [...]}`

### `get_departments_by_hospital` (ui_views.py)
Returns: `{'departments': [...]}`

## Testing Instructions

1. Navigate to the complaint form: `/complaints/new/`
2. **Test Hospital Selection**: Select a hospital - departments and categories should load
3. **Test Department Selection**: Select a department - staff should load
4. **Test Category Selection**: Select a category - subcategories should load
5. **Test Patient Search**: 
   - Enter at least 2 characters in search field
   - Click search button or press Enter
   - Patient dropdown should populate with matching results
   - Select a patient from the dropdown

## Expected Behavior

✅ Hospitals load from template context
✅ Departments load via AJAX when hospital is selected
✅ Staff/Physicians load via AJAX when department is selected
✅ Categories load via AJAX when hospital is selected
✅ Subcategories load via AJAX when category is selected
✅ Patients search via AJAX when search button is clicked
✅ All dropdowns populate correctly with data
✅ Form can be submitted with all required fields filled

## Related Files

- `apps/complaints/urls.py` - URL patterns
- `apps/complaints/ui_views.py` - AJAX endpoint views
- `apps/complaints/models.py` - Complaint model definition
- `config/urls.py` - Main URL configuration

## Notes

- Patient search requires minimum 2 characters
- Patient dropdown populates on focus with initial results if empty
- All AJAX requests use the correct endpoint URLs
- Data is properly parsed from backend response format
- Classification section is complete and functional
