107 lines
4.0 KiB
Markdown
107 lines
4.0 KiB
Markdown
# Complaint Form Django Form Implementation
|
|
|
|
## Summary
|
|
|
|
The complaint form has been successfully refactored to use Django's built-in form rendering instead of manual HTML fields and complex AJAX calls.
|
|
|
|
## Changes Made
|
|
|
|
### 1. New `ComplaintForm` in `apps/complaints/forms.py`
|
|
|
|
**Fields Included:**
|
|
- `patient` - Required dropdown, filtered by user hospital
|
|
- `hospital` - Required dropdown, pre-filtered by user permissions
|
|
- `department` - Optional dropdown, filtered by selected hospital
|
|
- `staff` - Optional dropdown, filtered by selected department
|
|
- `encounter_id` - Optional text field
|
|
- `description` - Required textarea
|
|
|
|
**Fields Removed (AI will determine):**
|
|
- `category` - AI will determine automatically
|
|
- `subcategory` - AI will determine automatically
|
|
- `source` - Set to 'staff' for authenticated users
|
|
|
|
**Features:**
|
|
- User permission filtering (PX admins see all, hospital users see only their hospital)
|
|
- Dependent queryset initialization (departments load when hospital is pre-selected)
|
|
- Full Django form validation
|
|
- Clean error messages
|
|
|
|
### 2. Updated `complaint_create` View in `apps/complaints/ui_views.py`
|
|
|
|
**Changes:**
|
|
- Uses `ComplaintForm(request.POST, user=request.user)` for form handling
|
|
- Handles `form.is_valid()` validation
|
|
- Sets AI defaults before saving:
|
|
- `title = 'Complaint'` (AI will generate)
|
|
- `category = None` (AI will determine)
|
|
- `subcategory = ''` (AI will determine)
|
|
- `source = 'staff'` (default for authenticated users)
|
|
- `priority = 'medium'` (AI will update)
|
|
- `severity = 'medium'` (AI will update)
|
|
- Creates initial update record
|
|
- Triggers AI analysis via Celery
|
|
- Logs audit trail
|
|
- Handles hospital parameter for form pre-selection
|
|
|
|
### 3. Updated Template `templates/complaints/complaint_form.html`
|
|
|
|
**Changes:**
|
|
- Uses Django form rendering: `{{ form.field }}`
|
|
- Removed all manual HTML input fields
|
|
- Removed complex AJAX endpoints
|
|
- Kept minimal JavaScript:
|
|
- Hospital change → reload form with hospital parameter
|
|
- Department change → load staff via `/complaints/ajax/physicians/`
|
|
- Form validation
|
|
|
|
**Removed AJAX Endpoints:**
|
|
- `/api/organizations/departments/` - No longer needed
|
|
- `/api/organizations/patients/` - No longer needed
|
|
- `/complaints/ajax/get-staff-by-department/` - Changed to `/complaints/ajax/physicians/`
|
|
|
|
**Structure:**
|
|
- Patient Information section
|
|
- Organization section (Hospital, Department, Staff)
|
|
- Complaint Details section (Description)
|
|
- AI Classification info alert
|
|
- SLA Information alert
|
|
- Action buttons
|
|
|
|
## Benefits
|
|
|
|
1. **Simpler Code** - Django handles form rendering and validation
|
|
2. **Better Error Handling** - Form validation with clear error messages
|
|
3. **Less JavaScript** - Only minimal JS for dependent dropdowns
|
|
4. **Cleaner Separation** - Business logic in forms, presentation in templates
|
|
5. **User Permissions** - Automatic filtering based on user role
|
|
6. **AI Integration** - Category, subcategory, severity, and priority determined by AI
|
|
|
|
## Testing Checklist
|
|
|
|
- [ ] Form loads correctly for PX admin users
|
|
- [ ] Form loads correctly for hospital users (filtered to their hospital)
|
|
- [ ] Hospital dropdown pre-fills when hospital parameter in URL
|
|
- [ ] Department dropdown populates when hospital selected
|
|
- [ ] Staff dropdown populates when department selected
|
|
- [ ] Form validation works for required fields
|
|
- [ ] Complaint saves successfully
|
|
- [ ] AI analysis task is triggered after creation
|
|
- [ ] User is redirected to complaint detail page
|
|
- [ ] Back links work for both regular and source users
|
|
|
|
## Related Files
|
|
|
|
- `apps/complaints/forms.py` - ComplaintForm definition
|
|
- `apps/complaints/ui_views.py` - complaint_create view
|
|
- `templates/complaints/complaint_form.html` - Form template
|
|
- `apps/complaints/urls.py` - URL configuration
|
|
- `apps/complaints/tasks.py` - AI analysis task
|
|
|
|
## Notes
|
|
|
|
- The form uses a simple reload approach for hospital selection to keep JavaScript minimal
|
|
- Staff loading still uses AJAX because it's a common pattern and provides good UX
|
|
- All AI-determined fields are hidden from the user interface
|
|
- The form is bilingual-ready using Django's translation system
|