""" 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//', views.LabTestDetailView.as_view(), name='lab_test_detail'), path('tests//update/', views.LabTestUpdateView.as_view(), name='lab_test_update'), path('tests//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//', views.ReferenceRangeDetailView.as_view(), name='reference_range_detail'), path('reference-ranges//update/', views.ReferenceRangeUpdateView.as_view(), name='reference_range_update'), path('reference-ranges//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//', views.LabOrderDetailView.as_view(), name='lab_order_detail'), path('orders//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//', views.SpecimenDetailView.as_view(), name='specimen_detail'), path('specimens//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//', 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//verify/', views.verify_result, name='verify_result'), path('results//review/', views.review_result, name='review_result'), path('results//email/', views.email_result, name='email_result'), path('results//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//', views.QualityControlDetailView.as_view(), name='quality_control_detail'), path('quality-control//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//receive-specimen/', views.receive_specimen, name='receive_specimen'), path('orders//start-processing/', views.start_processing, name='start_processing'), path('orders//schedule-collection/', views.schedule_collection, name='schedule_collection'), path('orders//mark-collected/', views.mark_collected, name='mark_collected'), path('specimens//reject/', views.reject_specimen, name='reject_specimen'), # ============================================================================ # API ENDPOINTS # ============================================================================ path('api/', include('laboratory.api.urls')), ]