7.6 KiB
7.6 KiB
Public Complaint Form - 4-Level Hierarchy Implementation
Overview
Updated the public complaint form at /core/public/submit/ to support the complete 4-level SHCT taxonomy hierarchy instead of the previous 2-level system.
Changes Made
1. API Endpoint Update (apps/complaints/ui_views.py)
Function: api_load_categories
- Added
levelanddomain_typefields to the returned category data - Updated ordering to include
levelfield for proper hierarchy display - Now returns complete taxonomy structure with all 4 levels
2. View Update (apps/complaints/ui_views.py)
Function: public_complaint_submit
- Updated to handle all 4 taxonomy levels:
domain_id(Level 1 - Domain)category_id(Level 2 - Category)subcategory_id(Level 3 - Subcategory)classification_id(Level 4 - Classification)
- Added validation for Domain, Category, and Subcategory (Classification is optional)
- Updated Complaint creation to populate all 4 fields:
domain= ComplaintCategory instance (FK)category= ComplaintCategory instance (FK)subcategory= category code (CharField)classification= category code (CharField)
3. Template Update (templates/complaints/public_complaint_form.html)
Complete rewrite with 4-level cascading dropdowns
Features:
-
4-Level Cascading Dropdowns
- Domain (Level 1) - Required
- Category (Level 2) - Required
- Subcategory (Level 3) - Required
- Classification (Level 4) - Optional
-
Dynamic Loading
- Domains load when hospital is selected
- Categories load when domain is selected
- Subcategories load when category is selected
- Classifications load when subcategory is selected
-
Bilingual Support
- Automatically detects current language (English/Arabic)
- Displays category names in correct language
- Shows descriptions in correct language
-
Contextual Descriptions
- Each level shows a description box when selected
- Descriptions help users understand what each category entails
- Descriptions update dynamically as user selects options
-
Smart Visibility
- Lower-level dropdowns only appear when parent is selected
- Clear all child selections when parent changes
- Hide/show containers based on available options
-
User Experience
- Loading spinner during form submission
- Success modal with reference number
- SweetAlert2 for error messages
- Form reset after successful submission
Taxonomy Structure
Level 1: Domain (3 domains)
- CLINICAL / سريري
- MANAGEMENT / إداري
- RELATIONSHIPS / علاقات
Level 2: Category (8 categories)
- Quality / الجودة
- Safety / السلامة
- Institutional Issues / القضايا المؤسسية
- Accessibility / سهولة الوصول
- Communication / التواصل
- Humanness / Caring / الإنسانية / الرعاية
- Consent / الموافقة
- Confidentiality / الخصوصية
Level 3: Subcategory (20 subcategories)
Examples:
- Examination / الفحص
- Patient Journey / رحلة المريض
- Medication & Vaccination / الأدوية واللقاحات
- Administrative Policies / السياسات الإدارية
- Access / الوصول
- Delays / التأخير
- And more...
Level 4: Classification (75 classifications)
Granular complaint types like:
- "Wait time too long for appointment"
- "Poor doctor communication"
- "Hospital cleanliness issues"
- "Billing errors"
- And 71 more...
Technical Details
JavaScript Functions
loadDomains(hospitalId)
- Loads Level 1 categories (domains) from API
- Filters by hospital_id
- Shows only categories with
level === 1
loadCategories(domainId)
- Loads Level 2 categories
- Filters by
level === 2andparent_id == domainId - Shows/hides container based on available options
loadSubcategories(categoryId)
- Loads Level 3 categories
- Filters by
level === 3andparent_id == categoryId - Required field
loadClassifications(subcategoryId)
- Loads Level 4 categories
- Filters by
level === 4andparent_id == subcategoryId - Optional field
showDescription(categoryId, level)
- Displays category description for selected level
- Shows in correct language (English/Arabic)
- Hides if no description available
Event Handlers
-
Hospital Change
- Loads domains
- Clears all taxonomy selections
- Hides all descriptions
-
Domain Change
- Loads categories
- Shows domain description
- Clears child selections and descriptions
-
Category Change
- Loads subcategories
- Shows category description
- Clears child selections and descriptions
-
Subcategory Change
- Loads classifications
- Shows subcategory description
- Clears classification selection and description
-
Classification Change
- Shows classification description
Form Fields
Required Fields:
- Name
- Email Address
- Phone Number
- Hospital
- Domain
- Category
- Subcategory
- Complaint Description
Optional Fields:
- Classification (Level 4)
Database Schema
Complaint model fields:
domain = models.ForeignKey(
ComplaintCategory,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='+',
limit_choices_to={'level': 1} # Level 1 only
)
category = models.ForeignKey(
ComplaintCategory,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='+',
limit_choices_to={'level': 2} # Level 2 only
)
subcategory = models.CharField(
max_length=50,
blank=True,
help_text='Code of the subcategory (Level 3)'
)
classification = models.CharField(
max_length=50,
blank=True,
help_text='Code of the classification (Level 4)'
)
Testing Checklist
- Verify domains load when hospital is selected
- Verify categories load when domain is selected
- Verify subcategories load when category is selected
- Verify classifications load when subcategory is selected
- Test cascading behavior (clearing child selections)
- Test required field validation
- Test form submission with all 4 levels
- Test form submission with only 3 levels (no classification)
- Verify bilingual support (English/Arabic)
- Verify descriptions display correctly
- Test error handling
- Verify success modal displays with reference number
Benefits
-
More Precise Classification
- Users can now select from 75 specific classifications instead of generic categories
- Better data for analytics and reporting
- More accurate assignment to departments
-
Improved User Experience
- Step-by-step selection reduces cognitive load
- Descriptions help users understand their choices
- Optional 4th level provides flexibility
-
Better Analytics
- More granular complaint tracking
- Better trend identification
- Improved root cause analysis
-
Compliance
- Aligns with Saudi Healthcare Complaint Taxonomy (SHCT)
- Meets regulatory requirements
- Standardizes complaint classification
Migration Notes
- Database already has SHCT taxonomy data loaded
- All 106 categories are in place (3 domains + 8 categories + 20 subcategories + 75 classifications)
- No additional migrations needed for this change
- Backward compatible with existing complaints (domain, category, subcategory, classification fields exist)
Future Enhancements
- Add autocomplete search for faster selection
- Include icons for each domain/category
- Show complaint examples for each classification
- Add "suggested classification" based on description (AI-powered)
- Multi-language support for more languages