@open-mercato/core 0.6.8-develop.6925.1.cefa200fa4 → 0.6.8-develop.6931.1.4a1e1c786b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +2 -2
- package/dist/generated/entities/eudr_due_diligence_statement/index.js +47 -0
- package/dist/generated/entities/eudr_due_diligence_statement/index.js.map +7 -0
- package/dist/generated/entities/eudr_evidence_submission/index.js +51 -0
- package/dist/generated/entities/eudr_evidence_submission/index.js.map +7 -0
- package/dist/generated/entities/eudr_mitigation_action/index.js +31 -0
- package/dist/generated/entities/eudr_mitigation_action/index.js.map +7 -0
- package/dist/generated/entities/eudr_plot/index.js +39 -0
- package/dist/generated/entities/eudr_plot/index.js.map +7 -0
- package/dist/generated/entities/eudr_product_mapping/index.js +31 -0
- package/dist/generated/entities/eudr_product_mapping/index.js.map +7 -0
- package/dist/generated/entities/eudr_risk_assessment/index.js +35 -0
- package/dist/generated/entities/eudr_risk_assessment/index.js.map +7 -0
- package/dist/generated/entities.ids.generated.js +9 -0
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +120 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/ui.js +3 -0
- package/dist/helpers/integration/ui.js.map +2 -2
- package/dist/modules/attachments/fields/attachment.js +5 -1
- package/dist/modules/attachments/fields/attachment.js.map +2 -2
- package/dist/modules/attachments/lib/crud.js +3 -1
- package/dist/modules/attachments/lib/crud.js.map +2 -2
- package/dist/modules/eudr/acl.js +43 -0
- package/dist/modules/eudr/acl.js.map +7 -0
- package/dist/modules/eudr/ai-agents.js +205 -0
- package/dist/modules/eudr/ai-agents.js.map +7 -0
- package/dist/modules/eudr/ai-tools/compliance-pack.js +495 -0
- package/dist/modules/eudr/ai-tools/compliance-pack.js.map +7 -0
- package/dist/modules/eudr/ai-tools/types.js +10 -0
- package/dist/modules/eudr/ai-tools/types.js.map +7 -0
- package/dist/modules/eudr/ai-tools.js +10 -0
- package/dist/modules/eudr/ai-tools.js.map +7 -0
- package/dist/modules/eudr/api/dashboard/widgets/compliance-overview/route.js +386 -0
- package/dist/modules/eudr/api/dashboard/widgets/compliance-overview/route.js.map +7 -0
- package/dist/modules/eudr/api/evidence-submissions/route.js +318 -0
- package/dist/modules/eudr/api/evidence-submissions/route.js.map +7 -0
- package/dist/modules/eudr/api/mitigation-actions/route.js +249 -0
- package/dist/modules/eudr/api/mitigation-actions/route.js.map +7 -0
- package/dist/modules/eudr/api/openapi.js +27 -0
- package/dist/modules/eudr/api/openapi.js.map +7 -0
- package/dist/modules/eudr/api/plots/import/route.js +294 -0
- package/dist/modules/eudr/api/plots/import/route.js.map +7 -0
- package/dist/modules/eudr/api/plots/route.js +279 -0
- package/dist/modules/eudr/api/plots/route.js.map +7 -0
- package/dist/modules/eudr/api/product-mappings/route.js +257 -0
- package/dist/modules/eudr/api/product-mappings/route.js.map +7 -0
- package/dist/modules/eudr/api/product-mappings/suggestions/apply/route.js +298 -0
- package/dist/modules/eudr/api/product-mappings/suggestions/apply/route.js.map +7 -0
- package/dist/modules/eudr/api/product-mappings/suggestions/route.js +132 -0
- package/dist/modules/eudr/api/product-mappings/suggestions/route.js.map +7 -0
- package/dist/modules/eudr/api/reports/annual/route.js +266 -0
- package/dist/modules/eudr/api/reports/annual/route.js.map +7 -0
- package/dist/modules/eudr/api/risk-assessments/route.js +300 -0
- package/dist/modules/eudr/api/risk-assessments/route.js.map +7 -0
- package/dist/modules/eudr/api/statements/[id]/export/route.js +631 -0
- package/dist/modules/eudr/api/statements/[id]/export/route.js.map +7 -0
- package/dist/modules/eudr/api/statements/[id]/readiness/route.js +111 -0
- package/dist/modules/eudr/api/statements/[id]/readiness/route.js.map +7 -0
- package/dist/modules/eudr/api/statements/route.js +314 -0
- package/dist/modules/eudr/api/statements/route.js.map +7 -0
- package/dist/modules/eudr/api/suppliers/compliance/route.js +173 -0
- package/dist/modules/eudr/api/suppliers/compliance/route.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.js +468 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.js +351 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js +17 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +313 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/page.js +360 -0
- package/dist/modules/eudr/backend/eudr/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js +346 -0
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/plots/create/page.js +253 -0
- package/dist/modules/eudr/backend/eudr/plots/create/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js +17 -0
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/plots/page.js +386 -0
- package/dist/modules/eudr/backend/eudr/plots/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.js +253 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.js +174 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js +17 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js +306 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.js +335 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.js +220 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js +17 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +324 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js +648 -0
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/statements/create/page.js +432 -0
- package/dist/modules/eudr/backend/eudr/statements/create/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js +17 -0
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/statements/page.js +309 -0
- package/dist/modules/eudr/backend/eudr/statements/page.js.map +7 -0
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js +16 -0
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js.map +7 -0
- package/dist/modules/eudr/ce.js +56 -0
- package/dist/modules/eudr/ce.js.map +7 -0
- package/dist/modules/eudr/commands/evidence-submissions.js +571 -0
- package/dist/modules/eudr/commands/evidence-submissions.js.map +7 -0
- package/dist/modules/eudr/commands/index.js +7 -0
- package/dist/modules/eudr/commands/index.js.map +7 -0
- package/dist/modules/eudr/commands/lifecycle-events.js +19 -0
- package/dist/modules/eudr/commands/lifecycle-events.js.map +7 -0
- package/dist/modules/eudr/commands/mitigation-actions.js +488 -0
- package/dist/modules/eudr/commands/mitigation-actions.js.map +7 -0
- package/dist/modules/eudr/commands/plots.js +517 -0
- package/dist/modules/eudr/commands/plots.js.map +7 -0
- package/dist/modules/eudr/commands/product-mappings.js +468 -0
- package/dist/modules/eudr/commands/product-mappings.js.map +7 -0
- package/dist/modules/eudr/commands/risk-assessments.js +599 -0
- package/dist/modules/eudr/commands/risk-assessments.js.map +7 -0
- package/dist/modules/eudr/commands/statements.js +747 -0
- package/dist/modules/eudr/commands/statements.js.map +7 -0
- package/dist/modules/eudr/components/CountrySelectField.js +64 -0
- package/dist/modules/eudr/components/CountrySelectField.js.map +7 -0
- package/dist/modules/eudr/components/GeometryInput.js +133 -0
- package/dist/modules/eudr/components/GeometryInput.js.map +7 -0
- package/dist/modules/eudr/components/MappingSuggestionsDialog.js +307 -0
- package/dist/modules/eudr/components/MappingSuggestionsDialog.js.map +7 -0
- package/dist/modules/eudr/components/MitigationActionsSection.js +345 -0
- package/dist/modules/eudr/components/MitigationActionsSection.js.map +7 -0
- package/dist/modules/eudr/components/OrderSelectField.js +88 -0
- package/dist/modules/eudr/components/OrderSelectField.js.map +7 -0
- package/dist/modules/eudr/components/PlotImportDialog.js +229 -0
- package/dist/modules/eudr/components/PlotImportDialog.js.map +7 -0
- package/dist/modules/eudr/components/PlotMapPreview.js +35 -0
- package/dist/modules/eudr/components/PlotMapPreview.js.map +7 -0
- package/dist/modules/eudr/components/PlotMapPreviewImpl.js +97 -0
- package/dist/modules/eudr/components/PlotMapPreviewImpl.js.map +7 -0
- package/dist/modules/eudr/components/PlotMultiSelectField.js +198 -0
- package/dist/modules/eudr/components/PlotMultiSelectField.js.map +7 -0
- package/dist/modules/eudr/components/RiskCriteriaField.js +128 -0
- package/dist/modules/eudr/components/RiskCriteriaField.js.map +7 -0
- package/dist/modules/eudr/components/StatementLifecycleBar.js +274 -0
- package/dist/modules/eudr/components/StatementLifecycleBar.js.map +7 -0
- package/dist/modules/eudr/components/StatementReadinessChecklist.js +56 -0
- package/dist/modules/eudr/components/StatementReadinessChecklist.js.map +7 -0
- package/dist/modules/eudr/components/StatementRiskSection.js +179 -0
- package/dist/modules/eudr/components/StatementRiskSection.js.map +7 -0
- package/dist/modules/eudr/components/crudErrorI18n.js +31 -0
- package/dist/modules/eudr/components/crudErrorI18n.js.map +7 -0
- package/dist/modules/eudr/components/formConfig.js +593 -0
- package/dist/modules/eudr/components/formConfig.js.map +7 -0
- package/dist/modules/eudr/components/plotForm.js +68 -0
- package/dist/modules/eudr/components/plotForm.js.map +7 -0
- package/dist/modules/eudr/data/enrichers.js +62 -0
- package/dist/modules/eudr/data/enrichers.js.map +7 -0
- package/dist/modules/eudr/data/entities.js +437 -0
- package/dist/modules/eudr/data/entities.js.map +7 -0
- package/dist/modules/eudr/data/validators.js +271 -0
- package/dist/modules/eudr/data/validators.js.map +7 -0
- package/dist/modules/eudr/encryption.js +33 -0
- package/dist/modules/eudr/encryption.js.map +7 -0
- package/dist/modules/eudr/events.js +38 -0
- package/dist/modules/eudr/events.js.map +7 -0
- package/dist/modules/eudr/index.js +15 -0
- package/dist/modules/eudr/index.js.map +7 -0
- package/dist/modules/eudr/lib/annual-report.js +104 -0
- package/dist/modules/eudr/lib/annual-report.js.map +7 -0
- package/dist/modules/eudr/lib/completeness.js +64 -0
- package/dist/modules/eudr/lib/completeness.js.map +7 -0
- package/dist/modules/eudr/lib/detail-read-scope.js +16 -0
- package/dist/modules/eudr/lib/detail-read-scope.js.map +7 -0
- package/dist/modules/eudr/lib/geometry.js +142 -0
- package/dist/modules/eudr/lib/geometry.js.map +7 -0
- package/dist/modules/eudr/lib/notifications.js +56 -0
- package/dist/modules/eudr/lib/notifications.js.map +7 -0
- package/dist/modules/eudr/lib/plural.js +26 -0
- package/dist/modules/eudr/lib/plural.js.map +7 -0
- package/dist/modules/eudr/lib/reference-data.js +240 -0
- package/dist/modules/eudr/lib/reference-data.js.map +7 -0
- package/dist/modules/eudr/lib/species.js +10 -0
- package/dist/modules/eudr/lib/species.js.map +7 -0
- package/dist/modules/eudr/lib/statement-lifecycle.js +84 -0
- package/dist/modules/eudr/lib/statement-lifecycle.js.map +7 -0
- package/dist/modules/eudr/lib/statement-seeding.js +49 -0
- package/dist/modules/eudr/lib/statement-seeding.js.map +7 -0
- package/dist/modules/eudr/migrations/Migration20260706102002_eudr.js +15 -0
- package/dist/modules/eudr/migrations/Migration20260706102002_eudr.js.map +7 -0
- package/dist/modules/eudr/migrations/Migration20260706152612_eudr.js +24 -0
- package/dist/modules/eudr/migrations/Migration20260706152612_eudr.js.map +7 -0
- package/dist/modules/eudr/migrations/Migration20260722100000_eudr.js +15 -0
- package/dist/modules/eudr/migrations/Migration20260722100000_eudr.js.map +7 -0
- package/dist/modules/eudr/notifications.js +58 -0
- package/dist/modules/eudr/notifications.js.map +7 -0
- package/dist/modules/eudr/search.js +186 -0
- package/dist/modules/eudr/search.js.map +7 -0
- package/dist/modules/eudr/setup.js +12 -0
- package/dist/modules/eudr/setup.js.map +7 -0
- package/dist/modules/eudr/subscribers/notify-mitigation-completed.js +34 -0
- package/dist/modules/eudr/subscribers/notify-mitigation-completed.js.map +7 -0
- package/dist/modules/eudr/subscribers/notify-risk-concluded.js +35 -0
- package/dist/modules/eudr/subscribers/notify-risk-concluded.js.map +7 -0
- package/dist/modules/eudr/subscribers/notify-statement-reference-issued.js +37 -0
- package/dist/modules/eudr/subscribers/notify-statement-reference-issued.js.map +7 -0
- package/dist/modules/eudr/subscribers/notify-statement-submitted.js +34 -0
- package/dist/modules/eudr/subscribers/notify-statement-submitted.js.map +7 -0
- package/dist/modules/eudr/subscribers/notify-statement-withdrawn.js +34 -0
- package/dist/modules/eudr/subscribers/notify-statement-withdrawn.js.map +7 -0
- package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-created.js +124 -0
- package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-created.js.map +7 -0
- package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-deleted.js +22 -0
- package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-deleted.js.map +7 -0
- package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.client.js +203 -0
- package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.client.js.map +7 -0
- package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.js +23 -0
- package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.js.map +7 -0
- package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.client.js +19 -0
- package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.client.js.map +7 -0
- package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.js +31 -0
- package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.js.map +7 -0
- package/dist/modules/eudr/widgets/injection/order-compliance/widget.client.js +100 -0
- package/dist/modules/eudr/widgets/injection/order-compliance/widget.client.js.map +7 -0
- package/dist/modules/eudr/widgets/injection/order-compliance/widget.js +17 -0
- package/dist/modules/eudr/widgets/injection/order-compliance/widget.js.map +7 -0
- package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.client.js +116 -0
- package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.client.js.map +7 -0
- package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.js +17 -0
- package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.js.map +7 -0
- package/dist/modules/eudr/widgets/injection-table.js +32 -0
- package/dist/modules/eudr/widgets/injection-table.js.map +7 -0
- package/dist/modules/notifications/lib/notificationService.js +67 -3
- package/dist/modules/notifications/lib/notificationService.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +121 -48
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/sales/api/documents/factory.js +17 -0
- package/dist/modules/sales/api/documents/factory.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +32 -18
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/data/entities.js +1 -0
- package/dist/modules/sales/data/entities.js.map +2 -2
- package/dist/modules/sales/migrations/Migration20260806120000_sales_tag_assignment_document_idx.js +17 -0
- package/dist/modules/sales/migrations/Migration20260806120000_sales_tag_assignment_document_idx.js.map +7 -0
- package/generated/entities/eudr_due_diligence_statement/index.ts +22 -0
- package/generated/entities/eudr_evidence_submission/index.ts +24 -0
- package/generated/entities/eudr_mitigation_action/index.ts +14 -0
- package/generated/entities/eudr_plot/index.ts +18 -0
- package/generated/entities/eudr_product_mapping/index.ts +14 -0
- package/generated/entities/eudr_risk_assessment/index.ts +16 -0
- package/generated/entities.ids.generated.ts +9 -0
- package/generated/entity-fields-registry.ts +120 -0
- package/package.json +7 -7
- package/src/helpers/integration/ui.ts +12 -0
- package/src/modules/attachments/fields/attachment.tsx +5 -0
- package/src/modules/attachments/lib/crud.ts +2 -0
- package/src/modules/eudr/acl.ts +39 -0
- package/src/modules/eudr/ai-agents.ts +258 -0
- package/src/modules/eudr/ai-tools/compliance-pack.ts +618 -0
- package/src/modules/eudr/ai-tools/types.ts +44 -0
- package/src/modules/eudr/ai-tools.ts +15 -0
- package/src/modules/eudr/api/dashboard/widgets/compliance-overview/route.ts +481 -0
- package/src/modules/eudr/api/evidence-submissions/route.ts +335 -0
- package/src/modules/eudr/api/mitigation-actions/route.ts +263 -0
- package/src/modules/eudr/api/openapi.ts +28 -0
- package/src/modules/eudr/api/plots/import/route.ts +369 -0
- package/src/modules/eudr/api/plots/route.ts +296 -0
- package/src/modules/eudr/api/product-mappings/route.ts +269 -0
- package/src/modules/eudr/api/product-mappings/suggestions/apply/route.ts +382 -0
- package/src/modules/eudr/api/product-mappings/suggestions/route.ts +169 -0
- package/src/modules/eudr/api/reports/annual/route.ts +457 -0
- package/src/modules/eudr/api/risk-assessments/route.ts +323 -0
- package/src/modules/eudr/api/statements/[id]/export/route.ts +713 -0
- package/src/modules/eudr/api/statements/[id]/readiness/route.ts +129 -0
- package/src/modules/eudr/api/statements/route.ts +329 -0
- package/src/modules/eudr/api/suppliers/compliance/route.ts +241 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.tsx +545 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.ts +13 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.tsx +383 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +379 -0
- package/src/modules/eudr/backend/eudr/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/page.tsx +477 -0
- package/src/modules/eudr/backend/eudr/plots/[id]/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/plots/[id]/page.tsx +404 -0
- package/src/modules/eudr/backend/eudr/plots/create/page.meta.ts +13 -0
- package/src/modules/eudr/backend/eudr/plots/create/page.tsx +267 -0
- package/src/modules/eudr/backend/eudr/plots/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/plots/page.tsx +442 -0
- package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.tsx +311 -0
- package/src/modules/eudr/backend/eudr/product-mappings/create/page.meta.ts +13 -0
- package/src/modules/eudr/backend/eudr/product-mappings/create/page.tsx +190 -0
- package/src/modules/eudr/backend/eudr/product-mappings/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +344 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.tsx +421 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/create/page.meta.ts +13 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/create/page.tsx +247 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +383 -0
- package/src/modules/eudr/backend/eudr/statements/[id]/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/statements/[id]/page.tsx +777 -0
- package/src/modules/eudr/backend/eudr/statements/create/page.meta.ts +13 -0
- package/src/modules/eudr/backend/eudr/statements/create/page.tsx +511 -0
- package/src/modules/eudr/backend/eudr/statements/page.meta.ts +12 -0
- package/src/modules/eudr/backend/eudr/statements/page.tsx +372 -0
- package/src/modules/eudr/ce.ts +52 -0
- package/src/modules/eudr/commands/evidence-submissions.ts +699 -0
- package/src/modules/eudr/commands/index.ts +6 -0
- package/src/modules/eudr/commands/lifecycle-events.ts +28 -0
- package/src/modules/eudr/commands/mitigation-actions.ts +574 -0
- package/src/modules/eudr/commands/plots.ts +627 -0
- package/src/modules/eudr/commands/product-mappings.ts +556 -0
- package/src/modules/eudr/commands/risk-assessments.ts +728 -0
- package/src/modules/eudr/commands/statements.ts +933 -0
- package/src/modules/eudr/components/CountrySelectField.tsx +77 -0
- package/src/modules/eudr/components/GeometryInput.tsx +170 -0
- package/src/modules/eudr/components/MappingSuggestionsDialog.tsx +385 -0
- package/src/modules/eudr/components/MitigationActionsSection.tsx +417 -0
- package/src/modules/eudr/components/OrderSelectField.tsx +116 -0
- package/src/modules/eudr/components/PlotImportDialog.tsx +277 -0
- package/src/modules/eudr/components/PlotMapPreview.tsx +46 -0
- package/src/modules/eudr/components/PlotMapPreviewImpl.tsx +111 -0
- package/src/modules/eudr/components/PlotMultiSelectField.tsx +238 -0
- package/src/modules/eudr/components/RiskCriteriaField.tsx +173 -0
- package/src/modules/eudr/components/StatementLifecycleBar.tsx +363 -0
- package/src/modules/eudr/components/StatementReadinessChecklist.tsx +82 -0
- package/src/modules/eudr/components/StatementRiskSection.tsx +242 -0
- package/src/modules/eudr/components/crudErrorI18n.ts +36 -0
- package/src/modules/eudr/components/formConfig.tsx +717 -0
- package/src/modules/eudr/components/plotForm.ts +75 -0
- package/src/modules/eudr/data/enrichers.ts +82 -0
- package/src/modules/eudr/data/entities.ts +369 -0
- package/src/modules/eudr/data/validators.ts +357 -0
- package/src/modules/eudr/encryption.ts +31 -0
- package/src/modules/eudr/events.ts +38 -0
- package/src/modules/eudr/i18n/de.json +747 -0
- package/src/modules/eudr/i18n/en.json +747 -0
- package/src/modules/eudr/i18n/es.json +747 -0
- package/src/modules/eudr/i18n/ko.json +747 -0
- package/src/modules/eudr/i18n/pl.json +747 -0
- package/src/modules/eudr/index.ts +13 -0
- package/src/modules/eudr/lib/annual-report.ts +120 -0
- package/src/modules/eudr/lib/completeness.ts +90 -0
- package/src/modules/eudr/lib/detail-read-scope.ts +44 -0
- package/src/modules/eudr/lib/geometry.ts +191 -0
- package/src/modules/eudr/lib/notifications.ts +85 -0
- package/src/modules/eudr/lib/plural.ts +36 -0
- package/src/modules/eudr/lib/reference-data.ts +128 -0
- package/src/modules/eudr/lib/species.ts +12 -0
- package/src/modules/eudr/lib/statement-lifecycle.ts +109 -0
- package/src/modules/eudr/lib/statement-seeding.ts +86 -0
- package/src/modules/eudr/migrations/.snapshot-open-mercato.json +2046 -0
- package/src/modules/eudr/migrations/Migration20260706102002_eudr.ts +16 -0
- package/src/modules/eudr/migrations/Migration20260706152612_eudr.ts +30 -0
- package/src/modules/eudr/migrations/Migration20260722100000_eudr.ts +17 -0
- package/src/modules/eudr/notifications.ts +56 -0
- package/src/modules/eudr/search.ts +212 -0
- package/src/modules/eudr/setup.ts +10 -0
- package/src/modules/eudr/subscribers/notify-mitigation-completed.ts +56 -0
- package/src/modules/eudr/subscribers/notify-risk-concluded.ts +58 -0
- package/src/modules/eudr/subscribers/notify-statement-reference-issued.ts +59 -0
- package/src/modules/eudr/subscribers/notify-statement-submitted.ts +49 -0
- package/src/modules/eudr/subscribers/notify-statement-withdrawn.ts +49 -0
- package/src/modules/eudr/subscribers/recompute-completeness-on-attachment-created.ts +189 -0
- package/src/modules/eudr/subscribers/recompute-completeness-on-attachment-deleted.ts +31 -0
- package/src/modules/eudr/widgets/dashboard/compliance-overview/widget.client.tsx +271 -0
- package/src/modules/eudr/widgets/dashboard/compliance-overview/widget.ts +24 -0
- package/src/modules/eudr/widgets/injection/eudr-product-column/widget.client.tsx +37 -0
- package/src/modules/eudr/widgets/injection/eudr-product-column/widget.ts +30 -0
- package/src/modules/eudr/widgets/injection/order-compliance/widget.client.tsx +131 -0
- package/src/modules/eudr/widgets/injection/order-compliance/widget.ts +16 -0
- package/src/modules/eudr/widgets/injection/supplier-compliance/widget.client.tsx +168 -0
- package/src/modules/eudr/widgets/injection/supplier-compliance/widget.ts +16 -0
- package/src/modules/eudr/widgets/injection-table.ts +31 -0
- package/src/modules/notifications/lib/notificationService.ts +83 -4
- package/src/modules/query_index/lib/engine.ts +139 -51
- package/src/modules/sales/api/documents/factory.ts +29 -0
- package/src/modules/sales/commands/documents.ts +65 -18
- package/src/modules/sales/data/entities.ts +1 -0
- package/src/modules/sales/migrations/.snapshot-open-mercato.json +10 -0
- package/src/modules/sales/migrations/Migration20260806120000_sales_tag_assignment_document_idx.ts +59 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
|
|
3
|
+
import { EUDR_RISK_CRITERIA_KEYS } from '../lib/reference-data'
|
|
4
|
+
|
|
5
|
+
export const EUDR_COMMODITIES = ['cattle', 'cocoa', 'coffee', 'oil_palm', 'rubber', 'soya', 'wood'] as const
|
|
6
|
+
export type EudrCommodity = (typeof EUDR_COMMODITIES)[number]
|
|
7
|
+
|
|
8
|
+
export const EUDR_SUBMISSION_STATUSES = ['draft', 'submitted', 'verified', 'rejected'] as const
|
|
9
|
+
export type EudrSubmissionStatus = (typeof EUDR_SUBMISSION_STATUSES)[number]
|
|
10
|
+
|
|
11
|
+
export const EUDR_STATEMENT_STATUSES = ['draft', 'submitted', 'available', 'withdrawn', 'archived'] as const
|
|
12
|
+
export type EudrStatementStatus = (typeof EUDR_STATEMENT_STATUSES)[number]
|
|
13
|
+
|
|
14
|
+
export const EUDR_PLOT_TYPES = ['point', 'polygon'] as const
|
|
15
|
+
export type EudrPlotType = (typeof EUDR_PLOT_TYPES)[number]
|
|
16
|
+
|
|
17
|
+
export const EUDR_RISK_TIERS = ['low', 'standard', 'high', 'mixed', 'unknown'] as const
|
|
18
|
+
export type EudrRiskTier = (typeof EUDR_RISK_TIERS)[number]
|
|
19
|
+
|
|
20
|
+
export const EUDR_RISK_CONCLUSIONS = ['negligible', 'non_negligible'] as const
|
|
21
|
+
export type EudrRiskConclusion = (typeof EUDR_RISK_CONCLUSIONS)[number]
|
|
22
|
+
|
|
23
|
+
export const EUDR_CRITERIA_ANSWERS = ['no_concern', 'concern', 'not_applicable'] as const
|
|
24
|
+
export type EudrCriteriaAnswer = (typeof EUDR_CRITERIA_ANSWERS)[number]
|
|
25
|
+
|
|
26
|
+
export const EUDR_MITIGATION_TYPES = [
|
|
27
|
+
'request_documents',
|
|
28
|
+
'supplier_audit',
|
|
29
|
+
'satellite_verification',
|
|
30
|
+
'certification_check',
|
|
31
|
+
'switch_sourcing',
|
|
32
|
+
'other',
|
|
33
|
+
] as const
|
|
34
|
+
export type EudrMitigationType = (typeof EUDR_MITIGATION_TYPES)[number]
|
|
35
|
+
|
|
36
|
+
export const EUDR_MITIGATION_STATUSES = ['planned', 'in_progress', 'completed', 'cancelled'] as const
|
|
37
|
+
export type EudrMitigationStatus = (typeof EUDR_MITIGATION_STATUSES)[number]
|
|
38
|
+
|
|
39
|
+
export const EUDR_ACTIVITY_TYPES = ['import', 'export', 'domestic_production', 'trade'] as const
|
|
40
|
+
export type EudrActivityType = (typeof EUDR_ACTIVITY_TYPES)[number]
|
|
41
|
+
|
|
42
|
+
export const EUDR_ACTOR_ROLES = ['operator', 'non_sme_trader', 'sme_trader'] as const
|
|
43
|
+
export type EudrActorRole = (typeof EUDR_ACTOR_ROLES)[number]
|
|
44
|
+
|
|
45
|
+
export const GEOJSON_TYPES = ['Feature', 'FeatureCollection', 'Point', 'Polygon', 'MultiPolygon'] as const
|
|
46
|
+
|
|
47
|
+
const uuid = () => z.string().uuid()
|
|
48
|
+
const geoJsonSizeLimit = 1_048_576
|
|
49
|
+
const serverComputedSubmissionFields = ['completenessScore', 'missingFields'] as const
|
|
50
|
+
const serverComputedPlotFields = ['validationWarnings', 'computedArea'] as const
|
|
51
|
+
const serverComputedRiskAssessmentFields = ['countryRisks', 'overallTier', 'isSimplified', 'assessedByName'] as const
|
|
52
|
+
const serverComputedMitigationActionFields = ['completedAt'] as const
|
|
53
|
+
const serverComputedStatementFields = ['submittedAt'] as const
|
|
54
|
+
const riskCriteriaKeySet = new Set(EUDR_RISK_CRITERIA_KEYS)
|
|
55
|
+
|
|
56
|
+
const productSnapshotSchema = z.object({
|
|
57
|
+
name: z.string().max(500).optional().nullable(),
|
|
58
|
+
sku: z.string().max(255).optional().nullable(),
|
|
59
|
+
})
|
|
60
|
+
const supplierSnapshotSchema = z.object({
|
|
61
|
+
displayName: z.string().max(500).optional().nullable(),
|
|
62
|
+
})
|
|
63
|
+
const orderSnapshotSchema = z.object({
|
|
64
|
+
orderNumber: z.string().max(255).optional().nullable(),
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
function rejectServerComputedFields(fields: readonly string[]): z.ZodType<unknown> {
|
|
68
|
+
return z.unknown().superRefine((input, context) => {
|
|
69
|
+
if (input === null || typeof input !== 'object' || Array.isArray(input)) return
|
|
70
|
+
const record = input as Record<string, unknown>
|
|
71
|
+
for (const field of fields) {
|
|
72
|
+
if (!(field in record)) continue
|
|
73
|
+
context.addIssue({
|
|
74
|
+
code: z.ZodIssueCode.custom,
|
|
75
|
+
path: [field],
|
|
76
|
+
message: 'eudr.errors.serverComputedField',
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function requiredUnknown(message: string): z.ZodType<unknown> {
|
|
83
|
+
return z.unknown().refine((value) => value !== undefined, { message })
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function isIsoDate(value: string): boolean {
|
|
87
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value)
|
|
88
|
+
if (match === null) return false
|
|
89
|
+
const year = Number(match[1])
|
|
90
|
+
const month = Number(match[2])
|
|
91
|
+
const day = Number(match[3])
|
|
92
|
+
const date = new Date(Date.UTC(year, month - 1, day))
|
|
93
|
+
return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Route mapInput parses these schemas first (string -> Date) and commands parse
|
|
97
|
+
// the mapped input again, so both schemas must also accept Date instances.
|
|
98
|
+
const isoDateSchema = () => z.union([
|
|
99
|
+
z.date(),
|
|
100
|
+
z
|
|
101
|
+
.string()
|
|
102
|
+
.refine(isIsoDate, { message: 'eudr.errors.invalidDate' })
|
|
103
|
+
.transform((value) => new Date(`${value}T00:00:00.000Z`)),
|
|
104
|
+
])
|
|
105
|
+
|
|
106
|
+
const isoDateTimeSchema = () => z.union([
|
|
107
|
+
z.date(),
|
|
108
|
+
z
|
|
109
|
+
.string()
|
|
110
|
+
.datetime({ message: 'eudr.errors.invalidDateTime' })
|
|
111
|
+
.transform((value) => new Date(value)),
|
|
112
|
+
])
|
|
113
|
+
|
|
114
|
+
const pastOrNowIsoDateTimeSchema = () => isoDateTimeSchema().refine((value) => value.getTime() <= Date.now(), {
|
|
115
|
+
message: 'eudr.errors.assessedAtInFuture',
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
const isoDateOrDateTimeSchema = () => z.union([isoDateSchema(), isoDateTimeSchema()])
|
|
119
|
+
|
|
120
|
+
// Country codes are validated through ICU rather than the shared country helper.
|
|
121
|
+
// That helper imports language-subtag-registry's JSON, and the build strips the
|
|
122
|
+
// import attribute Node's ESM loader requires, so importing it from server-side
|
|
123
|
+
// code (CLI, workers) fails with ERR_IMPORT_ATTRIBUTE_MISSING. UI components can
|
|
124
|
+
// keep using the helper because bundlers resolve the JSON themselves.
|
|
125
|
+
const countryDisplayNames = typeof Intl !== 'undefined' && typeof Intl.DisplayNames !== 'undefined'
|
|
126
|
+
? new Intl.DisplayNames(['en'], { type: 'region' })
|
|
127
|
+
: null
|
|
128
|
+
|
|
129
|
+
function isIsoCountryCode(value: string): boolean {
|
|
130
|
+
// Without ICU data there is nothing to check against, so accept the shape.
|
|
131
|
+
if (!countryDisplayNames) return true
|
|
132
|
+
try {
|
|
133
|
+
// Intl echoes the input back when it cannot resolve the region.
|
|
134
|
+
const label = countryDisplayNames.of(value)
|
|
135
|
+
return typeof label === 'string' && label !== value
|
|
136
|
+
} catch {
|
|
137
|
+
return false
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const countryCodeSchema = () => z
|
|
142
|
+
.string()
|
|
143
|
+
.regex(/^[A-Za-z]{2}$/)
|
|
144
|
+
.transform((value) => value.toUpperCase())
|
|
145
|
+
.refine(isIsoCountryCode, { message: 'eudr.errors.invalidCountry' })
|
|
146
|
+
|
|
147
|
+
const referencedStatementCodeSchema = (maxLength: number) => z
|
|
148
|
+
.string()
|
|
149
|
+
.trim()
|
|
150
|
+
.min(1)
|
|
151
|
+
.max(maxLength)
|
|
152
|
+
.regex(/^[A-Za-z0-9._/-]+$/, { message: 'eudr.errors.invalidReferenceIdentifier' })
|
|
153
|
+
.transform((value) => value.toUpperCase())
|
|
154
|
+
|
|
155
|
+
export const referencedStatementSchema = z.object({
|
|
156
|
+
referenceNumber: referencedStatementCodeSchema(32),
|
|
157
|
+
verificationNumber: referencedStatementCodeSchema(16).optional(),
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
export const geoJsonSchema = z
|
|
161
|
+
.object({
|
|
162
|
+
type: z.enum(GEOJSON_TYPES),
|
|
163
|
+
})
|
|
164
|
+
.passthrough()
|
|
165
|
+
.superRefine((value, context) => {
|
|
166
|
+
try {
|
|
167
|
+
const serialized = JSON.stringify(value)
|
|
168
|
+
if (serialized.length <= geoJsonSizeLimit) return
|
|
169
|
+
} catch {
|
|
170
|
+
context.addIssue({
|
|
171
|
+
code: z.ZodIssueCode.custom,
|
|
172
|
+
message: 'eudr.errors.geolocationTooLarge',
|
|
173
|
+
})
|
|
174
|
+
return
|
|
175
|
+
}
|
|
176
|
+
context.addIssue({
|
|
177
|
+
code: z.ZodIssueCode.custom,
|
|
178
|
+
message: 'eudr.errors.geolocationTooLarge',
|
|
179
|
+
})
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
export const productMappingCreateSchema = z.object({
|
|
183
|
+
productId: uuid(),
|
|
184
|
+
productSnapshot: productSnapshotSchema.optional().nullable(),
|
|
185
|
+
commodity: z.enum(EUDR_COMMODITIES),
|
|
186
|
+
hsCode: z.string().max(20).optional().nullable(),
|
|
187
|
+
speciesScientificName: z.string().trim().max(256).optional().nullable(),
|
|
188
|
+
speciesCommonName: z.string().trim().max(256).optional().nullable(),
|
|
189
|
+
isInScope: z.boolean().optional(),
|
|
190
|
+
notes: z.string().max(5000).optional().nullable(),
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
export const productMappingUpdateSchema = z
|
|
194
|
+
.object({
|
|
195
|
+
id: uuid(),
|
|
196
|
+
})
|
|
197
|
+
.merge(productMappingCreateSchema.partial())
|
|
198
|
+
|
|
199
|
+
const plotBaseSchema = z.object({
|
|
200
|
+
supplierEntityId: uuid(),
|
|
201
|
+
supplierSnapshot: supplierSnapshotSchema.optional().nullable(),
|
|
202
|
+
name: z.string().min(1).max(200),
|
|
203
|
+
externalId: z.string().max(100).optional().nullable(),
|
|
204
|
+
description: z.string().max(2000).optional().nullable(),
|
|
205
|
+
originCountry: countryCodeSchema(),
|
|
206
|
+
geometry: requiredUnknown('eudr.errors.geometryRequired'),
|
|
207
|
+
areaHa: z.coerce.number().positive().max(100_000).optional().nullable(),
|
|
208
|
+
producerName: z.string().max(500).optional().nullable(),
|
|
209
|
+
isActive: z.boolean().optional(),
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
export const plotCreateSchema = rejectServerComputedFields(serverComputedPlotFields).pipe(plotBaseSchema)
|
|
213
|
+
|
|
214
|
+
export const plotUpdateSchema = rejectServerComputedFields(serverComputedPlotFields).pipe(
|
|
215
|
+
z
|
|
216
|
+
.object({
|
|
217
|
+
id: uuid(),
|
|
218
|
+
})
|
|
219
|
+
.merge(plotBaseSchema.partial()),
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
const evidenceSubmissionBaseSchema = z.object({
|
|
223
|
+
supplierEntityId: uuid(),
|
|
224
|
+
supplierSnapshot: supplierSnapshotSchema.optional().nullable(),
|
|
225
|
+
commodity: z.enum(EUDR_COMMODITIES),
|
|
226
|
+
productMappingId: uuid().optional().nullable(),
|
|
227
|
+
statementId: uuid().optional().nullable(),
|
|
228
|
+
originCountry: countryCodeSchema().optional().nullable(),
|
|
229
|
+
geolocation: geoJsonSchema.optional().nullable(),
|
|
230
|
+
quantityKg: z.coerce.number().positive().optional().nullable(),
|
|
231
|
+
batchNumber: z.string().max(255).optional().nullable(),
|
|
232
|
+
harvestFrom: z.coerce.date().optional().nullable(),
|
|
233
|
+
harvestTo: z.coerce.date().optional().nullable(),
|
|
234
|
+
producerName: z.string().max(500).optional().nullable(),
|
|
235
|
+
attachmentIds: z.array(uuid()).max(100).optional(),
|
|
236
|
+
plotIds: z.array(uuid()).max(200).optional(),
|
|
237
|
+
status: z.enum(EUDR_SUBMISSION_STATUSES).optional(),
|
|
238
|
+
notes: z.string().max(5000).optional().nullable(),
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
function validateHarvestRange(input: { harvestFrom?: Date | null; harvestTo?: Date | null }, context: z.RefinementCtx): void {
|
|
242
|
+
if (!input.harvestFrom || !input.harvestTo || input.harvestFrom <= input.harvestTo) return
|
|
243
|
+
context.addIssue({
|
|
244
|
+
code: z.ZodIssueCode.custom,
|
|
245
|
+
path: ['harvestTo'],
|
|
246
|
+
message: 'eudr.errors.harvestRange',
|
|
247
|
+
})
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export const evidenceSubmissionCreateSchema = rejectServerComputedFields(serverComputedSubmissionFields).pipe(
|
|
251
|
+
evidenceSubmissionBaseSchema.superRefine(validateHarvestRange),
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
export const evidenceSubmissionUpdateSchema = rejectServerComputedFields(serverComputedSubmissionFields).pipe(
|
|
255
|
+
z
|
|
256
|
+
.object({
|
|
257
|
+
id: uuid(),
|
|
258
|
+
})
|
|
259
|
+
.merge(evidenceSubmissionBaseSchema.partial())
|
|
260
|
+
.superRefine(validateHarvestRange),
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
const riskCriteriaEntrySchema = z.object({
|
|
264
|
+
answer: z.enum(EUDR_CRITERIA_ANSWERS),
|
|
265
|
+
note: z.string().max(2000).optional().nullable(),
|
|
266
|
+
})
|
|
267
|
+
|
|
268
|
+
const riskCriteriaSchema = z.record(z.string(), riskCriteriaEntrySchema).superRefine((criteria, context) => {
|
|
269
|
+
for (const key of Object.keys(criteria)) {
|
|
270
|
+
if (riskCriteriaKeySet.has(key)) continue
|
|
271
|
+
context.addIssue({
|
|
272
|
+
code: z.ZodIssueCode.custom,
|
|
273
|
+
path: [key],
|
|
274
|
+
message: 'eudr.errors.invalidRiskCriterion',
|
|
275
|
+
})
|
|
276
|
+
}
|
|
277
|
+
})
|
|
278
|
+
|
|
279
|
+
const riskAssessmentBaseSchema = z.object({
|
|
280
|
+
statementId: uuid(),
|
|
281
|
+
criteria: riskCriteriaSchema,
|
|
282
|
+
conclusion: z.enum(EUDR_RISK_CONCLUSIONS),
|
|
283
|
+
reviewDueAt: isoDateOrDateTimeSchema().optional().nullable(),
|
|
284
|
+
assessedAt: pastOrNowIsoDateTimeSchema().optional(),
|
|
285
|
+
notes: z.string().max(4000).optional().nullable(),
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
export const riskAssessmentCreateSchema = rejectServerComputedFields(serverComputedRiskAssessmentFields).pipe(riskAssessmentBaseSchema)
|
|
289
|
+
|
|
290
|
+
export const riskAssessmentUpdateSchema = rejectServerComputedFields(serverComputedRiskAssessmentFields).pipe(
|
|
291
|
+
z
|
|
292
|
+
.object({
|
|
293
|
+
id: uuid(),
|
|
294
|
+
})
|
|
295
|
+
.merge(riskAssessmentBaseSchema.partial()),
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
const mitigationActionBaseSchema = z.object({
|
|
299
|
+
riskAssessmentId: uuid(),
|
|
300
|
+
actionType: z.enum(EUDR_MITIGATION_TYPES).optional(),
|
|
301
|
+
title: z.string().min(1).max(200),
|
|
302
|
+
description: z.string().max(2000).optional().nullable(),
|
|
303
|
+
status: z.enum(EUDR_MITIGATION_STATUSES).optional(),
|
|
304
|
+
dueDate: isoDateSchema().optional().nullable(),
|
|
305
|
+
notes: z.string().max(2000).optional().nullable(),
|
|
306
|
+
})
|
|
307
|
+
|
|
308
|
+
export const mitigationActionCreateSchema = rejectServerComputedFields(serverComputedMitigationActionFields).pipe(mitigationActionBaseSchema)
|
|
309
|
+
|
|
310
|
+
export const mitigationActionUpdateSchema = rejectServerComputedFields(serverComputedMitigationActionFields).pipe(
|
|
311
|
+
z
|
|
312
|
+
.object({
|
|
313
|
+
id: uuid(),
|
|
314
|
+
})
|
|
315
|
+
.merge(mitigationActionBaseSchema.partial()),
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
const statementBaseSchema = z.object({
|
|
319
|
+
title: z.string().min(1).max(500),
|
|
320
|
+
commodity: z.enum(EUDR_COMMODITIES),
|
|
321
|
+
referenceNumber: z.string().max(255).optional().nullable(),
|
|
322
|
+
verificationNumber: z.string().max(255).optional().nullable(),
|
|
323
|
+
status: z.enum(EUDR_STATEMENT_STATUSES).optional(),
|
|
324
|
+
activityType: z.enum(EUDR_ACTIVITY_TYPES).optional().nullable(),
|
|
325
|
+
actorRole: z.enum(EUDR_ACTOR_ROLES).optional().nullable(),
|
|
326
|
+
referencedStatements: z.array(referencedStatementSchema).max(100).optional(),
|
|
327
|
+
quantityKg: z.coerce.number().positive().optional().nullable(),
|
|
328
|
+
supplementaryUnit: z.string().max(16).optional().nullable(),
|
|
329
|
+
supplementaryQuantity: z.coerce.number().positive().optional().nullable(),
|
|
330
|
+
orderId: uuid().optional().nullable(),
|
|
331
|
+
referenceIssuedAt: isoDateTimeSchema().optional().nullable(),
|
|
332
|
+
orderSnapshot: orderSnapshotSchema.optional().nullable(),
|
|
333
|
+
notes: z.string().max(5000).optional().nullable(),
|
|
334
|
+
})
|
|
335
|
+
|
|
336
|
+
export const statementCreateSchema = rejectServerComputedFields(serverComputedStatementFields).pipe(statementBaseSchema)
|
|
337
|
+
|
|
338
|
+
export const statementUpdateSchema = rejectServerComputedFields(serverComputedStatementFields).pipe(
|
|
339
|
+
z
|
|
340
|
+
.object({
|
|
341
|
+
id: uuid(),
|
|
342
|
+
})
|
|
343
|
+
.merge(statementBaseSchema.partial()),
|
|
344
|
+
)
|
|
345
|
+
|
|
346
|
+
export type ProductMappingCreateInput = z.infer<typeof productMappingCreateSchema>
|
|
347
|
+
export type ProductMappingUpdateInput = z.infer<typeof productMappingUpdateSchema>
|
|
348
|
+
export type PlotCreateInput = z.infer<typeof plotCreateSchema>
|
|
349
|
+
export type PlotUpdateInput = z.infer<typeof plotUpdateSchema>
|
|
350
|
+
export type EvidenceSubmissionCreateInput = z.infer<typeof evidenceSubmissionCreateSchema>
|
|
351
|
+
export type EvidenceSubmissionUpdateInput = z.infer<typeof evidenceSubmissionUpdateSchema>
|
|
352
|
+
export type RiskAssessmentCreateInput = z.infer<typeof riskAssessmentCreateSchema>
|
|
353
|
+
export type RiskAssessmentUpdateInput = z.infer<typeof riskAssessmentUpdateSchema>
|
|
354
|
+
export type MitigationActionCreateInput = z.infer<typeof mitigationActionCreateSchema>
|
|
355
|
+
export type MitigationActionUpdateInput = z.infer<typeof mitigationActionUpdateSchema>
|
|
356
|
+
export type StatementCreateInput = z.infer<typeof statementCreateSchema>
|
|
357
|
+
export type StatementUpdateInput = z.infer<typeof statementUpdateSchema>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ModuleEncryptionMap } from '@open-mercato/shared/modules/encryption'
|
|
2
|
+
|
|
3
|
+
export const defaultEncryptionMaps: ModuleEncryptionMap[] = [
|
|
4
|
+
{
|
|
5
|
+
entityId: 'eudr:eudr_evidence_submission',
|
|
6
|
+
fields: [
|
|
7
|
+
{ field: 'producer_name' },
|
|
8
|
+
{ field: 'notes' },
|
|
9
|
+
],
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
entityId: 'eudr:eudr_plot',
|
|
13
|
+
fields: [
|
|
14
|
+
{ field: 'producer_name' },
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
entityId: 'eudr:eudr_risk_assessment',
|
|
19
|
+
fields: [
|
|
20
|
+
{ field: 'notes' },
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
entityId: 'eudr:eudr_mitigation_action',
|
|
25
|
+
fields: [
|
|
26
|
+
{ field: 'notes' },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
export default defaultEncryptionMaps
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { createModuleEvents } from '@open-mercato/shared/modules/events'
|
|
2
|
+
|
|
3
|
+
const events = [
|
|
4
|
+
{ id: 'eudr.product_mapping.created', label: 'EUDR Product Mapping Created', entity: 'product_mapping', category: 'crud' },
|
|
5
|
+
{ id: 'eudr.product_mapping.updated', label: 'EUDR Product Mapping Updated', entity: 'product_mapping', category: 'crud' },
|
|
6
|
+
{ id: 'eudr.product_mapping.deleted', label: 'EUDR Product Mapping Deleted', entity: 'product_mapping', category: 'crud' },
|
|
7
|
+
{ id: 'eudr.evidence_submission.created', label: 'EUDR Evidence Submission Created', entity: 'evidence_submission', category: 'crud' },
|
|
8
|
+
{ id: 'eudr.evidence_submission.updated', label: 'EUDR Evidence Submission Updated', entity: 'evidence_submission', category: 'crud' },
|
|
9
|
+
{ id: 'eudr.evidence_submission.deleted', label: 'EUDR Evidence Submission Deleted', entity: 'evidence_submission', category: 'crud' },
|
|
10
|
+
{ id: 'eudr.due_diligence_statement.created', label: 'EUDR Due Diligence Statement Created', entity: 'due_diligence_statement', category: 'crud' },
|
|
11
|
+
{ id: 'eudr.due_diligence_statement.updated', label: 'EUDR Due Diligence Statement Updated', entity: 'due_diligence_statement', category: 'crud' },
|
|
12
|
+
{ id: 'eudr.due_diligence_statement.deleted', label: 'EUDR Due Diligence Statement Deleted', entity: 'due_diligence_statement', category: 'crud' },
|
|
13
|
+
{ id: 'eudr.plot.created', label: 'EUDR Plot Created', entity: 'plot', category: 'crud' },
|
|
14
|
+
{ id: 'eudr.plot.updated', label: 'EUDR Plot Updated', entity: 'plot', category: 'crud' },
|
|
15
|
+
{ id: 'eudr.plot.deleted', label: 'EUDR Plot Deleted', entity: 'plot', category: 'crud' },
|
|
16
|
+
{ id: 'eudr.risk_assessment.created', label: 'EUDR Risk Assessment Created', entity: 'risk_assessment', category: 'crud' },
|
|
17
|
+
{ id: 'eudr.risk_assessment.updated', label: 'EUDR Risk Assessment Updated', entity: 'risk_assessment', category: 'crud' },
|
|
18
|
+
{ id: 'eudr.risk_assessment.deleted', label: 'EUDR Risk Assessment Deleted', entity: 'risk_assessment', category: 'crud' },
|
|
19
|
+
{ id: 'eudr.mitigation_action.created', label: 'EUDR Mitigation Action Created', entity: 'mitigation_action', category: 'crud' },
|
|
20
|
+
{ id: 'eudr.mitigation_action.updated', label: 'EUDR Mitigation Action Updated', entity: 'mitigation_action', category: 'crud' },
|
|
21
|
+
{ id: 'eudr.mitigation_action.deleted', label: 'EUDR Mitigation Action Deleted', entity: 'mitigation_action', category: 'crud' },
|
|
22
|
+
{ id: 'eudr.due_diligence_statement.submitted', label: 'EUDR Due Diligence Statement Submitted', entity: 'due_diligence_statement', category: 'lifecycle' },
|
|
23
|
+
{ id: 'eudr.due_diligence_statement.reference_issued', label: 'EUDR Due Diligence Statement Reference Issued', entity: 'due_diligence_statement', category: 'lifecycle' },
|
|
24
|
+
{ id: 'eudr.due_diligence_statement.withdrawn', label: 'EUDR Due Diligence Statement Withdrawn', entity: 'due_diligence_statement', category: 'lifecycle' },
|
|
25
|
+
{ id: 'eudr.risk_assessment.concluded', label: 'EUDR Risk Assessment Concluded', entity: 'risk_assessment', category: 'lifecycle' },
|
|
26
|
+
{ id: 'eudr.mitigation_action.completed', label: 'EUDR Mitigation Action Completed', entity: 'mitigation_action', category: 'lifecycle' },
|
|
27
|
+
] as const
|
|
28
|
+
|
|
29
|
+
export const eventsConfig = createModuleEvents({
|
|
30
|
+
moduleId: 'eudr',
|
|
31
|
+
events,
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
export const emitEudrEvent = eventsConfig.emit
|
|
35
|
+
|
|
36
|
+
export type EudrEventId = typeof events[number]['id']
|
|
37
|
+
|
|
38
|
+
export default eventsConfig
|