# PX360 - UI Implementation Guide **Last Updated:** December 15, 2025, 10:00 AM (Asia/Riyadh) **Status:** Complaints Console Complete, Action Center 75% Complete --- ## 📦 What Has Been Completed ### 1. Complaints Console (100% ✅) **Location:** `/complaints/` **Files Created:** - `apps/complaints/ui_views.py` (500+ lines) - `templates/complaints/complaint_list.html` (400+ lines) - `templates/complaints/complaint_detail.html` (600+ lines) - `templates/complaints/complaint_form.html` (300+ lines) - URLs configured and integrated **Features:** - ✅ Advanced list view with 8 filter types - ✅ Multiple view tabs (All, My, Overdue, etc.) - ✅ Detail view with SLA countdown - ✅ Timeline visualization - ✅ Workflow actions (assign, status change, notes, escalate) - ✅ Create form with cascading selects - ✅ RBAC enforcement - ✅ Audit logging ### 2. PX Action Center Console (75% ✅) **Location:** `/actions/` **Files Created:** - `apps/px_action_center/ui_views.py` (500+ lines) ✅ - `templates/actions/action_list.html` (600+ lines) ✅ - `templates/actions/action_detail.html` - **NEEDS TO BE CREATED** **Completed:** - ✅ All Django views (list, detail, assign, status change, notes, escalate, approve) - ✅ List template with 8 view tabs - ✅ Advanced filters - ✅ Source badges (survey, complaint, social, call center) - ✅ Escalation level indicators **Remaining:** - ⏳ Action detail template (similar to complaint detail but with:) - SLA progress bar (visual percentage) - Evidence upload section - Approval workflow UI - Action plan and outcome fields - ⏳ URL routing configuration - ⏳ Sidebar navigation update --- ## 🚀 How to Complete Action Center (2-3 hours) ### Step 1: Create Action Detail Template Create `templates/actions/action_detail.html` based on `templates/complaints/complaint_detail.html`: **Key Differences:** 1. **SLA Progress Bar** - Add visual progress indicator: ```html
{{ sla_progress }}%
``` 2. **Evidence Section** - Add evidence upload and display: ```html
Evidence
{% for evidence in evidence_attachments %} {% endfor %} {% if can_edit %}
{% endif %}
``` 3. **Approval Workflow** - Add approval section: ```html {% if action.status == 'pending_approval' and can_approve %}
Approval Required
{% csrf_token %}
{% endif %} ``` 4. **Action Plan & Outcome** - Add text areas: ```html
``` ### Step 2: Configure URLs Update `apps/px_action_center/urls.py`: ```python from django.urls import include, path from rest_framework.routers import DefaultRouter from .views import PXActionViewSet, PXActionSLAConfigViewSet, RoutingRuleViewSet from . import ui_views app_name = 'actions' router = DefaultRouter() router.register(r'api/actions', PXActionViewSet, basename='action-api') router.register(r'api/sla-configs', PXActionSLAConfigViewSet, basename='sla-config-api') router.register(r'api/routing-rules', RoutingRuleViewSet, basename='routing-rule-api') urlpatterns = [ # UI Views path('', ui_views.action_list, name='action_list'), path('/', ui_views.action_detail, name='action_detail'), path('/assign/', ui_views.action_assign, name='action_assign'), path('/change-status/', ui_views.action_change_status, name='action_change_status'), path('/add-note/', ui_views.action_add_note, name='action_add_note'), path('/escalate/', ui_views.action_escalate, name='action_escalate'), path('/approve/', ui_views.action_approve, name='action_approve'), # API Routes path('', include(router.urls)), ] ``` ### Step 3: Update Main URLs Update `config/urls.py`: ```python # UI Pages path('complaints/', include('apps.complaints.urls')), path('actions/', include('apps.px_action_center.urls')), # ADD THIS LINE ``` ### Step 4: Update Sidebar Navigation Update `templates/layouts/partials/sidebar.html`: ```html ``` --- ## 📋 Remaining Modules (Priority Order) ### 3. Public Survey Form (CRITICAL - 4-6 hours) **Why Critical:** Patient-facing, required for survey responses **Files to Create:** - `apps/surveys/public_views.py` - `templates/surveys/public_form.html` - `templates/surveys/thank_you.html` **Key Features:** - Mobile-first responsive design - Bilingual toggle (AR/EN) - Token-based secure access - Progress indicator - Question type rendering (Rating, NPS, Likert, Multiple Choice, Text) - Form validation - Thank you page **Implementation Pattern:** ```python @require_http_methods(["GET", "POST"]) def survey_form(request, token): """Public survey form - no login required""" try: survey = SurveyInstance.objects.get( access_token=token, status='sent', expires_at__gt=timezone.now() ) except SurveyInstance.DoesNotExist: return render(request, 'surveys/invalid_token.html') if request.method == 'POST': # Process responses # Calculate score # Update survey status # Create PX action if negative return redirect('surveys:thank_you', token=token) return render(request, 'surveys/public_form.html', {'survey': survey}) ``` ### 4. Journey Console (8-10 hours) **Files to Create:** - `apps/journeys/ui_views.py` - `templates/journeys/template_list.html` - `templates/journeys/template_form.html` (stage builder) - `templates/journeys/instance_list.html` - `templates/journeys/instance_detail.html` (progress stepper) **Key Features:** - Template CRUD - Stage management (add, edit, reorder, delete) - Survey binding per stage - Instance monitoring with progress visualization - Event timeline ### 5. Survey Console (8-10 hours) **Files to Create:** - `apps/surveys/ui_views.py` - `templates/surveys/template_list.html` - `templates/surveys/template_form.html` (question builder) - `templates/surveys/instance_list.html` - `templates/surveys/instance_detail.html` - `templates/surveys/analytics.html` **Key Features:** - Template CRUD - Question builder (add, edit, reorder, delete) - Branching logic editor - Instance monitoring - Analytics dashboard with charts ### 6. Social Media Monitoring (4-6 hours) **Files to Create:** - `apps/social/ui_views.py` - `templates/social/mention_list.html` - `templates/social/mention_detail.html` ### 7. Call Center Console (4-6 hours) **Files to Create:** - `apps/callcenter/ui_views.py` - `templates/callcenter/interaction_list.html` - `templates/callcenter/interaction_detail.html` - `templates/callcenter/dashboard.html` ### 8. Analytics/KPI Console (6-8 hours) **Files to Create:** - `apps/analytics/ui_views.py` - `templates/analytics/dashboard.html` - `templates/analytics/kpi_list.html` ### 9. Configuration Console (4-6 hours) **Files to Create:** - `apps/core/config_views.py` - `templates/config/dashboard.html` - `templates/config/sla_config.html` - `templates/config/routing_rules.html` --- ## 🎨 Established Design Patterns ### Layout Structure ``` base.html ├── sidebar (navigation) ├── topbar (search, notifications, user menu) └── content ├── page header ├── statistics cards ├── view tabs (optional) ├── filter panel (collapsible) ├── table toolbar ├── data table/cards └── pagination ``` ### Color Scheme - **Primary:** #667eea (Purple gradient) - **Success:** #388e3c (Green) - **Warning:** #f57c00 (Orange) - **Danger:** #d32f2f (Red) - **Info:** #1976d2 (Blue) ### Badge Classes ```css .status-badge { /* Status indicators */ } .severity-badge { /* Severity levels */ } .source-badge { /* Source types */ } .overdue-badge { /* Overdue items */ } .escalation-badge { /* Escalation levels */ } ``` ### Common Components - **Stat Cards:** 4-column grid with icons - **Filter Panel:** Collapsible with toggle button - **Timeline:** Vertical timeline with colored dots - **Progress Bar:** Bootstrap progress with percentage - **Tabs:** Bootstrap nav-tabs for content sections - **Modals:** Bootstrap modals for confirmations --- ## 🔧 Technical Guidelines ### Query Optimization ```python queryset = Model.objects.select_related( 'foreign_key1', 'foreign_key2' ).prefetch_related( 'many_to_many', 'reverse_foreign_key' ) ``` ### RBAC Pattern ```python user = request.user if user.is_px_admin(): pass # See all elif user.is_hospital_admin() and user.hospital: queryset = queryset.filter(hospital=user.hospital) elif user.hospital: queryset = queryset.filter(hospital=user.hospital) else: queryset = queryset.none() ``` ### Audit Logging ```python AuditService.log( event_type='action_type', description='Description of action', user=request.user, content_object=object, metadata={'key': 'value'} ) ``` ### Flash Messages ```python messages.success(request, "Operation successful.") messages.error(request, "Operation failed.") messages.warning(request, "Warning message.") messages.info(request, "Information message.") ``` --- ## 📊 Progress Tracking **Overall Project:** 93% Complete - Backend: 90% ✅ - UI: 33% (was 25%) - Base Layout: 100% ✅ - Dashboard: 100% ✅ - Complaints: 100% ✅ - Actions: 75% ⏳ - Journeys: 0% - Surveys: 0% - Public Survey: 0% - Social/Call/Analytics/Config: 0% **Estimated Remaining Time:** 40-50 hours - Complete Actions: 2-3 hours - Public Survey Form: 4-6 hours - Journey Console: 8-10 hours - Survey Console: 8-10 hours - Other Consoles: 18-24 hours --- ## 🎯 Quick Win Strategy **To reach 50% UI completion quickly (next 10-12 hours):** 1. ✅ Complete Action Center (2-3 hours) 2. ✅ Public Survey Form (4-6 hours) - CRITICAL 3. ✅ Basic Journey Instance Viewer (3-4 hours) - Skip template builder for now This would bring UI to 50% and make the system functional for patient surveys. --- ## 📝 Testing Checklist ### Per Module: - [ ] List view loads with data - [ ] Filters work correctly - [ ] Pagination functions - [ ] Search returns results - [ ] Detail view displays all info - [ ] Workflow actions work - [ ] RBAC permissions enforced - [ ] Responsive on mobile - [ ] RTL support (Arabic) --- **Next Developer:** Start with completing the Action Center detail template using the complaints detail template as a reference. The patterns are established and consistent across all modules.