@open-mercato/core 0.6.8-develop.6993.1.3fc50f3409 → 0.6.8-develop.7000.1.0ae682bad1

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 (708) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/dist/generated/entities/sync_run/index.js +2 -0
  3. package/dist/generated/entities/sync_run/index.js.map +2 -2
  4. package/dist/generated/entities/warranty_claim/index.js +105 -0
  5. package/dist/generated/entities/warranty_claim/index.js.map +7 -0
  6. package/dist/generated/entities/warranty_claim_event/index.js +25 -0
  7. package/dist/generated/entities/warranty_claim_event/index.js.map +7 -0
  8. package/dist/generated/entities/warranty_claim_line/index.js +77 -0
  9. package/dist/generated/entities/warranty_claim_line/index.js.map +7 -0
  10. package/dist/generated/entities/warranty_claim_registration/index.js +43 -0
  11. package/dist/generated/entities/warranty_claim_registration/index.js.map +7 -0
  12. package/dist/generated/entities/warranty_claim_sequence/index.js +17 -0
  13. package/dist/generated/entities/warranty_claim_sequence/index.js.map +7 -0
  14. package/dist/generated/entities/warranty_claim_settings/index.js +43 -0
  15. package/dist/generated/entities/warranty_claim_settings/index.js.map +7 -0
  16. package/dist/generated/entities/warranty_claim_sla_signal/index.js +25 -0
  17. package/dist/generated/entities/warranty_claim_sla_signal/index.js.map +7 -0
  18. package/dist/generated/entities/warranty_troubleshooting_guide/index.js +25 -0
  19. package/dist/generated/entities/warranty_troubleshooting_guide/index.js.map +7 -0
  20. package/dist/generated/entities/warranty_vendor_policy/index.js +31 -0
  21. package/dist/generated/entities/warranty_vendor_policy/index.js.map +7 -0
  22. package/dist/generated/entities.ids.generated.js +12 -0
  23. package/dist/generated/entities.ids.generated.js.map +2 -2
  24. package/dist/generated/entity-fields-registry.js +201 -0
  25. package/dist/generated/entity-fields-registry.js.map +2 -2
  26. package/dist/helpers/integration/api.js +3 -2
  27. package/dist/helpers/integration/api.js.map +2 -2
  28. package/dist/helpers/integration/salesFixtures.js +13 -6
  29. package/dist/helpers/integration/salesFixtures.js.map +2 -2
  30. package/dist/modules/attachments/di.js +18 -0
  31. package/dist/modules/attachments/di.js.map +2 -2
  32. package/dist/modules/attachments/fields/attachment.js +186 -26
  33. package/dist/modules/attachments/fields/attachment.js.map +2 -2
  34. package/dist/modules/attachments/lib/scoped-upload-service.js +202 -0
  35. package/dist/modules/attachments/lib/scoped-upload-service.js.map +7 -0
  36. package/dist/modules/attachments/lib/target-access-service.js +39 -0
  37. package/dist/modules/attachments/lib/target-access-service.js.map +7 -0
  38. package/dist/modules/auth/api/sidebar/preferences/route.js +2 -2
  39. package/dist/modules/auth/api/sidebar/preferences/route.js.map +1 -1
  40. package/dist/modules/auth/lib/backendChrome.js +3 -3
  41. package/dist/modules/auth/lib/backendChrome.js.map +1 -1
  42. package/dist/modules/auth/services/sidebarPreferencesService.js +7 -2
  43. package/dist/modules/auth/services/sidebarPreferencesService.js.map +2 -2
  44. package/dist/modules/customers/api/companies/route.js +1 -0
  45. package/dist/modules/customers/api/companies/route.js.map +2 -2
  46. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -2
  47. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
  48. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -2
  49. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
  50. package/dist/modules/customers/components/detail/assignableStaff.js +6 -69
  51. package/dist/modules/customers/components/detail/assignableStaff.js.map +2 -2
  52. package/dist/modules/customers/lib/assignableStaff.js +76 -0
  53. package/dist/modules/customers/lib/assignableStaff.js.map +7 -0
  54. package/dist/modules/data_sync/api/options.js +1 -0
  55. package/dist/modules/data_sync/api/options.js.map +2 -2
  56. package/dist/modules/data_sync/api/run.js +15 -1
  57. package/dist/modules/data_sync/api/run.js.map +2 -2
  58. package/dist/modules/data_sync/api/runs/[id]/retry.js +23 -1
  59. package/dist/modules/data_sync/api/runs/[id]/retry.js.map +2 -2
  60. package/dist/modules/data_sync/api/runs/[id]/route.js +1 -0
  61. package/dist/modules/data_sync/api/runs/[id]/route.js.map +2 -2
  62. package/dist/modules/data_sync/backend/data-sync/page.js +60 -17
  63. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  64. package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js +34 -2
  65. package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js.map +2 -2
  66. package/dist/modules/data_sync/components/IntegrationScheduleTab.js +21 -15
  67. package/dist/modules/data_sync/components/IntegrationScheduleTab.js.map +2 -2
  68. package/dist/modules/data_sync/components/RunParameterFields.js +135 -0
  69. package/dist/modules/data_sync/components/RunParameterFields.js.map +7 -0
  70. package/dist/modules/data_sync/data/entities.js +3 -0
  71. package/dist/modules/data_sync/data/entities.js.map +2 -2
  72. package/dist/modules/data_sync/data/validators.js +4 -1
  73. package/dist/modules/data_sync/data/validators.js.map +2 -2
  74. package/dist/modules/data_sync/lib/batch-stream.js +56 -0
  75. package/dist/modules/data_sync/lib/batch-stream.js.map +7 -0
  76. package/dist/modules/data_sync/lib/run-parameters.js +108 -0
  77. package/dist/modules/data_sync/lib/run-parameters.js.map +7 -0
  78. package/dist/modules/data_sync/lib/start-run.js +1 -0
  79. package/dist/modules/data_sync/lib/start-run.js.map +2 -2
  80. package/dist/modules/data_sync/lib/sync-engine.js +165 -101
  81. package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
  82. package/dist/modules/data_sync/lib/sync-run-service.js +1 -0
  83. package/dist/modules/data_sync/lib/sync-run-service.js.map +2 -2
  84. package/dist/modules/data_sync/migrations/Migration20260810120000.js +13 -0
  85. package/dist/modules/data_sync/migrations/Migration20260810120000.js.map +7 -0
  86. package/dist/modules/data_sync/workers/sync-scheduled.js +23 -2
  87. package/dist/modules/data_sync/workers/sync-scheduled.js.map +2 -2
  88. package/dist/modules/inbox_ops/api/emails/[id]/reprocess/route.js +4 -0
  89. package/dist/modules/inbox_ops/api/emails/[id]/reprocess/route.js.map +2 -2
  90. package/dist/modules/inbox_ops/api/extract/route.js +4 -0
  91. package/dist/modules/inbox_ops/api/extract/route.js.map +2 -2
  92. package/dist/modules/inbox_ops/api/webhook/inbound.js +4 -0
  93. package/dist/modules/inbox_ops/api/webhook/inbound.js.map +2 -2
  94. package/dist/modules/query_index/di.js +125 -48
  95. package/dist/modules/query_index/di.js.map +2 -2
  96. package/dist/modules/sales/commands/documents.js +34 -13
  97. package/dist/modules/sales/commands/documents.js.map +2 -2
  98. package/dist/modules/warranty_claims/acl.js +75 -0
  99. package/dist/modules/warranty_claims/acl.js.map +7 -0
  100. package/dist/modules/warranty_claims/ai-agents.js +161 -0
  101. package/dist/modules/warranty_claims/ai-agents.js.map +7 -0
  102. package/dist/modules/warranty_claims/ai-tools.js +591 -0
  103. package/dist/modules/warranty_claims/ai-tools.js.map +7 -0
  104. package/dist/modules/warranty_claims/api/ai/assess/route.js +304 -0
  105. package/dist/modules/warranty_claims/api/ai/assess/route.js.map +7 -0
  106. package/dist/modules/warranty_claims/api/ai/draft-reply/route.js +127 -0
  107. package/dist/modules/warranty_claims/api/ai/draft-reply/route.js.map +7 -0
  108. package/dist/modules/warranty_claims/api/ai/suggest/route.js +177 -0
  109. package/dist/modules/warranty_claims/api/ai/suggest/route.js.map +7 -0
  110. package/dist/modules/warranty_claims/api/assign/route.js +124 -0
  111. package/dist/modules/warranty_claims/api/assign/route.js.map +7 -0
  112. package/dist/modules/warranty_claims/api/assignees/route.js +97 -0
  113. package/dist/modules/warranty_claims/api/assignees/route.js.map +7 -0
  114. package/dist/modules/warranty_claims/api/credit-memo/route.js +152 -0
  115. package/dist/modules/warranty_claims/api/credit-memo/route.js.map +7 -0
  116. package/dist/modules/warranty_claims/api/entitlement/route.js +145 -0
  117. package/dist/modules/warranty_claims/api/entitlement/route.js.map +7 -0
  118. package/dist/modules/warranty_claims/api/events/route.js +199 -0
  119. package/dist/modules/warranty_claims/api/events/route.js.map +7 -0
  120. package/dist/modules/warranty_claims/api/external/claims/route.js +446 -0
  121. package/dist/modules/warranty_claims/api/external/claims/route.js.map +7 -0
  122. package/dist/modules/warranty_claims/api/lines/route.js +258 -0
  123. package/dist/modules/warranty_claims/api/lines/route.js.map +7 -0
  124. package/dist/modules/warranty_claims/api/openapi.js +27 -0
  125. package/dist/modules/warranty_claims/api/openapi.js.map +7 -0
  126. package/dist/modules/warranty_claims/api/portal/attachments/route.js +490 -0
  127. package/dist/modules/warranty_claims/api/portal/attachments/route.js.map +7 -0
  128. package/dist/modules/warranty_claims/api/portal/claims/[id]/route.js +178 -0
  129. package/dist/modules/warranty_claims/api/portal/claims/[id]/route.js.map +7 -0
  130. package/dist/modules/warranty_claims/api/portal/claims/[id]/shared.js +101 -0
  131. package/dist/modules/warranty_claims/api/portal/claims/[id]/shared.js.map +7 -0
  132. package/dist/modules/warranty_claims/api/portal/claims/[id]/submit/route.js +78 -0
  133. package/dist/modules/warranty_claims/api/portal/claims/[id]/submit/route.js.map +7 -0
  134. package/dist/modules/warranty_claims/api/portal/claims/[id]/withdraw/route.js +81 -0
  135. package/dist/modules/warranty_claims/api/portal/claims/[id]/withdraw/route.js.map +7 -0
  136. package/dist/modules/warranty_claims/api/portal/claims/route.js +462 -0
  137. package/dist/modules/warranty_claims/api/portal/claims/route.js.map +7 -0
  138. package/dist/modules/warranty_claims/api/portal/events/route.js +228 -0
  139. package/dist/modules/warranty_claims/api/portal/events/route.js.map +7 -0
  140. package/dist/modules/warranty_claims/api/portal/options/route.js +91 -0
  141. package/dist/modules/warranty_claims/api/portal/options/route.js.map +7 -0
  142. package/dist/modules/warranty_claims/api/portal/orders/lines/route.js +172 -0
  143. package/dist/modules/warranty_claims/api/portal/orders/lines/route.js.map +7 -0
  144. package/dist/modules/warranty_claims/api/portal/orders/route.js +151 -0
  145. package/dist/modules/warranty_claims/api/portal/orders/route.js.map +7 -0
  146. package/dist/modules/warranty_claims/api/portal/troubleshooting/route.js +121 -0
  147. package/dist/modules/warranty_claims/api/portal/troubleshooting/route.js.map +7 -0
  148. package/dist/modules/warranty_claims/api/receiving/route.js +176 -0
  149. package/dist/modules/warranty_claims/api/receiving/route.js.map +7 -0
  150. package/dist/modules/warranty_claims/api/registrations/route.js +382 -0
  151. package/dist/modules/warranty_claims/api/registrations/route.js.map +7 -0
  152. package/dist/modules/warranty_claims/api/replacement-order/route.js +150 -0
  153. package/dist/modules/warranty_claims/api/replacement-order/route.js.map +7 -0
  154. package/dist/modules/warranty_claims/api/return-label/route.js +235 -0
  155. package/dist/modules/warranty_claims/api/return-label/route.js.map +7 -0
  156. package/dist/modules/warranty_claims/api/risk/route.js +101 -0
  157. package/dist/modules/warranty_claims/api/risk/route.js.map +7 -0
  158. package/dist/modules/warranty_claims/api/route.js +482 -0
  159. package/dist/modules/warranty_claims/api/route.js.map +7 -0
  160. package/dist/modules/warranty_claims/api/sales-return/route.js +151 -0
  161. package/dist/modules/warranty_claims/api/sales-return/route.js.map +7 -0
  162. package/dist/modules/warranty_claims/api/settings-general/route.js +195 -0
  163. package/dist/modules/warranty_claims/api/settings-general/route.js.map +7 -0
  164. package/dist/modules/warranty_claims/api/stats/route.js +199 -0
  165. package/dist/modules/warranty_claims/api/stats/route.js.map +7 -0
  166. package/dist/modules/warranty_claims/api/submit/route.js +120 -0
  167. package/dist/modules/warranty_claims/api/submit/route.js.map +7 -0
  168. package/dist/modules/warranty_claims/api/transition/route.js +126 -0
  169. package/dist/modules/warranty_claims/api/transition/route.js.map +7 -0
  170. package/dist/modules/warranty_claims/api/troubleshooting-guides/route.js +261 -0
  171. package/dist/modules/warranty_claims/api/troubleshooting-guides/route.js.map +7 -0
  172. package/dist/modules/warranty_claims/api/vendor-policies/route.js +311 -0
  173. package/dist/modules/warranty_claims/api/vendor-policies/route.js.map +7 -0
  174. package/dist/modules/warranty_claims/api/vendor-recovery/route.js +130 -0
  175. package/dist/modules/warranty_claims/api/vendor-recovery/route.js.map +7 -0
  176. package/dist/modules/warranty_claims/api/vendor-recovery-suggestions/route.js +153 -0
  177. package/dist/modules/warranty_claims/api/vendor-recovery-suggestions/route.js.map +7 -0
  178. package/dist/modules/warranty_claims/backend/components/AiAssessButtons.js +268 -0
  179. package/dist/modules/warranty_claims/backend/components/AiAssessButtons.js.map +7 -0
  180. package/dist/modules/warranty_claims/backend/components/ClaimStageProgress.js +54 -0
  181. package/dist/modules/warranty_claims/backend/components/ClaimStageProgress.js.map +7 -0
  182. package/dist/modules/warranty_claims/backend/components/ClaimStatusBadge.js +87 -0
  183. package/dist/modules/warranty_claims/backend/components/ClaimStatusBadge.js.map +7 -0
  184. package/dist/modules/warranty_claims/backend/components/ClaimsKpiStrip.js +120 -0
  185. package/dist/modules/warranty_claims/backend/components/ClaimsKpiStrip.js.map +7 -0
  186. package/dist/modules/warranty_claims/backend/components/EntitlementLookupBadge.js +135 -0
  187. package/dist/modules/warranty_claims/backend/components/EntitlementLookupBadge.js.map +7 -0
  188. package/dist/modules/warranty_claims/backend/components/ReceivingPanel.js +218 -0
  189. package/dist/modules/warranty_claims/backend/components/ReceivingPanel.js.map +7 -0
  190. package/dist/modules/warranty_claims/backend/components/ReturnLabelPanel.js +231 -0
  191. package/dist/modules/warranty_claims/backend/components/ReturnLabelPanel.js.map +7 -0
  192. package/dist/modules/warranty_claims/backend/components/TroubleshootingWalker.js +82 -0
  193. package/dist/modules/warranty_claims/backend/components/TroubleshootingWalker.js.map +7 -0
  194. package/dist/modules/warranty_claims/backend/components/VendorRecoverySuggestionsPanel.js +136 -0
  195. package/dist/modules/warranty_claims/backend/components/VendorRecoverySuggestionsPanel.js.map +7 -0
  196. package/dist/modules/warranty_claims/backend/components/WarrantyWorkspace.js +41 -0
  197. package/dist/modules/warranty_claims/backend/components/WarrantyWorkspace.js.map +7 -0
  198. package/dist/modules/warranty_claims/backend/components/claimReasonOptions.js +45 -0
  199. package/dist/modules/warranty_claims/backend/components/claimReasonOptions.js.map +7 -0
  200. package/dist/modules/warranty_claims/backend/components/claimSla.js +92 -0
  201. package/dist/modules/warranty_claims/backend/components/claimSla.js.map +7 -0
  202. package/dist/modules/warranty_claims/backend/components/orderLookup.js +81 -0
  203. package/dist/modules/warranty_claims/backend/components/orderLookup.js.map +7 -0
  204. package/dist/modules/warranty_claims/backend/components/productLookup.js +317 -0
  205. package/dist/modules/warranty_claims/backend/components/productLookup.js.map +7 -0
  206. package/dist/modules/warranty_claims/backend/components/useUserDisplayNames.js +61 -0
  207. package/dist/modules/warranty_claims/backend/components/useUserDisplayNames.js.map +7 -0
  208. package/dist/modules/warranty_claims/backend/page.js +1088 -0
  209. package/dist/modules/warranty_claims/backend/page.js.map +7 -0
  210. package/dist/modules/warranty_claims/backend/page.meta.js +16 -0
  211. package/dist/modules/warranty_claims/backend/page.meta.js.map +7 -0
  212. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.js +427 -0
  213. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.js.map +7 -0
  214. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.meta.js +16 -0
  215. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.meta.js.map +7 -0
  216. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.js +2101 -0
  217. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.js.map +7 -0
  218. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.meta.js +16 -0
  219. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.meta.js.map +7 -0
  220. package/dist/modules/warranty_claims/backend/warranty_claims/create/page.js +1249 -0
  221. package/dist/modules/warranty_claims/backend/warranty_claims/create/page.js.map +7 -0
  222. package/dist/modules/warranty_claims/backend/warranty_claims/create/page.meta.js +16 -0
  223. package/dist/modules/warranty_claims/backend/warranty_claims/create/page.meta.js.map +7 -0
  224. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.js +110 -0
  225. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.js.map +7 -0
  226. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.meta.js +17 -0
  227. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.meta.js.map +7 -0
  228. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.js +49 -0
  229. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.js.map +7 -0
  230. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.meta.js +17 -0
  231. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.meta.js.map +7 -0
  232. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +485 -0
  233. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +7 -0
  234. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.meta.js +19 -0
  235. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.meta.js.map +7 -0
  236. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/registrationForm.js +253 -0
  237. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/registrationForm.js.map +7 -0
  238. package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.js +1565 -0
  239. package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.js.map +7 -0
  240. package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.meta.js +19 -0
  241. package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.meta.js.map +7 -0
  242. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/TroubleshootingTreeBuilder.js +472 -0
  243. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/TroubleshootingTreeBuilder.js.map +7 -0
  244. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.js +115 -0
  245. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.js.map +7 -0
  246. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.meta.js +19 -0
  247. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.meta.js.map +7 -0
  248. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.js +54 -0
  249. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.js.map +7 -0
  250. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.meta.js +19 -0
  251. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.meta.js.map +7 -0
  252. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +414 -0
  253. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +7 -0
  254. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.meta.js +21 -0
  255. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.meta.js.map +7 -0
  256. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/troubleshootingGuideForm.js +171 -0
  257. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/troubleshootingGuideForm.js.map +7 -0
  258. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.js +111 -0
  259. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.js.map +7 -0
  260. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.meta.js +19 -0
  261. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.meta.js.map +7 -0
  262. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.js +48 -0
  263. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.js.map +7 -0
  264. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.meta.js +19 -0
  265. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.meta.js.map +7 -0
  266. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +429 -0
  267. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +7 -0
  268. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.meta.js +21 -0
  269. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.meta.js.map +7 -0
  270. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/vendorPolicyForm.js +182 -0
  271. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/vendorPolicyForm.js.map +7 -0
  272. package/dist/modules/warranty_claims/ce.js +48 -0
  273. package/dist/modules/warranty_claims/ce.js.map +7 -0
  274. package/dist/modules/warranty_claims/commands/claim-lines.js +911 -0
  275. package/dist/modules/warranty_claims/commands/claim-lines.js.map +7 -0
  276. package/dist/modules/warranty_claims/commands/claims.js +2577 -0
  277. package/dist/modules/warranty_claims/commands/claims.js.map +7 -0
  278. package/dist/modules/warranty_claims/commands/index.js +4 -0
  279. package/dist/modules/warranty_claims/commands/index.js.map +7 -0
  280. package/dist/modules/warranty_claims/commands/settings.js +169 -0
  281. package/dist/modules/warranty_claims/commands/settings.js.map +7 -0
  282. package/dist/modules/warranty_claims/commands/shared.js +162 -0
  283. package/dist/modules/warranty_claims/commands/shared.js.map +7 -0
  284. package/dist/modules/warranty_claims/data/constants.js +35 -0
  285. package/dist/modules/warranty_claims/data/constants.js.map +7 -0
  286. package/dist/modules/warranty_claims/data/enrichers.js +97 -0
  287. package/dist/modules/warranty_claims/data/enrichers.js.map +7 -0
  288. package/dist/modules/warranty_claims/data/entities.js +731 -0
  289. package/dist/modules/warranty_claims/data/entities.js.map +7 -0
  290. package/dist/modules/warranty_claims/data/validators.js +488 -0
  291. package/dist/modules/warranty_claims/data/validators.js.map +7 -0
  292. package/dist/modules/warranty_claims/di.js +29 -0
  293. package/dist/modules/warranty_claims/di.js.map +7 -0
  294. package/dist/modules/warranty_claims/encryption.js +28 -0
  295. package/dist/modules/warranty_claims/encryption.js.map +7 -0
  296. package/dist/modules/warranty_claims/events.js +81 -0
  297. package/dist/modules/warranty_claims/events.js.map +7 -0
  298. package/dist/modules/warranty_claims/extension-points.js +19 -0
  299. package/dist/modules/warranty_claims/extension-points.js.map +7 -0
  300. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.js +825 -0
  301. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.js.map +7 -0
  302. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.meta.js +11 -0
  303. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.meta.js.map +7 -0
  304. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.js +1139 -0
  305. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.js.map +7 -0
  306. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.meta.js +11 -0
  307. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.meta.js.map +7 -0
  308. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +253 -0
  309. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +7 -0
  310. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.meta.js +18 -0
  311. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.meta.js.map +7 -0
  312. package/dist/modules/warranty_claims/index.js +15 -0
  313. package/dist/modules/warranty_claims/index.js.map +7 -0
  314. package/dist/modules/warranty_claims/lib/aiAssist.js +496 -0
  315. package/dist/modules/warranty_claims/lib/aiAssist.js.map +7 -0
  316. package/dist/modules/warranty_claims/lib/apiIdsFilter.js +11 -0
  317. package/dist/modules/warranty_claims/lib/apiIdsFilter.js.map +7 -0
  318. package/dist/modules/warranty_claims/lib/assigneeNames.js +153 -0
  319. package/dist/modules/warranty_claims/lib/assigneeNames.js.map +7 -0
  320. package/dist/modules/warranty_claims/lib/attachmentVisibility.js +9 -0
  321. package/dist/modules/warranty_claims/lib/attachmentVisibility.js.map +7 -0
  322. package/dist/modules/warranty_claims/lib/bulkFeedback.js +8 -0
  323. package/dist/modules/warranty_claims/lib/bulkFeedback.js.map +7 -0
  324. package/dist/modules/warranty_claims/lib/businessHours.js +250 -0
  325. package/dist/modules/warranty_claims/lib/businessHours.js.map +7 -0
  326. package/dist/modules/warranty_claims/lib/businessHoursForm.js +146 -0
  327. package/dist/modules/warranty_claims/lib/businessHoursForm.js.map +7 -0
  328. package/dist/modules/warranty_claims/lib/claimTypeConfig.js +39 -0
  329. package/dist/modules/warranty_claims/lib/claimTypeConfig.js.map +7 -0
  330. package/dist/modules/warranty_claims/lib/decryptionSafety.js +17 -0
  331. package/dist/modules/warranty_claims/lib/decryptionSafety.js.map +7 -0
  332. package/dist/modules/warranty_claims/lib/deskFilters.js +88 -0
  333. package/dist/modules/warranty_claims/lib/deskFilters.js.map +7 -0
  334. package/dist/modules/warranty_claims/lib/dictionaries.js +157 -0
  335. package/dist/modules/warranty_claims/lib/dictionaries.js.map +7 -0
  336. package/dist/modules/warranty_claims/lib/dictionaryLabels.js +12 -0
  337. package/dist/modules/warranty_claims/lib/dictionaryLabels.js.map +7 -0
  338. package/dist/modules/warranty_claims/lib/emailIntake.js +87 -0
  339. package/dist/modules/warranty_claims/lib/emailIntake.js.map +7 -0
  340. package/dist/modules/warranty_claims/lib/escalation.js +58 -0
  341. package/dist/modules/warranty_claims/lib/escalation.js.map +7 -0
  342. package/dist/modules/warranty_claims/lib/externalIntake.js +233 -0
  343. package/dist/modules/warranty_claims/lib/externalIntake.js.map +7 -0
  344. package/dist/modules/warranty_claims/lib/grading.js +21 -0
  345. package/dist/modules/warranty_claims/lib/grading.js.map +7 -0
  346. package/dist/modules/warranty_claims/lib/listSegments.js +18 -0
  347. package/dist/modules/warranty_claims/lib/listSegments.js.map +7 -0
  348. package/dist/modules/warranty_claims/lib/orderOwnership.js +25 -0
  349. package/dist/modules/warranty_claims/lib/orderOwnership.js.map +7 -0
  350. package/dist/modules/warranty_claims/lib/portalAttachmentUpload.js +11 -0
  351. package/dist/modules/warranty_claims/lib/portalAttachmentUpload.js.map +7 -0
  352. package/dist/modules/warranty_claims/lib/portalAttachmentValidation.js +108 -0
  353. package/dist/modules/warranty_claims/lib/portalAttachmentValidation.js.map +7 -0
  354. package/dist/modules/warranty_claims/lib/portalClaimAccess.js +26 -0
  355. package/dist/modules/warranty_claims/lib/portalClaimAccess.js.map +7 -0
  356. package/dist/modules/warranty_claims/lib/quantity.js +19 -0
  357. package/dist/modules/warranty_claims/lib/quantity.js.map +7 -0
  358. package/dist/modules/warranty_claims/lib/risk.js +204 -0
  359. package/dist/modules/warranty_claims/lib/risk.js.map +7 -0
  360. package/dist/modules/warranty_claims/lib/settings.js +55 -0
  361. package/dist/modules/warranty_claims/lib/settings.js.map +7 -0
  362. package/dist/modules/warranty_claims/lib/stateMachine.js +88 -0
  363. package/dist/modules/warranty_claims/lib/stateMachine.js.map +7 -0
  364. package/dist/modules/warranty_claims/lib/timelineFilters.js +16 -0
  365. package/dist/modules/warranty_claims/lib/timelineFilters.js.map +7 -0
  366. package/dist/modules/warranty_claims/lib/triage.js +241 -0
  367. package/dist/modules/warranty_claims/lib/triage.js.map +7 -0
  368. package/dist/modules/warranty_claims/lib/troubleshooting.js +111 -0
  369. package/dist/modules/warranty_claims/lib/troubleshooting.js.map +7 -0
  370. package/dist/modules/warranty_claims/lib/tryResolve.js +11 -0
  371. package/dist/modules/warranty_claims/lib/tryResolve.js.map +7 -0
  372. package/dist/modules/warranty_claims/lib/vendorPolicyRecovery.js +101 -0
  373. package/dist/modules/warranty_claims/lib/vendorPolicyRecovery.js.map +7 -0
  374. package/dist/modules/warranty_claims/lib/warrantyPreview.js +18 -0
  375. package/dist/modules/warranty_claims/lib/warrantyPreview.js.map +7 -0
  376. package/dist/modules/warranty_claims/migrations/Migration20260703191537_warranty_claims.js +32 -0
  377. package/dist/modules/warranty_claims/migrations/Migration20260703191537_warranty_claims.js.map +7 -0
  378. package/dist/modules/warranty_claims/migrations/Migration20260704115605_warranty_claims.js +16 -0
  379. package/dist/modules/warranty_claims/migrations/Migration20260704115605_warranty_claims.js.map +7 -0
  380. package/dist/modules/warranty_claims/migrations/Migration20260704230000_warranty_claims.js +17 -0
  381. package/dist/modules/warranty_claims/migrations/Migration20260704230000_warranty_claims.js.map +7 -0
  382. package/dist/modules/warranty_claims/migrations/Migration20260705121601_warranty_claims.js +29 -0
  383. package/dist/modules/warranty_claims/migrations/Migration20260705121601_warranty_claims.js.map +7 -0
  384. package/dist/modules/warranty_claims/migrations/Migration20260709120000_warranty_claims.js +25 -0
  385. package/dist/modules/warranty_claims/migrations/Migration20260709120000_warranty_claims.js.map +7 -0
  386. package/dist/modules/warranty_claims/migrations/Migration20260710023607_warranty_claims.js +13 -0
  387. package/dist/modules/warranty_claims/migrations/Migration20260710023607_warranty_claims.js.map +7 -0
  388. package/dist/modules/warranty_claims/migrations/Migration20260716203936_warranty_claims.js +15 -0
  389. package/dist/modules/warranty_claims/migrations/Migration20260716203936_warranty_claims.js.map +7 -0
  390. package/dist/modules/warranty_claims/migrations/Migration20260717150000_warranty_claims.js +13 -0
  391. package/dist/modules/warranty_claims/migrations/Migration20260717150000_warranty_claims.js.map +7 -0
  392. package/dist/modules/warranty_claims/migrations/Migration20260719120000_warranty_claims.js +13 -0
  393. package/dist/modules/warranty_claims/migrations/Migration20260719120000_warranty_claims.js.map +7 -0
  394. package/dist/modules/warranty_claims/migrations/Migration20260813103053_warranty_claims.js +12 -0
  395. package/dist/modules/warranty_claims/migrations/Migration20260813103053_warranty_claims.js.map +7 -0
  396. package/dist/modules/warranty_claims/notifications.client.js +67 -0
  397. package/dist/modules/warranty_claims/notifications.client.js.map +7 -0
  398. package/dist/modules/warranty_claims/notifications.js +103 -0
  399. package/dist/modules/warranty_claims/notifications.js.map +7 -0
  400. package/dist/modules/warranty_claims/search.js +174 -0
  401. package/dist/modules/warranty_claims/search.js.map +7 -0
  402. package/dist/modules/warranty_claims/services/adjudicationEvaluator.js +202 -0
  403. package/dist/modules/warranty_claims/services/adjudicationEvaluator.js.map +7 -0
  404. package/dist/modules/warranty_claims/services/claimNumberGenerator.js +58 -0
  405. package/dist/modules/warranty_claims/services/claimNumberGenerator.js.map +7 -0
  406. package/dist/modules/warranty_claims/services/entitlementResolver.js +69 -0
  407. package/dist/modules/warranty_claims/services/entitlementResolver.js.map +7 -0
  408. package/dist/modules/warranty_claims/services/returnLabelProvider.js +14 -0
  409. package/dist/modules/warranty_claims/services/returnLabelProvider.js.map +7 -0
  410. package/dist/modules/warranty_claims/setup.js +121 -0
  411. package/dist/modules/warranty_claims/setup.js.map +7 -0
  412. package/dist/modules/warranty_claims/subscribers/auto-vendor-recovery.js +119 -0
  413. package/dist/modules/warranty_claims/subscribers/auto-vendor-recovery.js.map +7 -0
  414. package/dist/modules/warranty_claims/subscribers/claim-assigned-notification.js +47 -0
  415. package/dist/modules/warranty_claims/subscribers/claim-assigned-notification.js.map +7 -0
  416. package/dist/modules/warranty_claims/subscribers/claim-customer-reply-notification.js +60 -0
  417. package/dist/modules/warranty_claims/subscribers/claim-customer-reply-notification.js.map +7 -0
  418. package/dist/modules/warranty_claims/subscribers/claim-status-notification.js +83 -0
  419. package/dist/modules/warranty_claims/subscribers/claim-status-notification.js.map +7 -0
  420. package/dist/modules/warranty_claims/subscribers/claim-submitted-notification.js +46 -0
  421. package/dist/modules/warranty_claims/subscribers/claim-submitted-notification.js.map +7 -0
  422. package/dist/modules/warranty_claims/subscribers/email-to-claim.js +135 -0
  423. package/dist/modules/warranty_claims/subscribers/email-to-claim.js.map +7 -0
  424. package/dist/modules/warranty_claims/subscribers/return-shipment-tracking.js +164 -0
  425. package/dist/modules/warranty_claims/subscribers/return-shipment-tracking.js.map +7 -0
  426. package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation-undo.js +24 -0
  427. package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation-undo.js.map +7 -0
  428. package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation.js +26 -0
  429. package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation.js.map +7 -0
  430. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/config.js +15 -0
  431. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/config.js.map +7 -0
  432. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.client.js +197 -0
  433. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.client.js.map +7 -0
  434. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.js +28 -0
  435. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.js.map +7 -0
  436. package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.client.js +418 -0
  437. package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.client.js.map +7 -0
  438. package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.js +18 -0
  439. package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.js.map +7 -0
  440. package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab/widget.js +17 -0
  441. package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab/widget.js.map +7 -0
  442. package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab.js +146 -0
  443. package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab.js.map +7 -0
  444. package/dist/modules/warranty_claims/widgets/injection/order-claims-tab/widget.js +17 -0
  445. package/dist/modules/warranty_claims/widgets/injection/order-claims-tab/widget.js.map +7 -0
  446. package/dist/modules/warranty_claims/widgets/injection/order-claims-tab.js +147 -0
  447. package/dist/modules/warranty_claims/widgets/injection/order-claims-tab.js.map +7 -0
  448. package/dist/modules/warranty_claims/widgets/injection-table.js +38 -0
  449. package/dist/modules/warranty_claims/widgets/injection-table.js.map +7 -0
  450. package/dist/modules/warranty_claims/widgets/notifications/WarrantyClaimNotificationRenderer.js +223 -0
  451. package/dist/modules/warranty_claims/widgets/notifications/WarrantyClaimNotificationRenderer.js.map +7 -0
  452. package/dist/modules/warranty_claims/widgets/notifications/index.js +5 -0
  453. package/dist/modules/warranty_claims/widgets/notifications/index.js.map +7 -0
  454. package/dist/modules/warranty_claims/workers/sla-escalation-sweep.js +334 -0
  455. package/dist/modules/warranty_claims/workers/sla-escalation-sweep.js.map +7 -0
  456. package/generated/entities/sync_run/index.ts +1 -0
  457. package/generated/entities/warranty_claim/index.ts +51 -0
  458. package/generated/entities/warranty_claim_event/index.ts +11 -0
  459. package/generated/entities/warranty_claim_line/index.ts +37 -0
  460. package/generated/entities/warranty_claim_registration/index.ts +20 -0
  461. package/generated/entities/warranty_claim_sequence/index.ts +7 -0
  462. package/generated/entities/warranty_claim_settings/index.ts +20 -0
  463. package/generated/entities/warranty_claim_sla_signal/index.ts +11 -0
  464. package/generated/entities/warranty_troubleshooting_guide/index.ts +11 -0
  465. package/generated/entities/warranty_vendor_policy/index.ts +14 -0
  466. package/generated/entities.ids.generated.ts +12 -0
  467. package/generated/entity-fields-registry.ts +201 -0
  468. package/package.json +7 -7
  469. package/src/helpers/integration/api.ts +10 -3
  470. package/src/helpers/integration/salesFixtures.ts +17 -7
  471. package/src/modules/attachments/di.ts +30 -1
  472. package/src/modules/attachments/fields/attachment.tsx +215 -23
  473. package/src/modules/attachments/i18n/de.json +5 -0
  474. package/src/modules/attachments/i18n/en.json +5 -0
  475. package/src/modules/attachments/i18n/es.json +5 -0
  476. package/src/modules/attachments/i18n/ko.json +5 -0
  477. package/src/modules/attachments/i18n/pl.json +5 -0
  478. package/src/modules/attachments/lib/scoped-upload-service.ts +257 -0
  479. package/src/modules/attachments/lib/target-access-service.ts +57 -0
  480. package/src/modules/auth/api/sidebar/preferences/route.ts +2 -2
  481. package/src/modules/auth/lib/backendChrome.tsx +2 -2
  482. package/src/modules/auth/services/sidebarPreferencesService.ts +22 -3
  483. package/src/modules/customers/api/companies/route.ts +1 -0
  484. package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +4 -2
  485. package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +4 -2
  486. package/src/modules/customers/components/detail/assignableStaff.ts +14 -177
  487. package/src/modules/customers/lib/assignableStaff.ts +177 -0
  488. package/src/modules/data_sync/AGENTS.md +86 -8
  489. package/src/modules/data_sync/api/options.ts +1 -0
  490. package/src/modules/data_sync/api/run.ts +17 -0
  491. package/src/modules/data_sync/api/runs/[id]/retry.ts +32 -1
  492. package/src/modules/data_sync/api/runs/[id]/route.ts +1 -0
  493. package/src/modules/data_sync/backend/data-sync/page.tsx +73 -17
  494. package/src/modules/data_sync/backend/data-sync/runs/[id]/page.tsx +62 -2
  495. package/src/modules/data_sync/components/IntegrationScheduleTab.tsx +28 -15
  496. package/src/modules/data_sync/components/RunParameterFields.tsx +229 -0
  497. package/src/modules/data_sync/data/entities.ts +4 -1
  498. package/src/modules/data_sync/data/validators.ts +3 -0
  499. package/src/modules/data_sync/i18n/de.json +10 -0
  500. package/src/modules/data_sync/i18n/en.json +10 -0
  501. package/src/modules/data_sync/i18n/es.json +10 -0
  502. package/src/modules/data_sync/i18n/ko.json +10 -0
  503. package/src/modules/data_sync/i18n/pl.json +10 -0
  504. package/src/modules/data_sync/lib/adapter.ts +88 -0
  505. package/src/modules/data_sync/lib/batch-stream.ts +117 -0
  506. package/src/modules/data_sync/lib/run-parameters.ts +196 -0
  507. package/src/modules/data_sync/lib/start-run.ts +2 -0
  508. package/src/modules/data_sync/lib/sync-engine.ts +193 -114
  509. package/src/modules/data_sync/lib/sync-run-service.ts +2 -0
  510. package/src/modules/data_sync/migrations/.snapshot-open-mercato.json +17 -1
  511. package/src/modules/data_sync/migrations/Migration20260810120000.ts +13 -0
  512. package/src/modules/data_sync/workers/sync-scheduled.ts +32 -1
  513. package/src/modules/inbox_ops/api/emails/[id]/reprocess/route.ts +4 -0
  514. package/src/modules/inbox_ops/api/extract/route.ts +4 -0
  515. package/src/modules/inbox_ops/api/webhook/inbound.ts +4 -0
  516. package/src/modules/query_index/di.ts +153 -56
  517. package/src/modules/sales/commands/documents.ts +56 -12
  518. package/src/modules/sales/i18n/de.json +1 -0
  519. package/src/modules/sales/i18n/en.json +1 -0
  520. package/src/modules/sales/i18n/es.json +1 -0
  521. package/src/modules/sales/i18n/ko.json +1 -0
  522. package/src/modules/sales/i18n/pl.json +1 -0
  523. package/src/modules/warranty_claims/AGENTS.md +49 -0
  524. package/src/modules/warranty_claims/acl.ts +71 -0
  525. package/src/modules/warranty_claims/ai-agents.ts +189 -0
  526. package/src/modules/warranty_claims/ai-tools.ts +711 -0
  527. package/src/modules/warranty_claims/api/ai/assess/route.ts +371 -0
  528. package/src/modules/warranty_claims/api/ai/draft-reply/route.ts +149 -0
  529. package/src/modules/warranty_claims/api/ai/suggest/route.ts +190 -0
  530. package/src/modules/warranty_claims/api/assign/route.ts +142 -0
  531. package/src/modules/warranty_claims/api/assignees/route.ts +102 -0
  532. package/src/modules/warranty_claims/api/credit-memo/route.ts +191 -0
  533. package/src/modules/warranty_claims/api/entitlement/route.ts +224 -0
  534. package/src/modules/warranty_claims/api/events/route.ts +226 -0
  535. package/src/modules/warranty_claims/api/external/claims/route.ts +528 -0
  536. package/src/modules/warranty_claims/api/lines/route.ts +275 -0
  537. package/src/modules/warranty_claims/api/openapi.ts +28 -0
  538. package/src/modules/warranty_claims/api/portal/attachments/route.ts +547 -0
  539. package/src/modules/warranty_claims/api/portal/claims/[id]/route.ts +195 -0
  540. package/src/modules/warranty_claims/api/portal/claims/[id]/shared.ts +125 -0
  541. package/src/modules/warranty_claims/api/portal/claims/[id]/submit/route.ts +82 -0
  542. package/src/modules/warranty_claims/api/portal/claims/[id]/withdraw/route.ts +87 -0
  543. package/src/modules/warranty_claims/api/portal/claims/route.ts +579 -0
  544. package/src/modules/warranty_claims/api/portal/events/route.ts +260 -0
  545. package/src/modules/warranty_claims/api/portal/options/route.ts +113 -0
  546. package/src/modules/warranty_claims/api/portal/orders/lines/route.ts +258 -0
  547. package/src/modules/warranty_claims/api/portal/orders/route.ts +206 -0
  548. package/src/modules/warranty_claims/api/portal/troubleshooting/route.ts +151 -0
  549. package/src/modules/warranty_claims/api/receiving/route.ts +215 -0
  550. package/src/modules/warranty_claims/api/registrations/route.ts +417 -0
  551. package/src/modules/warranty_claims/api/replacement-order/route.ts +188 -0
  552. package/src/modules/warranty_claims/api/return-label/route.ts +291 -0
  553. package/src/modules/warranty_claims/api/risk/route.ts +112 -0
  554. package/src/modules/warranty_claims/api/route.ts +543 -0
  555. package/src/modules/warranty_claims/api/sales-return/route.ts +183 -0
  556. package/src/modules/warranty_claims/api/settings-general/route.ts +230 -0
  557. package/src/modules/warranty_claims/api/stats/route.ts +306 -0
  558. package/src/modules/warranty_claims/api/submit/route.ts +146 -0
  559. package/src/modules/warranty_claims/api/transition/route.ts +144 -0
  560. package/src/modules/warranty_claims/api/troubleshooting-guides/route.ts +295 -0
  561. package/src/modules/warranty_claims/api/vendor-policies/route.ts +351 -0
  562. package/src/modules/warranty_claims/api/vendor-recovery/route.ts +148 -0
  563. package/src/modules/warranty_claims/api/vendor-recovery-suggestions/route.ts +167 -0
  564. package/src/modules/warranty_claims/backend/components/AiAssessButtons.tsx +389 -0
  565. package/src/modules/warranty_claims/backend/components/ClaimStageProgress.tsx +65 -0
  566. package/src/modules/warranty_claims/backend/components/ClaimStatusBadge.tsx +137 -0
  567. package/src/modules/warranty_claims/backend/components/ClaimsKpiStrip.tsx +169 -0
  568. package/src/modules/warranty_claims/backend/components/EntitlementLookupBadge.tsx +203 -0
  569. package/src/modules/warranty_claims/backend/components/ReceivingPanel.tsx +300 -0
  570. package/src/modules/warranty_claims/backend/components/ReturnLabelPanel.tsx +292 -0
  571. package/src/modules/warranty_claims/backend/components/TroubleshootingWalker.tsx +125 -0
  572. package/src/modules/warranty_claims/backend/components/VendorRecoverySuggestionsPanel.tsx +217 -0
  573. package/src/modules/warranty_claims/backend/components/WarrantyWorkspace.tsx +66 -0
  574. package/src/modules/warranty_claims/backend/components/claimReasonOptions.ts +57 -0
  575. package/src/modules/warranty_claims/backend/components/claimSla.tsx +127 -0
  576. package/src/modules/warranty_claims/backend/components/orderLookup.ts +109 -0
  577. package/src/modules/warranty_claims/backend/components/productLookup.tsx +433 -0
  578. package/src/modules/warranty_claims/backend/components/useUserDisplayNames.ts +66 -0
  579. package/src/modules/warranty_claims/backend/page.meta.ts +12 -0
  580. package/src/modules/warranty_claims/backend/page.tsx +1302 -0
  581. package/src/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.meta.ts +12 -0
  582. package/src/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.tsx +531 -0
  583. package/src/modules/warranty_claims/backend/warranty_claims/[id]/page.meta.ts +12 -0
  584. package/src/modules/warranty_claims/backend/warranty_claims/[id]/page.tsx +2599 -0
  585. package/src/modules/warranty_claims/backend/warranty_claims/create/page.meta.ts +12 -0
  586. package/src/modules/warranty_claims/backend/warranty_claims/create/page.tsx +1533 -0
  587. package/src/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.meta.ts +13 -0
  588. package/src/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.tsx +136 -0
  589. package/src/modules/warranty_claims/backend/warranty_claims/registrations/create/page.meta.ts +13 -0
  590. package/src/modules/warranty_claims/backend/warranty_claims/registrations/create/page.tsx +52 -0
  591. package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.meta.ts +15 -0
  592. package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +555 -0
  593. package/src/modules/warranty_claims/backend/warranty_claims/registrations/registrationForm.tsx +295 -0
  594. package/src/modules/warranty_claims/backend/warranty_claims/settings/page.meta.ts +15 -0
  595. package/src/modules/warranty_claims/backend/warranty_claims/settings/page.tsx +1903 -0
  596. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/TroubleshootingTreeBuilder.tsx +550 -0
  597. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.meta.ts +15 -0
  598. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.tsx +141 -0
  599. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.meta.ts +15 -0
  600. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.tsx +57 -0
  601. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.meta.ts +17 -0
  602. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +477 -0
  603. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/troubleshootingGuideForm.tsx +214 -0
  604. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.meta.ts +15 -0
  605. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.tsx +137 -0
  606. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.meta.ts +15 -0
  607. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.tsx +51 -0
  608. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.meta.ts +17 -0
  609. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +506 -0
  610. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/vendorPolicyForm.tsx +220 -0
  611. package/src/modules/warranty_claims/ce.ts +44 -0
  612. package/src/modules/warranty_claims/commands/claim-lines.ts +1082 -0
  613. package/src/modules/warranty_claims/commands/claims.ts +3364 -0
  614. package/src/modules/warranty_claims/commands/index.ts +3 -0
  615. package/src/modules/warranty_claims/commands/settings.ts +198 -0
  616. package/src/modules/warranty_claims/commands/shared.ts +212 -0
  617. package/src/modules/warranty_claims/data/constants.ts +37 -0
  618. package/src/modules/warranty_claims/data/enrichers.ts +165 -0
  619. package/src/modules/warranty_claims/data/entities.ts +663 -0
  620. package/src/modules/warranty_claims/data/validators.ts +634 -0
  621. package/src/modules/warranty_claims/di.ts +34 -0
  622. package/src/modules/warranty_claims/encryption.ts +26 -0
  623. package/src/modules/warranty_claims/events.ts +81 -0
  624. package/src/modules/warranty_claims/extension-points.ts +16 -0
  625. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.meta.ts +9 -0
  626. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.tsx +1037 -0
  627. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.meta.ts +9 -0
  628. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.tsx +1409 -0
  629. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.meta.ts +16 -0
  630. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +304 -0
  631. package/src/modules/warranty_claims/i18n/de.json +1270 -0
  632. package/src/modules/warranty_claims/i18n/en.json +1270 -0
  633. package/src/modules/warranty_claims/i18n/es.json +1270 -0
  634. package/src/modules/warranty_claims/i18n/ko.json +1270 -0
  635. package/src/modules/warranty_claims/i18n/pl.json +1270 -0
  636. package/src/modules/warranty_claims/index.ts +13 -0
  637. package/src/modules/warranty_claims/lib/aiAssist.ts +677 -0
  638. package/src/modules/warranty_claims/lib/apiIdsFilter.ts +12 -0
  639. package/src/modules/warranty_claims/lib/assigneeNames.ts +184 -0
  640. package/src/modules/warranty_claims/lib/attachmentVisibility.ts +5 -0
  641. package/src/modules/warranty_claims/lib/bulkFeedback.ts +6 -0
  642. package/src/modules/warranty_claims/lib/businessHours.ts +333 -0
  643. package/src/modules/warranty_claims/lib/businessHoursForm.ts +206 -0
  644. package/src/modules/warranty_claims/lib/claimTypeConfig.ts +49 -0
  645. package/src/modules/warranty_claims/lib/decryptionSafety.ts +19 -0
  646. package/src/modules/warranty_claims/lib/deskFilters.ts +131 -0
  647. package/src/modules/warranty_claims/lib/dictionaries.ts +212 -0
  648. package/src/modules/warranty_claims/lib/dictionaryLabels.ts +16 -0
  649. package/src/modules/warranty_claims/lib/emailIntake.ts +123 -0
  650. package/src/modules/warranty_claims/lib/escalation.ts +83 -0
  651. package/src/modules/warranty_claims/lib/externalIntake.ts +362 -0
  652. package/src/modules/warranty_claims/lib/grading.ts +23 -0
  653. package/src/modules/warranty_claims/lib/listSegments.ts +19 -0
  654. package/src/modules/warranty_claims/lib/orderOwnership.ts +58 -0
  655. package/src/modules/warranty_claims/lib/portalAttachmentUpload.ts +11 -0
  656. package/src/modules/warranty_claims/lib/portalAttachmentValidation.ts +115 -0
  657. package/src/modules/warranty_claims/lib/portalClaimAccess.ts +37 -0
  658. package/src/modules/warranty_claims/lib/quantity.ts +15 -0
  659. package/src/modules/warranty_claims/lib/risk.ts +371 -0
  660. package/src/modules/warranty_claims/lib/settings.ts +76 -0
  661. package/src/modules/warranty_claims/lib/stateMachine.ts +130 -0
  662. package/src/modules/warranty_claims/lib/timelineFilters.ts +22 -0
  663. package/src/modules/warranty_claims/lib/triage.ts +366 -0
  664. package/src/modules/warranty_claims/lib/troubleshooting.ts +157 -0
  665. package/src/modules/warranty_claims/lib/tryResolve.ts +7 -0
  666. package/src/modules/warranty_claims/lib/vendorPolicyRecovery.ts +182 -0
  667. package/src/modules/warranty_claims/lib/warrantyPreview.ts +20 -0
  668. package/src/modules/warranty_claims/migrations/.snapshot-open-mercato.json +3525 -0
  669. package/src/modules/warranty_claims/migrations/Migration20260703191537_warranty_claims.ts +38 -0
  670. package/src/modules/warranty_claims/migrations/Migration20260704115605_warranty_claims.ts +17 -0
  671. package/src/modules/warranty_claims/migrations/Migration20260704230000_warranty_claims.ts +17 -0
  672. package/src/modules/warranty_claims/migrations/Migration20260705121601_warranty_claims.ts +37 -0
  673. package/src/modules/warranty_claims/migrations/Migration20260709120000_warranty_claims.ts +25 -0
  674. package/src/modules/warranty_claims/migrations/Migration20260710023607_warranty_claims.ts +13 -0
  675. package/src/modules/warranty_claims/migrations/Migration20260716203936_warranty_claims.ts +15 -0
  676. package/src/modules/warranty_claims/migrations/Migration20260717150000_warranty_claims.ts +13 -0
  677. package/src/modules/warranty_claims/migrations/Migration20260719120000_warranty_claims.ts +13 -0
  678. package/src/modules/warranty_claims/migrations/Migration20260813103053_warranty_claims.ts +11 -0
  679. package/src/modules/warranty_claims/notifications.client.ts +78 -0
  680. package/src/modules/warranty_claims/notifications.ts +101 -0
  681. package/src/modules/warranty_claims/search.ts +199 -0
  682. package/src/modules/warranty_claims/services/adjudicationEvaluator.ts +344 -0
  683. package/src/modules/warranty_claims/services/claimNumberGenerator.ts +69 -0
  684. package/src/modules/warranty_claims/services/entitlementResolver.ts +102 -0
  685. package/src/modules/warranty_claims/services/returnLabelProvider.ts +30 -0
  686. package/src/modules/warranty_claims/setup.ts +154 -0
  687. package/src/modules/warranty_claims/subscribers/auto-vendor-recovery.ts +140 -0
  688. package/src/modules/warranty_claims/subscribers/claim-assigned-notification.ts +54 -0
  689. package/src/modules/warranty_claims/subscribers/claim-customer-reply-notification.ts +68 -0
  690. package/src/modules/warranty_claims/subscribers/claim-status-notification.ts +100 -0
  691. package/src/modules/warranty_claims/subscribers/claim-submitted-notification.ts +53 -0
  692. package/src/modules/warranty_claims/subscribers/email-to-claim.ts +175 -0
  693. package/src/modules/warranty_claims/subscribers/return-shipment-tracking.ts +226 -0
  694. package/src/modules/warranty_claims/subscribers/vendor-recovery-reconciliation-undo.ts +28 -0
  695. package/src/modules/warranty_claims/subscribers/vendor-recovery-reconciliation.ts +31 -0
  696. package/src/modules/warranty_claims/widgets/dashboard/claims-queue/config.ts +15 -0
  697. package/src/modules/warranty_claims/widgets/dashboard/claims-queue/widget.client.tsx +237 -0
  698. package/src/modules/warranty_claims/widgets/dashboard/claims-queue/widget.ts +27 -0
  699. package/src/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.client.tsx +527 -0
  700. package/src/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.ts +37 -0
  701. package/src/modules/warranty_claims/widgets/injection/customer-claims-tab/widget.ts +21 -0
  702. package/src/modules/warranty_claims/widgets/injection/customer-claims-tab.tsx +210 -0
  703. package/src/modules/warranty_claims/widgets/injection/order-claims-tab/widget.ts +21 -0
  704. package/src/modules/warranty_claims/widgets/injection/order-claims-tab.tsx +210 -0
  705. package/src/modules/warranty_claims/widgets/injection-table.ts +36 -0
  706. package/src/modules/warranty_claims/widgets/notifications/WarrantyClaimNotificationRenderer.tsx +253 -0
  707. package/src/modules/warranty_claims/widgets/notifications/index.ts +1 -0
  708. package/src/modules/warranty_claims/workers/sla-escalation-sweep.ts +450 -0
