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

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')),
]