@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.
Files changed (453) 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/role/index.js +2 -0
  15. package/dist/generated/entities/role/index.js.map +2 -2
  16. package/dist/generated/entities.ids.generated.js +9 -0
  17. package/dist/generated/entities.ids.generated.js.map +2 -2
  18. package/dist/generated/entity-fields-registry.js +121 -0
  19. package/dist/generated/entity-fields-registry.js.map +2 -2
  20. package/dist/helpers/integration/api.js +4 -0
  21. package/dist/helpers/integration/api.js.map +2 -2
  22. package/dist/modules/attachments/fields/attachment.js +5 -1
  23. package/dist/modules/attachments/fields/attachment.js.map +2 -2
  24. package/dist/modules/attachments/lib/crud.js +3 -1
  25. package/dist/modules/attachments/lib/crud.js.map +2 -2
  26. package/dist/modules/audit_logs/api/audit-logs/actions/redo/route.js +5 -0
  27. package/dist/modules/audit_logs/api/audit-logs/actions/redo/route.js.map +2 -2
  28. package/dist/modules/audit_logs/api/audit-logs/actions/undo/route.js +5 -0
  29. package/dist/modules/audit_logs/api/audit-logs/actions/undo/route.js.map +2 -2
  30. package/dist/modules/audit_logs/backend/audit-logs/page.js +4 -4
  31. package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
  32. package/dist/modules/audit_logs/components/AuditLogsActions.js +9 -2
  33. package/dist/modules/audit_logs/components/AuditLogsActions.js.map +2 -2
  34. package/dist/modules/auth/api/login.js +5 -2
  35. package/dist/modules/auth/api/login.js.map +2 -2
  36. package/dist/modules/auth/api/users/route.js +8 -5
  37. package/dist/modules/auth/api/users/route.js.map +2 -2
  38. package/dist/modules/auth/backend/users/[id]/edit/page.js +15 -1
  39. package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
  40. package/dist/modules/auth/backend/users/page.js +7 -1
  41. package/dist/modules/auth/backend/users/page.js.map +2 -2
  42. package/dist/modules/auth/commands/users.js +175 -76
  43. package/dist/modules/auth/commands/users.js.map +2 -2
  44. package/dist/modules/auth/data/entities.js +4 -0
  45. package/dist/modules/auth/data/entities.js.map +2 -2
  46. package/dist/modules/auth/lib/sessionIntegrity.js +1 -1
  47. package/dist/modules/auth/lib/sessionIntegrity.js.map +2 -2
  48. package/dist/modules/auth/lib/setup-app.js +1 -1
  49. package/dist/modules/auth/lib/setup-app.js.map +2 -2
  50. package/dist/modules/auth/migrations/Migration20260728134212_auth.js +14 -0
  51. package/dist/modules/auth/migrations/Migration20260728134212_auth.js.map +7 -0
  52. package/dist/modules/eudr/acl.js +43 -0
  53. package/dist/modules/eudr/acl.js.map +7 -0
  54. package/dist/modules/eudr/ai-agents.js +205 -0
  55. package/dist/modules/eudr/ai-agents.js.map +7 -0
  56. package/dist/modules/eudr/ai-tools/compliance-pack.js +495 -0
  57. package/dist/modules/eudr/ai-tools/compliance-pack.js.map +7 -0
  58. package/dist/modules/eudr/ai-tools/types.js +10 -0
  59. package/dist/modules/eudr/ai-tools/types.js.map +7 -0
  60. package/dist/modules/eudr/ai-tools.js +10 -0
  61. package/dist/modules/eudr/ai-tools.js.map +7 -0
  62. package/dist/modules/eudr/api/dashboard/widgets/compliance-overview/route.js +386 -0
  63. package/dist/modules/eudr/api/dashboard/widgets/compliance-overview/route.js.map +7 -0
  64. package/dist/modules/eudr/api/evidence-submissions/route.js +318 -0
  65. package/dist/modules/eudr/api/evidence-submissions/route.js.map +7 -0
  66. package/dist/modules/eudr/api/mitigation-actions/route.js +249 -0
  67. package/dist/modules/eudr/api/mitigation-actions/route.js.map +7 -0
  68. package/dist/modules/eudr/api/openapi.js +27 -0
  69. package/dist/modules/eudr/api/openapi.js.map +7 -0
  70. package/dist/modules/eudr/api/plots/import/route.js +294 -0
  71. package/dist/modules/eudr/api/plots/import/route.js.map +7 -0
  72. package/dist/modules/eudr/api/plots/route.js +279 -0
  73. package/dist/modules/eudr/api/plots/route.js.map +7 -0
  74. package/dist/modules/eudr/api/product-mappings/route.js +257 -0
  75. package/dist/modules/eudr/api/product-mappings/route.js.map +7 -0
  76. package/dist/modules/eudr/api/product-mappings/suggestions/apply/route.js +298 -0
  77. package/dist/modules/eudr/api/product-mappings/suggestions/apply/route.js.map +7 -0
  78. package/dist/modules/eudr/api/product-mappings/suggestions/route.js +132 -0
  79. package/dist/modules/eudr/api/product-mappings/suggestions/route.js.map +7 -0
  80. package/dist/modules/eudr/api/reports/annual/route.js +266 -0
  81. package/dist/modules/eudr/api/reports/annual/route.js.map +7 -0
  82. package/dist/modules/eudr/api/risk-assessments/route.js +300 -0
  83. package/dist/modules/eudr/api/risk-assessments/route.js.map +7 -0
  84. package/dist/modules/eudr/api/statements/[id]/export/route.js +631 -0
  85. package/dist/modules/eudr/api/statements/[id]/export/route.js.map +7 -0
  86. package/dist/modules/eudr/api/statements/[id]/readiness/route.js +111 -0
  87. package/dist/modules/eudr/api/statements/[id]/readiness/route.js.map +7 -0
  88. package/dist/modules/eudr/api/statements/route.js +314 -0
  89. package/dist/modules/eudr/api/statements/route.js.map +7 -0
  90. package/dist/modules/eudr/api/suppliers/compliance/route.js +173 -0
  91. package/dist/modules/eudr/api/suppliers/compliance/route.js.map +7 -0
  92. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.js +468 -0
  93. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.js.map +7 -0
  94. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js +16 -0
  95. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js.map +7 -0
  96. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.js +351 -0
  97. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.js.map +7 -0
  98. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js +17 -0
  99. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js.map +7 -0
  100. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +313 -0
  101. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +7 -0
  102. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js +16 -0
  103. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js.map +7 -0
  104. package/dist/modules/eudr/backend/eudr/page.js +360 -0
  105. package/dist/modules/eudr/backend/eudr/page.js.map +7 -0
  106. package/dist/modules/eudr/backend/eudr/page.meta.js +16 -0
  107. package/dist/modules/eudr/backend/eudr/page.meta.js.map +7 -0
  108. package/dist/modules/eudr/backend/eudr/plots/[id]/page.js +346 -0
  109. package/dist/modules/eudr/backend/eudr/plots/[id]/page.js.map +7 -0
  110. package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js +16 -0
  111. package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js.map +7 -0
  112. package/dist/modules/eudr/backend/eudr/plots/create/page.js +253 -0
  113. package/dist/modules/eudr/backend/eudr/plots/create/page.js.map +7 -0
  114. package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js +17 -0
  115. package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js.map +7 -0
  116. package/dist/modules/eudr/backend/eudr/plots/page.js +386 -0
  117. package/dist/modules/eudr/backend/eudr/plots/page.js.map +7 -0
  118. package/dist/modules/eudr/backend/eudr/plots/page.meta.js +16 -0
  119. package/dist/modules/eudr/backend/eudr/plots/page.meta.js.map +7 -0
  120. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.js +253 -0
  121. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.js.map +7 -0
  122. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js +16 -0
  123. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js.map +7 -0
  124. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.js +174 -0
  125. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.js.map +7 -0
  126. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js +17 -0
  127. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js.map +7 -0
  128. package/dist/modules/eudr/backend/eudr/product-mappings/page.js +306 -0
  129. package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +7 -0
  130. package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js +16 -0
  131. package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js.map +7 -0
  132. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.js +335 -0
  133. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.js.map +7 -0
  134. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js +16 -0
  135. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js.map +7 -0
  136. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.js +220 -0
  137. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.js.map +7 -0
  138. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js +17 -0
  139. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js.map +7 -0
  140. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +324 -0
  141. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +7 -0
  142. package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js +16 -0
  143. package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js.map +7 -0
  144. package/dist/modules/eudr/backend/eudr/statements/[id]/page.js +648 -0
  145. package/dist/modules/eudr/backend/eudr/statements/[id]/page.js.map +7 -0
  146. package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js +16 -0
  147. package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js.map +7 -0
  148. package/dist/modules/eudr/backend/eudr/statements/create/page.js +432 -0
  149. package/dist/modules/eudr/backend/eudr/statements/create/page.js.map +7 -0
  150. package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js +17 -0
  151. package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js.map +7 -0
  152. package/dist/modules/eudr/backend/eudr/statements/page.js +309 -0
  153. package/dist/modules/eudr/backend/eudr/statements/page.js.map +7 -0
  154. package/dist/modules/eudr/backend/eudr/statements/page.meta.js +16 -0
  155. package/dist/modules/eudr/backend/eudr/statements/page.meta.js.map +7 -0
  156. package/dist/modules/eudr/ce.js +56 -0
  157. package/dist/modules/eudr/ce.js.map +7 -0
  158. package/dist/modules/eudr/commands/evidence-submissions.js +571 -0
  159. package/dist/modules/eudr/commands/evidence-submissions.js.map +7 -0
  160. package/dist/modules/eudr/commands/index.js +7 -0
  161. package/dist/modules/eudr/commands/index.js.map +7 -0
  162. package/dist/modules/eudr/commands/lifecycle-events.js +19 -0
  163. package/dist/modules/eudr/commands/lifecycle-events.js.map +7 -0
  164. package/dist/modules/eudr/commands/mitigation-actions.js +488 -0
  165. package/dist/modules/eudr/commands/mitigation-actions.js.map +7 -0
  166. package/dist/modules/eudr/commands/plots.js +517 -0
  167. package/dist/modules/eudr/commands/plots.js.map +7 -0
  168. package/dist/modules/eudr/commands/product-mappings.js +468 -0
  169. package/dist/modules/eudr/commands/product-mappings.js.map +7 -0
  170. package/dist/modules/eudr/commands/risk-assessments.js +599 -0
  171. package/dist/modules/eudr/commands/risk-assessments.js.map +7 -0
  172. package/dist/modules/eudr/commands/statements.js +747 -0
  173. package/dist/modules/eudr/commands/statements.js.map +7 -0
  174. package/dist/modules/eudr/components/CountrySelectField.js +64 -0
  175. package/dist/modules/eudr/components/CountrySelectField.js.map +7 -0
  176. package/dist/modules/eudr/components/GeometryInput.js +133 -0
  177. package/dist/modules/eudr/components/GeometryInput.js.map +7 -0
  178. package/dist/modules/eudr/components/MappingSuggestionsDialog.js +307 -0
  179. package/dist/modules/eudr/components/MappingSuggestionsDialog.js.map +7 -0
  180. package/dist/modules/eudr/components/MitigationActionsSection.js +345 -0
  181. package/dist/modules/eudr/components/MitigationActionsSection.js.map +7 -0
  182. package/dist/modules/eudr/components/OrderSelectField.js +88 -0
  183. package/dist/modules/eudr/components/OrderSelectField.js.map +7 -0
  184. package/dist/modules/eudr/components/PlotImportDialog.js +229 -0
  185. package/dist/modules/eudr/components/PlotImportDialog.js.map +7 -0
  186. package/dist/modules/eudr/components/PlotMapPreview.js +35 -0
  187. package/dist/modules/eudr/components/PlotMapPreview.js.map +7 -0
  188. package/dist/modules/eudr/components/PlotMapPreviewImpl.js +97 -0
  189. package/dist/modules/eudr/components/PlotMapPreviewImpl.js.map +7 -0
  190. package/dist/modules/eudr/components/PlotMultiSelectField.js +198 -0
  191. package/dist/modules/eudr/components/PlotMultiSelectField.js.map +7 -0
  192. package/dist/modules/eudr/components/RiskCriteriaField.js +128 -0
  193. package/dist/modules/eudr/components/RiskCriteriaField.js.map +7 -0
  194. package/dist/modules/eudr/components/StatementLifecycleBar.js +274 -0
  195. package/dist/modules/eudr/components/StatementLifecycleBar.js.map +7 -0
  196. package/dist/modules/eudr/components/StatementReadinessChecklist.js +56 -0
  197. package/dist/modules/eudr/components/StatementReadinessChecklist.js.map +7 -0
  198. package/dist/modules/eudr/components/StatementRiskSection.js +179 -0
  199. package/dist/modules/eudr/components/StatementRiskSection.js.map +7 -0
  200. package/dist/modules/eudr/components/crudErrorI18n.js +31 -0
  201. package/dist/modules/eudr/components/crudErrorI18n.js.map +7 -0
  202. package/dist/modules/eudr/components/formConfig.js +593 -0
  203. package/dist/modules/eudr/components/formConfig.js.map +7 -0
  204. package/dist/modules/eudr/components/plotForm.js +68 -0
  205. package/dist/modules/eudr/components/plotForm.js.map +7 -0
  206. package/dist/modules/eudr/data/enrichers.js +62 -0
  207. package/dist/modules/eudr/data/enrichers.js.map +7 -0
  208. package/dist/modules/eudr/data/entities.js +437 -0
  209. package/dist/modules/eudr/data/entities.js.map +7 -0
  210. package/dist/modules/eudr/data/validators.js +271 -0
  211. package/dist/modules/eudr/data/validators.js.map +7 -0
  212. package/dist/modules/eudr/encryption.js +33 -0
  213. package/dist/modules/eudr/encryption.js.map +7 -0
  214. package/dist/modules/eudr/events.js +38 -0
  215. package/dist/modules/eudr/events.js.map +7 -0
  216. package/dist/modules/eudr/index.js +15 -0
  217. package/dist/modules/eudr/index.js.map +7 -0
  218. package/dist/modules/eudr/lib/annual-report.js +104 -0
  219. package/dist/modules/eudr/lib/annual-report.js.map +7 -0
  220. package/dist/modules/eudr/lib/completeness.js +64 -0
  221. package/dist/modules/eudr/lib/completeness.js.map +7 -0
  222. package/dist/modules/eudr/lib/detail-read-scope.js +16 -0
  223. package/dist/modules/eudr/lib/detail-read-scope.js.map +7 -0
  224. package/dist/modules/eudr/lib/geometry.js +142 -0
  225. package/dist/modules/eudr/lib/geometry.js.map +7 -0
  226. package/dist/modules/eudr/lib/notifications.js +56 -0
  227. package/dist/modules/eudr/lib/notifications.js.map +7 -0
  228. package/dist/modules/eudr/lib/plural.js +26 -0
  229. package/dist/modules/eudr/lib/plural.js.map +7 -0
  230. package/dist/modules/eudr/lib/reference-data.js +240 -0
  231. package/dist/modules/eudr/lib/reference-data.js.map +7 -0
  232. package/dist/modules/eudr/lib/species.js +10 -0
  233. package/dist/modules/eudr/lib/species.js.map +7 -0
  234. package/dist/modules/eudr/lib/statement-lifecycle.js +84 -0
  235. package/dist/modules/eudr/lib/statement-lifecycle.js.map +7 -0
  236. package/dist/modules/eudr/lib/statement-seeding.js +49 -0
  237. package/dist/modules/eudr/lib/statement-seeding.js.map +7 -0
  238. package/dist/modules/eudr/migrations/Migration20260706102002_eudr.js +15 -0
  239. package/dist/modules/eudr/migrations/Migration20260706102002_eudr.js.map +7 -0
  240. package/dist/modules/eudr/migrations/Migration20260706152612_eudr.js +24 -0
  241. package/dist/modules/eudr/migrations/Migration20260706152612_eudr.js.map +7 -0
  242. package/dist/modules/eudr/migrations/Migration20260722100000_eudr.js +15 -0
  243. package/dist/modules/eudr/migrations/Migration20260722100000_eudr.js.map +7 -0
  244. package/dist/modules/eudr/notifications.js +58 -0
  245. package/dist/modules/eudr/notifications.js.map +7 -0
  246. package/dist/modules/eudr/search.js +186 -0
  247. package/dist/modules/eudr/search.js.map +7 -0
  248. package/dist/modules/eudr/setup.js +12 -0
  249. package/dist/modules/eudr/setup.js.map +7 -0
  250. package/dist/modules/eudr/subscribers/notify-mitigation-completed.js +34 -0
  251. package/dist/modules/eudr/subscribers/notify-mitigation-completed.js.map +7 -0
  252. package/dist/modules/eudr/subscribers/notify-risk-concluded.js +35 -0
  253. package/dist/modules/eudr/subscribers/notify-risk-concluded.js.map +7 -0
  254. package/dist/modules/eudr/subscribers/notify-statement-reference-issued.js +37 -0
  255. package/dist/modules/eudr/subscribers/notify-statement-reference-issued.js.map +7 -0
  256. package/dist/modules/eudr/subscribers/notify-statement-submitted.js +34 -0
  257. package/dist/modules/eudr/subscribers/notify-statement-submitted.js.map +7 -0
  258. package/dist/modules/eudr/subscribers/notify-statement-withdrawn.js +34 -0
  259. package/dist/modules/eudr/subscribers/notify-statement-withdrawn.js.map +7 -0
  260. package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-created.js +124 -0
  261. package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-created.js.map +7 -0
  262. package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-deleted.js +22 -0
  263. package/dist/modules/eudr/subscribers/recompute-completeness-on-attachment-deleted.js.map +7 -0
  264. package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.client.js +203 -0
  265. package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.client.js.map +7 -0
  266. package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.js +23 -0
  267. package/dist/modules/eudr/widgets/dashboard/compliance-overview/widget.js.map +7 -0
  268. package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.client.js +19 -0
  269. package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.client.js.map +7 -0
  270. package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.js +31 -0
  271. package/dist/modules/eudr/widgets/injection/eudr-product-column/widget.js.map +7 -0
  272. package/dist/modules/eudr/widgets/injection/order-compliance/widget.client.js +100 -0
  273. package/dist/modules/eudr/widgets/injection/order-compliance/widget.client.js.map +7 -0
  274. package/dist/modules/eudr/widgets/injection/order-compliance/widget.js +17 -0
  275. package/dist/modules/eudr/widgets/injection/order-compliance/widget.js.map +7 -0
  276. package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.client.js +116 -0
  277. package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.client.js.map +7 -0
  278. package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.js +17 -0
  279. package/dist/modules/eudr/widgets/injection/supplier-compliance/widget.js.map +7 -0
  280. package/dist/modules/eudr/widgets/injection-table.js +32 -0
  281. package/dist/modules/eudr/widgets/injection-table.js.map +7 -0
  282. package/dist/modules/notifications/lib/notificationService.js +67 -3
  283. package/dist/modules/notifications/lib/notificationService.js.map +2 -2
  284. package/dist/modules/query_index/lib/engine.js +121 -48
  285. package/dist/modules/query_index/lib/engine.js.map +2 -2
  286. package/dist/modules/sales/api/documents/factory.js +17 -0
  287. package/dist/modules/sales/api/documents/factory.js.map +2 -2
  288. package/dist/modules/sales/commands/documents.js +32 -18
  289. package/dist/modules/sales/commands/documents.js.map +2 -2
  290. package/dist/modules/sales/data/entities.js +1 -0
  291. package/dist/modules/sales/data/entities.js.map +2 -2
  292. package/dist/modules/sales/migrations/Migration20260806120000_sales_tag_assignment_document_idx.js +17 -0
  293. package/dist/modules/sales/migrations/Migration20260806120000_sales_tag_assignment_document_idx.js.map +7 -0
  294. package/generated/entities/eudr_due_diligence_statement/index.ts +22 -0
  295. package/generated/entities/eudr_evidence_submission/index.ts +24 -0
  296. package/generated/entities/eudr_mitigation_action/index.ts +14 -0
  297. package/generated/entities/eudr_plot/index.ts +18 -0
  298. package/generated/entities/eudr_product_mapping/index.ts +14 -0
  299. package/generated/entities/eudr_risk_assessment/index.ts +16 -0
  300. package/generated/entities/role/index.ts +1 -0
  301. package/generated/entities.ids.generated.ts +9 -0
  302. package/generated/entity-fields-registry.ts +121 -0
  303. package/package.json +7 -7
  304. package/src/helpers/integration/api.ts +13 -0
  305. package/src/modules/attachments/fields/attachment.tsx +5 -0
  306. package/src/modules/attachments/lib/crud.ts +2 -0
  307. package/src/modules/audit_logs/api/audit-logs/actions/redo/route.ts +7 -0
  308. package/src/modules/audit_logs/api/audit-logs/actions/undo/route.ts +9 -0
  309. package/src/modules/audit_logs/backend/audit-logs/page.tsx +4 -4
  310. package/src/modules/audit_logs/components/AuditLogsActions.tsx +20 -4
  311. package/src/modules/auth/api/login.ts +9 -2
  312. package/src/modules/auth/api/users/route.ts +8 -4
  313. package/src/modules/auth/backend/users/[id]/edit/page.tsx +17 -1
  314. package/src/modules/auth/backend/users/page.tsx +11 -0
  315. package/src/modules/auth/commands/users.ts +251 -85
  316. package/src/modules/auth/data/entities.ts +3 -0
  317. package/src/modules/auth/i18n/de.json +6 -0
  318. package/src/modules/auth/i18n/en.json +6 -0
  319. package/src/modules/auth/i18n/es.json +6 -0
  320. package/src/modules/auth/i18n/ko.json +6 -0
  321. package/src/modules/auth/i18n/pl.json +6 -0
  322. package/src/modules/auth/lib/sessionIntegrity.ts +1 -1
  323. package/src/modules/auth/lib/setup-app.ts +1 -1
  324. package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
  325. package/src/modules/auth/migrations/Migration20260728134212_auth.ts +14 -0
  326. package/src/modules/eudr/acl.ts +39 -0
  327. package/src/modules/eudr/ai-agents.ts +258 -0
  328. package/src/modules/eudr/ai-tools/compliance-pack.ts +618 -0
  329. package/src/modules/eudr/ai-tools/types.ts +44 -0
  330. package/src/modules/eudr/ai-tools.ts +15 -0
  331. package/src/modules/eudr/api/dashboard/widgets/compliance-overview/route.ts +481 -0
  332. package/src/modules/eudr/api/evidence-submissions/route.ts +335 -0
  333. package/src/modules/eudr/api/mitigation-actions/route.ts +263 -0
  334. package/src/modules/eudr/api/openapi.ts +28 -0
  335. package/src/modules/eudr/api/plots/import/route.ts +369 -0
  336. package/src/modules/eudr/api/plots/route.ts +296 -0
  337. package/src/modules/eudr/api/product-mappings/route.ts +269 -0
  338. package/src/modules/eudr/api/product-mappings/suggestions/apply/route.ts +382 -0
  339. package/src/modules/eudr/api/product-mappings/suggestions/route.ts +169 -0
  340. package/src/modules/eudr/api/reports/annual/route.ts +457 -0
  341. package/src/modules/eudr/api/risk-assessments/route.ts +323 -0
  342. package/src/modules/eudr/api/statements/[id]/export/route.ts +713 -0
  343. package/src/modules/eudr/api/statements/[id]/readiness/route.ts +129 -0
  344. package/src/modules/eudr/api/statements/route.ts +329 -0
  345. package/src/modules/eudr/api/suppliers/compliance/route.ts +241 -0
  346. package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.ts +12 -0
  347. package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.tsx +545 -0
  348. package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.ts +13 -0
  349. package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.tsx +383 -0
  350. package/src/modules/eudr/backend/eudr/evidence-submissions/page.meta.ts +12 -0
  351. package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +379 -0
  352. package/src/modules/eudr/backend/eudr/page.meta.ts +12 -0
  353. package/src/modules/eudr/backend/eudr/page.tsx +477 -0
  354. package/src/modules/eudr/backend/eudr/plots/[id]/page.meta.ts +12 -0
  355. package/src/modules/eudr/backend/eudr/plots/[id]/page.tsx +404 -0
  356. package/src/modules/eudr/backend/eudr/plots/create/page.meta.ts +13 -0
  357. package/src/modules/eudr/backend/eudr/plots/create/page.tsx +267 -0
  358. package/src/modules/eudr/backend/eudr/plots/page.meta.ts +12 -0
  359. package/src/modules/eudr/backend/eudr/plots/page.tsx +442 -0
  360. package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.ts +12 -0
  361. package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.tsx +311 -0
  362. package/src/modules/eudr/backend/eudr/product-mappings/create/page.meta.ts +13 -0
  363. package/src/modules/eudr/backend/eudr/product-mappings/create/page.tsx +190 -0
  364. package/src/modules/eudr/backend/eudr/product-mappings/page.meta.ts +12 -0
  365. package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +344 -0
  366. package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.ts +12 -0
  367. package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.tsx +421 -0
  368. package/src/modules/eudr/backend/eudr/risk-assessments/create/page.meta.ts +13 -0
  369. package/src/modules/eudr/backend/eudr/risk-assessments/create/page.tsx +247 -0
  370. package/src/modules/eudr/backend/eudr/risk-assessments/page.meta.ts +12 -0
  371. package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +383 -0
  372. package/src/modules/eudr/backend/eudr/statements/[id]/page.meta.ts +12 -0
  373. package/src/modules/eudr/backend/eudr/statements/[id]/page.tsx +777 -0
  374. package/src/modules/eudr/backend/eudr/statements/create/page.meta.ts +13 -0
  375. package/src/modules/eudr/backend/eudr/statements/create/page.tsx +511 -0
  376. package/src/modules/eudr/backend/eudr/statements/page.meta.ts +12 -0
  377. package/src/modules/eudr/backend/eudr/statements/page.tsx +372 -0
  378. package/src/modules/eudr/ce.ts +52 -0
  379. package/src/modules/eudr/commands/evidence-submissions.ts +699 -0
  380. package/src/modules/eudr/commands/index.ts +6 -0
  381. package/src/modules/eudr/commands/lifecycle-events.ts +28 -0
  382. package/src/modules/eudr/commands/mitigation-actions.ts +574 -0
  383. package/src/modules/eudr/commands/plots.ts +627 -0
  384. package/src/modules/eudr/commands/product-mappings.ts +556 -0
  385. package/src/modules/eudr/commands/risk-assessments.ts +728 -0
  386. package/src/modules/eudr/commands/statements.ts +933 -0
  387. package/src/modules/eudr/components/CountrySelectField.tsx +77 -0
  388. package/src/modules/eudr/components/GeometryInput.tsx +170 -0
  389. package/src/modules/eudr/components/MappingSuggestionsDialog.tsx +385 -0
  390. package/src/modules/eudr/components/MitigationActionsSection.tsx +417 -0
  391. package/src/modules/eudr/components/OrderSelectField.tsx +116 -0
  392. package/src/modules/eudr/components/PlotImportDialog.tsx +277 -0
  393. package/src/modules/eudr/components/PlotMapPreview.tsx +46 -0
  394. package/src/modules/eudr/components/PlotMapPreviewImpl.tsx +111 -0
  395. package/src/modules/eudr/components/PlotMultiSelectField.tsx +238 -0
  396. package/src/modules/eudr/components/RiskCriteriaField.tsx +173 -0
  397. package/src/modules/eudr/components/StatementLifecycleBar.tsx +363 -0
  398. package/src/modules/eudr/components/StatementReadinessChecklist.tsx +82 -0
  399. package/src/modules/eudr/components/StatementRiskSection.tsx +242 -0
  400. package/src/modules/eudr/components/crudErrorI18n.ts +36 -0
  401. package/src/modules/eudr/components/formConfig.tsx +717 -0
  402. package/src/modules/eudr/components/plotForm.ts +75 -0
  403. package/src/modules/eudr/data/enrichers.ts +82 -0
  404. package/src/modules/eudr/data/entities.ts +369 -0
  405. package/src/modules/eudr/data/validators.ts +357 -0
  406. package/src/modules/eudr/encryption.ts +31 -0
  407. package/src/modules/eudr/events.ts +38 -0
  408. package/src/modules/eudr/i18n/de.json +747 -0
  409. package/src/modules/eudr/i18n/en.json +747 -0
  410. package/src/modules/eudr/i18n/es.json +747 -0
  411. package/src/modules/eudr/i18n/ko.json +747 -0
  412. package/src/modules/eudr/i18n/pl.json +747 -0
  413. package/src/modules/eudr/index.ts +13 -0
  414. package/src/modules/eudr/lib/annual-report.ts +120 -0
  415. package/src/modules/eudr/lib/completeness.ts +90 -0
  416. package/src/modules/eudr/lib/detail-read-scope.ts +44 -0
  417. package/src/modules/eudr/lib/geometry.ts +191 -0
  418. package/src/modules/eudr/lib/notifications.ts +85 -0
  419. package/src/modules/eudr/lib/plural.ts +36 -0
  420. package/src/modules/eudr/lib/reference-data.ts +128 -0
  421. package/src/modules/eudr/lib/species.ts +12 -0
  422. package/src/modules/eudr/lib/statement-lifecycle.ts +109 -0
  423. package/src/modules/eudr/lib/statement-seeding.ts +86 -0
  424. package/src/modules/eudr/migrations/.snapshot-open-mercato.json +2046 -0
  425. package/src/modules/eudr/migrations/Migration20260706102002_eudr.ts +16 -0
  426. package/src/modules/eudr/migrations/Migration20260706152612_eudr.ts +30 -0
  427. package/src/modules/eudr/migrations/Migration20260722100000_eudr.ts +17 -0
  428. package/src/modules/eudr/notifications.ts +56 -0
  429. package/src/modules/eudr/search.ts +212 -0
  430. package/src/modules/eudr/setup.ts +10 -0
  431. package/src/modules/eudr/subscribers/notify-mitigation-completed.ts +56 -0
  432. package/src/modules/eudr/subscribers/notify-risk-concluded.ts +58 -0
  433. package/src/modules/eudr/subscribers/notify-statement-reference-issued.ts +59 -0
  434. package/src/modules/eudr/subscribers/notify-statement-submitted.ts +49 -0
  435. package/src/modules/eudr/subscribers/notify-statement-withdrawn.ts +49 -0
  436. package/src/modules/eudr/subscribers/recompute-completeness-on-attachment-created.ts +189 -0
  437. package/src/modules/eudr/subscribers/recompute-completeness-on-attachment-deleted.ts +31 -0
  438. package/src/modules/eudr/widgets/dashboard/compliance-overview/widget.client.tsx +271 -0
  439. package/src/modules/eudr/widgets/dashboard/compliance-overview/widget.ts +24 -0
  440. package/src/modules/eudr/widgets/injection/eudr-product-column/widget.client.tsx +37 -0
  441. package/src/modules/eudr/widgets/injection/eudr-product-column/widget.ts +30 -0
  442. package/src/modules/eudr/widgets/injection/order-compliance/widget.client.tsx +131 -0
  443. package/src/modules/eudr/widgets/injection/order-compliance/widget.ts +16 -0
  444. package/src/modules/eudr/widgets/injection/supplier-compliance/widget.client.tsx +168 -0
  445. package/src/modules/eudr/widgets/injection/supplier-compliance/widget.ts +16 -0
  446. package/src/modules/eudr/widgets/injection-table.ts +31 -0
  447. package/src/modules/notifications/lib/notificationService.ts +83 -4
  448. package/src/modules/query_index/lib/engine.ts +139 -51
  449. package/src/modules/sales/api/documents/factory.ts +29 -0
  450. package/src/modules/sales/commands/documents.ts +65 -18
  451. package/src/modules/sales/data/entities.ts +1 -0
  452. package/src/modules/sales/migrations/.snapshot-open-mercato.json +10 -0
  453. package/src/modules/sales/migrations/Migration20260806120000_sales_tag_assignment_document_idx.ts +59 -0