@@ -1,17 +1,113 @@
1
- import type { AppContainer } from '@open-mercato/shared/lib/di/container'
2
- import { BasicQueryEngine, resolveEntityTableName } from '@open-mercato/shared/lib/query/engine'
3
- import { HybridQueryEngine } from './lib/engine'
4
- import { markDeleted } from './lib/indexer'
1
+ import type { EntityManager } from '@mikro-orm/postgresql'
5
2
  import type { EventBus } from '@open-mercato/events'
6
3
  import type { VectorIndexService } from '@open-mercato/search/vector'
4
+ import type { AppContainer } from '@open-mercato/shared/lib/di/container'
7
5
  import { CRUD_QUERY_INDEX_MANAGED_PAYLOAD_KEY } from '@open-mercato/shared/lib/crud/types'
6
+ import { recordIndexerError } from '@open-mercato/shared/lib/indexers/error-log'
7
+ import { createLogger } from '@open-mercato/shared/lib/logger'
8
+ import { BasicQueryEngine } from '@open-mercato/shared/lib/query/engine'
9
+ import { HybridQueryEngine } from './lib/engine'
10
+ import {
11
+ loadQueryIndexRowScope,
12
+ QueryIndexScopeError,
13
+ resolveQueryIndexRecordScope,
14
+ resolveQueryIndexSourceMetadata,
15
+ } from './lib/subscriber-scope'
16
+
17
+ const logger = createLogger('query_index').child({ component: 'crud-bridge' })
18
+
19
+ function hasOwn(value: unknown, key: string): boolean {
20
+ return !!value && typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, key)
21
+ }
22
+
23
+ function readScopeValue(
24
+ source: unknown,
25
+ keys: string[],
26
+ ): { value: string | null | undefined; present: boolean } {
27
+ const sourceRecord = source && typeof source === 'object' ? source as Record<string, unknown> : {}
28
+ const key = keys.find((candidate) => hasOwn(source, candidate))
29
+ if (!key) return { value: undefined, present: false }
30
+ const value = sourceRecord[key]
31
+ if (value === null) return { value: null, present: true }
32
+ if (typeof value === 'string' && value.trim().length > 0) return { value, present: true }
33
+ return { value: undefined, present: false }
34
+ }
35
+
36
+ async function resolveBridgeRecordScope(
37
+ em: EntityManager,
38
+ entityType: string,
39
+ recordId: string,
40
+ payload: unknown,
41
+ action: 'upsert' | 'delete',
42
+ options?: { validateCompletePayload?: boolean },
43
+ ) {
44
+ let organization = readScopeValue(payload, ['organizationId', 'orgId'])
45
+ let tenant = readScopeValue(payload, ['tenantId'])
46
+ if (organization.present && tenant.present && options?.validateCompletePayload !== true) {
47
+ return {
48
+ organizationId: organization.value ?? null,
49
+ tenantId: tenant.value ?? null,
50
+ sourceValidated: false,
51
+ }
52
+ }
53
+ const source = resolveQueryIndexSourceMetadata(em, entityType)
54
+ const sourceScope = await loadQueryIndexRowScope(em, source, recordId)
55
+
56
+ if (sourceScope.kind === 'global') {
57
+ if (!organization.present) organization = { value: null, present: true }
58
+ if (!tenant.present) tenant = { value: null, present: true }
59
+ } else if (sourceScope.kind === 'missing' && action === 'upsert') {
60
+ throw new QueryIndexScopeError(
61
+ 'Query index upsert event source row scope could not be resolved',
62
+ )
63
+ }
8
64
 
9
- function toEntityTypeFromEvent(event: string): string | null {
10
- // Expect '<module>.<entity>.<action>'
11
- const parts = event.split('.')
12
- if (parts.length !== 3) return null
13
- const [mod, ent] = parts
14
- return `${mod}:${ent}`
65
+ const resolvedScope = resolveQueryIndexRecordScope({
66
+ payloadOrganizationId: organization.value,
67
+ payloadTenantId: tenant.value,
68
+ hasPayloadOrganizationId: organization.present,
69
+ hasPayloadTenantId: tenant.present,
70
+ sourceScope,
71
+ })
72
+ return { ...resolvedScope, sourceValidated: true }
73
+ }
74
+
75
+ async function recordBridgeError(input: {
76
+ em: EntityManager | null
77
+ handler: 'upsert' | 'delete'
78
+ error: unknown
79
+ entityType: string
80
+ recordId: string
81
+ payload: unknown
82
+ }): Promise<void> {
83
+ const handler = `event:query_index.crud_bridge.${input.handler}`
84
+ if (!input.em) {
85
+ logger.error('CRUD bridge event failed before the entity manager was resolved', {
86
+ handler,
87
+ entityType: input.entityType,
88
+ recordId: input.recordId,
89
+ err: input.error,
90
+ })
91
+ return
92
+ }
93
+ await recordIndexerError(
94
+ { em: input.em },
95
+ {
96
+ source: 'query_index',
97
+ handler,
98
+ error: input.error,
99
+ entityType: input.entityType,
100
+ recordId: input.recordId,
101
+ payload: input.payload,
102
+ },
103
+ ).catch((loggingError) => {
104
+ logger.error('Failed to record CRUD bridge error', {
105
+ handler,
106
+ entityType: input.entityType,
107
+ recordId: input.recordId,
108
+ err: loggingError,
109
+ })
110
+ })
15
111
  }
16
112
 
17
113
  export function register(container: AppContainer) {
@@ -65,30 +161,25 @@ export function register(container: AppContainer) {
65
161
  if (!bus) { setTimeout(setup, 0); return }
66
162
 
67
163
  const makeUpsertHandler = (entityType: string) => async (payload: any, ctx: any) => {
164
+ let em: EntityManager | null = null
165
+ let id = ''
68
166
  try {
69
167
  // DataEngine emits the canonical query_index.upsert_one itself. The
70
168
  // bridge only covers domain events from write paths that do not own an
71
169
  // indexer, otherwise failures and error logs are duplicated.
72
170
  if (payload?.[CRUD_QUERY_INDEX_MANAGED_PAYLOAD_KEY] === true) return
73
- const em = ctx.resolve('em')
74
- let orgId = payload?.organizationId || payload?.orgId || ctx?.organizationId || null
75
- let tenantId = payload?.tenantId || ctx?.tenantId || null
76
- const id = String(payload?.id || payload?.recordId || '')
171
+ em = ctx.resolve('em') as EntityManager
172
+ id = String(payload?.id || payload?.recordId || '')
77
173
  if (!id) return
78
- if (!orgId || !tenantId) {
79
- try {
80
- const db = (em as any).getKysely()
81
- const table = resolveEntityTableName(em, entityType)
82
- const row = await db
83
- .selectFrom(table as any)
84
- .select(['organization_id' as any, 'tenant_id' as any])
85
- .where('id' as any, '=', id)
86
- .executeTakeFirst() as { organization_id: string | null; tenant_id: string | null } | undefined
87
- orgId = row?.organization_id ?? orgId
88
- tenantId = row?.tenant_id ?? tenantId
89
- } catch {}
90
- }
174
+ const { organizationId: orgId, tenantId, sourceValidated } = await resolveBridgeRecordScope(
175
+ em,
176
+ entityType,
177
+ id,
178
+ payload,
179
+ 'upsert',
180
+ )
91
181
  // Optional: only index when custom field definitions exist for this entity (org/global)
182
+ let hasCustomFields: boolean | null = null
92
183
  try {
93
184
  const db = (em as any).getKysely()
94
185
  let cfQuery = db
@@ -112,41 +203,47 @@ export function register(container: AppContainer) {
112
203
  } else {
113
204
  cfQuery = cfQuery.where('tenant_id' as any, 'is', null as any)
114
205
  }
115
- const hasCf = await cfQuery.executeTakeFirst()
116
- if (!hasCf) return
206
+ hasCustomFields = !!await cfQuery.executeTakeFirst()
117
207
  } catch {}
118
- try {
119
- const bus = ctx.resolve('eventBus') as any
120
- await bus.emitEvent('query_index.upsert_one', { entityType, recordId: id, organizationId: orgId, tenantId })
121
- } catch {}
122
- } catch {}
208
+ if (hasCustomFields === false) {
209
+ if (!sourceValidated) {
210
+ await resolveBridgeRecordScope(
211
+ em,
212
+ entityType,
213
+ id,
214
+ payload,
215
+ 'upsert',
216
+ { validateCompletePayload: true },
217
+ )
218
+ }
219
+ return
220
+ }
221
+ const bus = ctx.resolve('eventBus') as any
222
+ await bus.emitEvent('query_index.upsert_one', { entityType, recordId: id, organizationId: orgId, tenantId })
223
+ } catch (error) {
224
+ await recordBridgeError({ em, handler: 'upsert', error, entityType, recordId: id, payload })
225
+ }
123
226
  }
124
227
  const makeDeleteHandler = (entityType: string) => async (payload: any, ctx: any) => {
228
+ let em: EntityManager | null = null
229
+ let id = ''
125
230
  try {
126
231
  if (payload?.[CRUD_QUERY_INDEX_MANAGED_PAYLOAD_KEY] === true) return
127
- const em = ctx.resolve('em')
128
- let orgId = payload?.organizationId || payload?.orgId || ctx?.organizationId || null
129
- let tenantId = payload?.tenantId || ctx?.tenantId || null
130
- const id = String(payload?.id || payload?.recordId || '')
232
+ em = ctx.resolve('em') as EntityManager
233
+ id = String(payload?.id || payload?.recordId || '')
131
234
  if (!id) return
132
- if (!orgId || !tenantId) {
133
- try {
134
- const db = (em as any).getKysely()
135
- const table = resolveEntityTableName(em, entityType)
136
- const row = await db
137
- .selectFrom(table as any)
138
- .select(['organization_id' as any, 'tenant_id' as any])
139
- .where('id' as any, '=', id)
140
- .executeTakeFirst() as { organization_id: string | null; tenant_id: string | null } | undefined
141
- orgId = row?.organization_id ?? orgId
142
- tenantId = row?.tenant_id ?? tenantId
143
- } catch {}
144
- }
145
- try {
146
- const bus = ctx.resolve('eventBus') as any
147
- await bus.emitEvent('query_index.delete_one', { entityType, recordId: id, organizationId: orgId, tenantId })
148
- } catch {}
149
- } catch {}
235
+ const { organizationId: orgId, tenantId } = await resolveBridgeRecordScope(
236
+ em,
237
+ entityType,
238
+ id,
239
+ payload,
240
+ 'delete',
241
+ )
242
+ const bus = ctx.resolve('eventBus') as any
243
+ await bus.emitEvent('query_index.delete_one', { entityType, recordId: id, organizationId: orgId, tenantId })
244
+ } catch (error) {
245
+ await recordBridgeError({ em, handler: 'delete', error, entityType, recordId: id, payload })
246
+ }
150
247
  }
151
248
 
152
249
  // Build list of entity ids to subscribe to
@@ -594,6 +594,11 @@ export const documentUpdateSchema = z
594
594
  customerReference: z.string().nullable().optional(),
595
595
  externalReference: z.string().nullable().optional(),
596
596
  comment: z.string().nullable().optional(),
597
+ // Same names and limits as the create schema (data/validators.ts), so a
598
+ // caller can send one payload shape to create and update. Nullable here
599
+ // because an update — unlike a create — has an existing value to clear.
600
+ comments: z.string().trim().max(4000).nullable().optional(),
601
+ internalNotes: z.string().trim().max(4000).nullable().optional(),
597
602
  orderNumber: z.string().trim().min(1).max(191).optional(),
598
603
  quoteNumber: z.string().trim().min(1).max(191).optional(),
599
604
  currencyCode: currencyCodeSchema.optional(),
@@ -637,6 +642,8 @@ export const documentUpdateSchema = z
637
642
  input.customerReference !== undefined ||
638
643
  input.externalReference !== undefined ||
639
644
  input.comment !== undefined ||
645
+ input.comments !== undefined ||
646
+ input.internalNotes !== undefined ||
640
647
  input.orderNumber !== undefined ||
641
648
  input.quoteNumber !== undefined ||
642
649
  input.shippingAddressSnapshot !== undefined ||
@@ -1162,6 +1169,32 @@ async function applyDocumentUpdate({
1162
1169
  typeof input.comment === "string" ? input.comment.trim() : "";
1163
1170
  entity.comments = normalized.length ? normalized : null;
1164
1171
  }
1172
+ // After `comment`, so the canonical name wins when a payload carries both.
1173
+ if (input.comments !== undefined) {
1174
+ const normalized =
1175
+ typeof input.comments === "string" ? input.comments.trim() : "";
1176
+ entity.comments = normalized.length ? normalized : null;
1177
+ }
1178
+ // Orders only — SalesQuote has no internalNotes column. Reject rather than
1179
+ // ignore it on a quote: the field now satisfies the schema's refine on its
1180
+ // own, so silently dropping it would let an otherwise-empty payload run the
1181
+ // update, and a quote in `sent` status loses its acceptance token and reverts
1182
+ // to draft on any update that reaches execution.
1183
+ if (kind === "quote" && input.internalNotes !== undefined) {
1184
+ throw new CrudHttpError(400, {
1185
+ error: translate(
1186
+ "sales.quotes.internal_notes_unsupported",
1187
+ "Internal notes are not available on quotes.",
1188
+ ),
1189
+ });
1190
+ }
1191
+ if (kind === "order" && input.internalNotes !== undefined) {
1192
+ const normalized =
1193
+ typeof input.internalNotes === "string" ? input.internalNotes.trim() : "";
1194
+ (entity as SalesOrder).internalNotes = normalized.length
1195
+ ? normalized
1196
+ : null;
1197
+ }
1165
1198
  if (typeof input.currencyCode === "string") {
1166
1199
  entity.currencyCode = input.currencyCode;
1167
1200
  }
@@ -2079,8 +2112,8 @@ async function loadCreditMemoSnapshot(
2079
2112
  organizationId: creditMemo.organizationId,
2080
2113
  tenantId: creditMemo.tenantId,
2081
2114
  creditMemoNumber: creditMemo.creditMemoNumber,
2082
- orderId: creditMemo.orderId ?? null,
2083
- invoiceId: creditMemo.invoiceId ?? null,
2115
+ orderId: creditMemo.order?.id ?? null,
2116
+ invoiceId: creditMemo.invoice?.id ?? null,
2084
2117
  statusEntryId: creditMemo.statusEntryId ?? null,
2085
2118
  status: creditMemo.status ?? null,
2086
2119
  reason: creditMemo.reason ?? null,
@@ -3692,9 +3725,11 @@ function buildDocumentUpdateChangeKeys(kind: SalesDocumentKind, input: DocumentU
3692
3725
  if (input.customerSnapshot !== undefined) keys.add("customerSnapshot");
3693
3726
  if (input.metadata !== undefined) keys.add("metadata");
3694
3727
  if (input.comment !== undefined) keys.add("comments");
3728
+ if (input.comments !== undefined) keys.add("comments");
3695
3729
  if (input.currencyCode !== undefined) keys.add("currencyCode");
3696
3730
  if (input.channelId !== undefined) keys.add("channelId");
3697
3731
  if (kind === "order") {
3732
+ if (input.internalNotes !== undefined) keys.add("internalNotes");
3698
3733
  if (input.placedAt !== undefined) keys.add("placedAt");
3699
3734
  if (input.expectedDeliveryAt !== undefined) keys.add("expectedDeliveryAt");
3700
3735
  }
@@ -5159,10 +5194,6 @@ const updateQuoteCommand: CommandHandler<
5159
5194
  ensureQuoteScope(ctx, quote.organizationId, quote.tenantId);
5160
5195
  await enforceSalesDocumentOptimisticLock(ctx, quote, SALES_RESOURCE_KIND_QUOTE);
5161
5196
  const shouldInvalidateSentToken = (quote.status ?? null) === "sent";
5162
- if (shouldInvalidateSentToken) {
5163
- quote.acceptanceToken = null;
5164
- quote.sentAt = null;
5165
- }
5166
5197
  const shouldRecalculateTotals =
5167
5198
  parsed.shippingMethodId !== undefined ||
5168
5199
  parsed.shippingMethodSnapshot !== undefined ||
@@ -5185,7 +5216,12 @@ const updateQuoteCommand: CommandHandler<
5185
5216
  input: parsed,
5186
5217
  em,
5187
5218
  });
5219
+ // After applyDocumentUpdate, not before it: the reset must not happen
5220
+ // for an update that turns out to be invalid, or a rejected payload
5221
+ // still strips a sent quote of its acceptance link.
5188
5222
  if (shouldInvalidateSentToken) {
5223
+ quote.acceptanceToken = null;
5224
+ quote.sentAt = null;
5189
5225
  quote.status = "draft";
5190
5226
  quote.statusEntryId = await resolveStatusEntryIdByValue(em, {
5191
5227
  tenantId: quote.tenantId,
@@ -9435,8 +9471,8 @@ const createCreditMemoCommand: CommandHandler<
9435
9471
  organizationId: parsed.organizationId,
9436
9472
  tenantId: parsed.tenantId,
9437
9473
  creditMemoNumber: ensuredCreditMemoNumber,
9438
- orderId: parsed.orderId ?? null,
9439
- invoiceId: parsed.invoiceId ?? null,
9474
+ order: parsed.orderId ? em.getReference(SalesOrder, parsed.orderId) : null,
9475
+ invoice: parsed.invoiceId ? em.getReference(SalesInvoice, parsed.invoiceId) : null,
9440
9476
  statusEntryId: parsed.statusEntryId ?? null,
9441
9477
  status,
9442
9478
  reason: parsed.reason ?? null,
@@ -9686,8 +9722,12 @@ const updateCreditMemoCommand: CommandHandler<
9686
9722
  ensureOrganizationScope(ctx, creditMemo.organizationId);
9687
9723
  ensureTenantScope(ctx, creditMemo.tenantId);
9688
9724
  creditMemo.creditMemoNumber = before.creditMemo.creditMemoNumber;
9689
- creditMemo.orderId = before.creditMemo.orderId;
9690
- creditMemo.invoiceId = before.creditMemo.invoiceId;
9725
+ creditMemo.order = before.creditMemo.orderId
9726
+ ? em.getReference(SalesOrder, before.creditMemo.orderId)
9727
+ : null;
9728
+ creditMemo.invoice = before.creditMemo.invoiceId
9729
+ ? em.getReference(SalesInvoice, before.creditMemo.invoiceId)
9730
+ : null;
9691
9731
  creditMemo.statusEntryId = before.creditMemo.statusEntryId;
9692
9732
  creditMemo.status = before.creditMemo.status;
9693
9733
  creditMemo.reason = before.creditMemo.reason;
@@ -9790,8 +9830,12 @@ const deleteCreditMemoCommand: CommandHandler<
9790
9830
  organizationId: before.creditMemo.organizationId,
9791
9831
  tenantId: before.creditMemo.tenantId,
9792
9832
  creditMemoNumber: before.creditMemo.creditMemoNumber,
9793
- orderId: before.creditMemo.orderId,
9794
- invoiceId: before.creditMemo.invoiceId,
9833
+ order: before.creditMemo.orderId
9834
+ ? em.getReference(SalesOrder, before.creditMemo.orderId)
9835
+ : null,
9836
+ invoice: before.creditMemo.invoiceId
9837
+ ? em.getReference(SalesInvoice, before.creditMemo.invoiceId)
9838
+ : null,
9795
9839
  statusEntryId: before.creditMemo.statusEntryId,
9796
9840
  status: before.creditMemo.status,
9797
9841
  reason: before.creditMemo.reason,
@@ -1287,6 +1287,7 @@
1287
1287
  "sales.quotes.form.general": "Allgemein",
1288
1288
  "sales.quotes.form.lines": "Positionen",
1289
1289
  "sales.quotes.form.notes": "Notizen",
1290
+ "sales.quotes.internal_notes_unsupported": "Interne Notizen sind für Angebote nicht verfügbar.",
1290
1291
  "sales.quotes.lines.delete": "Angebotsposition löschen",
1291
1292
  "sales.quotes.lines.upsert": "Angebotsposition aktualisieren",
1292
1293
  "sales.quotes.list.title": "Angebote",
@@ -1287,6 +1287,7 @@
1287
1287
  "sales.quotes.form.general": "General",
1288
1288
  "sales.quotes.form.lines": "Line Items",
1289
1289
  "sales.quotes.form.notes": "Notes",
1290
+ "sales.quotes.internal_notes_unsupported": "Internal notes are not available on quotes.",
1290
1291
  "sales.quotes.lines.delete": "Delete quote line",
1291
1292
  "sales.quotes.lines.upsert": "Update quote line",
1292
1293
  "sales.quotes.list.title": "Quotes",
@@ -1287,6 +1287,7 @@
1287
1287
  "sales.quotes.form.general": "General",
1288
1288
  "sales.quotes.form.lines": "Líneas",
1289
1289
  "sales.quotes.form.notes": "Notas",
1290
+ "sales.quotes.internal_notes_unsupported": "Las notas internas no están disponibles en los presupuestos.",
1290
1291
  "sales.quotes.lines.delete": "Eliminar línea de cotización",
1291
1292
  "sales.quotes.lines.upsert": "Actualizar línea de cotización",
1292
1293
  "sales.quotes.list.title": "Cotizaciones",
@@ -1287,6 +1287,7 @@
1287
1287
  "sales.quotes.form.general": "일반",
1288
1288
  "sales.quotes.form.lines": "라인 항목",
1289
1289
  "sales.quotes.form.notes": "메모",
1290
+ "sales.quotes.internal_notes_unsupported": "내부 메모는 견적서에서 사용할 수 없습니다.",
1290
1291
  "sales.quotes.lines.delete": "견적 항목 삭제",
1291
1292
  "sales.quotes.lines.upsert": "견적 항목 업데이트",
1292
1293
  "sales.quotes.list.title": "견적",
@@ -1287,6 +1287,7 @@
1287
1287
  "sales.quotes.form.general": "Ogólne",
1288
1288
  "sales.quotes.form.lines": "Pozycje",
1289
1289
  "sales.quotes.form.notes": "Notatki",
1290
+ "sales.quotes.internal_notes_unsupported": "Notatki wewnętrzne nie są dostępne dla ofert.",
1290
1291
  "sales.quotes.lines.delete": "Usuń pozycję oferty",
1291
1292
  "sales.quotes.lines.upsert": "Zaktualizuj pozycję oferty",
1292
1293
  "sales.quotes.list.title": "Oferty",
@@ -0,0 +1,49 @@
1
+ # Warranty Claims Module — Agent Guidelines
2
+
3
+ `warranty_claims` is the B2B warranty, RMA, core-return, and vendor-recovery claims desk. It owns the claim aggregate, line-level partials, customer-visible timeline, staff notifications, portal intake, SLA settings, risk signals, and sales-order tab injection while coupling to other modules only through IDs, snapshots, events, QueryEngine lookups, and widgets.
4
+
5
+ Covers claim lifecycle + line dispositions, receiving & grading, SLA pause/escalation, risk signals & adjudication, registrations & vendor recovery, portal + API-key intake, and resolution-execution bridges into `sales`. Design of record: [`.ai/specs/2026-07-03-warranty-rma-claims-desk.md`](../../../../../.ai/specs/2026-07-03-warranty-rma-claims-desk.md); unimplemented candidates: [`.ai/specs/2026-07-16-warranty-rma-roadmap.md`](../../../../../.ai/specs/2026-07-16-warranty-rma-roadmap.md).
6
+
7
+ ## Always
8
+
9
+ 1. MUST keep claim lifecycle transitions in `lib/stateMachine.ts` and `data/constants.ts`; the status enum is FROZEN and lifecycle moves MUST go through `warranty_claims.claim.transition`, never generic `PUT`.
10
+ 2. MUST preserve legal transitions: `closed -> in_review` is the reopen path, `cancelled` is terminal, and direct status writes through CRUD update are forbidden.
11
+ 3. MUST treat claim lines as first-class partials with dispositions; line create/update/delete MUST recompute header money rollups inside the same atomic flush.
12
+ 4. MUST keep SLA behavior settings-driven from `lib/settings.ts` and `/api/warranty_claims/settings-general`: due dates come from settings/defaults, `info_requested` pauses when configured, and resume shifts the due date instead of shortening the SLA window.
13
+ 5. MUST keep auto-adjudication default OFF, risk-gated by `lib/risk.ts`, executed only inside the submit command path, and limited to auto-approval; never auto-deny.
14
+ 6. MUST keep risk signals deterministic, tenant/org scoped, and based on code constants in `lib/risk.ts`; do not make thresholds tenant data without a spec.
15
+ 7. MUST preserve the event split: `warranty_claims.claim.status_changed` is the staff/client broadcast and MUST NOT pin `recipientUserIds`; `warranty_claims.claim.portal_status_changed` is the portal broadcast and MUST pin customer-user recipient ids, skipping emit when there are no recipients.
16
+ 8. MUST use FK-id plus snapshot coupling for sales, customers, catalog, and auth data; use QueryEngine or scoped decrypted lookups wrapped in `try/catch` for optional peer lookups.
17
+ 9. MUST carry `tenantId` and `organizationId` in every ORM `where` clause. The scope argument to `findOneWithDecryption` / `findWithDecryption` is decryption scope only and does not add SQL filters.
18
+ 10. MUST pin portal reads and writes to the server-resolved customer id; portal mutation guards use the customer-user id with an empty feature list.
19
+ 11. MUST keep optimistic locking on by default for CRUD and settings; action endpoints use `enforceCommandOptimisticLock`, and UI line mutations send each line's own `updatedAt` header.
20
+ 12. MUST keep free-text/correspondence fields in `encryption.ts` encrypted and excluded from search sources in `search.ts`.
21
+
22
+ ## Ask First
23
+
24
+ - Ask before adding, renaming, or removing claim statuses, line statuses, dispositions, event ids, notification ids, API paths, widget spot ids, ACL ids, DI keys, or search entity ids.
25
+ - Ask before changing lifecycle semantics, reopen behavior, cancellation rules, SLA pause/resume math, risk thresholds, auto-adjudication policy, or vendor-recovery reconciliation.
26
+ - Ask before importing another module's ORM entity, writing to sales/customers/auth aggregates, or replacing FK-id plus snapshot coupling with direct relations.
27
+ - Ask before changing portal ownership rules, customer-user recipient selection, attachment ownership, or customer-visible timeline visibility.
28
+
29
+ ## Never
30
+
31
+ - Never change `claimType` or `status` through generic CRUD update.
32
+ - Never import sales, customers, catalog, or auth ORM entities into this module.
33
+ - Never emit a portal-broadcast event without pinned customer-user recipients.
34
+ - Never rely on `findOneWithDecryption` scope to tenant-filter data; missing tenant/org in `where` is a data isolation bug.
35
+ - Never bypass mutation guards, command optimistic locks, encrypted field helpers, or atomic flush for claim/line writes.
36
+ - Never put encrypted text fields such as notes, resolution summary, fault description, inspection notes, or event body into search source text.
37
+ - Never edit `i18n/*.json` in packet work; record new keys and English fallbacks in the packet notes file.
38
+
39
+ ## Validation Commands
40
+
41
+ ```bash
42
+ cd packages/core
43
+ npx jest src/modules/warranty_claims/__tests__
44
+ cd ../..
45
+ yarn generate
46
+ yarn i18n:check-sync
47
+ ```
48
+
49
+ Integration coverage lives under `packages/core/src/modules/warranty_claims/__integration__/TC-WC-*.spec.ts`; run the relevant `TC-WC-*` scenario when changing API or portal behavior.
@@ -0,0 +1,71 @@
1
+ export const features = [
2
+ { id: 'warranty_claims.claim.view', title: 'View warranty claims', module: 'warranty_claims' },
3
+ {
4
+ id: 'warranty_claims.claim.create',
5
+ title: 'Create warranty claims',
6
+ module: 'warranty_claims',
7
+ dependsOn: ['warranty_claims.claim.view'],
8
+ },
9
+ {
10
+ id: 'warranty_claims.claim.manage',
11
+ title: 'Manage warranty claims',
12
+ module: 'warranty_claims',
13
+ dependsOn: ['warranty_claims.claim.view'],
14
+ },
15
+ {
16
+ id: 'warranty_claims.claim.delete',
17
+ title: 'Delete warranty claims',
18
+ module: 'warranty_claims',
19
+ dependsOn: ['warranty_claims.claim.manage'],
20
+ },
21
+ {
22
+ id: 'warranty_claims.settings.manage',
23
+ title: 'Manage warranty claim settings',
24
+ module: 'warranty_claims',
25
+ dependsOn: ['warranty_claims.claim.manage'],
26
+ },
27
+ {
28
+ id: 'warranty_claims.external.submit',
29
+ title: 'Submit external warranty claims',
30
+ module: 'warranty_claims',
31
+ dependsOn: ['warranty_claims.claim.create'],
32
+ },
33
+ {
34
+ id: 'warranty_claims.external.view',
35
+ title: 'View external warranty claims',
36
+ module: 'warranty_claims',
37
+ dependsOn: ['warranty_claims.claim.view'],
38
+ },
39
+ {
40
+ id: 'warranty_claims.registration.view',
41
+ title: 'View warranty registrations',
42
+ module: 'warranty_claims',
43
+ dependsOn: ['warranty_claims.claim.view'],
44
+ },
45
+ {
46
+ id: 'warranty_claims.registration.manage',
47
+ title: 'Manage warranty registrations',
48
+ module: 'warranty_claims',
49
+ dependsOn: ['warranty_claims.registration.view'],
50
+ },
51
+ {
52
+ id: 'warranty_claims.vendor_policy.manage',
53
+ title: 'Manage warranty vendor policies',
54
+ module: 'warranty_claims',
55
+ dependsOn: ['warranty_claims.claim.manage'],
56
+ },
57
+ {
58
+ id: 'warranty_claims.troubleshooting.manage',
59
+ title: 'Manage warranty troubleshooting guides',
60
+ module: 'warranty_claims',
61
+ dependsOn: ['warranty_claims.settings.manage'],
62
+ },
63
+ {
64
+ id: 'warranty_claims.receiving.manage',
65
+ title: 'Manage warranty receiving and grading',
66
+ module: 'warranty_claims',
67
+ dependsOn: ['warranty_claims.claim.manage'],
68
+ },
69
+ ]
70
+
71
+ export default features