Marwan Alwali 0a037d3d9d update
2025-09-01 11:26:11 +03:00

96 lines
6.3 KiB
Python

"""
Quality app URLs with comprehensive CRUD operations.
"""
from django.urls import path, include
from . import views
app_name = 'quality'
urlpatterns = [
# ============================================================================
# DASHBOARD AND OVERVIEW
# ============================================================================
path('', views.QualityDashboardView.as_view(), name='dashboard'),
# ============================================================================
# QUALITY INDICATOR URLS (FULL CRUD - Master Data)
# ============================================================================
path('indicators/', views.QualityIndicatorListView.as_view(), name='quality_indicator_list'),
path('indicators/create/', views.QualityIndicatorCreateView.as_view(), name='quality_indicator_create'),
path('indicators/<int:pk>/', views.QualityIndicatorDetailView.as_view(), name='quality_indicator_detail'),
path('indicators/<int:pk>/update/', views.QualityIndicatorUpdateView.as_view(), name='quality_indicator_update'),
path('indicators/<int:pk>/delete/', views.QualityIndicatorDeleteView.as_view(), name='quality_indicator_delete'),
# ============================================================================
# IMPROVEMENT PROJECT URLS (FULL CRUD - Operational Data)
# ============================================================================
path('projects/', views.ImprovementProjectListView.as_view(), name='improvement_project_list'),
path('projects/create/', views.ImprovementProjectCreateView.as_view(), name='improvement_project_create'),
path('projects/<int:pk>/', views.ImprovementProjectDetailView.as_view(), name='improvement_project_detail'),
path('projects/<int:pk>/update/', views.ImprovementProjectUpdateView.as_view(), name='improvement_project_update'),
path('projects/<int:pk>/delete/', views.ImprovementProjectDeleteView.as_view(), name='improvement_project_delete'),
# ============================================================================
# AUDIT PLAN URLS (LIMITED CRUD - Operational Data)
# ============================================================================
path('audits/', views.AuditPlanListView.as_view(), name='audit_plan_list'),
path('audits/create/', views.AuditPlanCreateView.as_view(), name='audit_plan_create'),
path('audits/<int:pk>/', views.AuditPlanDetailView.as_view(), name='audit_plan_detail'),
path('audits/<int:pk>/update/', views.AuditPlanUpdateView.as_view(), name='audit_plan_update'),
# Note: No delete view for audit plans - use status updates instead
# ============================================================================
# QUALITY MEASUREMENT URLS (LIMITED CRUD - Operational Data)
# ============================================================================
path('measurements/', views.QualityMeasurementListView.as_view(), name='measurement_list'),
path('measurements/create/', views.QualityMeasurementCreateView.as_view(), name='measurement_create'),
path('measurements/<int:pk>/', views.QualityMeasurementDetailView.as_view(), name='measurement_detail'),
path('measurements/<int:pk>/update/', views.QualityMeasurementUpdateView.as_view(), name='measurement_update'),
# Note: No delete view for measurements - operational tracking data
# ============================================================================
# RISK ASSESSMENT URLS (RESTRICTED CRUD - Clinical/Operational Data)
# ============================================================================
path('risks/', views.RiskAssessmentListView.as_view(), name='risk_assessment_list'),
path('risks/create/', views.RiskAssessmentCreateView.as_view(), name='risk_assessment_create'),
path('risks/<int:pk>/', views.RiskAssessmentDetailView.as_view(), name='risk_assessment_detail'),
path('risks/<int:pk>/update/', views.RiskAssessmentUpdateView.as_view(), name='risk_assessment_update'),
# Note: No delete view for risk assessments - limited updates after approval
# ============================================================================
# INCIDENT REPORT URLS (APPEND-ONLY - Clinical Records)
# ============================================================================
path('incidents/', views.IncidentReportListView.as_view(), name='incident_report_list'),
path('incidents/create/', views.IncidentReportCreateView.as_view(), name='incident_report_create'),
path('incidents/<int:pk>/', views.IncidentReportDetailView.as_view(), name='incident_report_detail'),
# Note: No update/delete views for incident reports - append-only for patient safety
# ============================================================================
# AUDIT FINDING URLS (APPEND-ONLY - Audit Records)
# ============================================================================
path('findings/', views.AuditFindingListView.as_view(), name='audit_finding_list'),
path('findings/create/', views.AuditFindingCreateView.as_view(), name='audit_finding_create'),
path('findings/<int:pk>/', views.AuditFindingDetailView.as_view(), name='audit_finding_detail'),
# Note: No update/delete views for audit findings - append-only for compliance
# ============================================================================
# HTMX ENDPOINTS FOR REAL-TIME UPDATES
# ============================================================================
path('htmx/stats/', views.quality_stats, name='quality_stats'),
path('htmx/incident-search/', views.incident_search, name='incident_search'),
# ============================================================================
# ACTION URLS FOR WORKFLOW OPERATIONS
# ============================================================================
path('risks/<int:assessment_id>/approve/', views.approve_risk_assessment, name='approve_risk_assessment'),
path('measurements/<int:measurement_id>/verify/', views.verify_measurement, name='verify_measurement'),
path('incidents/<int:incident_id>/close/', views.close_incident, name='close_incident'),
# ============================================================================
# API ENDPOINTS
# ============================================================================
path('api/', include('quality.api.urls')),
]