@@ -0,0 +1,271 @@
1
+ import { z } from "zod";
2
+ import { EUDR_RISK_CRITERIA_KEYS } from "../lib/reference-data.js";
3
+ const EUDR_COMMODITIES = ["cattle", "cocoa", "coffee", "oil_palm", "rubber", "soya", "wood"];
4
+ const EUDR_SUBMISSION_STATUSES = ["draft", "submitted", "verified", "rejected"];
5
+ const EUDR_STATEMENT_STATUSES = ["draft", "submitted", "available", "withdrawn", "archived"];
6
+ const EUDR_PLOT_TYPES = ["point", "polygon"];
7
+ const EUDR_RISK_TIERS = ["low", "standard", "high", "mixed", "unknown"];
8
+ const EUDR_RISK_CONCLUSIONS = ["negligible", "non_negligible"];
9
+ const EUDR_CRITERIA_ANSWERS = ["no_concern", "concern", "not_applicable"];
10
+ const EUDR_MITIGATION_TYPES = [
11
+ "request_documents",
12
+ "supplier_audit",
13
+ "satellite_verification",
14
+ "certification_check",
15
+ "switch_sourcing",
16
+ "other"
17
+ ];
18
+ const EUDR_MITIGATION_STATUSES = ["planned", "in_progress", "completed", "cancelled"];
19
+ const EUDR_ACTIVITY_TYPES = ["import", "export", "domestic_production", "trade"];
20
+ const EUDR_ACTOR_ROLES = ["operator", "non_sme_trader", "sme_trader"];
21
+ const GEOJSON_TYPES = ["Feature", "FeatureCollection", "Point", "Polygon", "MultiPolygon"];
22
+ const uuid = () => z.string().uuid();
23
+ const geoJsonSizeLimit = 1048576;
24
+ const serverComputedSubmissionFields = ["completenessScore", "missingFields"];
25
+ const serverComputedPlotFields = ["validationWarnings", "computedArea"];
26
+ const serverComputedRiskAssessmentFields = ["countryRisks", "overallTier", "isSimplified", "assessedByName"];
27
+ const serverComputedMitigationActionFields = ["completedAt"];
28
+ const serverComputedStatementFields = ["submittedAt"];
29
+ const riskCriteriaKeySet = new Set(EUDR_RISK_CRITERIA_KEYS);
30
+ const productSnapshotSchema = z.object({
31
+ name: z.string().max(500).optional().nullable(),
32
+ sku: z.string().max(255).optional().nullable()
33
+ });
34
+ const supplierSnapshotSchema = z.object({
35
+ displayName: z.string().max(500).optional().nullable()
36
+ });
37
+ const orderSnapshotSchema = z.object({
38
+ orderNumber: z.string().max(255).optional().nullable()
39
+ });
40
+ function rejectServerComputedFields(fields) {
41
+ return z.unknown().superRefine((input, context) => {
42
+ if (input === null || typeof input !== "object" || Array.isArray(input)) return;
43
+ const record = input;
44
+ for (const field of fields) {
45
+ if (!(field in record)) continue;
46
+ context.addIssue({
47
+ code: z.ZodIssueCode.custom,
48
+ path: [field],
49
+ message: "eudr.errors.serverComputedField"
50
+ });
51
+ }
52
+ });
53
+ }
54
+ function requiredUnknown(message) {
55
+ return z.unknown().refine((value) => value !== void 0, { message });
56
+ }
57
+ function isIsoDate(value) {
58
+ const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value);
59
+ if (match === null) return false;
60
+ const year = Number(match[1]);
61
+ const month = Number(match[2]);
62
+ const day = Number(match[3]);
63
+ const date = new Date(Date.UTC(year, month - 1, day));
64
+ return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;
65
+ }
66
+ const isoDateSchema = () => z.union([
67
+ z.date(),
68
+ z.string().refine(isIsoDate, { message: "eudr.errors.invalidDate" }).transform((value) => /* @__PURE__ */ new Date(`${value}T00:00:00.000Z`))
69
+ ]);
70
+ const isoDateTimeSchema = () => z.union([
71
+ z.date(),
72
+ z.string().datetime({ message: "eudr.errors.invalidDateTime" }).transform((value) => new Date(value))
73
+ ]);
74
+ const pastOrNowIsoDateTimeSchema = () => isoDateTimeSchema().refine((value) => value.getTime() <= Date.now(), {
75
+ message: "eudr.errors.assessedAtInFuture"
76
+ });
77
+ const isoDateOrDateTimeSchema = () => z.union([isoDateSchema(), isoDateTimeSchema()]);
78
+ const countryDisplayNames = typeof Intl !== "undefined" && typeof Intl.DisplayNames !== "undefined" ? new Intl.DisplayNames(["en"], { type: "region" }) : null;
79
+ function isIsoCountryCode(value) {
80
+ if (!countryDisplayNames) return true;
81
+ try {
82
+ const label = countryDisplayNames.of(value);
83
+ return typeof label === "string" && label !== value;
84
+ } catch {
85
+ return false;
86
+ }
87
+ }
88
+ const countryCodeSchema = () => z.string().regex(/^[A-Za-z]{2}$/).transform((value) => value.toUpperCase()).refine(isIsoCountryCode, { message: "eudr.errors.invalidCountry" });
89
+ const referencedStatementCodeSchema = (maxLength) => z.string().trim().min(1).max(maxLength).regex(/^[A-Za-z0-9._/-]+$/, { message: "eudr.errors.invalidReferenceIdentifier" }).transform((value) => value.toUpperCase());
90
+ const referencedStatementSchema = z.object({
91
+ referenceNumber: referencedStatementCodeSchema(32),
92
+ verificationNumber: referencedStatementCodeSchema(16).optional()
93
+ });
94
+ const geoJsonSchema = z.object({
95
+ type: z.enum(GEOJSON_TYPES)
96
+ }).passthrough().superRefine((value, context) => {
97
+ try {
98
+ const serialized = JSON.stringify(value);
99
+ if (serialized.length <= geoJsonSizeLimit) return;
100
+ } catch {
101
+ context.addIssue({
102
+ code: z.ZodIssueCode.custom,
103
+ message: "eudr.errors.geolocationTooLarge"
104
+ });
105
+ return;
106
+ }
107
+ context.addIssue({
108
+ code: z.ZodIssueCode.custom,
109
+ message: "eudr.errors.geolocationTooLarge"
110
+ });
111
+ });
112
+ const productMappingCreateSchema = z.object({
113
+ productId: uuid(),
114
+ productSnapshot: productSnapshotSchema.optional().nullable(),
115
+ commodity: z.enum(EUDR_COMMODITIES),
116
+ hsCode: z.string().max(20).optional().nullable(),
117
+ speciesScientificName: z.string().trim().max(256).optional().nullable(),
118
+ speciesCommonName: z.string().trim().max(256).optional().nullable(),
119
+ isInScope: z.boolean().optional(),
120
+ notes: z.string().max(5e3).optional().nullable()
121
+ });
122
+ const productMappingUpdateSchema = z.object({
123
+ id: uuid()
124
+ }).merge(productMappingCreateSchema.partial());
125
+ const plotBaseSchema = z.object({
126
+ supplierEntityId: uuid(),
127
+ supplierSnapshot: supplierSnapshotSchema.optional().nullable(),
128
+ name: z.string().min(1).max(200),
129
+ externalId: z.string().max(100).optional().nullable(),
130
+ description: z.string().max(2e3).optional().nullable(),
131
+ originCountry: countryCodeSchema(),
132
+ geometry: requiredUnknown("eudr.errors.geometryRequired"),
133
+ areaHa: z.coerce.number().positive().max(1e5).optional().nullable(),
134
+ producerName: z.string().max(500).optional().nullable(),
135
+ isActive: z.boolean().optional()
136
+ });
137
+ const plotCreateSchema = rejectServerComputedFields(serverComputedPlotFields).pipe(plotBaseSchema);
138
+ const plotUpdateSchema = rejectServerComputedFields(serverComputedPlotFields).pipe(
139
+ z.object({
140
+ id: uuid()
141
+ }).merge(plotBaseSchema.partial())
142
+ );
143
+ const evidenceSubmissionBaseSchema = z.object({
144
+ supplierEntityId: uuid(),
145
+ supplierSnapshot: supplierSnapshotSchema.optional().nullable(),
146
+ commodity: z.enum(EUDR_COMMODITIES),
147
+ productMappingId: uuid().optional().nullable(),
148
+ statementId: uuid().optional().nullable(),
149
+ originCountry: countryCodeSchema().optional().nullable(),
150
+ geolocation: geoJsonSchema.optional().nullable(),
151
+ quantityKg: z.coerce.number().positive().optional().nullable(),
152
+ batchNumber: z.string().max(255).optional().nullable(),
153
+ harvestFrom: z.coerce.date().optional().nullable(),
154
+ harvestTo: z.coerce.date().optional().nullable(),
155
+ producerName: z.string().max(500).optional().nullable(),
156
+ attachmentIds: z.array(uuid()).max(100).optional(),
157
+ plotIds: z.array(uuid()).max(200).optional(),
158
+ status: z.enum(EUDR_SUBMISSION_STATUSES).optional(),
159
+ notes: z.string().max(5e3).optional().nullable()
160
+ });
161
+ function validateHarvestRange(input, context) {
162
+ if (!input.harvestFrom || !input.harvestTo || input.harvestFrom <= input.harvestTo) return;
163
+ context.addIssue({
164
+ code: z.ZodIssueCode.custom,
165
+ path: ["harvestTo"],
166
+ message: "eudr.errors.harvestRange"
167
+ });
168
+ }
169
+ const evidenceSubmissionCreateSchema = rejectServerComputedFields(serverComputedSubmissionFields).pipe(
170
+ evidenceSubmissionBaseSchema.superRefine(validateHarvestRange)
171
+ );
172
+ const evidenceSubmissionUpdateSchema = rejectServerComputedFields(serverComputedSubmissionFields).pipe(
173
+ z.object({
174
+ id: uuid()
175
+ }).merge(evidenceSubmissionBaseSchema.partial()).superRefine(validateHarvestRange)
176
+ );
177
+ const riskCriteriaEntrySchema = z.object({
178
+ answer: z.enum(EUDR_CRITERIA_ANSWERS),
179
+ note: z.string().max(2e3).optional().nullable()
180
+ });
181
+ const riskCriteriaSchema = z.record(z.string(), riskCriteriaEntrySchema).superRefine((criteria, context) => {
182
+ for (const key of Object.keys(criteria)) {
183
+ if (riskCriteriaKeySet.has(key)) continue;
184
+ context.addIssue({
185
+ code: z.ZodIssueCode.custom,
186
+ path: [key],
187
+ message: "eudr.errors.invalidRiskCriterion"
188
+ });
189
+ }
190
+ });
191
+ const riskAssessmentBaseSchema = z.object({
192
+ statementId: uuid(),
193
+ criteria: riskCriteriaSchema,
194
+ conclusion: z.enum(EUDR_RISK_CONCLUSIONS),
195
+ reviewDueAt: isoDateOrDateTimeSchema().optional().nullable(),
196
+ assessedAt: pastOrNowIsoDateTimeSchema().optional(),
197
+ notes: z.string().max(4e3).optional().nullable()
198
+ });
199
+ const riskAssessmentCreateSchema = rejectServerComputedFields(serverComputedRiskAssessmentFields).pipe(riskAssessmentBaseSchema);
200
+ const riskAssessmentUpdateSchema = rejectServerComputedFields(serverComputedRiskAssessmentFields).pipe(
201
+ z.object({
202
+ id: uuid()
203
+ }).merge(riskAssessmentBaseSchema.partial())
204
+ );
205
+ const mitigationActionBaseSchema = z.object({
206
+ riskAssessmentId: uuid(),
207
+ actionType: z.enum(EUDR_MITIGATION_TYPES).optional(),
208
+ title: z.string().min(1).max(200),
209
+ description: z.string().max(2e3).optional().nullable(),
210
+ status: z.enum(EUDR_MITIGATION_STATUSES).optional(),
211
+ dueDate: isoDateSchema().optional().nullable(),
212
+ notes: z.string().max(2e3).optional().nullable()
213
+ });
214
+ const mitigationActionCreateSchema = rejectServerComputedFields(serverComputedMitigationActionFields).pipe(mitigationActionBaseSchema);
215
+ const mitigationActionUpdateSchema = rejectServerComputedFields(serverComputedMitigationActionFields).pipe(
216
+ z.object({
217
+ id: uuid()
218
+ }).merge(mitigationActionBaseSchema.partial())
219
+ );
220
+ const statementBaseSchema = z.object({
221
+ title: z.string().min(1).max(500),
222
+ commodity: z.enum(EUDR_COMMODITIES),
223
+ referenceNumber: z.string().max(255).optional().nullable(),
224
+ verificationNumber: z.string().max(255).optional().nullable(),
225
+ status: z.enum(EUDR_STATEMENT_STATUSES).optional(),
226
+ activityType: z.enum(EUDR_ACTIVITY_TYPES).optional().nullable(),
227
+ actorRole: z.enum(EUDR_ACTOR_ROLES).optional().nullable(),
228
+ referencedStatements: z.array(referencedStatementSchema).max(100).optional(),
229
+ quantityKg: z.coerce.number().positive().optional().nullable(),
230
+ supplementaryUnit: z.string().max(16).optional().nullable(),
231
+ supplementaryQuantity: z.coerce.number().positive().optional().nullable(),
232
+ orderId: uuid().optional().nullable(),
233
+ referenceIssuedAt: isoDateTimeSchema().optional().nullable(),
234
+ orderSnapshot: orderSnapshotSchema.optional().nullable(),
235
+ notes: z.string().max(5e3).optional().nullable()
236
+ });
237
+ const statementCreateSchema = rejectServerComputedFields(serverComputedStatementFields).pipe(statementBaseSchema);
238
+ const statementUpdateSchema = rejectServerComputedFields(serverComputedStatementFields).pipe(
239
+ z.object({
240
+ id: uuid()
241
+ }).merge(statementBaseSchema.partial())
242
+ );
243
+ export {
244
+ EUDR_ACTIVITY_TYPES,
245
+ EUDR_ACTOR_ROLES,
246
+ EUDR_COMMODITIES,
247
+ EUDR_CRITERIA_ANSWERS,
248
+ EUDR_MITIGATION_STATUSES,
249
+ EUDR_MITIGATION_TYPES,
250
+ EUDR_PLOT_TYPES,
251
+ EUDR_RISK_CONCLUSIONS,
252
+ EUDR_RISK_TIERS,
253
+ EUDR_STATEMENT_STATUSES,
254
+ EUDR_SUBMISSION_STATUSES,
255
+ GEOJSON_TYPES,
256
+ evidenceSubmissionCreateSchema,
257
+ evidenceSubmissionUpdateSchema,
258
+ geoJsonSchema,
259
+ mitigationActionCreateSchema,
260
+ mitigationActionUpdateSchema,
261
+ plotCreateSchema,
262
+ plotUpdateSchema,
263
+ productMappingCreateSchema,
264
+ productMappingUpdateSchema,
265
+ referencedStatementSchema,
266
+ riskAssessmentCreateSchema,
267
+ riskAssessmentUpdateSchema,
268
+ statementCreateSchema,
269
+ statementUpdateSchema
270
+ };
271
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/eudr/data/validators.ts"],
4
+ "sourcesContent": ["import { z } from 'zod'\n\nimport { EUDR_RISK_CRITERIA_KEYS } from '../lib/reference-data'\n\nexport const EUDR_COMMODITIES = ['cattle', 'cocoa', 'coffee', 'oil_palm', 'rubber', 'soya', 'wood'] as const\nexport type EudrCommodity = (typeof EUDR_COMMODITIES)[number]\n\nexport const EUDR_SUBMISSION_STATUSES = ['draft', 'submitted', 'verified', 'rejected'] as const\nexport type EudrSubmissionStatus = (typeof EUDR_SUBMISSION_STATUSES)[number]\n\nexport const EUDR_STATEMENT_STATUSES = ['draft', 'submitted', 'available', 'withdrawn', 'archived'] as const\nexport type EudrStatementStatus = (typeof EUDR_STATEMENT_STATUSES)[number]\n\nexport const EUDR_PLOT_TYPES = ['point', 'polygon'] as const\nexport type EudrPlotType = (typeof EUDR_PLOT_TYPES)[number]\n\nexport const EUDR_RISK_TIERS = ['low', 'standard', 'high', 'mixed', 'unknown'] as const\nexport type EudrRiskTier = (typeof EUDR_RISK_TIERS)[number]\n\nexport const EUDR_RISK_CONCLUSIONS = ['negligible', 'non_negligible'] as const\nexport type EudrRiskConclusion = (typeof EUDR_RISK_CONCLUSIONS)[number]\n\nexport const EUDR_CRITERIA_ANSWERS = ['no_concern', 'concern', 'not_applicable'] as const\nexport type EudrCriteriaAnswer = (typeof EUDR_CRITERIA_ANSWERS)[number]\n\nexport const EUDR_MITIGATION_TYPES = [\n 'request_documents',\n 'supplier_audit',\n 'satellite_verification',\n 'certification_check',\n 'switch_sourcing',\n 'other',\n] as const\nexport type EudrMitigationType = (typeof EUDR_MITIGATION_TYPES)[number]\n\nexport const EUDR_MITIGATION_STATUSES = ['planned', 'in_progress', 'completed', 'cancelled'] as const\nexport type EudrMitigationStatus = (typeof EUDR_MITIGATION_STATUSES)[number]\n\nexport const EUDR_ACTIVITY_TYPES = ['import', 'export', 'domestic_production', 'trade'] as const\nexport type EudrActivityType = (typeof EUDR_ACTIVITY_TYPES)[number]\n\nexport const EUDR_ACTOR_ROLES = ['operator', 'non_sme_trader', 'sme_trader'] as const\nexport type EudrActorRole = (typeof EUDR_ACTOR_ROLES)[number]\n\nexport const GEOJSON_TYPES = ['Feature', 'FeatureCollection', 'Point', 'Polygon', 'MultiPolygon'] as const\n\nconst uuid = () => z.string().uuid()\nconst geoJsonSizeLimit = 1_048_576\nconst serverComputedSubmissionFields = ['completenessScore', 'missingFields'] as const\nconst serverComputedPlotFields = ['validationWarnings', 'computedArea'] as const\nconst serverComputedRiskAssessmentFields = ['countryRisks', 'overallTier', 'isSimplified', 'assessedByName'] as const\nconst serverComputedMitigationActionFields = ['completedAt'] as const\nconst serverComputedStatementFields = ['submittedAt'] as const\nconst riskCriteriaKeySet = new Set(EUDR_RISK_CRITERIA_KEYS)\n\nconst productSnapshotSchema = z.object({\n name: z.string().max(500).optional().nullable(),\n sku: z.string().max(255).optional().nullable(),\n})\nconst supplierSnapshotSchema = z.object({\n displayName: z.string().max(500).optional().nullable(),\n})\nconst orderSnapshotSchema = z.object({\n orderNumber: z.string().max(255).optional().nullable(),\n})\n\nfunction rejectServerComputedFields(fields: readonly string[]): z.ZodType<unknown> {\n return z.unknown().superRefine((input, context) => {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) return\n const record = input as Record<string, unknown>\n for (const field of fields) {\n if (!(field in record)) continue\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [field],\n message: 'eudr.errors.serverComputedField',\n })\n }\n })\n}\n\nfunction requiredUnknown(message: string): z.ZodType<unknown> {\n return z.unknown().refine((value) => value !== undefined, { message })\n}\n\nfunction isIsoDate(value: string): boolean {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value)\n if (match === null) return false\n const year = Number(match[1])\n const month = Number(match[2])\n const day = Number(match[3])\n const date = new Date(Date.UTC(year, month - 1, day))\n return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day\n}\n\n// Route mapInput parses these schemas first (string -> Date) and commands parse\n// the mapped input again, so both schemas must also accept Date instances.\nconst isoDateSchema = () => z.union([\n z.date(),\n z\n .string()\n .refine(isIsoDate, { message: 'eudr.errors.invalidDate' })\n .transform((value) => new Date(`${value}T00:00:00.000Z`)),\n])\n\nconst isoDateTimeSchema = () => z.union([\n z.date(),\n z\n .string()\n .datetime({ message: 'eudr.errors.invalidDateTime' })\n .transform((value) => new Date(value)),\n])\n\nconst pastOrNowIsoDateTimeSchema = () => isoDateTimeSchema().refine((value) => value.getTime() <= Date.now(), {\n message: 'eudr.errors.assessedAtInFuture',\n})\n\nconst isoDateOrDateTimeSchema = () => z.union([isoDateSchema(), isoDateTimeSchema()])\n\n// Country codes are validated through ICU rather than the shared country helper.\n// That helper imports language-subtag-registry's JSON, and the build strips the\n// import attribute Node's ESM loader requires, so importing it from server-side\n// code (CLI, workers) fails with ERR_IMPORT_ATTRIBUTE_MISSING. UI components can\n// keep using the helper because bundlers resolve the JSON themselves.\nconst countryDisplayNames = typeof Intl !== 'undefined' && typeof Intl.DisplayNames !== 'undefined'\n ? new Intl.DisplayNames(['en'], { type: 'region' })\n : null\n\nfunction isIsoCountryCode(value: string): boolean {\n // Without ICU data there is nothing to check against, so accept the shape.\n if (!countryDisplayNames) return true\n try {\n // Intl echoes the input back when it cannot resolve the region.\n const label = countryDisplayNames.of(value)\n return typeof label === 'string' && label !== value\n } catch {\n return false\n }\n}\n\nconst countryCodeSchema = () => z\n .string()\n .regex(/^[A-Za-z]{2}$/)\n .transform((value) => value.toUpperCase())\n .refine(isIsoCountryCode, { message: 'eudr.errors.invalidCountry' })\n\nconst referencedStatementCodeSchema = (maxLength: number) => z\n .string()\n .trim()\n .min(1)\n .max(maxLength)\n .regex(/^[A-Za-z0-9._/-]+$/, { message: 'eudr.errors.invalidReferenceIdentifier' })\n .transform((value) => value.toUpperCase())\n\nexport const referencedStatementSchema = z.object({\n referenceNumber: referencedStatementCodeSchema(32),\n verificationNumber: referencedStatementCodeSchema(16).optional(),\n})\n\nexport const geoJsonSchema = z\n .object({\n type: z.enum(GEOJSON_TYPES),\n })\n .passthrough()\n .superRefine((value, context) => {\n try {\n const serialized = JSON.stringify(value)\n if (serialized.length <= geoJsonSizeLimit) return\n } catch {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'eudr.errors.geolocationTooLarge',\n })\n return\n }\n context.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'eudr.errors.geolocationTooLarge',\n })\n })\n\nexport const productMappingCreateSchema = z.object({\n productId: uuid(),\n productSnapshot: productSnapshotSchema.optional().nullable(),\n commodity: z.enum(EUDR_COMMODITIES),\n hsCode: z.string().max(20).optional().nullable(),\n speciesScientificName: z.string().trim().max(256).optional().nullable(),\n speciesCommonName: z.string().trim().max(256).optional().nullable(),\n isInScope: z.boolean().optional(),\n notes: z.string().max(5000).optional().nullable(),\n})\n\nexport const productMappingUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(productMappingCreateSchema.partial())\n\nconst plotBaseSchema = z.object({\n supplierEntityId: uuid(),\n supplierSnapshot: supplierSnapshotSchema.optional().nullable(),\n name: z.string().min(1).max(200),\n externalId: z.string().max(100).optional().nullable(),\n description: z.string().max(2000).optional().nullable(),\n originCountry: countryCodeSchema(),\n geometry: requiredUnknown('eudr.errors.geometryRequired'),\n areaHa: z.coerce.number().positive().max(100_000).optional().nullable(),\n producerName: z.string().max(500).optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const plotCreateSchema = rejectServerComputedFields(serverComputedPlotFields).pipe(plotBaseSchema)\n\nexport const plotUpdateSchema = rejectServerComputedFields(serverComputedPlotFields).pipe(\n z\n .object({\n id: uuid(),\n })\n .merge(plotBaseSchema.partial()),\n)\n\nconst evidenceSubmissionBaseSchema = z.object({\n supplierEntityId: uuid(),\n supplierSnapshot: supplierSnapshotSchema.optional().nullable(),\n commodity: z.enum(EUDR_COMMODITIES),\n productMappingId: uuid().optional().nullable(),\n statementId: uuid().optional().nullable(),\n originCountry: countryCodeSchema().optional().nullable(),\n geolocation: geoJsonSchema.optional().nullable(),\n quantityKg: z.coerce.number().positive().optional().nullable(),\n batchNumber: z.string().max(255).optional().nullable(),\n harvestFrom: z.coerce.date().optional().nullable(),\n harvestTo: z.coerce.date().optional().nullable(),\n producerName: z.string().max(500).optional().nullable(),\n attachmentIds: z.array(uuid()).max(100).optional(),\n plotIds: z.array(uuid()).max(200).optional(),\n status: z.enum(EUDR_SUBMISSION_STATUSES).optional(),\n notes: z.string().max(5000).optional().nullable(),\n})\n\nfunction validateHarvestRange(input: { harvestFrom?: Date | null; harvestTo?: Date | null }, context: z.RefinementCtx): void {\n if (!input.harvestFrom || !input.harvestTo || input.harvestFrom <= input.harvestTo) return\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['harvestTo'],\n message: 'eudr.errors.harvestRange',\n })\n}\n\nexport const evidenceSubmissionCreateSchema = rejectServerComputedFields(serverComputedSubmissionFields).pipe(\n evidenceSubmissionBaseSchema.superRefine(validateHarvestRange),\n)\n\nexport const evidenceSubmissionUpdateSchema = rejectServerComputedFields(serverComputedSubmissionFields).pipe(\n z\n .object({\n id: uuid(),\n })\n .merge(evidenceSubmissionBaseSchema.partial())\n .superRefine(validateHarvestRange),\n)\n\nconst riskCriteriaEntrySchema = z.object({\n answer: z.enum(EUDR_CRITERIA_ANSWERS),\n note: z.string().max(2000).optional().nullable(),\n})\n\nconst riskCriteriaSchema = z.record(z.string(), riskCriteriaEntrySchema).superRefine((criteria, context) => {\n for (const key of Object.keys(criteria)) {\n if (riskCriteriaKeySet.has(key)) continue\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [key],\n message: 'eudr.errors.invalidRiskCriterion',\n })\n }\n})\n\nconst riskAssessmentBaseSchema = z.object({\n statementId: uuid(),\n criteria: riskCriteriaSchema,\n conclusion: z.enum(EUDR_RISK_CONCLUSIONS),\n reviewDueAt: isoDateOrDateTimeSchema().optional().nullable(),\n assessedAt: pastOrNowIsoDateTimeSchema().optional(),\n notes: z.string().max(4000).optional().nullable(),\n})\n\nexport const riskAssessmentCreateSchema = rejectServerComputedFields(serverComputedRiskAssessmentFields).pipe(riskAssessmentBaseSchema)\n\nexport const riskAssessmentUpdateSchema = rejectServerComputedFields(serverComputedRiskAssessmentFields).pipe(\n z\n .object({\n id: uuid(),\n })\n .merge(riskAssessmentBaseSchema.partial()),\n)\n\nconst mitigationActionBaseSchema = z.object({\n riskAssessmentId: uuid(),\n actionType: z.enum(EUDR_MITIGATION_TYPES).optional(),\n title: z.string().min(1).max(200),\n description: z.string().max(2000).optional().nullable(),\n status: z.enum(EUDR_MITIGATION_STATUSES).optional(),\n dueDate: isoDateSchema().optional().nullable(),\n notes: z.string().max(2000).optional().nullable(),\n})\n\nexport const mitigationActionCreateSchema = rejectServerComputedFields(serverComputedMitigationActionFields).pipe(mitigationActionBaseSchema)\n\nexport const mitigationActionUpdateSchema = rejectServerComputedFields(serverComputedMitigationActionFields).pipe(\n z\n .object({\n id: uuid(),\n })\n .merge(mitigationActionBaseSchema.partial()),\n)\n\nconst statementBaseSchema = z.object({\n title: z.string().min(1).max(500),\n commodity: z.enum(EUDR_COMMODITIES),\n referenceNumber: z.string().max(255).optional().nullable(),\n verificationNumber: z.string().max(255).optional().nullable(),\n status: z.enum(EUDR_STATEMENT_STATUSES).optional(),\n activityType: z.enum(EUDR_ACTIVITY_TYPES).optional().nullable(),\n actorRole: z.enum(EUDR_ACTOR_ROLES).optional().nullable(),\n referencedStatements: z.array(referencedStatementSchema).max(100).optional(),\n quantityKg: z.coerce.number().positive().optional().nullable(),\n supplementaryUnit: z.string().max(16).optional().nullable(),\n supplementaryQuantity: z.coerce.number().positive().optional().nullable(),\n orderId: uuid().optional().nullable(),\n referenceIssuedAt: isoDateTimeSchema().optional().nullable(),\n orderSnapshot: orderSnapshotSchema.optional().nullable(),\n notes: z.string().max(5000).optional().nullable(),\n})\n\nexport const statementCreateSchema = rejectServerComputedFields(serverComputedStatementFields).pipe(statementBaseSchema)\n\nexport const statementUpdateSchema = rejectServerComputedFields(serverComputedStatementFields).pipe(\n z\n .object({\n id: uuid(),\n })\n .merge(statementBaseSchema.partial()),\n)\n\nexport type ProductMappingCreateInput = z.infer<typeof productMappingCreateSchema>\nexport type ProductMappingUpdateInput = z.infer<typeof productMappingUpdateSchema>\nexport type PlotCreateInput = z.infer<typeof plotCreateSchema>\nexport type PlotUpdateInput = z.infer<typeof plotUpdateSchema>\nexport type EvidenceSubmissionCreateInput = z.infer<typeof evidenceSubmissionCreateSchema>\nexport type EvidenceSubmissionUpdateInput = z.infer<typeof evidenceSubmissionUpdateSchema>\nexport type RiskAssessmentCreateInput = z.infer<typeof riskAssessmentCreateSchema>\nexport type RiskAssessmentUpdateInput = z.infer<typeof riskAssessmentUpdateSchema>\nexport type MitigationActionCreateInput = z.infer<typeof mitigationActionCreateSchema>\nexport type MitigationActionUpdateInput = z.infer<typeof mitigationActionUpdateSchema>\nexport type StatementCreateInput = z.infer<typeof statementCreateSchema>\nexport type StatementUpdateInput = z.infer<typeof statementUpdateSchema>\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,33 @@
1
+ const defaultEncryptionMaps = [
2
+ {
3
+ entityId: "eudr:eudr_evidence_submission",
4
+ fields: [
5
+ { field: "producer_name" },
6
+ { field: "notes" }
7
+ ]
8
+ },
9
+ {
10
+ entityId: "eudr:eudr_plot",
11
+ fields: [
12
+ { field: "producer_name" }
13
+ ]
14
+ },
15
+ {
16
+ entityId: "eudr:eudr_risk_assessment",
17
+ fields: [
18
+ { field: "notes" }
19
+ ]
20
+ },
21
+ {
22
+ entityId: "eudr:eudr_mitigation_action",
23
+ fields: [
24
+ { field: "notes" }
25
+ ]
26
+ }
27
+ ];
28
+ var encryption_default = defaultEncryptionMaps;
29
+ export {
30
+ encryption_default as default,
31
+ defaultEncryptionMaps
32
+ };
33
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/modules/eudr/encryption.ts"],
4
+ "sourcesContent": ["import type { ModuleEncryptionMap } from '@open-mercato/shared/modules/encryption'\n\nexport const defaultEncryptionMaps: ModuleEncryptionMap[] = [\n {\n entityId: 'eudr:eudr_evidence_submission',\n fields: [\n { field: 'producer_name' },\n { field: 'notes' },\n ],\n },\n {\n entityId: 'eudr:eudr_plot',\n fields: [\n { field: 'producer_name' },\n ],\n },\n {\n entityId: 'eudr:eudr_risk_assessment',\n fields: [\n { field: 'notes' },\n ],\n },\n {\n entityId: 'eudr:eudr_mitigation_action',\n fields: [\n { field: 'notes' },\n ],\n },\n]\n\nexport default defaultEncryptionMaps\n"],
5
+ "mappings": "AAEO,MAAM,wBAA+C;AAAA,EAC1D;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,OAAO,gBAAgB;AAAA,MACzB,EAAE,OAAO,QAAQ;AAAA,IACnB;AAAA,EACF;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,OAAO,gBAAgB;AAAA,IAC3B;AAAA,EACF;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,OAAO,QAAQ;AAAA,IACnB;AAAA,EACF;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,EAAE,OAAO,QAAQ;AAAA,IACnB;AAAA,EACF;AACF;AAEA,IAAO,qBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,38 @@
1
+ import { createModuleEvents } from "@open-mercato/shared/modules/events";
2
+ const events = [
3
+ { id: "eudr.product_mapping.created", label: "EUDR Product Mapping Created", entity: "product_mapping", category: "crud" },
4
+ { id: "eudr.product_mapping.updated", label: "EUDR Product Mapping Updated", entity: "product_mapping", category: "crud" },
5
+ { id: "eudr.product_mapping.deleted", label: "EUDR Product Mapping Deleted", entity: "product_mapping", category: "crud" },
6
+ { id: "eudr.evidence_submission.created", label: "EUDR Evidence Submission Created", entity: "evidence_submission", category: "crud" },
7
+ { id: "eudr.evidence_submission.updated", label: "EUDR Evidence Submission Updated", entity: "evidence_submission", category: "crud" },
8
+ { id: "eudr.evidence_submission.deleted", label: "EUDR Evidence Submission Deleted", entity: "evidence_submission", category: "crud" },
9
+ { id: "eudr.due_diligence_statement.created", label: "EUDR Due Diligence Statement Created", entity: "due_diligence_statement", category: "crud" },
10
+ { id: "eudr.due_diligence_statement.updated", label: "EUDR Due Diligence Statement Updated", entity: "due_diligence_statement", category: "crud" },
11
+ { id: "eudr.due_diligence_statement.deleted", label: "EUDR Due Diligence Statement Deleted", entity: "due_diligence_statement", category: "crud" },
12
+ { id: "eudr.plot.created", label: "EUDR Plot Created", entity: "plot", category: "crud" },
13
+ { id: "eudr.plot.updated", label: "EUDR Plot Updated", entity: "plot", category: "crud" },
14
+ { id: "eudr.plot.deleted", label: "EUDR Plot Deleted", entity: "plot", category: "crud" },
15
+ { id: "eudr.risk_assessment.created", label: "EUDR Risk Assessment Created", entity: "risk_assessment", category: "crud" },
16
+ { id: "eudr.risk_assessment.updated", label: "EUDR Risk Assessment Updated", entity: "risk_assessment", category: "crud" },
17
+ { id: "eudr.risk_assessment.deleted", label: "EUDR Risk Assessment Deleted", entity: "risk_assessment", category: "crud" },
18
+ { id: "eudr.mitigation_action.created", label: "EUDR Mitigation Action Created", entity: "mitigation_action", category: "crud" },
19
+ { id: "eudr.mitigation_action.updated", label: "EUDR Mitigation Action Updated", entity: "mitigation_action", category: "crud" },
20
+ { id: "eudr.mitigation_action.deleted", label: "EUDR Mitigation Action Deleted", entity: "mitigation_action", category: "crud" },
21
+ { id: "eudr.due_diligence_statement.submitted", label: "EUDR Due Diligence Statement Submitted", entity: "due_diligence_statement", category: "lifecycle" },
22
+ { id: "eudr.due_diligence_statement.reference_issued", label: "EUDR Due Diligence Statement Reference Issued", entity: "due_diligence_statement", category: "lifecycle" },
23
+ { id: "eudr.due_diligence_statement.withdrawn", label: "EUDR Due Diligence Statement Withdrawn", entity: "due_diligence_statement", category: "lifecycle" },
24
+ { id: "eudr.risk_assessment.concluded", label: "EUDR Risk Assessment Concluded", entity: "risk_assessment", category: "lifecycle" },
25
+ { id: "eudr.mitigation_action.completed", label: "EUDR Mitigation Action Completed", entity: "mitigation_action", category: "lifecycle" }
26
+ ];
27
+ const eventsConfig = createModuleEvents({
28
+ moduleId: "eudr",
29
+ events
30
+ });
31
+ const emitEudrEvent = eventsConfig.emit;
32
+ var events_default = eventsConfig;
33
+ export {
34
+ events_default as default,
35
+ emitEudrEvent,
36
+ eventsConfig
37
+ };
38
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/modules/eudr/events.ts"],
4
+ "sourcesContent": ["import { createModuleEvents } from '@open-mercato/shared/modules/events'\n\nconst events = [\n { id: 'eudr.product_mapping.created', label: 'EUDR Product Mapping Created', entity: 'product_mapping', category: 'crud' },\n { id: 'eudr.product_mapping.updated', label: 'EUDR Product Mapping Updated', entity: 'product_mapping', category: 'crud' },\n { id: 'eudr.product_mapping.deleted', label: 'EUDR Product Mapping Deleted', entity: 'product_mapping', category: 'crud' },\n { id: 'eudr.evidence_submission.created', label: 'EUDR Evidence Submission Created', entity: 'evidence_submission', category: 'crud' },\n { id: 'eudr.evidence_submission.updated', label: 'EUDR Evidence Submission Updated', entity: 'evidence_submission', category: 'crud' },\n { id: 'eudr.evidence_submission.deleted', label: 'EUDR Evidence Submission Deleted', entity: 'evidence_submission', category: 'crud' },\n { id: 'eudr.due_diligence_statement.created', label: 'EUDR Due Diligence Statement Created', entity: 'due_diligence_statement', category: 'crud' },\n { id: 'eudr.due_diligence_statement.updated', label: 'EUDR Due Diligence Statement Updated', entity: 'due_diligence_statement', category: 'crud' },\n { id: 'eudr.due_diligence_statement.deleted', label: 'EUDR Due Diligence Statement Deleted', entity: 'due_diligence_statement', category: 'crud' },\n { id: 'eudr.plot.created', label: 'EUDR Plot Created', entity: 'plot', category: 'crud' },\n { id: 'eudr.plot.updated', label: 'EUDR Plot Updated', entity: 'plot', category: 'crud' },\n { id: 'eudr.plot.deleted', label: 'EUDR Plot Deleted', entity: 'plot', category: 'crud' },\n { id: 'eudr.risk_assessment.created', label: 'EUDR Risk Assessment Created', entity: 'risk_assessment', category: 'crud' },\n { id: 'eudr.risk_assessment.updated', label: 'EUDR Risk Assessment Updated', entity: 'risk_assessment', category: 'crud' },\n { id: 'eudr.risk_assessment.deleted', label: 'EUDR Risk Assessment Deleted', entity: 'risk_assessment', category: 'crud' },\n { id: 'eudr.mitigation_action.created', label: 'EUDR Mitigation Action Created', entity: 'mitigation_action', category: 'crud' },\n { id: 'eudr.mitigation_action.updated', label: 'EUDR Mitigation Action Updated', entity: 'mitigation_action', category: 'crud' },\n { id: 'eudr.mitigation_action.deleted', label: 'EUDR Mitigation Action Deleted', entity: 'mitigation_action', category: 'crud' },\n { id: 'eudr.due_diligence_statement.submitted', label: 'EUDR Due Diligence Statement Submitted', entity: 'due_diligence_statement', category: 'lifecycle' },\n { id: 'eudr.due_diligence_statement.reference_issued', label: 'EUDR Due Diligence Statement Reference Issued', entity: 'due_diligence_statement', category: 'lifecycle' },\n { id: 'eudr.due_diligence_statement.withdrawn', label: 'EUDR Due Diligence Statement Withdrawn', entity: 'due_diligence_statement', category: 'lifecycle' },\n { id: 'eudr.risk_assessment.concluded', label: 'EUDR Risk Assessment Concluded', entity: 'risk_assessment', category: 'lifecycle' },\n { id: 'eudr.mitigation_action.completed', label: 'EUDR Mitigation Action Completed', entity: 'mitigation_action', category: 'lifecycle' },\n] as const\n\nexport const eventsConfig = createModuleEvents({\n moduleId: 'eudr',\n events,\n})\n\nexport const emitEudrEvent = eventsConfig.emit\n\nexport type EudrEventId = typeof events[number]['id']\n\nexport default eventsConfig\n"],
5
+ "mappings": "AAAA,SAAS,0BAA0B;AAEnC,MAAM,SAAS;AAAA,EACb,EAAE,IAAI,gCAAgC,OAAO,gCAAgC,QAAQ,mBAAmB,UAAU,OAAO;AAAA,EACzH,EAAE,IAAI,gCAAgC,OAAO,gCAAgC,QAAQ,mBAAmB,UAAU,OAAO;AAAA,EACzH,EAAE,IAAI,gCAAgC,OAAO,gCAAgC,QAAQ,mBAAmB,UAAU,OAAO;AAAA,EACzH,EAAE,IAAI,oCAAoC,OAAO,oCAAoC,QAAQ,uBAAuB,UAAU,OAAO;AAAA,EACrI,EAAE,IAAI,oCAAoC,OAAO,oCAAoC,QAAQ,uBAAuB,UAAU,OAAO;AAAA,EACrI,EAAE,IAAI,oCAAoC,OAAO,oCAAoC,QAAQ,uBAAuB,UAAU,OAAO;AAAA,EACrI,EAAE,IAAI,wCAAwC,OAAO,wCAAwC,QAAQ,2BAA2B,UAAU,OAAO;AAAA,EACjJ,EAAE,IAAI,wCAAwC,OAAO,wCAAwC,QAAQ,2BAA2B,UAAU,OAAO;AAAA,EACjJ,EAAE,IAAI,wCAAwC,OAAO,wCAAwC,QAAQ,2BAA2B,UAAU,OAAO;AAAA,EACjJ,EAAE,IAAI,qBAAqB,OAAO,qBAAqB,QAAQ,QAAQ,UAAU,OAAO;AAAA,EACxF,EAAE,IAAI,qBAAqB,OAAO,qBAAqB,QAAQ,QAAQ,UAAU,OAAO;AAAA,EACxF,EAAE,IAAI,qBAAqB,OAAO,qBAAqB,QAAQ,QAAQ,UAAU,OAAO;AAAA,EACxF,EAAE,IAAI,gCAAgC,OAAO,gCAAgC,QAAQ,mBAAmB,UAAU,OAAO;AAAA,EACzH,EAAE,IAAI,gCAAgC,OAAO,gCAAgC,QAAQ,mBAAmB,UAAU,OAAO;AAAA,EACzH,EAAE,IAAI,gCAAgC,OAAO,gCAAgC,QAAQ,mBAAmB,UAAU,OAAO;AAAA,EACzH,EAAE,IAAI,kCAAkC,OAAO,kCAAkC,QAAQ,qBAAqB,UAAU,OAAO;AAAA,EAC/H,EAAE,IAAI,kCAAkC,OAAO,kCAAkC,QAAQ,qBAAqB,UAAU,OAAO;AAAA,EAC/H,EAAE,IAAI,kCAAkC,OAAO,kCAAkC,QAAQ,qBAAqB,UAAU,OAAO;AAAA,EAC/H,EAAE,IAAI,0CAA0C,OAAO,0CAA0C,QAAQ,2BAA2B,UAAU,YAAY;AAAA,EAC1J,EAAE,IAAI,iDAAiD,OAAO,iDAAiD,QAAQ,2BAA2B,UAAU,YAAY;AAAA,EACxK,EAAE,IAAI,0CAA0C,OAAO,0CAA0C,QAAQ,2BAA2B,UAAU,YAAY;AAAA,EAC1J,EAAE,IAAI,kCAAkC,OAAO,kCAAkC,QAAQ,mBAAmB,UAAU,YAAY;AAAA,EAClI,EAAE,IAAI,oCAAoC,OAAO,oCAAoC,QAAQ,qBAAqB,UAAU,YAAY;AAC1I;AAEO,MAAM,eAAe,mBAAmB;AAAA,EAC7C,UAAU;AAAA,EACV;AACF,CAAC;AAEM,MAAM,gBAAgB,aAAa;AAI1C,IAAO,iBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ const metadata = {
2
+ name: "eudr",
3
+ title: "EUDR Compliance",
4
+ version: "0.1.0",
5
+ description: "EU Deforestation Regulation compliance: product commodity mappings, supplier origin evidence, due diligence statements.",
6
+ author: "Open Mercato Team",
7
+ license: "MIT",
8
+ ejectable: true
9
+ };
10
+ import { features } from "./acl.js";
11
+ export {
12
+ features,
13
+ metadata
14
+ };
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/modules/eudr/index.ts"],
4
+ "sourcesContent": ["import type { ModuleInfo } from '@open-mercato/shared/modules/registry'\n\nexport const metadata: ModuleInfo = {\n name: 'eudr',\n title: 'EUDR Compliance',\n version: '0.1.0',\n description: 'EU Deforestation Regulation compliance: product commodity mappings, supplier origin evidence, due diligence statements.',\n author: 'Open Mercato Team',\n license: 'MIT',\n ejectable: true,\n}\n\nexport { features } from './acl'\n"],
5
+ "mappings": "AAEO,MAAM,WAAuB;AAAA,EAClC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AACb;AAEA,SAAS,gBAAgB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,104 @@
1
+ import { z } from "zod";
2
+ import {
3
+ serializeExport
4
+ } from "@open-mercato/shared/lib/crud/exporters";
5
+ const nonNegativeIntegerSchema = z.number().int().nonnegative();
6
+ const supplementaryQuantitySchema = z.object({
7
+ unit: z.string(),
8
+ quantity: z.string()
9
+ });
10
+ const commodityReportSchema = z.object({
11
+ commodity: z.string(),
12
+ count: nonNegativeIntegerSchema,
13
+ quantityKg: z.string(),
14
+ supplementaryQuantities: z.array(supplementaryQuantitySchema)
15
+ });
16
+ const annualReportSchema = z.object({
17
+ year: z.number().int(),
18
+ generatedAt: z.string().datetime(),
19
+ statements: z.object({
20
+ total: nonNegativeIntegerSchema,
21
+ byStatus: z.record(z.string(), nonNegativeIntegerSchema),
22
+ byCommodity: z.array(commodityReportSchema)
23
+ }),
24
+ countries: z.array(z.object({
25
+ country: z.string(),
26
+ tier: z.string(),
27
+ submissionCount: nonNegativeIntegerSchema
28
+ })).optional(),
29
+ risk: z.object({
30
+ assessments: nonNegativeIntegerSchema,
31
+ negligible: nonNegativeIntegerSchema,
32
+ nonNegligible: nonNegativeIntegerSchema,
33
+ simplified: nonNegativeIntegerSchema
34
+ }).optional(),
35
+ mitigation: z.object({
36
+ total: nonNegativeIntegerSchema,
37
+ completed: nonNegativeIntegerSchema
38
+ }).optional()
39
+ });
40
+ function parseThousandths(value) {
41
+ if (value === null) return 0n;
42
+ const normalized = typeof value === "number" ? value.toFixed(3) : value.trim();
43
+ const match = /^([+-]?)(\d+)(?:\.(\d{1,3}))?$/.exec(normalized);
44
+ if (match === null) return null;
45
+ const sign = match[1] === "-" ? -1n : 1n;
46
+ const whole = BigInt(match[2]) * 1000n;
47
+ const fraction = BigInt((match[3] ?? "").padEnd(3, "0") || "0");
48
+ return sign * (whole + fraction);
49
+ }
50
+ function formatThousandths(value) {
51
+ const sign = value < 0n ? "-" : "";
52
+ const absolute = value < 0n ? -value : value;
53
+ const whole = absolute / 1000n;
54
+ const fraction = (absolute % 1000n).toString().padStart(3, "0");
55
+ return `${sign}${whole}.${fraction}`;
56
+ }
57
+ function accumulateSupplementaryQuantities(rows) {
58
+ const quantities = /* @__PURE__ */ new Map();
59
+ for (const row of rows) {
60
+ const unit = row.unit?.trim().toUpperCase() ?? "";
61
+ if (unit.length === 0) continue;
62
+ const quantity = parseThousandths(row.quantity);
63
+ if (quantity === null) continue;
64
+ quantities.set(unit, (quantities.get(unit) ?? 0n) + quantity);
65
+ }
66
+ return Array.from(quantities, ([unit, quantity]) => ({
67
+ unit,
68
+ quantity: formatThousandths(quantity)
69
+ }));
70
+ }
71
+ const annualReportCsvColumns = [
72
+ { field: "commodity", header: "commodity" },
73
+ { field: "count", header: "count" },
74
+ { field: "quantityKg", header: "quantityKg" },
75
+ { field: "supplementaryUnit", header: "supplementaryUnit" },
76
+ { field: "supplementaryQuantity", header: "supplementaryQuantity" }
77
+ ];
78
+ function buildAnnualReportCsv(report) {
79
+ const rows = report.statements.byCommodity.flatMap((commodity) => {
80
+ const supplementaryQuantities = commodity.supplementaryQuantities.length > 0 ? commodity.supplementaryQuantities : [null];
81
+ return supplementaryQuantities.map((supplementaryQuantity) => ({
82
+ commodity: commodity.commodity,
83
+ count: commodity.count,
84
+ quantityKg: commodity.quantityKg,
85
+ supplementaryUnit: supplementaryQuantity?.unit ?? "",
86
+ supplementaryQuantity: supplementaryQuantity?.quantity ?? ""
87
+ }));
88
+ });
89
+ const prepared = {
90
+ columns: annualReportCsvColumns,
91
+ rows
92
+ };
93
+ const serialized = serializeExport(prepared, "csv");
94
+ return {
95
+ content: serialized.body,
96
+ contentType: serialized.contentType
97
+ };
98
+ }
99
+ export {
100
+ accumulateSupplementaryQuantities,
101
+ annualReportSchema,
102
+ buildAnnualReportCsv
103
+ };
104
+ //# sourceMappingURL=annual-report.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/eudr/lib/annual-report.ts"],
4
+ "sourcesContent": ["import { z } from 'zod'\nimport {\n serializeExport,\n type CrudExportColumn,\n type PreparedExport,\n} from '@open-mercato/shared/lib/crud/exporters'\n\nconst nonNegativeIntegerSchema = z.number().int().nonnegative()\n\nconst supplementaryQuantitySchema = z.object({\n unit: z.string(),\n quantity: z.string(),\n})\n\nconst commodityReportSchema = z.object({\n commodity: z.string(),\n count: nonNegativeIntegerSchema,\n quantityKg: z.string(),\n supplementaryQuantities: z.array(supplementaryQuantitySchema),\n})\n\nexport const annualReportSchema = z.object({\n year: z.number().int(),\n generatedAt: z.string().datetime(),\n statements: z.object({\n total: nonNegativeIntegerSchema,\n byStatus: z.record(z.string(), nonNegativeIntegerSchema),\n byCommodity: z.array(commodityReportSchema),\n }),\n countries: z.array(z.object({\n country: z.string(),\n tier: z.string(),\n submissionCount: nonNegativeIntegerSchema,\n })).optional(),\n risk: z.object({\n assessments: nonNegativeIntegerSchema,\n negligible: nonNegativeIntegerSchema,\n nonNegligible: nonNegativeIntegerSchema,\n simplified: nonNegativeIntegerSchema,\n }).optional(),\n mitigation: z.object({\n total: nonNegativeIntegerSchema,\n completed: nonNegativeIntegerSchema,\n }).optional(),\n})\n\nexport type AnnualReport = z.infer<typeof annualReportSchema>\n\nfunction parseThousandths(value: string | number | null): bigint | null {\n if (value === null) return 0n\n const normalized = typeof value === 'number' ? value.toFixed(3) : value.trim()\n const match = /^([+-]?)(\\d+)(?:\\.(\\d{1,3}))?$/.exec(normalized)\n if (match === null) return null\n\n const sign = match[1] === '-' ? -1n : 1n\n const whole = BigInt(match[2]) * 1000n\n const fraction = BigInt((match[3] ?? '').padEnd(3, '0') || '0')\n return sign * (whole + fraction)\n}\n\nfunction formatThousandths(value: bigint): string {\n const sign = value < 0n ? '-' : ''\n const absolute = value < 0n ? -value : value\n const whole = absolute / 1000n\n const fraction = (absolute % 1000n).toString().padStart(3, '0')\n return `${sign}${whole}.${fraction}`\n}\n\nexport function accumulateSupplementaryQuantities(\n rows: Array<{ unit: string | null; quantity: string | number | null }>,\n): Array<{ unit: string; quantity: string }> {\n const quantities = new Map<string, bigint>()\n\n for (const row of rows) {\n const unit = row.unit?.trim().toUpperCase() ?? ''\n if (unit.length === 0) continue\n const quantity = parseThousandths(row.quantity)\n if (quantity === null) continue\n quantities.set(unit, (quantities.get(unit) ?? 0n) + quantity)\n }\n\n return Array.from(quantities, ([unit, quantity]) => ({\n unit,\n quantity: formatThousandths(quantity),\n }))\n}\n\nconst annualReportCsvColumns: CrudExportColumn[] = [\n { field: 'commodity', header: 'commodity' },\n { field: 'count', header: 'count' },\n { field: 'quantityKg', header: 'quantityKg' },\n { field: 'supplementaryUnit', header: 'supplementaryUnit' },\n { field: 'supplementaryQuantity', header: 'supplementaryQuantity' },\n]\n\nexport function buildAnnualReportCsv(report: AnnualReport): { content: string; contentType: string } {\n const rows: PreparedExport['rows'] = report.statements.byCommodity.flatMap((commodity) => {\n const supplementaryQuantities = commodity.supplementaryQuantities.length > 0\n ? commodity.supplementaryQuantities\n : [null]\n\n return supplementaryQuantities.map((supplementaryQuantity) => ({\n commodity: commodity.commodity,\n count: commodity.count,\n quantityKg: commodity.quantityKg,\n supplementaryUnit: supplementaryQuantity?.unit ?? '',\n supplementaryQuantity: supplementaryQuantity?.quantity ?? '',\n }))\n })\n const prepared: PreparedExport = {\n columns: annualReportCsvColumns,\n rows,\n }\n const serialized = serializeExport(prepared, 'csv')\n\n return {\n content: serialized.body,\n contentType: serialized.contentType,\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,64 @@
1
+ import { GEOJSON_TYPES } from "../data/validators.js";
2
+ const COMPLETENESS_DIMENSIONS = ["origin_country", "geolocation", "quantity", "harvest_period", "producer", "documents"];
3
+ const REQUIRED_DIMENSIONS = COMPLETENESS_DIMENSIONS;
4
+ function isOriginCountryComplete(value) {
5
+ return typeof value === "string" && /^[A-Za-z]{2}$/.test(value.trim());
6
+ }
7
+ function isGeolocationComplete(value) {
8
+ if (value === null || typeof value !== "object") return false;
9
+ const candidate = value;
10
+ return typeof candidate.type === "string" && GEOJSON_TYPES.includes(candidate.type);
11
+ }
12
+ function isQuantityComplete(value) {
13
+ if (typeof value !== "string" && typeof value !== "number") return false;
14
+ const quantity = Number(value);
15
+ return Number.isFinite(quantity) && quantity > 0;
16
+ }
17
+ function parseDate(value) {
18
+ if (value == null) return null;
19
+ const date = value instanceof Date ? value : new Date(value);
20
+ return Number.isNaN(date.getTime()) ? null : date;
21
+ }
22
+ function isHarvestPeriodComplete(harvestFrom, harvestTo) {
23
+ const parsedHarvestFrom = parseDate(harvestFrom);
24
+ const parsedHarvestTo = parseDate(harvestTo);
25
+ return parsedHarvestFrom !== null && parsedHarvestTo !== null && parsedHarvestFrom <= parsedHarvestTo;
26
+ }
27
+ function isProducerComplete(value) {
28
+ return typeof value === "string" && value.trim().length > 0;
29
+ }
30
+ function isDocumentsComplete(value) {
31
+ return Array.isArray(value) && value.length >= 1;
32
+ }
33
+ function computeCompleteness(input, context = {}) {
34
+ const completionByDimension = {
35
+ origin_country: isOriginCountryComplete(input.originCountry),
36
+ geolocation: isGeolocationComplete(input.geolocation) || (context.activePlotCount ?? 0) > 0,
37
+ quantity: isQuantityComplete(input.quantityKg),
38
+ harvest_period: isHarvestPeriodComplete(input.harvestFrom, input.harvestTo),
39
+ producer: isProducerComplete(input.producerName),
40
+ documents: isDocumentsComplete(input.attachmentIds) || (context.linkedAttachmentCount ?? 0) > 0
41
+ };
42
+ const missingFields = COMPLETENESS_DIMENSIONS.filter((dimension) => !completionByDimension[dimension]);
43
+ const metCount = COMPLETENESS_DIMENSIONS.length - missingFields.length;
44
+ const score = Math.round(metCount / COMPLETENESS_DIMENSIONS.length * 100);
45
+ return { score, missingFields };
46
+ }
47
+ function computeSubmissionCompleteness(input, context) {
48
+ return computeCompleteness(input, context);
49
+ }
50
+ const HARVEST_CUTOFF_DATE = /* @__PURE__ */ new Date("2020-12-31T23:59:59.999Z");
51
+ function computeHarvestCutoffWarning(harvestFrom, harvestTo) {
52
+ const windowEnd = parseDate(harvestTo) ?? parseDate(harvestFrom);
53
+ if (!windowEnd) return null;
54
+ return windowEnd.getTime() <= HARVEST_CUTOFF_DATE.getTime() ? "harvest_before_cutoff" : null;
55
+ }
56
+ export {
57
+ COMPLETENESS_DIMENSIONS,
58
+ HARVEST_CUTOFF_DATE,
59
+ REQUIRED_DIMENSIONS,
60
+ computeCompleteness,
61
+ computeHarvestCutoffWarning,
62
+ computeSubmissionCompleteness
63
+ };
64
+ //# sourceMappingURL=completeness.js.map