@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.
Files changed (405) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/dist/generated/entities/eudr_due_diligence_statement/index.js +47 -0
  3. package/dist/generated/entities/eudr_due_diligence_statement/index.js.map +7 -0
  4. package/dist/generated/entities/eudr_evidence_submission/index.js +51 -0
  5. package/dist/generated/entities/eudr_evidence_submission/index.js.map +7 -0
  6. package/dist/generated/entities/eudr_mitigation_action/index.js +31 -0
  7. package/dist/generated/entities/eudr_mitigation_action/index.js.map +7 -0
  8. package/dist/generated/entities/eudr_plot/index.js +39 -0
  9. package/dist/generated/entities/eudr_plot/index.js.map +7 -0
  10. package/dist/generated/entities/eudr_product_mapping/index.js +31 -0
  11. package/dist/generated/entities/eudr_product_mapping/index.js.map +7 -0
  12. package/dist/generated/entities/eudr_risk_assessment/index.js +35 -0
  13. package/dist/generated/entities/eudr_risk_assessment/index.js.map +7 -0
  14. package/dist/generated/entities.ids.generated.js +9 -0
  15. package/dist/generated/entities.ids.generated.js.map +2 -2
  16. package/dist/generated/entity-fields-registry.js +120 -0
  17. package/dist/generated/entity-fields-registry.js.map +2 -2
  18. package/dist/helpers/integration/ui.js +3 -0
  19. package/dist/helpers/integration/ui.js.map +2 -2
  20. package/dist/modules/attachments/fields/attachment.js +5 -1
  21. package/dist/modules/attachments/fields/attachment.js.map +2 -2
  22. package/dist/modules/attachments/lib/crud.js +3 -1
  23. package/dist/modules/attachments/lib/crud.js.map +2 -2
  24. package/dist/modules/eudr/acl.js +43 -0
  25. package/dist/modules/eudr/acl.js.map +7 -0
  26. package/dist/modules/eudr/ai-agents.js +205 -0
  27. package/dist/modules/eudr/ai-agents.js.map +7 -0
  28. package/dist/modules/eudr/ai-tools/compliance-pack.js +495 -0
  29. package/dist/modules/eudr/ai-tools/compliance-pack.js.map +7 -0
  30. package/dist/modules/eudr/ai-tools/types.js +10 -0
  31. package/dist/modules/eudr/ai-tools/types.js.map +7 -0
  32. package/dist/modules/eudr/ai-tools.js +10 -0
  33. package/dist/modules/eudr/ai-tools.js.map +7 -0
  34. package/dist/modules/eudr/api/dashboard/widgets/compliance-overview/route.js +386 -0
  35. package/dist/modules/eudr/api/dashboard/widgets/compliance-overview/route.js.map +7 -0
  36. package/dist/modules/eudr/api/evidence-submissions/route.js +318 -0
  37. package/dist/modules/eudr/api/evidence-submissions/route.js.map +7 -0
  38. package/dist/modules/eudr/api/mitigation-actions/route.js +249 -0
  39. package/dist/modules/eudr/api/mitigation-actions/route.js.map +7 -0
  40. package/dist/modules/eudr/api/openapi.js +27 -0
  41. package/dist/modules/eudr/api/openapi.js.map +7 -0
  42. package/dist/modules/eudr/api/plots/import/route.js +294 -0
  43. package/dist/modules/eudr/api/plots/import/route.js.map +7 -0
  44. package/dist/modules/eudr/api/plots/route.js +279 -0
  45. package/dist/modules/eudr/api/plots/route.js.map +7 -0
  46. package/dist/modules/eudr/api/product-mappings/route.js +257 -0
  47. package/dist/modules/eudr/api/product-mappings/route.js.map +7 -0
  48. package/dist/modules/eudr/api/product-mappings/suggestions/apply/route.js +298 -0
  49. package/dist/modules/eudr/api/product-mappings/suggestions/apply/route.js.map +7 -0
  50. package/dist/modules/eudr/api/product-mappings/suggestions/route.js +132 -0
  51. package/dist/modules/eudr/api/product-mappings/suggestions/route.js.map +7 -0
  52. package/dist/modules/eudr/api/reports/annual/route.js +266 -0
  53. package/dist/modules/eudr/api/reports/annual/route.js.map +7 -0
  54. package/dist/modules/eudr/api/risk-assessments/route.js +300 -0
  55. package/dist/modules/eudr/api/risk-assessments/route.js.map +7 -0
  56. package/dist/modules/eudr/api/statements/[id]/export/route.js +631 -0
  57. package/dist/modules/eudr/api/statements/[id]/export/route.js.map +7 -0
  58. package/dist/modules/eudr/api/statements/[id]/readiness/route.js +111 -0
  59. package/dist/modules/eudr/api/statements/[id]/readiness/route.js.map +7 -0
  60. package/dist/modules/eudr/api/statements/route.js +314 -0
  61. package/dist/modules/eudr/api/statements/route.js.map +7 -0
  62. package/dist/modules/eudr/api/suppliers/compliance/route.js +173 -0
  63. package/dist/modules/eudr/api/suppliers/compliance/route.js.map +7 -0
  64. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.js +468 -0
  65. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.js.map +7 -0
  66. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js +16 -0
  67. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js.map +7 -0
  68. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.js +351 -0
  69. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.js.map +7 -0
  70. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js +17 -0
  71. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js.map +7 -0
  72. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +313 -0
  73. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +7 -0
  74. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js +16 -0
  75. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js.map +7 -0
  76. package/dist/modules/eudr/backend/eudr/page.js +360 -0
  77. package/dist/modules/eudr/backend/eudr/page.js.map +7 -0
  78. package/dist/modules/eudr/backend/eudr/page.meta.js +16 -0
  79. package/dist/modules/eudr/backend/eudr/page.meta.js.map +7 -0
  80. package/dist/modules/eudr/backend/eudr/plots/[id]/page.js +346 -0
  81. package/dist/modules/eudr/backend/eudr/plots/[id]/page.js.map +7 -0
  82. package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js +16 -0
  83. package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js.map +7 -0
  84. package/dist/modules/eudr/backend/eudr/plots/create/page.js +253 -0
  85. package/dist/modules/eudr/backend/eudr/plots/create/page.js.map +7 -0
  86. package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js +17 -0
  87. package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js.map +7 -0
  88. package/dist/modules/eudr/backend/eudr/plots/page.js +386 -0
  89. package/dist/modules/eudr/backend/eudr/plots/page.js.map +7 -0
  90. package/dist/modules/eudr/backend/eudr/plots/page.meta.js +16 -0
  91. package/dist/modules/eudr/backend/eudr/plots/page.meta.js.map +7 -0
  92. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.js +253 -0
  93. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.js.map +7 -0
  94. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js +16 -0
  95. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js.map +7 -0
  96. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.js +174 -0
  97. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.js.map +7 -0
  98. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js +17 -0
  99. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js.map +7 -0
  100. package/dist/modules/eudr/backend/eudr/product-mappings/page.js +306 -0
  101. package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +7 -0
  102. package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js +16 -0
  103. package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js.map +7 -0
  104. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.js +335 -0
  105. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.js.map +7 -0
  106. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js +16 -0
  107. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js.map +7 -0
  108. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.js +220 -0
  109. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.js.map +7 -0
  110. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js +17 -0
  111. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js.map +7 -0
  112. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +324 -0
  113. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +7 -0
  114. package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js +16 -0
  115. package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js.map +7 -0
  116. package/dist/modules/eudr/backend/eudr/statements/[id]/page.js +648 -0
  117. package/dist/modules/eudr/backend/eudr/statements/[id]/page.js.map +7 -0
  118. package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js +16 -0
  119. package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js.map +7 -0
  120. package/dist/modules/eudr/backend/eudr/statements/create/page.js +432 -0
  121. package/dist/modules/eudr/backend/eudr/statements/create/page.js.map +7 -0
  122. package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js +17 -0
  123. package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js.map +7 -0
  124. package/dist/modules/eudr/backend/eudr/statements/page.js +309 -0
  125. package/dist/modules/eudr/backend/eudr/statements/page.js.map +7 -0
  126. package/dist/modules/eudr/backend/eudr/statements/page.meta.js +16 -0
  127. package/dist/modules/eudr/backend/eudr/statements/page.meta.js.map +7 -0
  128. package/dist/modules/eudr/ce.js +56 -0
  129. package/dist/modules/eudr/ce.js.map +7 -0
  130. package/dist/modules/eudr/commands/evidence-submissions.js +571 -0
  131. package/dist/modules/eudr/commands/evidence-submissions.js.map +7 -0
  132. package/dist/modules/eudr/commands/index.js +7 -0
  133. package/dist/modules/eudr/commands/index.js.map +7 -0
  134. package/dist/modules/eudr/commands/lifecycle-events.js +19 -0
  135. package/dist/modules/eudr/commands/lifecycle-events.js.map +7 -0
  136. package/dist/modules/eudr/commands/mitigation-actions.js +488 -0
  137. package/dist/modules/eudr/commands/mitigation-actions.js.map +7 -0
  138. package/dist/modules/eudr/commands/plots.js +517 -0
  139. package/dist/modules/eudr/commands/plots.js.map +7 -0
  140. package/dist/modules/eudr/commands/product-mappings.js +468 -0
  141. package/dist/modules/eudr/commands/product-mappings.js.map +7 -0
  142. package/dist/modules/eudr/commands/risk-assessments.js +599 -0
  143. package/dist/modules/eudr/commands/risk-assessments.js.map +7 -0
  144. package/dist/modules/eudr/commands/statements.js +747 -0
  145. package/dist/modules/eudr/commands/statements.js.map +7 -0
  146. package/dist/modules/eudr/components/CountrySelectField.js +64 -0
  147. package/dist/modules/eudr/components/CountrySelectField.js.map +7 -0
  148. package/dist/modules/eudr/components/GeometryInput.js +133 -0
  149. package/dist/modules/eudr/components/GeometryInput.js.map +7 -0
  150. package/dist/modules/eudr/components/MappingSuggestionsDialog.js +307 -0
  151. package/dist/modules/eudr/components/MappingSuggestionsDialog.js.map +7 -0
  152. package/dist/modules/eudr/components/MitigationActionsSection.js +345 -0
  153. package/dist/modules/eudr/components/MitigationActionsSection.js.map +7 -0
  154. package/dist/modules/eudr/components/OrderSelectField.js +88 -0
  155. package/dist/modules/eudr/components/OrderSelectField.js.map +7 -0
  156. package/dist/modules/eudr/components/PlotImportDialog.js +229 -0
  157. package/dist/modules/eudr/components/PlotImportDialog.js.map +7 -0
  158. package/dist/modules/eudr/components/PlotMapPreview.js +35 -0
  159. package/dist/modules/eudr/components/PlotMapPreview.js.map +7 -0
  160. package/dist/modules/eudr/components/PlotMapPreviewImpl.js +97 -0
  161. package/dist/modules/eudr/components/PlotMapPreviewImpl.js.map +7 -0
  162. package/dist/modules/eudr/components/PlotMultiSelectField.js +198 -0
  163. package/dist/modules/eudr/components/PlotMultiSelectField.js.map +7 -0
  164. package/dist/modules/eudr/components/RiskCriteriaField.js +128 -0
  165. package/dist/modules/eudr/components/RiskCriteriaField.js.map +7 -0
  166. package/dist/modules/eudr/components/StatementLifecycleBar.js +274 -0
  167. package/dist/modules/eudr/components/StatementLifecycleBar.js.map +7 -0
  168. package/dist/modules/eudr/components/StatementReadinessChecklist.js +56 -0
  169. package/dist/modules/eudr/components/StatementReadinessChecklist.js.map +7 -0
  170. package/dist/modules/eudr/components/StatementRiskSection.js +179 -0
  171. package/dist/modules/eudr/components/StatementRiskSection.js.map +7 -0
  172. package/dist/modules/eudr/components/crudErrorI18n.js +31 -0
  173. package/dist/modules/eudr/components/crudErrorI18n.js.map +7 -0
  174. package/dist/modules/eudr/components/formConfig.js +593 -0
  175. package/dist/modules/eudr/components/formConfig.js.map +7 -0
  176. package/dist/modules/eudr/components/plotForm.js +68 -0
  177. package/dist/modules/eudr/components/plotForm.js.map +7 -0
  178. package/dist/modules/eudr/data/enrichers.js +62 -0
  179. package/dist/modules/eudr/data/enrichers.js.map +7 -0
  180. package/dist/modules/eudr/data/entities.js +437 -0
  181. package/dist/modules/eudr/data/entities.js.map +7 -0
  182. package/dist/modules/eudr/data/validators.js +271 -0
  183. package/dist/modules/eudr/data/validators.js.map +7 -0
  184. package/dist/modules/eudr/encryption.js +33 -0
  185. package/dist/modules/eudr/encryption.js.map +7 -0
  186. package/dist/modules/eudr/events.js +38 -0
  187. package/dist/modules/eudr/events.js.map +7 -0
  188. package/dist/modules/eudr/index.js +15 -0
  189. package/dist/modules/eudr/index.js.map +7 -0
  190. package/dist/modules/eudr/lib/annual-report.js +104 -0
  191. package/dist/modules/eudr/lib/annual-report.js.map +7 -0
  192. package/dist/modules/eudr/lib/completeness.js +64 -0
  193. package/dist/modules/eudr/lib/completeness.js.map +7 -0
  194. package/dist/modules/eudr/lib/detail-read-scope.js +16 -0
  195. package/dist/modules/eudr/lib/detail-read-scope.js.map +7 -0
  196. package/dist/modules/eudr/lib/geometry.js +142 -0
  197. package/dist/modules/eudr/lib/geometry.js.map +7 -0
  198. package/dist/modules/eudr/lib/notifications.js +56 -0
  199. package/dist/modules/eudr/lib/notifications.js.map +7 -0
  200. package/dist/modules/eudr/lib/plural.js +26 -0
  201. package/dist/modules/eudr/lib/plural.js.map +7 -0
  202. package/dist/modules/eudr/lib/reference-data.js +240 -0
  203. package/dist/modules/eudr/lib/reference-data.js.map +7 -0
  204. package/dist/modules/eudr/lib/species.js +10 -0
  205. package/dist/modules/eudr/lib/species.js.map +7 -0
  206. package/dist/modules/eudr/lib/statement-lifecycle.js +84 -0
  207. package/dist/modules/eudr/lib/statement-lifecycle.js.map +7 -0
  208. package/dist/modules/eudr/lib/statement-seeding.js +49 -0
  209. package/dist/modules/eudr/lib/statement-seeding.js.map +7 -0
  210. package/dist/modules/eudr/migrations/Migration20260706102002_eudr.js +15 -0
  211. package/dist/modules/eudr/migrations/Migration20260706102002_eudr.js.map +7 -0
  212. package/dist/modules/eudr/migrations/Migration20260706152612_eudr.js +24 -0
  213. package/dist/modules/eudr/migrations/Migration20260706152612_eudr.js.map +7 -0
  214. package/dist/modules/eudr/migrations/Migration20260722100000_eudr.js +15 -0
  215. package/dist/modules/eudr/migrations/Migration20260722100000_eudr.js.map +7 -0
  216. package/dist/modules/eudr/notifications.js +58 -0
  217. package/dist/modules/eudr/notifications.js.map +7 -0
  218. package/dist/modules/eudr/search.js +186 -0
  219. package/dist/modules/eudr/search.js.map +7 -0
  220. package/dist/modules/eudr/setup.js +12 -0
  221. package/dist/modules/eudr/setup.js.map +7 -0
  222. package/dist/modules/eudr/subscribers/notify-mitigation-completed.js +34 -0
  223. package/dist/modules/eudr/subscribers/notify-mitigation-completed.js.map +7 -0
  224. package/dist/modules/eudr/subscribers/notify-risk-concluded.js +35 -0
  225. package/dist/modules/eudr/subscribers/notify-risk-concluded.js.map +7 -0
  226. package/dist/modules/eudr/subscribers/notify-statement-reference-issued.js +37 -0
  227. package/dist/modules/eudr/subscribers/notify-statement-reference-issued.js.map +7 -0
  228. package/dist/modules/eudr/subscribers/notify-statement-submitted.js +34 -0
  229. package/dist/modules/eudr/subscribers/notify-statement-submitted.js.map +7 -0
  230. package/dist/modules/eudr/subscribers/notify-statement-withdrawn.js +34 -0
  231. package/dist/modules/eudr/subscribers/notify-statement-withdrawn.js.map +7 -0
  232. package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-created.js +124 -0
  233. package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-created.js.map +7 -0
  234. package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-deleted.js +22 -0
  235. package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-deleted.js.map +7 -0
  236. package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.client.js +203 -0
  237. package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.client.js.map +7 -0
  238. package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.js +23 -0
  239. package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.js.map +7 -0
  240. package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.client.js +19 -0
  241. package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.client.js.map +7 -0
  242. package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.js +31 -0
  243. package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.js.map +7 -0
  244. package/dist/modules/eudr/widgets/injection/order-compliance/widget.client.js +100 -0
  245. package/dist/modules/eudr/widgets/injection/order-compliance/widget.client.js.map +7 -0
  246. package/dist/modules/eudr/widgets/injection/order-compliance/widget.js +17 -0
  247. package/dist/modules/eudr/widgets/injection/order-compliance/widget.js.map +7 -0
  248. package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.client.js +116 -0
  249. package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.client.js.map +7 -0
  250. package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.js +17 -0
  251. package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.js.map +7 -0
  252. package/dist/modules/eudr/widgets/injection-table.js +32 -0
  253. package/dist/modules/eudr/widgets/injection-table.js.map +7 -0
  254. package/dist/modules/notifications/lib/notificationService.js +67 -3
  255. package/dist/modules/notifications/lib/notificationService.js.map +2 -2
  256. package/dist/modules/query_index/lib/engine.js +121 -48
  257. package/dist/modules/query_index/lib/engine.js.map +2 -2
  258. package/dist/modules/sales/api/documents/factory.js +17 -0
  259. package/dist/modules/sales/api/documents/factory.js.map +2 -2
  260. package/dist/modules/sales/commands/documents.js +32 -18
  261. package/dist/modules/sales/commands/documents.js.map +2 -2
  262. package/dist/modules/sales/data/entities.js +1 -0
  263. package/dist/modules/sales/data/entities.js.map +2 -2
  264. package/dist/modules/sales/migrations/Migration20260806120000_sales_tag_assignment_document_idx.js +17 -0
  265. package/dist/modules/sales/migrations/Migration20260806120000_sales_tag_assignment_document_idx.js.map +7 -0
  266. package/generated/entities/eudr_due_diligence_statement/index.ts +22 -0
  267. package/generated/entities/eudr_evidence_submission/index.ts +24 -0
  268. package/generated/entities/eudr_mitigation_action/index.ts +14 -0
  269. package/generated/entities/eudr_plot/index.ts +18 -0
  270. package/generated/entities/eudr_product_mapping/index.ts +14 -0
  271. package/generated/entities/eudr_risk_assessment/index.ts +16 -0
  272. package/generated/entities.ids.generated.ts +9 -0
  273. package/generated/entity-fields-registry.ts +120 -0
  274. package/package.json +7 -7
  275. package/src/helpers/integration/ui.ts +12 -0
  276. package/src/modules/attachments/fields/attachment.tsx +5 -0
  277. package/src/modules/attachments/lib/crud.ts +2 -0
  278. package/src/modules/eudr/acl.ts +39 -0
  279. package/src/modules/eudr/ai-agents.ts +258 -0
  280. package/src/modules/eudr/ai-tools/compliance-pack.ts +618 -0
  281. package/src/modules/eudr/ai-tools/types.ts +44 -0
  282. package/src/modules/eudr/ai-tools.ts +15 -0
  283. package/src/modules/eudr/api/dashboard/widgets/compliance-overview/route.ts +481 -0
  284. package/src/modules/eudr/api/evidence-submissions/route.ts +335 -0
  285. package/src/modules/eudr/api/mitigation-actions/route.ts +263 -0
  286. package/src/modules/eudr/api/openapi.ts +28 -0
  287. package/src/modules/eudr/api/plots/import/route.ts +369 -0
  288. package/src/modules/eudr/api/plots/route.ts +296 -0
  289. package/src/modules/eudr/api/product-mappings/route.ts +269 -0
  290. package/src/modules/eudr/api/product-mappings/suggestions/apply/route.ts +382 -0
  291. package/src/modules/eudr/api/product-mappings/suggestions/route.ts +169 -0
  292. package/src/modules/eudr/api/reports/annual/route.ts +457 -0
  293. package/src/modules/eudr/api/risk-assessments/route.ts +323 -0
  294. package/src/modules/eudr/api/statements/[id]/export/route.ts +713 -0
  295. package/src/modules/eudr/api/statements/[id]/readiness/route.ts +129 -0
  296. package/src/modules/eudr/api/statements/route.ts +329 -0
  297. package/src/modules/eudr/api/suppliers/compliance/route.ts +241 -0
  298. package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.ts +12 -0
  299. package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.tsx +545 -0
  300. package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.ts +13 -0
  301. package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.tsx +383 -0
  302. package/src/modules/eudr/backend/eudr/evidence-submissions/page.meta.ts +12 -0
  303. package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +379 -0
  304. package/src/modules/eudr/backend/eudr/page.meta.ts +12 -0
  305. package/src/modules/eudr/backend/eudr/page.tsx +477 -0
  306. package/src/modules/eudr/backend/eudr/plots/[id]/page.meta.ts +12 -0
  307. package/src/modules/eudr/backend/eudr/plots/[id]/page.tsx +404 -0
  308. package/src/modules/eudr/backend/eudr/plots/create/page.meta.ts +13 -0
  309. package/src/modules/eudr/backend/eudr/plots/create/page.tsx +267 -0
  310. package/src/modules/eudr/backend/eudr/plots/page.meta.ts +12 -0
  311. package/src/modules/eudr/backend/eudr/plots/page.tsx +442 -0
  312. package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.ts +12 -0
  313. package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.tsx +311 -0
  314. package/src/modules/eudr/backend/eudr/product-mappings/create/page.meta.ts +13 -0
  315. package/src/modules/eudr/backend/eudr/product-mappings/create/page.tsx +190 -0
  316. package/src/modules/eudr/backend/eudr/product-mappings/page.meta.ts +12 -0
  317. package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +344 -0
  318. package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.ts +12 -0
  319. package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.tsx +421 -0
  320. package/src/modules/eudr/backend/eudr/risk-assessments/create/page.meta.ts +13 -0
  321. package/src/modules/eudr/backend/eudr/risk-assessments/create/page.tsx +247 -0
  322. package/src/modules/eudr/backend/eudr/risk-assessments/page.meta.ts +12 -0
  323. package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +383 -0
  324. package/src/modules/eudr/backend/eudr/statements/[id]/page.meta.ts +12 -0
  325. package/src/modules/eudr/backend/eudr/statements/[id]/page.tsx +777 -0
  326. package/src/modules/eudr/backend/eudr/statements/create/page.meta.ts +13 -0
  327. package/src/modules/eudr/backend/eudr/statements/create/page.tsx +511 -0
  328. package/src/modules/eudr/backend/eudr/statements/page.meta.ts +12 -0
  329. package/src/modules/eudr/backend/eudr/statements/page.tsx +372 -0
  330. package/src/modules/eudr/ce.ts +52 -0
  331. package/src/modules/eudr/commands/evidence-submissions.ts +699 -0
  332. package/src/modules/eudr/commands/index.ts +6 -0
  333. package/src/modules/eudr/commands/lifecycle-events.ts +28 -0
  334. package/src/modules/eudr/commands/mitigation-actions.ts +574 -0
  335. package/src/modules/eudr/commands/plots.ts +627 -0
  336. package/src/modules/eudr/commands/product-mappings.ts +556 -0
  337. package/src/modules/eudr/commands/risk-assessments.ts +728 -0
  338. package/src/modules/eudr/commands/statements.ts +933 -0
  339. package/src/modules/eudr/components/CountrySelectField.tsx +77 -0
  340. package/src/modules/eudr/components/GeometryInput.tsx +170 -0
  341. package/src/modules/eudr/components/MappingSuggestionsDialog.tsx +385 -0
  342. package/src/modules/eudr/components/MitigationActionsSection.tsx +417 -0
  343. package/src/modules/eudr/components/OrderSelectField.tsx +116 -0
  344. package/src/modules/eudr/components/PlotImportDialog.tsx +277 -0
  345. package/src/modules/eudr/components/PlotMapPreview.tsx +46 -0
  346. package/src/modules/eudr/components/PlotMapPreviewImpl.tsx +111 -0
  347. package/src/modules/eudr/components/PlotMultiSelectField.tsx +238 -0
  348. package/src/modules/eudr/components/RiskCriteriaField.tsx +173 -0
  349. package/src/modules/eudr/components/StatementLifecycleBar.tsx +363 -0
  350. package/src/modules/eudr/components/StatementReadinessChecklist.tsx +82 -0
  351. package/src/modules/eudr/components/StatementRiskSection.tsx +242 -0
  352. package/src/modules/eudr/components/crudErrorI18n.ts +36 -0
  353. package/src/modules/eudr/components/formConfig.tsx +717 -0
  354. package/src/modules/eudr/components/plotForm.ts +75 -0
  355. package/src/modules/eudr/data/enrichers.ts +82 -0
  356. package/src/modules/eudr/data/entities.ts +369 -0
  357. package/src/modules/eudr/data/validators.ts +357 -0
  358. package/src/modules/eudr/encryption.ts +31 -0
  359. package/src/modules/eudr/events.ts +38 -0
  360. package/src/modules/eudr/i18n/de.json +747 -0
  361. package/src/modules/eudr/i18n/en.json +747 -0
  362. package/src/modules/eudr/i18n/es.json +747 -0
  363. package/src/modules/eudr/i18n/ko.json +747 -0
  364. package/src/modules/eudr/i18n/pl.json +747 -0
  365. package/src/modules/eudr/index.ts +13 -0
  366. package/src/modules/eudr/lib/annual-report.ts +120 -0
  367. package/src/modules/eudr/lib/completeness.ts +90 -0
  368. package/src/modules/eudr/lib/detail-read-scope.ts +44 -0
  369. package/src/modules/eudr/lib/geometry.ts +191 -0
  370. package/src/modules/eudr/lib/notifications.ts +85 -0
  371. package/src/modules/eudr/lib/plural.ts +36 -0
  372. package/src/modules/eudr/lib/reference-data.ts +128 -0
  373. package/src/modules/eudr/lib/species.ts +12 -0
  374. package/src/modules/eudr/lib/statement-lifecycle.ts +109 -0
  375. package/src/modules/eudr/lib/statement-seeding.ts +86 -0
  376. package/src/modules/eudr/migrations/.snapshot-open-mercato.json +2046 -0
  377. package/src/modules/eudr/migrations/Migration20260706102002_eudr.ts +16 -0
  378. package/src/modules/eudr/migrations/Migration20260706152612_eudr.ts +30 -0
  379. package/src/modules/eudr/migrations/Migration20260722100000_eudr.ts +17 -0
  380. package/src/modules/eudr/notifications.ts +56 -0
  381. package/src/modules/eudr/search.ts +212 -0
  382. package/src/modules/eudr/setup.ts +10 -0
  383. package/src/modules/eudr/subscribers/notify-mitigation-completed.ts +56 -0
  384. package/src/modules/eudr/subscribers/notify-risk-concluded.ts +58 -0
  385. package/src/modules/eudr/subscribers/notify-statement-reference-issued.ts +59 -0
  386. package/src/modules/eudr/subscribers/notify-statement-submitted.ts +49 -0
  387. package/src/modules/eudr/subscribers/notify-statement-withdrawn.ts +49 -0
  388. package/src/modules/eudr/subscribers/recompute-completeness-on-attachment-created.ts +189 -0
  389. package/src/modules/eudr/subscribers/recompute-completeness-on-attachment-deleted.ts +31 -0
  390. package/src/modules/eudr/widgets/dashboard/compliance-overview/widget.client.tsx +271 -0
  391. package/src/modules/eudr/widgets/dashboard/compliance-overview/widget.ts +24 -0
  392. package/src/modules/eudr/widgets/injection/eudr-product-column/widget.client.tsx +37 -0
  393. package/src/modules/eudr/widgets/injection/eudr-product-column/widget.ts +30 -0
  394. package/src/modules/eudr/widgets/injection/order-compliance/widget.client.tsx +131 -0
  395. package/src/modules/eudr/widgets/injection/order-compliance/widget.ts +16 -0
  396. package/src/modules/eudr/widgets/injection/supplier-compliance/widget.client.tsx +168 -0
  397. package/src/modules/eudr/widgets/injection/supplier-compliance/widget.ts +16 -0
  398. package/src/modules/eudr/widgets/injection-table.ts +31 -0
  399. package/src/modules/notifications/lib/notificationService.ts +83 -4
  400. package/src/modules/query_index/lib/engine.ts +139 -51
  401. package/src/modules/sales/api/documents/factory.ts +29 -0
  402. package/src/modules/sales/commands/documents.ts +65 -18
  403. package/src/modules/sales/data/entities.ts +1 -0
  404. package/src/modules/sales/migrations/.snapshot-open-mercato.json +10 -0
  405. 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