- Versioned product specification table (Unrefined Shea Butter v1.0 seed) with spec-based QC evaluation replacing hard-coded thresholds - Structured QC results with test methods and four-eyes verification (submitter cannot self-approve) - reportlab IXG Quality Summary PDF auto-generated on quality approval, SHA-256 hashed; original independent lab PDF kept authoritative - CertificateOfAnalysis version/status/hash/approval/supersede lifecycle; commercial release publishes to buyers and triggers notification - EUDR evidence workflow: Facility, OriginZone, CollectorGroup, HarvestIntake, IntakeBatchLineage, DueDiligenceCase, EUDREvidence, RiskAssessment, MitigationAction, DueDiligenceStatementReference with rule-based completeness check and risk assessment (no AI legal conclusions) - Ops portal: QC Approvals, CoA Reviews, EUDR Compliance screens - Buyer portal: /portal/compliance page - 22 automated tests covering four-eyes, CAPA, PDF+hash, publish/notify, EUDR blocks and buyer isolation
24 lines
1.4 KiB
Python
24 lines
1.4 KiB
Python
from django.urls import path
|
|
from . import views
|
|
|
|
app_name = 'ops'
|
|
|
|
urlpatterns = [
|
|
path('', views.DashboardView.as_view(), name='dashboard'),
|
|
path('batches/', views.BatchListView.as_view(), name='batch_list'),
|
|
path('batches/<uuid:pk>/', views.BatchDetailView.as_view(), name='batch_detail'),
|
|
path('qc/', views.QCListView.as_view(), name='qc_list'),
|
|
path('qc/<uuid:pk>/', views.QCDetailView.as_view(), name='qc_detail'),
|
|
path('shipments/', views.ShipmentListView.as_view(), name='shipment_list'),
|
|
path('shipments/<uuid:pk>/', views.ShipmentDetailView.as_view(), name='shipment_detail'),
|
|
path('capa/', views.CAPAListView.as_view(), name='capa_list'),
|
|
path('capa/<uuid:pk>/', views.CAPADetailView.as_view(), name='capa_detail'),
|
|
path('documents/', views.DocumentListView.as_view(), name='document_list'),
|
|
path('esg/', views.ESGListView.as_view(), name='esg_list'),
|
|
path('qc/verify/', views.QCVerifyListView.as_view(), name='qc_verify_list'),
|
|
path('qc/verify/<uuid:pk>/', views.QCVerifyDetailView.as_view(), name='qc_verify_detail'),
|
|
path('coa/', views.COAReviewListView.as_view(), name='coa_review_list'),
|
|
path('coa/<uuid:pk>/', views.COAReviewDetailView.as_view(), name='coa_review_detail'),
|
|
path('eudr/', views.EUDRCaseListView.as_view(), name='eudr_list'),
|
|
path('eudr/<uuid:pk>/', views.EUDRCaseDetailView.as_view(), name='eudr_detail'),
|
|
]
|