Marwan Alwali ab2c4a36c5 update
2025-10-02 10:13:03 +03:00

109 lines
7.2 KiB
Python

"""
Laboratory app URLs with comprehensive CRUD operations.
"""
from django.urls import path, include
from . import views
app_name = 'laboratory'
urlpatterns = [
# ============================================================================
# DASHBOARD AND OVERVIEW
# ============================================================================
path('', views.LaboratoryDashboardView.as_view(), name='dashboard'),
# ============================================================================
# LAB TEST URLS (FULL CRUD - Master Data)
# ============================================================================
path('tests/', views.LabTestListView.as_view(), name='lab_test_list'),
path('tests/create/', views.LabTestCreateView.as_view(), name='lab_test_create'),
path('tests/<int:pk>/', views.LabTestDetailView.as_view(), name='lab_test_detail'),
path('tests/<int:pk>/update/', views.LabTestUpdateView.as_view(), name='lab_test_update'),
path('tests/<int:pk>/delete/', views.LabTestDeleteView.as_view(), name='lab_test_delete'),
# ============================================================================
# REFERENCE RANGE URLS (FULL CRUD - Reference Data)
# ============================================================================
path('reference-ranges/', views.ReferenceRangeListView.as_view(), name='reference_range_list'),
path('reference-ranges/create/', views.ReferenceRangeCreateView.as_view(), name='reference_range_create'),
path('reference-ranges/<int:pk>/', views.ReferenceRangeDetailView.as_view(), name='reference_range_detail'),
path('reference-ranges/<int:pk>/update/', views.ReferenceRangeUpdateView.as_view(), name='reference_range_update'),
path('reference-ranges/<int:pk>/delete/', views.ReferenceRangeDeleteView.as_view(), name='reference_range_delete'),
# ============================================================================
# LAB ORDER URLS (RESTRICTED CRUD - Clinical Orders)
# ============================================================================
path('orders/', views.LabOrderListView.as_view(), name='lab_order_list'),
path('orders/create/', views.LabOrderCreateView.as_view(), name='lab_order_create'),
path('orders/<int:pk>/', views.LabOrderDetailView.as_view(), name='lab_order_detail'),
path('orders/<int:pk>/update/', views.LabOrderUpdateView.as_view(), name='lab_order_update'),
# Note: No delete view for clinical orders - use status updates instead
# ============================================================================
# SPECIMEN URLS (RESTRICTED CRUD - Clinical Data)
# ============================================================================
path('specimens/', views.SpecimenListView.as_view(), name='specimen_list'),
path('specimens/create/', views.SpecimenCreateView.as_view(), name='specimen_create'),
path('specimens/<int:pk>/', views.SpecimenDetailView.as_view(), name='specimen_detail'),
path('specimens/<int:pk>/update/', views.SpecimenUpdateView.as_view(), name='specimen_update'),
# Note: No delete view for specimens - use status updates instead
# ============================================================================
# LAB RESULT URLS (APPEND-ONLY - Clinical Records)
# ============================================================================
path('results/', views.LabResultListView.as_view(), name='lab_result_list'),
path('results/create/', views.LabResultCreateView.as_view(), name='lab_result_create'),
path('results/<int:pk>/', views.LabResultDetailView.as_view(), name='lab_result_detail'),
# Note: No update/delete views for results - append-only for clinical records
# ============================================================================
# LAB RESULT ACTION URLS
# ============================================================================
path('results/<int:result_id>/verify/', views.verify_result, name='verify_result'),
path('results/<int:result_id>/review/', views.review_result, name='review_result'),
path('results/<int:result_id>/email/', views.email_result, name='email_result'),
path('results/<int:result_id>/notify-critical/', views.notify_critical, name='notify_critical'),
path('results/bulk-verify/', views.bulk_verify_results, name='lab_result_bulk_verify'),
path('results/bulk-release/', views.bulk_release_results, name='lab_result_bulk_release'),
path('results/print-reports/', views.print_result_reports, name='lab_result_print_reports'),
path('results/export/', views.export_results, name='lab_result_export'),
# ============================================================================
# HTMX ENDPOINTS FOR LAB RESULTS
# ============================================================================
path('htmx/results/stats/', views.htmx_result_stats, name='htmx_result_stats'),
path('htmx/results/filter/', views.htmx_filter_results, name='htmx_filter_results'),
path('htmx/results/search/', views.htmx_search_results, name='htmx_search_results'),
# ============================================================================
# QUALITY CONTROL URLS (LIMITED CRUD - Operational Data)
# ============================================================================
path('quality-control/', views.QualityControlListView.as_view(), name='quality_control_list'),
path('quality-control/create/', views.QualityControlCreateView.as_view(), name='quality_control_create'),
path('quality-control/<int:pk>/', views.QualityControlDetailView.as_view(), name='quality_control_detail'),
path('quality-control/<int:pk>/update/', views.QualityControlUpdateView.as_view(), name='quality_control_update'),
# Note: No delete view for QC records - operational data should be preserved
# ============================================================================
# HTMX ENDPOINTS FOR REAL-TIME UPDATES
# ============================================================================
path('htmx/stats/', views.laboratory_stats, name='laboratory_stats'),
path('htmx/order-search/', views.order_search, name='order_search'),
path('api/check-critical-results/', views.check_critical_results, name='check_critical_results'),
# ============================================================================
# ACTION URLS FOR WORKFLOW OPERATIONS
# ============================================================================
path('orders/<int:order_id>/receive-specimen/', views.receive_specimen, name='receive_specimen'),
path('orders/<int:order_id>/start-processing/', views.start_processing, name='start_processing'),
path('orders/<int:order_id>/schedule-collection/', views.schedule_collection, name='schedule_collection'),
path('orders/<int:order_id>/mark-collected/', views.mark_collected, name='mark_collected'),
path('specimens/<int:specimen_id>/reject/', views.reject_specimen, name='reject_specimen'),
# ============================================================================
# API ENDPOINTS
# ============================================================================
path('api/', include('laboratory.api.urls')),
]