110 lines
7.0 KiB
Python
110 lines
7.0 KiB
Python
"""
|
|
Radiology app URLs with comprehensive CRUD operations.
|
|
"""
|
|
|
|
from django.urls import path, include
|
|
from . import views
|
|
|
|
app_name = 'radiology'
|
|
|
|
urlpatterns = [
|
|
# ============================================================================
|
|
# DASHBOARD AND OVERVIEW
|
|
# ============================================================================
|
|
path('', views.RadiologyDashboardView.as_view(), name='dashboard'),
|
|
|
|
# ============================================================================
|
|
# REPORT TEMPLATE URLS (FULL CRUD - Master Data)
|
|
# ============================================================================
|
|
path('templates/', views.ReportTemplateListView.as_view(), name='report_template_list'),
|
|
path('templates/create/', views.ReportTemplateCreateView.as_view(), name='report_template_create'),
|
|
path('templates/<int:pk>/', views.ReportTemplateDetailView.as_view(), name='report_template_detail'),
|
|
path('templates/<int:pk>/update/', views.ReportTemplateUpdateView.as_view(), name='report_template_update'),
|
|
path('templates/<int:pk>/delete/', views.ReportTemplateDeleteView.as_view(), name='report_template_delete'),
|
|
|
|
# ============================================================================
|
|
# IMAGING ORDER URLS (RESTRICTED CRUD - Clinical Orders)
|
|
# ============================================================================
|
|
path('orders/', views.ImagingOrderListView.as_view(), name='imaging_order_list'),
|
|
path('orders/create/', views.ImagingOrderCreateView.as_view(), name='imaging_order_create'),
|
|
path('orders/<int:pk>/', views.ImagingOrderDetailView.as_view(), name='imaging_order_detail'),
|
|
path('orders/<int:pk>/update/', views.ImagingOrderUpdateView.as_view(), name='imaging_order_update'),
|
|
# Note: No delete view for clinical orders - use status updates instead
|
|
|
|
# ============================================================================
|
|
# IMAGING STUDY URLS (RESTRICTED CRUD - Clinical Data)
|
|
# ============================================================================
|
|
path('studies/', views.ImagingStudyListView.as_view(), name='imaging_study_list'),
|
|
path('studies/create/', views.ImagingStudyCreateView.as_view(), name='imaging_study_create'),
|
|
path('studies/<int:pk>/', views.ImagingStudyDetailView.as_view(), name='imaging_study_detail'),
|
|
path('studies/<int:pk>/update/', views.ImagingStudyUpdateView.as_view(), name='imaging_study_update'),
|
|
# Note: No delete view for studies - use status updates instead
|
|
|
|
# ============================================================================
|
|
# IMAGING SERIES URLS (RESTRICTED CRUD - Clinical Data)
|
|
# ============================================================================
|
|
# urls.py
|
|
path('studies/<int:pk>/series/', views.ImagingSeriesListView.as_view(), name='imaging_series_list'),
|
|
path('series/<int:pk>/', views.ImagingSeriesDetailView.as_view(), name='imaging_series_detail'),
|
|
path('series/create/', views.ImagingSeriesCreateView.as_view(), name='imaging_series_create'),
|
|
# path('series/<uuid:pk>/edit/', views.ImagingSeriesUpdateView.as_view(), name='imaging_series_edit'),
|
|
# path('series/<uuid:pk>/delete/', views.ImagingSeriesDeleteView.as_view(), name='imaging_series_delete'),
|
|
|
|
# Note: Limited update capabilities for series data
|
|
|
|
# ============================================================================
|
|
# DICOM IMAGE URLS (READ-ONLY - System Generated)
|
|
# ============================================================================
|
|
path('images/', views.DICOMImageListView.as_view(), name='dicom_image_list'),
|
|
path('images/<int:pk>/', views.DICOMImageDetailView.as_view(), name='dicom_image_detail'),
|
|
# Note: No create/update/delete views for DICOM images - system generated
|
|
|
|
# ============================================================================
|
|
# DICOM VIEWER URLS
|
|
# ============================================================================
|
|
path('viewer/image/<int:pk>/', views.DICOMImageViewerView.as_view(), name='dicom_image_viewer'),
|
|
path('viewer/series/<int:pk>/', views.DICOMSeriesViewerView.as_view(), name='dicom_series_viewer'),
|
|
|
|
# ============================================================================
|
|
# DICOM FILE SERVING URLS
|
|
# ============================================================================
|
|
path('files/image/<uuid:image_id>/', views.dicom_image_file, name='dicom_image_file'),
|
|
path('files/thumbnail/<uuid:image_id>/', views.dicom_image_thumbnail, name='dicom_image_thumbnail'),
|
|
path('files/preview/<uuid:image_id>/', views.dicom_image_preview, name='dicom_image_preview'),
|
|
|
|
# ============================================================================
|
|
# DICOM METADATA AND NAVIGATION URLS
|
|
# ============================================================================
|
|
path('metadata/<uuid:image_id>/', views.dicom_metadata_json, name='dicom_metadata_json'),
|
|
path('series/<uuid:series_id>/images/', views.series_images_json, name='series_images_json'),
|
|
path('study/<uuid:study_id>/series/', views.study_series_json, name='study_series_json'),
|
|
|
|
# ============================================================================
|
|
# RADIOLOGY REPORT URLS (APPEND-ONLY - Clinical Records)
|
|
# ============================================================================
|
|
path('reports/', views.RadiologyReportListView.as_view(), name='radiology_report_list'),
|
|
path('reports/create/', views.RadiologyReportCreateView.as_view(), name='radiology_report_create'),
|
|
path('reports/<int:pk>/', views.RadiologyReportDetailView.as_view(), name='radiology_report_detail'),
|
|
# Note: No update/delete views for reports - append-only for clinical records
|
|
|
|
# ============================================================================
|
|
# HTMX ENDPOINTS FOR REAL-TIME UPDATES
|
|
# ============================================================================
|
|
path('htmx/stats/', views.radiology_stats, name='radiology_stats'),
|
|
path('htmx/order-search/', views.order_search, name='order_search'),
|
|
|
|
# ============================================================================
|
|
# ACTION URLS FOR WORKFLOW OPERATIONS
|
|
# ============================================================================
|
|
path('orders/<int:order_id>/schedule-study/', views.schedule_study, name='schedule_study'),
|
|
path('studies/<uuid:study_id>/start/', views.start_study, name='start_study'),
|
|
path('studies/<uuid:study_id>/complete/', views.complete_study, name='complete_study'),
|
|
path('studies/<int:study_id>/dictate-report/', views.dictate_report, name='dictate_report'),
|
|
path('reports/<int:report_id>/sign/', views.sign_report, name='sign_report'),
|
|
|
|
# ============================================================================
|
|
# API ENDPOINTS
|
|
# ============================================================================
|
|
path('api/', include('radiology.api.urls')),
|
|
]
|