- 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
31 lines
1.3 KiB
Python
31 lines
1.3 KiB
Python
from django.contrib import admin
|
|
from django.http import HttpResponseRedirect
|
|
from django.urls import path, include
|
|
from django.conf import settings
|
|
from django.conf.urls.static import static
|
|
from rest_framework.authtoken import views as drf_auth
|
|
|
|
urlpatterns = [
|
|
path("", lambda r: HttpResponseRedirect("/admin/")),
|
|
path("grappelli/", include("grappelli.urls")),
|
|
path("admin/", admin.site.urls),
|
|
path("oidc/", include("mozilla_django_oidc.urls")),
|
|
path("api/auth/", drf_auth.obtain_auth_token),
|
|
path("api/", include("apps.users.urls")),
|
|
path("api/", include("apps.subscriptions.urls")),
|
|
path("api/", include("apps.batches.urls")),
|
|
path("api/", include("apps.qc.urls")),
|
|
path("api/", include("apps.shipments.urls")),
|
|
path("api/", include("apps.documents.urls")),
|
|
path("api/", include("apps.capa.urls")),
|
|
path("api/", include("apps.esg.urls")),
|
|
path("api/", include("apps.compliance.urls")),
|
|
path("api/", include("apps.ai.urls")),
|
|
path("api/", include("apps.notifications.urls")),
|
|
path("ops/", include("apps.ops.urls")),
|
|
path("portal/", include("apps.buyer.urls")),
|
|
]
|
|
|
|
if settings.DEBUG:
|
|
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
|
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|