90 lines
5.7 KiB
Python
90 lines
5.7 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
|
|
|
|
# ============================================================================
|
|
# 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'),
|
|
|
|
# ============================================================================
|
|
# 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')),
|
|
]
|
|
|