@open-mercato/core 0.6.8-develop.6924.1.a8d208fcdc → 0.6.8-develop.6930.1.1e5976efc3
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/role/index.js +2 -0
- package/dist/generated/entities/role/index.js.map +2 -2
- 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 +121 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/api.js +4 -0
- package/dist/helpers/integration/api.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/audit_logs/api/audit-logs/actions/redo/route.js +5 -0
- package/dist/modules/audit_logs/api/audit-logs/actions/redo/route.js.map +2 -2
- package/dist/modules/audit_logs/api/audit-logs/actions/undo/route.js +5 -0
- package/dist/modules/audit_logs/api/audit-logs/actions/undo/route.js.map +2 -2
- package/dist/modules/audit_logs/backend/audit-logs/page.js +4 -4
- package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
- package/dist/modules/audit_logs/components/AuditLogsActions.js +9 -2
- package/dist/modules/audit_logs/components/AuditLogsActions.js.map +2 -2
- package/dist/modules/auth/api/login.js +5 -2
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +8 -5
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.js +15 -1
- package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +7 -1
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/commands/users.js +175 -76
- package/dist/modules/auth/commands/users.js.map +2 -2
- package/dist/modules/auth/data/entities.js +4 -0
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/lib/sessionIntegrity.js +1 -1
- package/dist/modules/auth/lib/sessionIntegrity.js.map +2 -2
- package/dist/modules/auth/lib/setup-app.js +1 -1
- package/dist/modules/auth/lib/setup-app.js.map +2 -2
- package/dist/modules/auth/migrations/Migration20260728134212_auth.js +14 -0
- package/dist/modules/auth/migrations/Migration20260728134212_auth.js.map +7 -0
- 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/role/index.ts +1 -0
- package/generated/entities.ids.generated.ts +9 -0
- package/generated/entity-fields-registry.ts +121 -0
- package/package.json +7 -7
- package/src/helpers/integration/api.ts +13 -0
- package/src/modules/attachments/fields/attachment.tsx +5 -0
- package/src/modules/attachments/lib/crud.ts +2 -0
- package/src/modules/audit_logs/api/audit-logs/actions/redo/route.ts +7 -0
- package/src/modules/audit_logs/api/audit-logs/actions/undo/route.ts +9 -0
- package/src/modules/audit_logs/backend/audit-logs/page.tsx +4 -4
- package/src/modules/audit_logs/components/AuditLogsActions.tsx +20 -4
- package/src/modules/auth/api/login.ts +9 -2
- package/src/modules/auth/api/users/route.ts +8 -4
- package/src/modules/auth/backend/users/[id]/edit/page.tsx +17 -1
- package/src/modules/auth/backend/users/page.tsx +11 -0
- package/src/modules/auth/commands/users.ts +251 -85
- package/src/modules/auth/data/entities.ts +3 -0
- package/src/modules/auth/i18n/de.json +6 -0
- package/src/modules/auth/i18n/en.json +6 -0
- package/src/modules/auth/i18n/es.json +6 -0
- package/src/modules/auth/i18n/ko.json +6 -0
- package/src/modules/auth/i18n/pl.json +6 -0
- package/src/modules/auth/lib/sessionIntegrity.ts +1 -1
- package/src/modules/auth/lib/setup-app.ts +1 -1
- package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
- package/src/modules/auth/migrations/Migration20260728134212_auth.ts +14 -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,16 @@
|
|
|
1
|
+
import { Migration } from '@mikro-orm/migrations';
|
|
2
|
+
|
|
3
|
+
export class Migration20260706102002_eudr extends Migration {
|
|
4
|
+
|
|
5
|
+
override up(): void | Promise<void> {
|
|
6
|
+
this.addSql(`create table "eudr_due_diligence_statements" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "title" text not null, "commodity" text not null, "reference_number" text null, "verification_number" text null, "status" text not null default 'draft', "quantity_kg" numeric(14,3) null, "order_id" uuid null, "notes" text null, "created_at" timestamptz not null, "updated_at" timestamptz not null, "deleted_at" timestamptz null, primary key ("id"));`);
|
|
7
|
+
|
|
8
|
+
this.addSql(`create table "eudr_evidence_submissions" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "supplier_entity_id" uuid not null, "supplier_snapshot" jsonb null, "commodity" text not null, "product_mapping_id" uuid null, "statement_id" uuid null, "origin_country" text null, "geolocation" jsonb null, "quantity_kg" numeric(14,3) null, "batch_number" text null, "harvest_from" timestamptz null, "harvest_to" timestamptz null, "producer_name" text null, "attachment_ids" jsonb not null default '[]', "status" text not null default 'draft', "completeness_score" int not null default 0, "missing_fields" jsonb not null default '[]', "notes" text null, "created_at" timestamptz not null, "updated_at" timestamptz not null, "deleted_at" timestamptz null, primary key ("id"));`);
|
|
9
|
+
this.addSql(`create index "idx_eudr_submissions_supplier" on "eudr_evidence_submissions" ("supplier_entity_id");`);
|
|
10
|
+
this.addSql(`create index "idx_eudr_submissions_statement" on "eudr_evidence_submissions" ("statement_id");`);
|
|
11
|
+
|
|
12
|
+
this.addSql(`create table "eudr_product_mappings" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "product_id" uuid not null, "product_snapshot" jsonb null, "commodity" text not null, "hs_code" text null, "is_in_scope" boolean not null default true, "notes" text null, "created_at" timestamptz not null, "updated_at" timestamptz not null, "deleted_at" timestamptz null, primary key ("id"));`);
|
|
13
|
+
this.addSql(`create unique index "idx_eudr_mappings_org_product_commodity_unique" on "eudr_product_mappings" ("organization_id", "product_id", "commodity") where deleted_at is null;`);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Migration } from '@mikro-orm/migrations';
|
|
2
|
+
|
|
3
|
+
export class Migration20260706152612_eudr extends Migration {
|
|
4
|
+
|
|
5
|
+
override up(): void | Promise<void> {
|
|
6
|
+
this.addSql(`create table "eudr_mitigation_actions" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "risk_assessment_id" uuid not null, "action_type" text not null default 'other', "title" text not null, "description" text null, "status" text not null default 'planned', "due_date" timestamptz null, "completed_at" timestamptz null, "notes" text null, "created_at" timestamptz not null, "updated_at" timestamptz not null, "deleted_at" timestamptz null, primary key ("id"));`);
|
|
7
|
+
this.addSql(`create index "idx_eudr_mitigation_actions_risk_assessment" on "eudr_mitigation_actions" ("risk_assessment_id");`);
|
|
8
|
+
|
|
9
|
+
this.addSql(`create table "eudr_plots" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "supplier_entity_id" uuid not null, "supplier_snapshot" jsonb null, "name" text not null, "external_id" text null, "description" text null, "origin_country" text not null, "plot_type" text not null default 'point', "geometry" jsonb not null, "area_ha" numeric(12,4) null, "validation_warnings" jsonb not null default '[]', "producer_name" text null, "is_active" boolean not null default true, "created_at" timestamptz not null, "updated_at" timestamptz not null, "deleted_at" timestamptz null, primary key ("id"));`);
|
|
10
|
+
this.addSql(`create index "idx_eudr_plots_supplier" on "eudr_plots" ("supplier_entity_id");`);
|
|
11
|
+
|
|
12
|
+
this.addSql(`create table "eudr_risk_assessments" ("id" uuid not null default gen_random_uuid(), "organization_id" uuid not null, "tenant_id" uuid not null, "statement_id" uuid not null, "country_risks" jsonb not null default '[]', "overall_tier" text not null default 'unknown', "criteria" jsonb not null default '{}', "conclusion" text not null default 'non_negligible', "is_simplified" boolean not null default false, "assessed_at" timestamptz not null, "assessed_by_name" text null, "review_due_at" timestamptz null, "notes" text null, "created_at" timestamptz not null, "updated_at" timestamptz not null, "deleted_at" timestamptz null, primary key ("id"));`);
|
|
13
|
+
this.addSql(`create index "idx_eudr_risk_assessments_statement" on "eudr_risk_assessments" ("statement_id");`);
|
|
14
|
+
|
|
15
|
+
this.addSql(`alter table "eudr_due_diligence_statements" add "activity_type" text null, add "actor_role" text null, add "referenced_statements" jsonb not null default '[]', add "supplementary_unit" text null, add "supplementary_quantity" numeric(14,3) null, add "submitted_at" timestamptz null, add "reference_issued_at" timestamptz null, add "order_snapshot" jsonb null;`);
|
|
16
|
+
|
|
17
|
+
this.addSql(`alter table "eudr_evidence_submissions" add "plot_ids" jsonb not null default '[]';`);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
override down(): void | Promise<void> {
|
|
21
|
+
this.addSql(`alter table "eudr_due_diligence_statements" drop column "activity_type", drop column "actor_role", drop column "referenced_statements", drop column "supplementary_unit", drop column "supplementary_quantity", drop column "submitted_at", drop column "reference_issued_at", drop column "order_snapshot";`);
|
|
22
|
+
|
|
23
|
+
this.addSql(`alter table "eudr_evidence_submissions" drop column "plot_ids";`);
|
|
24
|
+
|
|
25
|
+
this.addSql(`drop table if exists "eudr_mitigation_actions" cascade;`);
|
|
26
|
+
this.addSql(`drop table if exists "eudr_risk_assessments" cascade;`);
|
|
27
|
+
this.addSql(`drop table if exists "eudr_plots" cascade;`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Migration } from '@mikro-orm/migrations';
|
|
2
|
+
|
|
3
|
+
export class Migration20260722100000_eudr extends Migration {
|
|
4
|
+
|
|
5
|
+
override up(): void | Promise<void> {
|
|
6
|
+
this.addSql(`alter table "eudr_product_mappings" add column "species_scientific_name" text null, add column "species_common_name" text null;`);
|
|
7
|
+
|
|
8
|
+
this.addSql(`create index "eudr_dds_tenant_org_submitted_idx" on "eudr_due_diligence_statements" ("tenant_id", "organization_id", "submitted_at") where "deleted_at" is null;`);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
override down(): void | Promise<void> {
|
|
12
|
+
this.addSql(`drop index "eudr_dds_tenant_org_submitted_idx";`);
|
|
13
|
+
|
|
14
|
+
this.addSql(`alter table "eudr_product_mappings" drop column "species_scientific_name", drop column "species_common_name";`);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { NotificationTypeDefinition } from '@open-mercato/shared/modules/notifications/types'
|
|
2
|
+
|
|
3
|
+
export const notificationTypes: NotificationTypeDefinition[] = [
|
|
4
|
+
{
|
|
5
|
+
type: 'eudr.statement.submitted',
|
|
6
|
+
module: 'eudr',
|
|
7
|
+
titleKey: 'eudr.notifications.statement.submitted.title',
|
|
8
|
+
bodyKey: 'eudr.notifications.statement.submitted.body',
|
|
9
|
+
icon: 'file-check',
|
|
10
|
+
severity: 'info',
|
|
11
|
+
actions: [],
|
|
12
|
+
expiresAfterHours: 168,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
type: 'eudr.statement.reference_issued',
|
|
16
|
+
module: 'eudr',
|
|
17
|
+
titleKey: 'eudr.notifications.statement.referenceIssued.title',
|
|
18
|
+
bodyKey: 'eudr.notifications.statement.referenceIssued.body',
|
|
19
|
+
icon: 'badge-check',
|
|
20
|
+
severity: 'success',
|
|
21
|
+
actions: [],
|
|
22
|
+
expiresAfterHours: 720,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
type: 'eudr.statement.withdrawn',
|
|
26
|
+
module: 'eudr',
|
|
27
|
+
titleKey: 'eudr.notifications.statement.withdrawn.title',
|
|
28
|
+
bodyKey: 'eudr.notifications.statement.withdrawn.body',
|
|
29
|
+
icon: 'undo',
|
|
30
|
+
severity: 'warning',
|
|
31
|
+
actions: [],
|
|
32
|
+
expiresAfterHours: 168,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
type: 'eudr.risk.non_negligible',
|
|
36
|
+
module: 'eudr',
|
|
37
|
+
titleKey: 'eudr.notifications.risk.nonNegligible.title',
|
|
38
|
+
bodyKey: 'eudr.notifications.risk.nonNegligible.body',
|
|
39
|
+
icon: 'alert-triangle',
|
|
40
|
+
severity: 'warning',
|
|
41
|
+
actions: [],
|
|
42
|
+
expiresAfterHours: 168,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'eudr.mitigation.completed',
|
|
46
|
+
module: 'eudr',
|
|
47
|
+
titleKey: 'eudr.notifications.mitigation.completed.title',
|
|
48
|
+
bodyKey: 'eudr.notifications.mitigation.completed.body',
|
|
49
|
+
icon: 'check-circle',
|
|
50
|
+
severity: 'success',
|
|
51
|
+
actions: [],
|
|
52
|
+
expiresAfterHours: 168,
|
|
53
|
+
},
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
export default notificationTypes
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import type { SearchBuildContext, SearchIndexSource, SearchModuleConfig, SearchResultPresenter } from '@open-mercato/shared/modules/search'
|
|
2
|
+
import type { TranslateFn } from '@open-mercato/shared/lib/i18n/context'
|
|
3
|
+
import { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'
|
|
4
|
+
|
|
5
|
+
const EUDR_STATEMENTS_URL = '/backend/eudr/statements'
|
|
6
|
+
const EUDR_PLOTS_URL = '/backend/eudr/plots'
|
|
7
|
+
const EUDR_EVIDENCE_SUBMISSIONS_URL = '/backend/eudr/evidence-submissions'
|
|
8
|
+
|
|
9
|
+
function assertTenantContext(ctx: SearchBuildContext): void {
|
|
10
|
+
if (typeof ctx.tenantId !== 'string' || ctx.tenantId.length === 0) {
|
|
11
|
+
throw new Error('[internal] [search.eudr] Missing tenantId in search build context')
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function normalizeText(value: unknown): string | null {
|
|
16
|
+
if (value === null || value === undefined) return null
|
|
17
|
+
if (typeof value === 'string') {
|
|
18
|
+
const trimmed = value.trim()
|
|
19
|
+
return trimmed.length > 0 ? trimmed : null
|
|
20
|
+
}
|
|
21
|
+
if (value instanceof Date) return value.toISOString()
|
|
22
|
+
if (typeof value === 'number' || typeof value === 'boolean') return String(value)
|
|
23
|
+
return null
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function readRecordText(record: Record<string, unknown>, ...keys: string[]): string | null {
|
|
27
|
+
for (const key of keys) {
|
|
28
|
+
const text = normalizeText(record[key])
|
|
29
|
+
if (text) return text
|
|
30
|
+
}
|
|
31
|
+
return null
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function readObjectText(source: unknown, ...keys: string[]): string | null {
|
|
35
|
+
if (!source || typeof source !== 'object') return null
|
|
36
|
+
return readRecordText(source as Record<string, unknown>, ...keys)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function formatSubtitle(...parts: Array<unknown>): string | undefined {
|
|
40
|
+
const text = parts
|
|
41
|
+
.map((part) => normalizeText(part))
|
|
42
|
+
.filter((value): value is string => Boolean(value))
|
|
43
|
+
if (!text.length) return undefined
|
|
44
|
+
return text.join(' · ')
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function appendLine(lines: string[], label: string, value: unknown) {
|
|
48
|
+
const text = normalizeText(value)
|
|
49
|
+
if (!text) return
|
|
50
|
+
lines.push(`${label}: ${text}`)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function friendlyLabel(input: string): string {
|
|
54
|
+
return input
|
|
55
|
+
.replace(/^cf:/, '')
|
|
56
|
+
.replace(/_/g, ' ')
|
|
57
|
+
.replace(/([a-z])([A-Z])/g, (_match, firstChar, secondChar) => `${firstChar} ${secondChar}`)
|
|
58
|
+
.replace(/\b\w/g, (character) => character.toUpperCase())
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function appendCustomFieldLines(lines: string[], customFields: Record<string, unknown>) {
|
|
62
|
+
for (const [key, value] of Object.entries(customFields)) {
|
|
63
|
+
if (value === null || value === undefined) continue
|
|
64
|
+
appendLine(lines, friendlyLabel(key), value)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function buildIndexSource(
|
|
69
|
+
ctx: SearchBuildContext,
|
|
70
|
+
presenter: SearchResultPresenter,
|
|
71
|
+
lines: string[],
|
|
72
|
+
): SearchIndexSource | null {
|
|
73
|
+
appendCustomFieldLines(lines, ctx.customFields)
|
|
74
|
+
if (!lines.length) return null
|
|
75
|
+
return {
|
|
76
|
+
text: lines,
|
|
77
|
+
presenter,
|
|
78
|
+
checksumSource: { record: ctx.record, customFields: ctx.customFields },
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function buildRecordUrl(baseUrl: string, record: Record<string, unknown>): string | null {
|
|
83
|
+
const recordId = readRecordText(record, 'id')
|
|
84
|
+
return recordId ? `${baseUrl}/${encodeURIComponent(recordId)}` : null
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function translateToken(translate: TranslateFn, prefix: string, value: string | null): string | null {
|
|
88
|
+
if (!value) return null
|
|
89
|
+
return translate(`${prefix}.${value}`, value)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function resolveSupplierName(record: Record<string, unknown>): string | null {
|
|
93
|
+
const snapshot = record.supplier_snapshot ?? record.supplierSnapshot
|
|
94
|
+
return readObjectText(snapshot, 'display_name', 'displayName', 'name')
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function buildStatementPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {
|
|
98
|
+
const label = translate('eudr.search.badge.statement', 'DDS statement')
|
|
99
|
+
const title = readRecordText(record, 'title') ?? translate('eudr.common.recordUnavailable')
|
|
100
|
+
const subtitle = formatSubtitle(
|
|
101
|
+
readRecordText(record, 'reference_number', 'referenceNumber'),
|
|
102
|
+
translateToken(translate, 'eudr.commodity', readRecordText(record, 'commodity')),
|
|
103
|
+
)
|
|
104
|
+
return { title, subtitle, icon: 'file-check', badge: label }
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function buildPlotPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {
|
|
108
|
+
const label = translate('eudr.search.badge.plot', 'Plot')
|
|
109
|
+
const title = readRecordText(record, 'name') ?? translate('eudr.common.recordUnavailable')
|
|
110
|
+
const subtitle = formatSubtitle(
|
|
111
|
+
readRecordText(record, 'origin_country', 'originCountry'),
|
|
112
|
+
translateToken(translate, 'eudr.plotType', readRecordText(record, 'plot_type', 'plotType')),
|
|
113
|
+
)
|
|
114
|
+
return { title, subtitle, icon: 'map-pin', badge: label }
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function buildSubmissionPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {
|
|
118
|
+
const label = translate('eudr.search.badge.submission', 'Evidence submission')
|
|
119
|
+
const batchNumber = readRecordText(record, 'batch_number', 'batchNumber')
|
|
120
|
+
const supplierName = resolveSupplierName(record)
|
|
121
|
+
const title = batchNumber
|
|
122
|
+
? `${label} ${batchNumber}`
|
|
123
|
+
: supplierName ?? translate('eudr.common.recordUnavailable')
|
|
124
|
+
const subtitle = formatSubtitle(
|
|
125
|
+
supplierName,
|
|
126
|
+
translateToken(translate, 'eudr.submissionStatus', readRecordText(record, 'status')),
|
|
127
|
+
)
|
|
128
|
+
return { title, subtitle, icon: 'package', badge: label }
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export const searchConfig: SearchModuleConfig = {
|
|
132
|
+
entities: [
|
|
133
|
+
{
|
|
134
|
+
entityId: 'eudr:eudr_due_diligence_statement',
|
|
135
|
+
enabled: true,
|
|
136
|
+
priority: 8,
|
|
137
|
+
fieldPolicy: {
|
|
138
|
+
searchable: ['title', 'reference_number', 'commodity'],
|
|
139
|
+
excluded: ['notes'],
|
|
140
|
+
},
|
|
141
|
+
buildSource: async (ctx) => {
|
|
142
|
+
assertTenantContext(ctx)
|
|
143
|
+
const { t: translate } = await resolveTranslations()
|
|
144
|
+
const record = ctx.record
|
|
145
|
+
const lines: string[] = []
|
|
146
|
+
appendLine(lines, 'Title', record.title)
|
|
147
|
+
appendLine(lines, 'Reference number', record.reference_number ?? record.referenceNumber)
|
|
148
|
+
appendLine(lines, 'Commodity', record.commodity)
|
|
149
|
+
return buildIndexSource(ctx, buildStatementPresenter(translate, record), lines)
|
|
150
|
+
},
|
|
151
|
+
formatResult: async (ctx) => {
|
|
152
|
+
const { t: translate } = await resolveTranslations()
|
|
153
|
+
return buildStatementPresenter(translate, ctx.record)
|
|
154
|
+
},
|
|
155
|
+
resolveUrl: async (ctx) => buildRecordUrl(EUDR_STATEMENTS_URL, ctx.record),
|
|
156
|
+
aclFeatures: ['eudr.statements.view'],
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
entityId: 'eudr:eudr_plot',
|
|
160
|
+
enabled: true,
|
|
161
|
+
priority: 7,
|
|
162
|
+
fieldPolicy: {
|
|
163
|
+
searchable: ['name', 'external_id', 'origin_country'],
|
|
164
|
+
excluded: ['producer_name'],
|
|
165
|
+
},
|
|
166
|
+
buildSource: async (ctx) => {
|
|
167
|
+
assertTenantContext(ctx)
|
|
168
|
+
const { t: translate } = await resolveTranslations()
|
|
169
|
+
const record = ctx.record
|
|
170
|
+
const lines: string[] = []
|
|
171
|
+
appendLine(lines, 'Name', record.name)
|
|
172
|
+
appendLine(lines, 'External ID', record.external_id ?? record.externalId)
|
|
173
|
+
appendLine(lines, 'Origin country', record.origin_country ?? record.originCountry)
|
|
174
|
+
return buildIndexSource(ctx, buildPlotPresenter(translate, record), lines)
|
|
175
|
+
},
|
|
176
|
+
formatResult: async (ctx) => {
|
|
177
|
+
const { t: translate } = await resolveTranslations()
|
|
178
|
+
return buildPlotPresenter(translate, ctx.record)
|
|
179
|
+
},
|
|
180
|
+
resolveUrl: async (ctx) => buildRecordUrl(EUDR_PLOTS_URL, ctx.record),
|
|
181
|
+
aclFeatures: ['eudr.plots.view'],
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
entityId: 'eudr:eudr_evidence_submission',
|
|
185
|
+
enabled: true,
|
|
186
|
+
priority: 6,
|
|
187
|
+
fieldPolicy: {
|
|
188
|
+
searchable: ['batch_number', 'commodity'],
|
|
189
|
+
excluded: ['producer_name', 'notes'],
|
|
190
|
+
},
|
|
191
|
+
buildSource: async (ctx) => {
|
|
192
|
+
assertTenantContext(ctx)
|
|
193
|
+
const { t: translate } = await resolveTranslations()
|
|
194
|
+
const record = ctx.record
|
|
195
|
+
const lines: string[] = []
|
|
196
|
+
appendLine(lines, 'Batch number', record.batch_number ?? record.batchNumber)
|
|
197
|
+
appendLine(lines, 'Commodity', record.commodity)
|
|
198
|
+
appendLine(lines, 'Supplier', resolveSupplierName(record))
|
|
199
|
+
return buildIndexSource(ctx, buildSubmissionPresenter(translate, record), lines)
|
|
200
|
+
},
|
|
201
|
+
formatResult: async (ctx) => {
|
|
202
|
+
const { t: translate } = await resolveTranslations()
|
|
203
|
+
return buildSubmissionPresenter(translate, ctx.record)
|
|
204
|
+
},
|
|
205
|
+
resolveUrl: async (ctx) => buildRecordUrl(EUDR_EVIDENCE_SUBMISSIONS_URL, ctx.record),
|
|
206
|
+
aclFeatures: ['eudr.submissions.view'],
|
|
207
|
+
},
|
|
208
|
+
],
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export default searchConfig
|
|
212
|
+
export const config = searchConfig
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'
|
|
2
|
+
|
|
3
|
+
export const setup: ModuleSetupConfig = {
|
|
4
|
+
defaultRoleFeatures: {
|
|
5
|
+
admin: ['eudr.*'],
|
|
6
|
+
employee: ['eudr.mappings.view', 'eudr.submissions.view', 'eudr.statements.view', 'eudr.plots.view', 'eudr.risk.view'],
|
|
7
|
+
},
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default setup
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
2
|
+
import {
|
|
3
|
+
deliverEudrNotification,
|
|
4
|
+
type EudrNotificationContainer,
|
|
5
|
+
} from '../lib/notifications'
|
|
6
|
+
|
|
7
|
+
const logger = createLogger('eudr').child({ component: 'notify-mitigation-completed' })
|
|
8
|
+
|
|
9
|
+
export const metadata = {
|
|
10
|
+
event: 'eudr.mitigation_action.completed',
|
|
11
|
+
persistent: true,
|
|
12
|
+
id: 'eudr:notify-mitigation-completed',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type MitigationCompletedPayload = {
|
|
16
|
+
id?: string
|
|
17
|
+
tenantId?: string | null
|
|
18
|
+
organizationId?: string | null
|
|
19
|
+
title?: string
|
|
20
|
+
riskAssessmentId?: string
|
|
21
|
+
occurredAt?: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type SubscriberContext = EudrNotificationContainer & {
|
|
25
|
+
container?: EudrNotificationContainer
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default async function notifyMitigationCompleted(
|
|
29
|
+
payload: MitigationCompletedPayload,
|
|
30
|
+
ctx: SubscriberContext,
|
|
31
|
+
): Promise<void> {
|
|
32
|
+
if (
|
|
33
|
+
!payload?.tenantId
|
|
34
|
+
|| !payload.id
|
|
35
|
+
|| !payload.riskAssessmentId
|
|
36
|
+
|| !payload.occurredAt
|
|
37
|
+
|| typeof payload.title !== 'string'
|
|
38
|
+
) {
|
|
39
|
+
logger.debug('Skipping mitigation-completed notification because the event payload is incomplete')
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
await deliverEudrNotification({
|
|
44
|
+
container: ctx.container ?? ctx,
|
|
45
|
+
typeId: 'eudr.mitigation.completed',
|
|
46
|
+
payload: {
|
|
47
|
+
tenantId: payload.tenantId,
|
|
48
|
+
organizationId: payload.organizationId ?? null,
|
|
49
|
+
entityId: payload.id,
|
|
50
|
+
occurredAt: payload.occurredAt,
|
|
51
|
+
bodyVariables: { actionTitle: payload.title },
|
|
52
|
+
linkHref: `/backend/eudr/risk-assessments/${payload.riskAssessmentId}`,
|
|
53
|
+
sourceEntityType: 'eudr:eudr_mitigation_action',
|
|
54
|
+
},
|
|
55
|
+
})
|
|
56
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
2
|
+
import {
|
|
3
|
+
deliverEudrNotification,
|
|
4
|
+
type EudrNotificationContainer,
|
|
5
|
+
} from '../lib/notifications'
|
|
6
|
+
|
|
7
|
+
const logger = createLogger('eudr').child({ component: 'notify-risk-concluded' })
|
|
8
|
+
|
|
9
|
+
export const metadata = {
|
|
10
|
+
event: 'eudr.risk_assessment.concluded',
|
|
11
|
+
persistent: true,
|
|
12
|
+
id: 'eudr:notify-risk-concluded',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type RiskConcludedPayload = {
|
|
16
|
+
id?: string
|
|
17
|
+
tenantId?: string | null
|
|
18
|
+
organizationId?: string | null
|
|
19
|
+
statementId?: string
|
|
20
|
+
statementTitle?: string
|
|
21
|
+
conclusion?: string
|
|
22
|
+
occurredAt?: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type SubscriberContext = EudrNotificationContainer & {
|
|
26
|
+
container?: EudrNotificationContainer
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default async function notifyRiskConcluded(
|
|
30
|
+
payload: RiskConcludedPayload,
|
|
31
|
+
ctx: SubscriberContext,
|
|
32
|
+
): Promise<void> {
|
|
33
|
+
if (payload?.conclusion !== 'non_negligible') return
|
|
34
|
+
if (
|
|
35
|
+
!payload.tenantId
|
|
36
|
+
|| !payload.id
|
|
37
|
+
|| !payload.statementId
|
|
38
|
+
|| !payload.occurredAt
|
|
39
|
+
|| typeof payload.statementTitle !== 'string'
|
|
40
|
+
) {
|
|
41
|
+
logger.debug('Skipping risk-concluded notification because the event payload is incomplete')
|
|
42
|
+
return
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
await deliverEudrNotification({
|
|
46
|
+
container: ctx.container ?? ctx,
|
|
47
|
+
typeId: 'eudr.risk.non_negligible',
|
|
48
|
+
payload: {
|
|
49
|
+
tenantId: payload.tenantId,
|
|
50
|
+
organizationId: payload.organizationId ?? null,
|
|
51
|
+
entityId: payload.id,
|
|
52
|
+
occurredAt: payload.occurredAt,
|
|
53
|
+
bodyVariables: { statementTitle: payload.statementTitle },
|
|
54
|
+
linkHref: `/backend/eudr/statements/${payload.statementId}`,
|
|
55
|
+
sourceEntityType: 'eudr:eudr_risk_assessment',
|
|
56
|
+
},
|
|
57
|
+
})
|
|
58
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
2
|
+
import {
|
|
3
|
+
deliverEudrNotification,
|
|
4
|
+
type EudrNotificationContainer,
|
|
5
|
+
} from '../lib/notifications'
|
|
6
|
+
|
|
7
|
+
const logger = createLogger('eudr').child({ component: 'notify-statement-reference-issued' })
|
|
8
|
+
|
|
9
|
+
export const metadata = {
|
|
10
|
+
event: 'eudr.due_diligence_statement.reference_issued',
|
|
11
|
+
persistent: true,
|
|
12
|
+
id: 'eudr:notify-statement-reference-issued',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type StatementReferenceIssuedPayload = {
|
|
16
|
+
id?: string
|
|
17
|
+
tenantId?: string | null
|
|
18
|
+
organizationId?: string | null
|
|
19
|
+
title?: string
|
|
20
|
+
referenceNumber?: string
|
|
21
|
+
occurredAt?: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type SubscriberContext = EudrNotificationContainer & {
|
|
25
|
+
container?: EudrNotificationContainer
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default async function notifyStatementReferenceIssued(
|
|
29
|
+
payload: StatementReferenceIssuedPayload,
|
|
30
|
+
ctx: SubscriberContext,
|
|
31
|
+
): Promise<void> {
|
|
32
|
+
if (
|
|
33
|
+
!payload?.tenantId
|
|
34
|
+
|| !payload.id
|
|
35
|
+
|| !payload.occurredAt
|
|
36
|
+
|| typeof payload.title !== 'string'
|
|
37
|
+
|| typeof payload.referenceNumber !== 'string'
|
|
38
|
+
) {
|
|
39
|
+
logger.debug('Skipping reference-issued notification because the event payload is incomplete')
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
await deliverEudrNotification({
|
|
44
|
+
container: ctx.container ?? ctx,
|
|
45
|
+
typeId: 'eudr.statement.reference_issued',
|
|
46
|
+
payload: {
|
|
47
|
+
tenantId: payload.tenantId,
|
|
48
|
+
organizationId: payload.organizationId ?? null,
|
|
49
|
+
entityId: payload.id,
|
|
50
|
+
occurredAt: payload.occurredAt,
|
|
51
|
+
bodyVariables: {
|
|
52
|
+
statementTitle: payload.title,
|
|
53
|
+
referenceNumber: payload.referenceNumber,
|
|
54
|
+
},
|
|
55
|
+
linkHref: `/backend/eudr/statements/${payload.id}`,
|
|
56
|
+
sourceEntityType: 'eudr:eudr_due_diligence_statement',
|
|
57
|
+
},
|
|
58
|
+
})
|
|
59
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
2
|
+
import {
|
|
3
|
+
deliverEudrNotification,
|
|
4
|
+
type EudrNotificationContainer,
|
|
5
|
+
} from '../lib/notifications'
|
|
6
|
+
|
|
7
|
+
const logger = createLogger('eudr').child({ component: 'notify-statement-submitted' })
|
|
8
|
+
|
|
9
|
+
export const metadata = {
|
|
10
|
+
event: 'eudr.due_diligence_statement.submitted',
|
|
11
|
+
persistent: true,
|
|
12
|
+
id: 'eudr:notify-statement-submitted',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type StatementSubmittedPayload = {
|
|
16
|
+
id?: string
|
|
17
|
+
tenantId?: string | null
|
|
18
|
+
organizationId?: string | null
|
|
19
|
+
title?: string
|
|
20
|
+
occurredAt?: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type SubscriberContext = EudrNotificationContainer & {
|
|
24
|
+
container?: EudrNotificationContainer
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default async function notifyStatementSubmitted(
|
|
28
|
+
payload: StatementSubmittedPayload,
|
|
29
|
+
ctx: SubscriberContext,
|
|
30
|
+
): Promise<void> {
|
|
31
|
+
if (!payload?.tenantId || !payload.id || !payload.occurredAt || typeof payload.title !== 'string') {
|
|
32
|
+
logger.debug('Skipping statement-submitted notification because the event payload is incomplete')
|
|
33
|
+
return
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
await deliverEudrNotification({
|
|
37
|
+
container: ctx.container ?? ctx,
|
|
38
|
+
typeId: 'eudr.statement.submitted',
|
|
39
|
+
payload: {
|
|
40
|
+
tenantId: payload.tenantId,
|
|
41
|
+
organizationId: payload.organizationId ?? null,
|
|
42
|
+
entityId: payload.id,
|
|
43
|
+
occurredAt: payload.occurredAt,
|
|
44
|
+
bodyVariables: { statementTitle: payload.title },
|
|
45
|
+
linkHref: `/backend/eudr/statements/${payload.id}`,
|
|
46
|
+
sourceEntityType: 'eudr:eudr_due_diligence_statement',
|
|
47
|
+
},
|
|
48
|
+
})
|
|
49
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
2
|
+
import {
|
|
3
|
+
deliverEudrNotification,
|
|
4
|
+
type EudrNotificationContainer,
|
|
5
|
+
} from '../lib/notifications'
|
|
6
|
+
|
|
7
|
+
const logger = createLogger('eudr').child({ component: 'notify-statement-withdrawn' })
|
|
8
|
+
|
|
9
|
+
export const metadata = {
|
|
10
|
+
event: 'eudr.due_diligence_statement.withdrawn',
|
|
11
|
+
persistent: true,
|
|
12
|
+
id: 'eudr:notify-statement-withdrawn',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type StatementWithdrawnPayload = {
|
|
16
|
+
id?: string
|
|
17
|
+
tenantId?: string | null
|
|
18
|
+
organizationId?: string | null
|
|
19
|
+
title?: string
|
|
20
|
+
occurredAt?: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type SubscriberContext = EudrNotificationContainer & {
|
|
24
|
+
container?: EudrNotificationContainer
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default async function notifyStatementWithdrawn(
|
|
28
|
+
payload: StatementWithdrawnPayload,
|
|
29
|
+
ctx: SubscriberContext,
|
|
30
|
+
): Promise<void> {
|
|
31
|
+
if (!payload?.tenantId || !payload.id || !payload.occurredAt || typeof payload.title !== 'string') {
|
|
32
|
+
logger.debug('Skipping statement-withdrawn notification because the event payload is incomplete')
|
|
33
|
+
return
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
await deliverEudrNotification({
|
|
37
|
+
container: ctx.container ?? ctx,
|
|
38
|
+
typeId: 'eudr.statement.withdrawn',
|
|
39
|
+
payload: {
|
|
40
|
+
tenantId: payload.tenantId,
|
|
41
|
+
organizationId: payload.organizationId ?? null,
|
|
42
|
+
entityId: payload.id,
|
|
43
|
+
occurredAt: payload.occurredAt,
|
|
44
|
+
bodyVariables: { statementTitle: payload.title },
|
|
45
|
+
linkHref: `/backend/eudr/statements/${payload.id}`,
|
|
46
|
+
sourceEntityType: 'eudr:eudr_due_diligence_statement',
|
|
47
|
+
},
|
|
48
|
+
})
|
|
49
|
+
}
|