@open-mercato/core 0.6.8-develop.6998.1.d2bc46c56c → 0.6.8-develop.7001.1.03608ab252

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 (651) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/dist/generated/entities/warranty_claim/index.js +105 -0
  3. package/dist/generated/entities/warranty_claim/index.js.map +7 -0
  4. package/dist/generated/entities/warranty_claim_event/index.js +25 -0
  5. package/dist/generated/entities/warranty_claim_event/index.js.map +7 -0
  6. package/dist/generated/entities/warranty_claim_line/index.js +77 -0
  7. package/dist/generated/entities/warranty_claim_line/index.js.map +7 -0
  8. package/dist/generated/entities/warranty_claim_registration/index.js +43 -0
  9. package/dist/generated/entities/warranty_claim_registration/index.js.map +7 -0
  10. package/dist/generated/entities/warranty_claim_sequence/index.js +17 -0
  11. package/dist/generated/entities/warranty_claim_sequence/index.js.map +7 -0
  12. package/dist/generated/entities/warranty_claim_settings/index.js +43 -0
  13. package/dist/generated/entities/warranty_claim_settings/index.js.map +7 -0
  14. package/dist/generated/entities/warranty_claim_sla_signal/index.js +25 -0
  15. package/dist/generated/entities/warranty_claim_sla_signal/index.js.map +7 -0
  16. package/dist/generated/entities/warranty_troubleshooting_guide/index.js +25 -0
  17. package/dist/generated/entities/warranty_troubleshooting_guide/index.js.map +7 -0
  18. package/dist/generated/entities/warranty_vendor_policy/index.js +31 -0
  19. package/dist/generated/entities/warranty_vendor_policy/index.js.map +7 -0
  20. package/dist/generated/entities.ids.generated.js +12 -0
  21. package/dist/generated/entities.ids.generated.js.map +2 -2
  22. package/dist/generated/entity-fields-registry.js +200 -0
  23. package/dist/generated/entity-fields-registry.js.map +2 -2
  24. package/dist/helpers/integration/api.js +3 -2
  25. package/dist/helpers/integration/api.js.map +2 -2
  26. package/dist/helpers/integration/salesFixtures.js +13 -6
  27. package/dist/helpers/integration/salesFixtures.js.map +2 -2
  28. package/dist/modules/attachments/di.js +18 -0
  29. package/dist/modules/attachments/di.js.map +2 -2
  30. package/dist/modules/attachments/fields/attachment.js +186 -26
  31. package/dist/modules/attachments/fields/attachment.js.map +2 -2
  32. package/dist/modules/attachments/lib/scoped-upload-service.js +202 -0
  33. package/dist/modules/attachments/lib/scoped-upload-service.js.map +7 -0
  34. package/dist/modules/attachments/lib/target-access-service.js +39 -0
  35. package/dist/modules/attachments/lib/target-access-service.js.map +7 -0
  36. package/dist/modules/auth/api/logout.js +37 -10
  37. package/dist/modules/auth/api/logout.js.map +2 -2
  38. package/dist/modules/auth/api/reset/confirm.js +7 -0
  39. package/dist/modules/auth/api/reset/confirm.js.map +2 -2
  40. package/dist/modules/auth/api/reset.js +7 -0
  41. package/dist/modules/auth/api/reset.js.map +2 -2
  42. package/dist/modules/auth/commands/users.js +13 -0
  43. package/dist/modules/auth/commands/users.js.map +2 -2
  44. package/dist/modules/auth/events.js +15 -0
  45. package/dist/modules/auth/events.js.map +2 -2
  46. package/dist/modules/customers/api/companies/route.js +1 -0
  47. package/dist/modules/customers/api/companies/route.js.map +2 -2
  48. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -2
  49. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
  50. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -2
  51. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
  52. package/dist/modules/customers/components/detail/assignableStaff.js +6 -69
  53. package/dist/modules/customers/components/detail/assignableStaff.js.map +2 -2
  54. package/dist/modules/customers/lib/assignableStaff.js +76 -0
  55. package/dist/modules/customers/lib/assignableStaff.js.map +7 -0
  56. package/dist/modules/data_sync/lib/batch-stream.js +56 -0
  57. package/dist/modules/data_sync/lib/batch-stream.js.map +7 -0
  58. package/dist/modules/data_sync/lib/sync-engine.js +165 -103
  59. package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
  60. package/dist/modules/inbox_ops/api/emails/[id]/reprocess/route.js +4 -0
  61. package/dist/modules/inbox_ops/api/emails/[id]/reprocess/route.js.map +2 -2
  62. package/dist/modules/inbox_ops/api/extract/route.js +4 -0
  63. package/dist/modules/inbox_ops/api/extract/route.js.map +2 -2
  64. package/dist/modules/inbox_ops/api/webhook/inbound.js +4 -0
  65. package/dist/modules/inbox_ops/api/webhook/inbound.js.map +2 -2
  66. package/dist/modules/sales/commands/documents.js +8 -8
  67. package/dist/modules/sales/commands/documents.js.map +2 -2
  68. package/dist/modules/warranty_claims/acl.js +75 -0
  69. package/dist/modules/warranty_claims/acl.js.map +7 -0
  70. package/dist/modules/warranty_claims/ai-agents.js +161 -0
  71. package/dist/modules/warranty_claims/ai-agents.js.map +7 -0
  72. package/dist/modules/warranty_claims/ai-tools.js +591 -0
  73. package/dist/modules/warranty_claims/ai-tools.js.map +7 -0
  74. package/dist/modules/warranty_claims/api/ai/assess/route.js +304 -0
  75. package/dist/modules/warranty_claims/api/ai/assess/route.js.map +7 -0
  76. package/dist/modules/warranty_claims/api/ai/draft-reply/route.js +127 -0
  77. package/dist/modules/warranty_claims/api/ai/draft-reply/route.js.map +7 -0
  78. package/dist/modules/warranty_claims/api/ai/suggest/route.js +177 -0
  79. package/dist/modules/warranty_claims/api/ai/suggest/route.js.map +7 -0
  80. package/dist/modules/warranty_claims/api/assign/route.js +124 -0
  81. package/dist/modules/warranty_claims/api/assign/route.js.map +7 -0
  82. package/dist/modules/warranty_claims/api/assignees/route.js +97 -0
  83. package/dist/modules/warranty_claims/api/assignees/route.js.map +7 -0
  84. package/dist/modules/warranty_claims/api/credit-memo/route.js +152 -0
  85. package/dist/modules/warranty_claims/api/credit-memo/route.js.map +7 -0
  86. package/dist/modules/warranty_claims/api/entitlement/route.js +145 -0
  87. package/dist/modules/warranty_claims/api/entitlement/route.js.map +7 -0
  88. package/dist/modules/warranty_claims/api/events/route.js +199 -0
  89. package/dist/modules/warranty_claims/api/events/route.js.map +7 -0
  90. package/dist/modules/warranty_claims/api/external/claims/route.js +446 -0
  91. package/dist/modules/warranty_claims/api/external/claims/route.js.map +7 -0
  92. package/dist/modules/warranty_claims/api/lines/route.js +258 -0
  93. package/dist/modules/warranty_claims/api/lines/route.js.map +7 -0
  94. package/dist/modules/warranty_claims/api/openapi.js +27 -0
  95. package/dist/modules/warranty_claims/api/openapi.js.map +7 -0
  96. package/dist/modules/warranty_claims/api/portal/attachments/route.js +490 -0
  97. package/dist/modules/warranty_claims/api/portal/attachments/route.js.map +7 -0
  98. package/dist/modules/warranty_claims/api/portal/claims/[id]/route.js +178 -0
  99. package/dist/modules/warranty_claims/api/portal/claims/[id]/route.js.map +7 -0
  100. package/dist/modules/warranty_claims/api/portal/claims/[id]/shared.js +101 -0
  101. package/dist/modules/warranty_claims/api/portal/claims/[id]/shared.js.map +7 -0
  102. package/dist/modules/warranty_claims/api/portal/claims/[id]/submit/route.js +78 -0
  103. package/dist/modules/warranty_claims/api/portal/claims/[id]/submit/route.js.map +7 -0
  104. package/dist/modules/warranty_claims/api/portal/claims/[id]/withdraw/route.js +81 -0
  105. package/dist/modules/warranty_claims/api/portal/claims/[id]/withdraw/route.js.map +7 -0
  106. package/dist/modules/warranty_claims/api/portal/claims/route.js +462 -0
  107. package/dist/modules/warranty_claims/api/portal/claims/route.js.map +7 -0
  108. package/dist/modules/warranty_claims/api/portal/events/route.js +228 -0
  109. package/dist/modules/warranty_claims/api/portal/events/route.js.map +7 -0
  110. package/dist/modules/warranty_claims/api/portal/options/route.js +91 -0
  111. package/dist/modules/warranty_claims/api/portal/options/route.js.map +7 -0
  112. package/dist/modules/warranty_claims/api/portal/orders/lines/route.js +172 -0
  113. package/dist/modules/warranty_claims/api/portal/orders/lines/route.js.map +7 -0
  114. package/dist/modules/warranty_claims/api/portal/orders/route.js +151 -0
  115. package/dist/modules/warranty_claims/api/portal/orders/route.js.map +7 -0
  116. package/dist/modules/warranty_claims/api/portal/troubleshooting/route.js +121 -0
  117. package/dist/modules/warranty_claims/api/portal/troubleshooting/route.js.map +7 -0
  118. package/dist/modules/warranty_claims/api/receiving/route.js +176 -0
  119. package/dist/modules/warranty_claims/api/receiving/route.js.map +7 -0
  120. package/dist/modules/warranty_claims/api/registrations/route.js +382 -0
  121. package/dist/modules/warranty_claims/api/registrations/route.js.map +7 -0
  122. package/dist/modules/warranty_claims/api/replacement-order/route.js +150 -0
  123. package/dist/modules/warranty_claims/api/replacement-order/route.js.map +7 -0
  124. package/dist/modules/warranty_claims/api/return-label/route.js +235 -0
  125. package/dist/modules/warranty_claims/api/return-label/route.js.map +7 -0
  126. package/dist/modules/warranty_claims/api/risk/route.js +101 -0
  127. package/dist/modules/warranty_claims/api/risk/route.js.map +7 -0
  128. package/dist/modules/warranty_claims/api/route.js +482 -0
  129. package/dist/modules/warranty_claims/api/route.js.map +7 -0
  130. package/dist/modules/warranty_claims/api/sales-return/route.js +151 -0
  131. package/dist/modules/warranty_claims/api/sales-return/route.js.map +7 -0
  132. package/dist/modules/warranty_claims/api/settings-general/route.js +195 -0
  133. package/dist/modules/warranty_claims/api/settings-general/route.js.map +7 -0
  134. package/dist/modules/warranty_claims/api/stats/route.js +199 -0
  135. package/dist/modules/warranty_claims/api/stats/route.js.map +7 -0
  136. package/dist/modules/warranty_claims/api/submit/route.js +120 -0
  137. package/dist/modules/warranty_claims/api/submit/route.js.map +7 -0
  138. package/dist/modules/warranty_claims/api/transition/route.js +126 -0
  139. package/dist/modules/warranty_claims/api/transition/route.js.map +7 -0
  140. package/dist/modules/warranty_claims/api/troubleshooting-guides/route.js +261 -0
  141. package/dist/modules/warranty_claims/api/troubleshooting-guides/route.js.map +7 -0
  142. package/dist/modules/warranty_claims/api/vendor-policies/route.js +311 -0
  143. package/dist/modules/warranty_claims/api/vendor-policies/route.js.map +7 -0
  144. package/dist/modules/warranty_claims/api/vendor-recovery/route.js +130 -0
  145. package/dist/modules/warranty_claims/api/vendor-recovery/route.js.map +7 -0
  146. package/dist/modules/warranty_claims/api/vendor-recovery-suggestions/route.js +153 -0
  147. package/dist/modules/warranty_claims/api/vendor-recovery-suggestions/route.js.map +7 -0
  148. package/dist/modules/warranty_claims/backend/components/AiAssessButtons.js +268 -0
  149. package/dist/modules/warranty_claims/backend/components/AiAssessButtons.js.map +7 -0
  150. package/dist/modules/warranty_claims/backend/components/ClaimStageProgress.js +54 -0
  151. package/dist/modules/warranty_claims/backend/components/ClaimStageProgress.js.map +7 -0
  152. package/dist/modules/warranty_claims/backend/components/ClaimStatusBadge.js +87 -0
  153. package/dist/modules/warranty_claims/backend/components/ClaimStatusBadge.js.map +7 -0
  154. package/dist/modules/warranty_claims/backend/components/ClaimsKpiStrip.js +120 -0
  155. package/dist/modules/warranty_claims/backend/components/ClaimsKpiStrip.js.map +7 -0
  156. package/dist/modules/warranty_claims/backend/components/EntitlementLookupBadge.js +135 -0
  157. package/dist/modules/warranty_claims/backend/components/EntitlementLookupBadge.js.map +7 -0
  158. package/dist/modules/warranty_claims/backend/components/ReceivingPanel.js +218 -0
  159. package/dist/modules/warranty_claims/backend/components/ReceivingPanel.js.map +7 -0
  160. package/dist/modules/warranty_claims/backend/components/ReturnLabelPanel.js +231 -0
  161. package/dist/modules/warranty_claims/backend/components/ReturnLabelPanel.js.map +7 -0
  162. package/dist/modules/warranty_claims/backend/components/TroubleshootingWalker.js +82 -0
  163. package/dist/modules/warranty_claims/backend/components/TroubleshootingWalker.js.map +7 -0
  164. package/dist/modules/warranty_claims/backend/components/VendorRecoverySuggestionsPanel.js +136 -0
  165. package/dist/modules/warranty_claims/backend/components/VendorRecoverySuggestionsPanel.js.map +7 -0
  166. package/dist/modules/warranty_claims/backend/components/WarrantyWorkspace.js +41 -0
  167. package/dist/modules/warranty_claims/backend/components/WarrantyWorkspace.js.map +7 -0
  168. package/dist/modules/warranty_claims/backend/components/claimReasonOptions.js +45 -0
  169. package/dist/modules/warranty_claims/backend/components/claimReasonOptions.js.map +7 -0
  170. package/dist/modules/warranty_claims/backend/components/claimSla.js +92 -0
  171. package/dist/modules/warranty_claims/backend/components/claimSla.js.map +7 -0
  172. package/dist/modules/warranty_claims/backend/components/orderLookup.js +81 -0
  173. package/dist/modules/warranty_claims/backend/components/orderLookup.js.map +7 -0
  174. package/dist/modules/warranty_claims/backend/components/productLookup.js +317 -0
  175. package/dist/modules/warranty_claims/backend/components/productLookup.js.map +7 -0
  176. package/dist/modules/warranty_claims/backend/components/useUserDisplayNames.js +61 -0
  177. package/dist/modules/warranty_claims/backend/components/useUserDisplayNames.js.map +7 -0
  178. package/dist/modules/warranty_claims/backend/page.js +1088 -0
  179. package/dist/modules/warranty_claims/backend/page.js.map +7 -0
  180. package/dist/modules/warranty_claims/backend/page.meta.js +16 -0
  181. package/dist/modules/warranty_claims/backend/page.meta.js.map +7 -0
  182. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.js +427 -0
  183. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.js.map +7 -0
  184. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.meta.js +16 -0
  185. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.meta.js.map +7 -0
  186. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.js +2101 -0
  187. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.js.map +7 -0
  188. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.meta.js +16 -0
  189. package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.meta.js.map +7 -0
  190. package/dist/modules/warranty_claims/backend/warranty_claims/create/page.js +1249 -0
  191. package/dist/modules/warranty_claims/backend/warranty_claims/create/page.js.map +7 -0
  192. package/dist/modules/warranty_claims/backend/warranty_claims/create/page.meta.js +16 -0
  193. package/dist/modules/warranty_claims/backend/warranty_claims/create/page.meta.js.map +7 -0
  194. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.js +110 -0
  195. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.js.map +7 -0
  196. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.meta.js +17 -0
  197. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.meta.js.map +7 -0
  198. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.js +49 -0
  199. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.js.map +7 -0
  200. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.meta.js +17 -0
  201. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.meta.js.map +7 -0
  202. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +485 -0
  203. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +7 -0
  204. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.meta.js +19 -0
  205. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.meta.js.map +7 -0
  206. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/registrationForm.js +253 -0
  207. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/registrationForm.js.map +7 -0
  208. package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.js +1565 -0
  209. package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.js.map +7 -0
  210. package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.meta.js +19 -0
  211. package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.meta.js.map +7 -0
  212. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/TroubleshootingTreeBuilder.js +472 -0
  213. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/TroubleshootingTreeBuilder.js.map +7 -0
  214. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.js +115 -0
  215. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.js.map +7 -0
  216. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.meta.js +19 -0
  217. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.meta.js.map +7 -0
  218. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.js +54 -0
  219. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.js.map +7 -0
  220. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.meta.js +19 -0
  221. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.meta.js.map +7 -0
  222. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +414 -0
  223. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +7 -0
  224. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.meta.js +21 -0
  225. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.meta.js.map +7 -0
  226. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/troubleshootingGuideForm.js +171 -0
  227. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/troubleshootingGuideForm.js.map +7 -0
  228. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.js +111 -0
  229. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.js.map +7 -0
  230. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.meta.js +19 -0
  231. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.meta.js.map +7 -0
  232. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.js +48 -0
  233. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.js.map +7 -0
  234. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.meta.js +19 -0
  235. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.meta.js.map +7 -0
  236. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +429 -0
  237. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +7 -0
  238. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.meta.js +21 -0
  239. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.meta.js.map +7 -0
  240. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/vendorPolicyForm.js +182 -0
  241. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/vendorPolicyForm.js.map +7 -0
  242. package/dist/modules/warranty_claims/ce.js +48 -0
  243. package/dist/modules/warranty_claims/ce.js.map +7 -0
  244. package/dist/modules/warranty_claims/commands/claim-lines.js +911 -0
  245. package/dist/modules/warranty_claims/commands/claim-lines.js.map +7 -0
  246. package/dist/modules/warranty_claims/commands/claims.js +2577 -0
  247. package/dist/modules/warranty_claims/commands/claims.js.map +7 -0
  248. package/dist/modules/warranty_claims/commands/index.js +4 -0
  249. package/dist/modules/warranty_claims/commands/index.js.map +7 -0
  250. package/dist/modules/warranty_claims/commands/settings.js +169 -0
  251. package/dist/modules/warranty_claims/commands/settings.js.map +7 -0
  252. package/dist/modules/warranty_claims/commands/shared.js +162 -0
  253. package/dist/modules/warranty_claims/commands/shared.js.map +7 -0
  254. package/dist/modules/warranty_claims/data/constants.js +35 -0
  255. package/dist/modules/warranty_claims/data/constants.js.map +7 -0
  256. package/dist/modules/warranty_claims/data/enrichers.js +97 -0
  257. package/dist/modules/warranty_claims/data/enrichers.js.map +7 -0
  258. package/dist/modules/warranty_claims/data/entities.js +731 -0
  259. package/dist/modules/warranty_claims/data/entities.js.map +7 -0
  260. package/dist/modules/warranty_claims/data/validators.js +488 -0
  261. package/dist/modules/warranty_claims/data/validators.js.map +7 -0
  262. package/dist/modules/warranty_claims/di.js +29 -0
  263. package/dist/modules/warranty_claims/di.js.map +7 -0
  264. package/dist/modules/warranty_claims/encryption.js +28 -0
  265. package/dist/modules/warranty_claims/encryption.js.map +7 -0
  266. package/dist/modules/warranty_claims/events.js +81 -0
  267. package/dist/modules/warranty_claims/events.js.map +7 -0
  268. package/dist/modules/warranty_claims/extension-points.js +19 -0
  269. package/dist/modules/warranty_claims/extension-points.js.map +7 -0
  270. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.js +825 -0
  271. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.js.map +7 -0
  272. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.meta.js +11 -0
  273. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.meta.js.map +7 -0
  274. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.js +1139 -0
  275. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.js.map +7 -0
  276. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.meta.js +11 -0
  277. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.meta.js.map +7 -0
  278. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +253 -0
  279. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +7 -0
  280. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.meta.js +18 -0
  281. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.meta.js.map +7 -0
  282. package/dist/modules/warranty_claims/index.js +15 -0
  283. package/dist/modules/warranty_claims/index.js.map +7 -0
  284. package/dist/modules/warranty_claims/lib/aiAssist.js +496 -0
  285. package/dist/modules/warranty_claims/lib/aiAssist.js.map +7 -0
  286. package/dist/modules/warranty_claims/lib/apiIdsFilter.js +11 -0
  287. package/dist/modules/warranty_claims/lib/apiIdsFilter.js.map +7 -0
  288. package/dist/modules/warranty_claims/lib/assigneeNames.js +153 -0
  289. package/dist/modules/warranty_claims/lib/assigneeNames.js.map +7 -0
  290. package/dist/modules/warranty_claims/lib/attachmentVisibility.js +9 -0
  291. package/dist/modules/warranty_claims/lib/attachmentVisibility.js.map +7 -0
  292. package/dist/modules/warranty_claims/lib/bulkFeedback.js +8 -0
  293. package/dist/modules/warranty_claims/lib/bulkFeedback.js.map +7 -0
  294. package/dist/modules/warranty_claims/lib/businessHours.js +250 -0
  295. package/dist/modules/warranty_claims/lib/businessHours.js.map +7 -0
  296. package/dist/modules/warranty_claims/lib/businessHoursForm.js +146 -0
  297. package/dist/modules/warranty_claims/lib/businessHoursForm.js.map +7 -0
  298. package/dist/modules/warranty_claims/lib/claimTypeConfig.js +39 -0
  299. package/dist/modules/warranty_claims/lib/claimTypeConfig.js.map +7 -0
  300. package/dist/modules/warranty_claims/lib/decryptionSafety.js +17 -0
  301. package/dist/modules/warranty_claims/lib/decryptionSafety.js.map +7 -0
  302. package/dist/modules/warranty_claims/lib/deskFilters.js +88 -0
  303. package/dist/modules/warranty_claims/lib/deskFilters.js.map +7 -0
  304. package/dist/modules/warranty_claims/lib/dictionaries.js +157 -0
  305. package/dist/modules/warranty_claims/lib/dictionaries.js.map +7 -0
  306. package/dist/modules/warranty_claims/lib/dictionaryLabels.js +12 -0
  307. package/dist/modules/warranty_claims/lib/dictionaryLabels.js.map +7 -0
  308. package/dist/modules/warranty_claims/lib/emailIntake.js +87 -0
  309. package/dist/modules/warranty_claims/lib/emailIntake.js.map +7 -0
  310. package/dist/modules/warranty_claims/lib/escalation.js +58 -0
  311. package/dist/modules/warranty_claims/lib/escalation.js.map +7 -0
  312. package/dist/modules/warranty_claims/lib/externalIntake.js +233 -0
  313. package/dist/modules/warranty_claims/lib/externalIntake.js.map +7 -0
  314. package/dist/modules/warranty_claims/lib/grading.js +21 -0
  315. package/dist/modules/warranty_claims/lib/grading.js.map +7 -0
  316. package/dist/modules/warranty_claims/lib/listSegments.js +18 -0
  317. package/dist/modules/warranty_claims/lib/listSegments.js.map +7 -0
  318. package/dist/modules/warranty_claims/lib/orderOwnership.js +25 -0
  319. package/dist/modules/warranty_claims/lib/orderOwnership.js.map +7 -0
  320. package/dist/modules/warranty_claims/lib/portalAttachmentUpload.js +11 -0
  321. package/dist/modules/warranty_claims/lib/portalAttachmentUpload.js.map +7 -0
  322. package/dist/modules/warranty_claims/lib/portalAttachmentValidation.js +108 -0
  323. package/dist/modules/warranty_claims/lib/portalAttachmentValidation.js.map +7 -0
  324. package/dist/modules/warranty_claims/lib/portalClaimAccess.js +26 -0
  325. package/dist/modules/warranty_claims/lib/portalClaimAccess.js.map +7 -0
  326. package/dist/modules/warranty_claims/lib/quantity.js +19 -0
  327. package/dist/modules/warranty_claims/lib/quantity.js.map +7 -0
  328. package/dist/modules/warranty_claims/lib/risk.js +204 -0
  329. package/dist/modules/warranty_claims/lib/risk.js.map +7 -0
  330. package/dist/modules/warranty_claims/lib/settings.js +55 -0
  331. package/dist/modules/warranty_claims/lib/settings.js.map +7 -0
  332. package/dist/modules/warranty_claims/lib/stateMachine.js +88 -0
  333. package/dist/modules/warranty_claims/lib/stateMachine.js.map +7 -0
  334. package/dist/modules/warranty_claims/lib/timelineFilters.js +16 -0
  335. package/dist/modules/warranty_claims/lib/timelineFilters.js.map +7 -0
  336. package/dist/modules/warranty_claims/lib/triage.js +241 -0
  337. package/dist/modules/warranty_claims/lib/triage.js.map +7 -0
  338. package/dist/modules/warranty_claims/lib/troubleshooting.js +111 -0
  339. package/dist/modules/warranty_claims/lib/troubleshooting.js.map +7 -0
  340. package/dist/modules/warranty_claims/lib/tryResolve.js +11 -0
  341. package/dist/modules/warranty_claims/lib/tryResolve.js.map +7 -0
  342. package/dist/modules/warranty_claims/lib/vendorPolicyRecovery.js +101 -0
  343. package/dist/modules/warranty_claims/lib/vendorPolicyRecovery.js.map +7 -0
  344. package/dist/modules/warranty_claims/lib/warrantyPreview.js +18 -0
  345. package/dist/modules/warranty_claims/lib/warrantyPreview.js.map +7 -0
  346. package/dist/modules/warranty_claims/migrations/Migration20260703191537_warranty_claims.js +32 -0
  347. package/dist/modules/warranty_claims/migrations/Migration20260703191537_warranty_claims.js.map +7 -0
  348. package/dist/modules/warranty_claims/migrations/Migration20260704115605_warranty_claims.js +16 -0
  349. package/dist/modules/warranty_claims/migrations/Migration20260704115605_warranty_claims.js.map +7 -0
  350. package/dist/modules/warranty_claims/migrations/Migration20260704230000_warranty_claims.js +17 -0
  351. package/dist/modules/warranty_claims/migrations/Migration20260704230000_warranty_claims.js.map +7 -0
  352. package/dist/modules/warranty_claims/migrations/Migration20260705121601_warranty_claims.js +29 -0
  353. package/dist/modules/warranty_claims/migrations/Migration20260705121601_warranty_claims.js.map +7 -0
  354. package/dist/modules/warranty_claims/migrations/Migration20260709120000_warranty_claims.js +25 -0
  355. package/dist/modules/warranty_claims/migrations/Migration20260709120000_warranty_claims.js.map +7 -0
  356. package/dist/modules/warranty_claims/migrations/Migration20260710023607_warranty_claims.js +13 -0
  357. package/dist/modules/warranty_claims/migrations/Migration20260710023607_warranty_claims.js.map +7 -0
  358. package/dist/modules/warranty_claims/migrations/Migration20260716203936_warranty_claims.js +15 -0
  359. package/dist/modules/warranty_claims/migrations/Migration20260716203936_warranty_claims.js.map +7 -0
  360. package/dist/modules/warranty_claims/migrations/Migration20260717150000_warranty_claims.js +13 -0
  361. package/dist/modules/warranty_claims/migrations/Migration20260717150000_warranty_claims.js.map +7 -0
  362. package/dist/modules/warranty_claims/migrations/Migration20260719120000_warranty_claims.js +13 -0
  363. package/dist/modules/warranty_claims/migrations/Migration20260719120000_warranty_claims.js.map +7 -0
  364. package/dist/modules/warranty_claims/migrations/Migration20260813103053_warranty_claims.js +12 -0
  365. package/dist/modules/warranty_claims/migrations/Migration20260813103053_warranty_claims.js.map +7 -0
  366. package/dist/modules/warranty_claims/notifications.client.js +67 -0
  367. package/dist/modules/warranty_claims/notifications.client.js.map +7 -0
  368. package/dist/modules/warranty_claims/notifications.js +103 -0
  369. package/dist/modules/warranty_claims/notifications.js.map +7 -0
  370. package/dist/modules/warranty_claims/search.js +174 -0
  371. package/dist/modules/warranty_claims/search.js.map +7 -0
  372. package/dist/modules/warranty_claims/services/adjudicationEvaluator.js +202 -0
  373. package/dist/modules/warranty_claims/services/adjudicationEvaluator.js.map +7 -0
  374. package/dist/modules/warranty_claims/services/claimNumberGenerator.js +58 -0
  375. package/dist/modules/warranty_claims/services/claimNumberGenerator.js.map +7 -0
  376. package/dist/modules/warranty_claims/services/entitlementResolver.js +69 -0
  377. package/dist/modules/warranty_claims/services/entitlementResolver.js.map +7 -0
  378. package/dist/modules/warranty_claims/services/returnLabelProvider.js +14 -0
  379. package/dist/modules/warranty_claims/services/returnLabelProvider.js.map +7 -0
  380. package/dist/modules/warranty_claims/setup.js +121 -0
  381. package/dist/modules/warranty_claims/setup.js.map +7 -0
  382. package/dist/modules/warranty_claims/subscribers/auto-vendor-recovery.js +119 -0
  383. package/dist/modules/warranty_claims/subscribers/auto-vendor-recovery.js.map +7 -0
  384. package/dist/modules/warranty_claims/subscribers/claim-assigned-notification.js +47 -0
  385. package/dist/modules/warranty_claims/subscribers/claim-assigned-notification.js.map +7 -0
  386. package/dist/modules/warranty_claims/subscribers/claim-customer-reply-notification.js +60 -0
  387. package/dist/modules/warranty_claims/subscribers/claim-customer-reply-notification.js.map +7 -0
  388. package/dist/modules/warranty_claims/subscribers/claim-status-notification.js +83 -0
  389. package/dist/modules/warranty_claims/subscribers/claim-status-notification.js.map +7 -0
  390. package/dist/modules/warranty_claims/subscribers/claim-submitted-notification.js +46 -0
  391. package/dist/modules/warranty_claims/subscribers/claim-submitted-notification.js.map +7 -0
  392. package/dist/modules/warranty_claims/subscribers/email-to-claim.js +135 -0
  393. package/dist/modules/warranty_claims/subscribers/email-to-claim.js.map +7 -0
  394. package/dist/modules/warranty_claims/subscribers/return-shipment-tracking.js +164 -0
  395. package/dist/modules/warranty_claims/subscribers/return-shipment-tracking.js.map +7 -0
  396. package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation-undo.js +24 -0
  397. package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation-undo.js.map +7 -0
  398. package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation.js +26 -0
  399. package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation.js.map +7 -0
  400. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/config.js +15 -0
  401. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/config.js.map +7 -0
  402. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.client.js +197 -0
  403. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.client.js.map +7 -0
  404. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.js +28 -0
  405. package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.js.map +7 -0
  406. package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.client.js +418 -0
  407. package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.client.js.map +7 -0
  408. package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.js +18 -0
  409. package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.js.map +7 -0
  410. package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab/widget.js +17 -0
  411. package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab/widget.js.map +7 -0
  412. package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab.js +146 -0
  413. package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab.js.map +7 -0
  414. package/dist/modules/warranty_claims/widgets/injection/order-claims-tab/widget.js +17 -0
  415. package/dist/modules/warranty_claims/widgets/injection/order-claims-tab/widget.js.map +7 -0
  416. package/dist/modules/warranty_claims/widgets/injection/order-claims-tab.js +147 -0
  417. package/dist/modules/warranty_claims/widgets/injection/order-claims-tab.js.map +7 -0
  418. package/dist/modules/warranty_claims/widgets/injection-table.js +38 -0
  419. package/dist/modules/warranty_claims/widgets/injection-table.js.map +7 -0
  420. package/dist/modules/warranty_claims/widgets/notifications/WarrantyClaimNotificationRenderer.js +223 -0
  421. package/dist/modules/warranty_claims/widgets/notifications/WarrantyClaimNotificationRenderer.js.map +7 -0
  422. package/dist/modules/warranty_claims/widgets/notifications/index.js +5 -0
  423. package/dist/modules/warranty_claims/widgets/notifications/index.js.map +7 -0
  424. package/dist/modules/warranty_claims/workers/sla-escalation-sweep.js +334 -0
  425. package/dist/modules/warranty_claims/workers/sla-escalation-sweep.js.map +7 -0
  426. package/generated/entities/warranty_claim/index.ts +51 -0
  427. package/generated/entities/warranty_claim_event/index.ts +11 -0
  428. package/generated/entities/warranty_claim_line/index.ts +37 -0
  429. package/generated/entities/warranty_claim_registration/index.ts +20 -0
  430. package/generated/entities/warranty_claim_sequence/index.ts +7 -0
  431. package/generated/entities/warranty_claim_settings/index.ts +20 -0
  432. package/generated/entities/warranty_claim_sla_signal/index.ts +11 -0
  433. package/generated/entities/warranty_troubleshooting_guide/index.ts +11 -0
  434. package/generated/entities/warranty_vendor_policy/index.ts +14 -0
  435. package/generated/entities.ids.generated.ts +12 -0
  436. package/generated/entity-fields-registry.ts +200 -0
  437. package/package.json +7 -7
  438. package/src/helpers/integration/api.ts +10 -3
  439. package/src/helpers/integration/salesFixtures.ts +17 -7
  440. package/src/modules/attachments/di.ts +30 -1
  441. package/src/modules/attachments/fields/attachment.tsx +215 -23
  442. package/src/modules/attachments/i18n/de.json +5 -0
  443. package/src/modules/attachments/i18n/en.json +5 -0
  444. package/src/modules/attachments/i18n/es.json +5 -0
  445. package/src/modules/attachments/i18n/ko.json +5 -0
  446. package/src/modules/attachments/i18n/pl.json +5 -0
  447. package/src/modules/attachments/lib/scoped-upload-service.ts +257 -0
  448. package/src/modules/attachments/lib/target-access-service.ts +57 -0
  449. package/src/modules/auth/api/logout.ts +46 -10
  450. package/src/modules/auth/api/reset/confirm.ts +7 -0
  451. package/src/modules/auth/api/reset.ts +7 -0
  452. package/src/modules/auth/commands/users.ts +22 -0
  453. package/src/modules/auth/events.ts +15 -0
  454. package/src/modules/customers/api/companies/route.ts +1 -0
  455. package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +4 -2
  456. package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +4 -2
  457. package/src/modules/customers/components/detail/assignableStaff.ts +14 -177
  458. package/src/modules/customers/lib/assignableStaff.ts +177 -0
  459. package/src/modules/data_sync/AGENTS.md +3 -0
  460. package/src/modules/data_sync/lib/batch-stream.ts +117 -0
  461. package/src/modules/data_sync/lib/sync-engine.ts +190 -115
  462. package/src/modules/inbox_ops/api/emails/[id]/reprocess/route.ts +4 -0
  463. package/src/modules/inbox_ops/api/extract/route.ts +4 -0
  464. package/src/modules/inbox_ops/api/webhook/inbound.ts +4 -0
  465. package/src/modules/sales/commands/documents.ts +16 -8
  466. package/src/modules/warranty_claims/AGENTS.md +49 -0
  467. package/src/modules/warranty_claims/acl.ts +71 -0
  468. package/src/modules/warranty_claims/ai-agents.ts +189 -0
  469. package/src/modules/warranty_claims/ai-tools.ts +711 -0
  470. package/src/modules/warranty_claims/api/ai/assess/route.ts +371 -0
  471. package/src/modules/warranty_claims/api/ai/draft-reply/route.ts +149 -0
  472. package/src/modules/warranty_claims/api/ai/suggest/route.ts +190 -0
  473. package/src/modules/warranty_claims/api/assign/route.ts +142 -0
  474. package/src/modules/warranty_claims/api/assignees/route.ts +102 -0
  475. package/src/modules/warranty_claims/api/credit-memo/route.ts +191 -0
  476. package/src/modules/warranty_claims/api/entitlement/route.ts +224 -0
  477. package/src/modules/warranty_claims/api/events/route.ts +226 -0
  478. package/src/modules/warranty_claims/api/external/claims/route.ts +528 -0
  479. package/src/modules/warranty_claims/api/lines/route.ts +275 -0
  480. package/src/modules/warranty_claims/api/openapi.ts +28 -0
  481. package/src/modules/warranty_claims/api/portal/attachments/route.ts +547 -0
  482. package/src/modules/warranty_claims/api/portal/claims/[id]/route.ts +195 -0
  483. package/src/modules/warranty_claims/api/portal/claims/[id]/shared.ts +125 -0
  484. package/src/modules/warranty_claims/api/portal/claims/[id]/submit/route.ts +82 -0
  485. package/src/modules/warranty_claims/api/portal/claims/[id]/withdraw/route.ts +87 -0
  486. package/src/modules/warranty_claims/api/portal/claims/route.ts +579 -0
  487. package/src/modules/warranty_claims/api/portal/events/route.ts +260 -0
  488. package/src/modules/warranty_claims/api/portal/options/route.ts +113 -0
  489. package/src/modules/warranty_claims/api/portal/orders/lines/route.ts +258 -0
  490. package/src/modules/warranty_claims/api/portal/orders/route.ts +206 -0
  491. package/src/modules/warranty_claims/api/portal/troubleshooting/route.ts +151 -0
  492. package/src/modules/warranty_claims/api/receiving/route.ts +215 -0
  493. package/src/modules/warranty_claims/api/registrations/route.ts +417 -0
  494. package/src/modules/warranty_claims/api/replacement-order/route.ts +188 -0
  495. package/src/modules/warranty_claims/api/return-label/route.ts +291 -0
  496. package/src/modules/warranty_claims/api/risk/route.ts +112 -0
  497. package/src/modules/warranty_claims/api/route.ts +543 -0
  498. package/src/modules/warranty_claims/api/sales-return/route.ts +183 -0
  499. package/src/modules/warranty_claims/api/settings-general/route.ts +230 -0
  500. package/src/modules/warranty_claims/api/stats/route.ts +306 -0
  501. package/src/modules/warranty_claims/api/submit/route.ts +146 -0
  502. package/src/modules/warranty_claims/api/transition/route.ts +144 -0
  503. package/src/modules/warranty_claims/api/troubleshooting-guides/route.ts +295 -0
  504. package/src/modules/warranty_claims/api/vendor-policies/route.ts +351 -0
  505. package/src/modules/warranty_claims/api/vendor-recovery/route.ts +148 -0
  506. package/src/modules/warranty_claims/api/vendor-recovery-suggestions/route.ts +167 -0
  507. package/src/modules/warranty_claims/backend/components/AiAssessButtons.tsx +389 -0
  508. package/src/modules/warranty_claims/backend/components/ClaimStageProgress.tsx +65 -0
  509. package/src/modules/warranty_claims/backend/components/ClaimStatusBadge.tsx +137 -0
  510. package/src/modules/warranty_claims/backend/components/ClaimsKpiStrip.tsx +169 -0
  511. package/src/modules/warranty_claims/backend/components/EntitlementLookupBadge.tsx +203 -0
  512. package/src/modules/warranty_claims/backend/components/ReceivingPanel.tsx +300 -0
  513. package/src/modules/warranty_claims/backend/components/ReturnLabelPanel.tsx +292 -0
  514. package/src/modules/warranty_claims/backend/components/TroubleshootingWalker.tsx +125 -0
  515. package/src/modules/warranty_claims/backend/components/VendorRecoverySuggestionsPanel.tsx +217 -0
  516. package/src/modules/warranty_claims/backend/components/WarrantyWorkspace.tsx +66 -0
  517. package/src/modules/warranty_claims/backend/components/claimReasonOptions.ts +57 -0
  518. package/src/modules/warranty_claims/backend/components/claimSla.tsx +127 -0
  519. package/src/modules/warranty_claims/backend/components/orderLookup.ts +109 -0
  520. package/src/modules/warranty_claims/backend/components/productLookup.tsx +433 -0
  521. package/src/modules/warranty_claims/backend/components/useUserDisplayNames.ts +66 -0
  522. package/src/modules/warranty_claims/backend/page.meta.ts +12 -0
  523. package/src/modules/warranty_claims/backend/page.tsx +1302 -0
  524. package/src/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.meta.ts +12 -0
  525. package/src/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.tsx +531 -0
  526. package/src/modules/warranty_claims/backend/warranty_claims/[id]/page.meta.ts +12 -0
  527. package/src/modules/warranty_claims/backend/warranty_claims/[id]/page.tsx +2599 -0
  528. package/src/modules/warranty_claims/backend/warranty_claims/create/page.meta.ts +12 -0
  529. package/src/modules/warranty_claims/backend/warranty_claims/create/page.tsx +1533 -0
  530. package/src/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.meta.ts +13 -0
  531. package/src/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.tsx +136 -0
  532. package/src/modules/warranty_claims/backend/warranty_claims/registrations/create/page.meta.ts +13 -0
  533. package/src/modules/warranty_claims/backend/warranty_claims/registrations/create/page.tsx +52 -0
  534. package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.meta.ts +15 -0
  535. package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +555 -0
  536. package/src/modules/warranty_claims/backend/warranty_claims/registrations/registrationForm.tsx +295 -0
  537. package/src/modules/warranty_claims/backend/warranty_claims/settings/page.meta.ts +15 -0
  538. package/src/modules/warranty_claims/backend/warranty_claims/settings/page.tsx +1903 -0
  539. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/TroubleshootingTreeBuilder.tsx +550 -0
  540. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.meta.ts +15 -0
  541. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.tsx +141 -0
  542. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.meta.ts +15 -0
  543. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.tsx +57 -0
  544. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.meta.ts +17 -0
  545. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +477 -0
  546. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/troubleshootingGuideForm.tsx +214 -0
  547. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.meta.ts +15 -0
  548. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.tsx +137 -0
  549. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.meta.ts +15 -0
  550. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.tsx +51 -0
  551. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.meta.ts +17 -0
  552. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +506 -0
  553. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/vendorPolicyForm.tsx +220 -0
  554. package/src/modules/warranty_claims/ce.ts +44 -0
  555. package/src/modules/warranty_claims/commands/claim-lines.ts +1082 -0
  556. package/src/modules/warranty_claims/commands/claims.ts +3364 -0
  557. package/src/modules/warranty_claims/commands/index.ts +3 -0
  558. package/src/modules/warranty_claims/commands/settings.ts +198 -0
  559. package/src/modules/warranty_claims/commands/shared.ts +212 -0
  560. package/src/modules/warranty_claims/data/constants.ts +37 -0
  561. package/src/modules/warranty_claims/data/enrichers.ts +165 -0
  562. package/src/modules/warranty_claims/data/entities.ts +663 -0
  563. package/src/modules/warranty_claims/data/validators.ts +634 -0
  564. package/src/modules/warranty_claims/di.ts +34 -0
  565. package/src/modules/warranty_claims/encryption.ts +26 -0
  566. package/src/modules/warranty_claims/events.ts +81 -0
  567. package/src/modules/warranty_claims/extension-points.ts +16 -0
  568. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.meta.ts +9 -0
  569. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.tsx +1037 -0
  570. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.meta.ts +9 -0
  571. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.tsx +1409 -0
  572. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.meta.ts +16 -0
  573. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +304 -0
  574. package/src/modules/warranty_claims/i18n/de.json +1270 -0
  575. package/src/modules/warranty_claims/i18n/en.json +1270 -0
  576. package/src/modules/warranty_claims/i18n/es.json +1270 -0
  577. package/src/modules/warranty_claims/i18n/ko.json +1270 -0
  578. package/src/modules/warranty_claims/i18n/pl.json +1270 -0
  579. package/src/modules/warranty_claims/index.ts +13 -0
  580. package/src/modules/warranty_claims/lib/aiAssist.ts +677 -0
  581. package/src/modules/warranty_claims/lib/apiIdsFilter.ts +12 -0
  582. package/src/modules/warranty_claims/lib/assigneeNames.ts +184 -0
  583. package/src/modules/warranty_claims/lib/attachmentVisibility.ts +5 -0
  584. package/src/modules/warranty_claims/lib/bulkFeedback.ts +6 -0
  585. package/src/modules/warranty_claims/lib/businessHours.ts +333 -0
  586. package/src/modules/warranty_claims/lib/businessHoursForm.ts +206 -0
  587. package/src/modules/warranty_claims/lib/claimTypeConfig.ts +49 -0
  588. package/src/modules/warranty_claims/lib/decryptionSafety.ts +19 -0
  589. package/src/modules/warranty_claims/lib/deskFilters.ts +131 -0
  590. package/src/modules/warranty_claims/lib/dictionaries.ts +212 -0
  591. package/src/modules/warranty_claims/lib/dictionaryLabels.ts +16 -0
  592. package/src/modules/warranty_claims/lib/emailIntake.ts +123 -0
  593. package/src/modules/warranty_claims/lib/escalation.ts +83 -0
  594. package/src/modules/warranty_claims/lib/externalIntake.ts +362 -0
  595. package/src/modules/warranty_claims/lib/grading.ts +23 -0
  596. package/src/modules/warranty_claims/lib/listSegments.ts +19 -0
  597. package/src/modules/warranty_claims/lib/orderOwnership.ts +58 -0
  598. package/src/modules/warranty_claims/lib/portalAttachmentUpload.ts +11 -0
  599. package/src/modules/warranty_claims/lib/portalAttachmentValidation.ts +115 -0
  600. package/src/modules/warranty_claims/lib/portalClaimAccess.ts +37 -0
  601. package/src/modules/warranty_claims/lib/quantity.ts +15 -0
  602. package/src/modules/warranty_claims/lib/risk.ts +371 -0
  603. package/src/modules/warranty_claims/lib/settings.ts +76 -0
  604. package/src/modules/warranty_claims/lib/stateMachine.ts +130 -0
  605. package/src/modules/warranty_claims/lib/timelineFilters.ts +22 -0
  606. package/src/modules/warranty_claims/lib/triage.ts +366 -0
  607. package/src/modules/warranty_claims/lib/troubleshooting.ts +157 -0
  608. package/src/modules/warranty_claims/lib/tryResolve.ts +7 -0
  609. package/src/modules/warranty_claims/lib/vendorPolicyRecovery.ts +182 -0
  610. package/src/modules/warranty_claims/lib/warrantyPreview.ts +20 -0
  611. package/src/modules/warranty_claims/migrations/.snapshot-open-mercato.json +3525 -0
  612. package/src/modules/warranty_claims/migrations/Migration20260703191537_warranty_claims.ts +38 -0
  613. package/src/modules/warranty_claims/migrations/Migration20260704115605_warranty_claims.ts +17 -0
  614. package/src/modules/warranty_claims/migrations/Migration20260704230000_warranty_claims.ts +17 -0
  615. package/src/modules/warranty_claims/migrations/Migration20260705121601_warranty_claims.ts +37 -0
  616. package/src/modules/warranty_claims/migrations/Migration20260709120000_warranty_claims.ts +25 -0
  617. package/src/modules/warranty_claims/migrations/Migration20260710023607_warranty_claims.ts +13 -0
  618. package/src/modules/warranty_claims/migrations/Migration20260716203936_warranty_claims.ts +15 -0
  619. package/src/modules/warranty_claims/migrations/Migration20260717150000_warranty_claims.ts +13 -0
  620. package/src/modules/warranty_claims/migrations/Migration20260719120000_warranty_claims.ts +13 -0
  621. package/src/modules/warranty_claims/migrations/Migration20260813103053_warranty_claims.ts +11 -0
  622. package/src/modules/warranty_claims/notifications.client.ts +78 -0
  623. package/src/modules/warranty_claims/notifications.ts +101 -0
  624. package/src/modules/warranty_claims/search.ts +199 -0
  625. package/src/modules/warranty_claims/services/adjudicationEvaluator.ts +344 -0
  626. package/src/modules/warranty_claims/services/claimNumberGenerator.ts +69 -0
  627. package/src/modules/warranty_claims/services/entitlementResolver.ts +102 -0
  628. package/src/modules/warranty_claims/services/returnLabelProvider.ts +30 -0
  629. package/src/modules/warranty_claims/setup.ts +154 -0
  630. package/src/modules/warranty_claims/subscribers/auto-vendor-recovery.ts +140 -0
  631. package/src/modules/warranty_claims/subscribers/claim-assigned-notification.ts +54 -0
  632. package/src/modules/warranty_claims/subscribers/claim-customer-reply-notification.ts +68 -0
  633. package/src/modules/warranty_claims/subscribers/claim-status-notification.ts +100 -0
  634. package/src/modules/warranty_claims/subscribers/claim-submitted-notification.ts +53 -0
  635. package/src/modules/warranty_claims/subscribers/email-to-claim.ts +175 -0
  636. package/src/modules/warranty_claims/subscribers/return-shipment-tracking.ts +226 -0
  637. package/src/modules/warranty_claims/subscribers/vendor-recovery-reconciliation-undo.ts +28 -0
  638. package/src/modules/warranty_claims/subscribers/vendor-recovery-reconciliation.ts +31 -0
  639. package/src/modules/warranty_claims/widgets/dashboard/claims-queue/config.ts +15 -0
  640. package/src/modules/warranty_claims/widgets/dashboard/claims-queue/widget.client.tsx +237 -0
  641. package/src/modules/warranty_claims/widgets/dashboard/claims-queue/widget.ts +27 -0
  642. package/src/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.client.tsx +527 -0
  643. package/src/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.ts +37 -0
  644. package/src/modules/warranty_claims/widgets/injection/customer-claims-tab/widget.ts +21 -0
  645. package/src/modules/warranty_claims/widgets/injection/customer-claims-tab.tsx +210 -0
  646. package/src/modules/warranty_claims/widgets/injection/order-claims-tab/widget.ts +21 -0
  647. package/src/modules/warranty_claims/widgets/injection/order-claims-tab.tsx +210 -0
  648. package/src/modules/warranty_claims/widgets/injection-table.ts +36 -0
  649. package/src/modules/warranty_claims/widgets/notifications/WarrantyClaimNotificationRenderer.tsx +253 -0
  650. package/src/modules/warranty_claims/widgets/notifications/index.ts +1 -0
  651. package/src/modules/warranty_claims/workers/sla-escalation-sweep.ts +450 -0
@@ -0,0 +1,496 @@
1
+ import { generateObject, generateText } from "ai";
2
+ import { z } from "zod";
3
+ import {
4
+ AiModelFactoryError,
5
+ createModelFactory
6
+ } from "@open-mercato/ai-assistant/modules/ai_assistant/lib/model-factory";
7
+ import {
8
+ attachmentPartsToUiFileParts,
9
+ resolveAttachmentParts
10
+ } from "@open-mercato/ai-assistant/modules/ai_assistant/lib/attachment-parts";
11
+ import { CrudHttpError } from "@open-mercato/shared/lib/crud/errors";
12
+ import { findOneWithDecryption, findWithDecryption } from "@open-mercato/shared/lib/encryption/find";
13
+ import { WarrantyClaim, WarrantyClaimEvent, WarrantyClaimLine } from "../data/entities.js";
14
+ const MODULE_ID = "warranty_claims";
15
+ const AI_TIMEOUT_MS = 3e4;
16
+ class WarrantyAiNotConfiguredError extends Error {
17
+ constructor() {
18
+ super("LLM not configured");
19
+ this.name = "WarrantyAiNotConfiguredError";
20
+ }
21
+ }
22
+ class WarrantyAiUnavailableError extends Error {
23
+ constructor(message) {
24
+ super(message);
25
+ this.name = "WarrantyAiUnavailableError";
26
+ }
27
+ }
28
+ function isWarrantyAiUnavailableError(err) {
29
+ if (err instanceof WarrantyAiUnavailableError) return true;
30
+ if (typeof err !== "object" || err === null) return false;
31
+ return err.name === "WarrantyAiUnavailableError";
32
+ }
33
+ function toIso(value) {
34
+ if (!value) return null;
35
+ const date = value instanceof Date ? value : new Date(value);
36
+ return Number.isNaN(date.getTime()) ? null : date.toISOString();
37
+ }
38
+ function nullableString(value) {
39
+ if (value === null || value === void 0) return null;
40
+ const text = String(value).trim();
41
+ return text.length > 0 ? text : null;
42
+ }
43
+ function sortTimeline(events) {
44
+ return events.slice().sort((a, b) => {
45
+ const aTime = a.createdAt ? new Date(a.createdAt).getTime() : Number.POSITIVE_INFINITY;
46
+ const bTime = b.createdAt ? new Date(b.createdAt).getTime() : Number.POSITIVE_INFINITY;
47
+ return aTime - bTime;
48
+ });
49
+ }
50
+ function serializeLine(line) {
51
+ return {
52
+ productName: nullableString(line.productName),
53
+ sku: nullableString(line.sku),
54
+ serialNumber: nullableString(line.serialNumber),
55
+ lineStatus: line.lineStatus,
56
+ disposition: line.disposition ?? null,
57
+ qtyClaimed: nullableString(line.qtyClaimed),
58
+ qtyApproved: nullableString(line.qtyApproved),
59
+ warrantyStatus: line.warrantyStatus
60
+ };
61
+ }
62
+ function serializeTimelineEvent(event) {
63
+ return {
64
+ kind: event.kind,
65
+ visibility: event.visibility,
66
+ body: nullableString(event.body),
67
+ createdAt: toIso(event.createdAt)
68
+ };
69
+ }
70
+ function buildClaimPromptFacts(input) {
71
+ return {
72
+ claimNumber: input.claim.claimNumber,
73
+ status: input.claim.status,
74
+ claimType: input.claim.claimType,
75
+ priority: input.claim.priority,
76
+ reasonCode: nullableString(input.claim.reasonCode),
77
+ rejectionReasonCode: nullableString(input.claim.rejectionReasonCode),
78
+ customerName: nullableString(input.claim.customerName),
79
+ contactName: null,
80
+ resolutionSummary: nullableString(input.claim.resolutionSummary),
81
+ totals: {
82
+ currencyCode: nullableString(input.claim.currencyCode),
83
+ claimedAmount: nullableString(input.claim.totalClaimedAmount),
84
+ approvedAmount: nullableString(input.claim.totalApprovedAmount),
85
+ recoveredAmount: nullableString(input.claim.totalRecoveredAmount)
86
+ },
87
+ lines: input.lines.map(serializeLine),
88
+ timeline: sortTimeline(input.timelineEvents.map(serializeTimelineEvent)),
89
+ tone: input.tone
90
+ };
91
+ }
92
+ function toneInstruction(tone) {
93
+ switch (tone) {
94
+ case "friendly":
95
+ return "Use a friendly, reassuring tone.";
96
+ case "concise":
97
+ return "Use a concise, direct tone.";
98
+ case "formal":
99
+ default:
100
+ return "Use a formal, professional tone.";
101
+ }
102
+ }
103
+ function promptJson(value) {
104
+ return JSON.stringify(value, null, 2);
105
+ }
106
+ const damagePhotoAssessmentSchema = z.object({
107
+ damageType: z.string().trim().min(1).max(200),
108
+ severity: z.enum(["minor", "moderate", "severe", "unknown"]),
109
+ probableCause: z.string().trim().min(1).max(1e3),
110
+ misuseSuspected: z.boolean(),
111
+ confidence: z.number().min(0).max(1),
112
+ summary: z.string().trim().min(1).max(1500)
113
+ }).strict();
114
+ const proofOfPurchaseExtractionSchema = z.object({
115
+ purchaseDate: z.string().trim().min(1).max(40).nullable(),
116
+ serialNumber: z.string().trim().min(1).max(191).nullable(),
117
+ amount: z.string().trim().min(1).max(80).nullable(),
118
+ currency: z.string().trim().min(1).max(12).nullable(),
119
+ merchant: z.string().trim().min(1).max(300).nullable(),
120
+ confidence: z.number().min(0).max(1)
121
+ }).strict();
122
+ function terminalStatus(status) {
123
+ return status === "resolved" || status === "closed" || status === "rejected" || status === "cancelled";
124
+ }
125
+ function assembleClaimReplyPrompt(claim) {
126
+ const customerTimeline = claim.timeline.filter((entry) => entry.visibility === "customer");
127
+ const latestCustomerMessage = customerTimeline.slice().reverse().find((entry) => entry.body);
128
+ return {
129
+ system: [
130
+ "You are a warranty-desk assistant writing on behalf of the merchant.",
131
+ "Match the language of the customer's latest message when present.",
132
+ "Be factual, cite the claim number, and never invent commitments, refund amounts, replacement dates, shipping dates, or deadlines not present in the facts.",
133
+ "Keep the reply to about 150 words. Do not use markdown headers.",
134
+ toneInstruction(claim.tone)
135
+ ].join(" "),
136
+ prompt: [
137
+ `Draft a customer-facing reply for warranty claim ${claim.claimNumber}.`,
138
+ latestCustomerMessage?.body ? `Customer's latest visible message: ${latestCustomerMessage.body}` : "No customer message body is available; use the claim facts only.",
139
+ "Use only these customer-visible facts:",
140
+ promptJson({
141
+ claimNumber: claim.claimNumber,
142
+ status: claim.status,
143
+ claimType: claim.claimType,
144
+ priority: claim.priority,
145
+ reasonCode: claim.reasonCode,
146
+ rejectionReasonCode: claim.rejectionReasonCode,
147
+ customerName: claim.customerName,
148
+ contactName: claim.contactName,
149
+ resolutionSummary: claim.resolutionSummary,
150
+ totals: claim.totals,
151
+ lines: claim.lines,
152
+ timeline: customerTimeline
153
+ })
154
+ ].join("\n\n")
155
+ };
156
+ }
157
+ function assembleClaimSummaryPrompt(claim) {
158
+ return {
159
+ system: [
160
+ "You summarize warranty and RMA claims for an internal operator.",
161
+ "Write plain text in 120 words or fewer.",
162
+ "Include customer-visible and internal timeline facts when they are provided.",
163
+ "Be factual, cite the claim number, and do not invent amounts, dates, or commitments.",
164
+ 'When unresolved items exist, end with "Open questions:" followed by a bullet list.'
165
+ ].join(" "),
166
+ prompt: [
167
+ `Summarize warranty claim ${claim.claimNumber}.`,
168
+ terminalStatus(claim.status) ? "The claim is in a terminal status; include open questions only if the facts still show unresolved items." : "The claim is not terminal; identify unresolved items and end with Open questions.",
169
+ "Use these facts:",
170
+ promptJson({
171
+ claimNumber: claim.claimNumber,
172
+ status: claim.status,
173
+ claimType: claim.claimType,
174
+ priority: claim.priority,
175
+ reasonCode: claim.reasonCode,
176
+ rejectionReasonCode: claim.rejectionReasonCode,
177
+ customerName: claim.customerName,
178
+ contactName: claim.contactName,
179
+ resolutionSummary: claim.resolutionSummary,
180
+ totals: claim.totals,
181
+ lines: claim.lines,
182
+ timeline: claim.timeline
183
+ })
184
+ ].join("\n\n")
185
+ };
186
+ }
187
+ async function withTimeout(operation, timeoutMs, timeoutMessage) {
188
+ let timeoutHandle;
189
+ const timeoutPromise = new Promise((_, reject) => {
190
+ timeoutHandle = setTimeout(() => reject(new Error(timeoutMessage)), timeoutMs);
191
+ });
192
+ try {
193
+ return await Promise.race([operation, timeoutPromise]);
194
+ } finally {
195
+ if (timeoutHandle) {
196
+ clearTimeout(timeoutHandle);
197
+ }
198
+ }
199
+ }
200
+ function isAiModelFactoryError(err) {
201
+ if (err instanceof AiModelFactoryError) return true;
202
+ if (typeof err !== "object" || err === null) return false;
203
+ return err.name === "AiModelFactoryError";
204
+ }
205
+ function isWarrantyAiNotConfiguredError(err) {
206
+ if (err instanceof WarrantyAiNotConfiguredError) return true;
207
+ if (typeof err !== "object" || err === null) return false;
208
+ return err.name === "WarrantyAiNotConfiguredError";
209
+ }
210
+ function resolveWarrantyModel(container) {
211
+ let factory;
212
+ try {
213
+ factory = createModelFactory(container);
214
+ } catch {
215
+ throw new WarrantyAiNotConfiguredError();
216
+ }
217
+ try {
218
+ const resolution = factory.resolveModel({ moduleId: MODULE_ID });
219
+ return resolution.model;
220
+ } catch (err) {
221
+ if (isAiModelFactoryError(err)) {
222
+ throw new WarrantyAiNotConfiguredError();
223
+ }
224
+ throw err;
225
+ }
226
+ }
227
+ function resolveWarrantyObjectModel(container) {
228
+ return resolveWarrantyModel(container);
229
+ }
230
+ async function buildAttachmentMessages(input) {
231
+ const parts = await resolveAttachmentParts({
232
+ attachmentIds: [input.attachmentId],
233
+ authContext: input.authContext,
234
+ acceptedMediaTypes: input.acceptedMediaTypes,
235
+ container: input.container
236
+ });
237
+ const fileParts = attachmentPartsToUiFileParts(parts);
238
+ if (fileParts.length === 0) {
239
+ throw new WarrantyAiUnavailableError("[internal] warranty ai attachment content unavailable");
240
+ }
241
+ return [
242
+ {
243
+ role: "user",
244
+ content: [
245
+ { type: "text", text: input.prompt },
246
+ ...fileParts
247
+ ]
248
+ }
249
+ ];
250
+ }
251
+ async function generateWarrantyObject(input) {
252
+ const messages = await buildAttachmentMessages({
253
+ container: input.container,
254
+ attachmentId: input.attachmentId,
255
+ authContext: input.authContext,
256
+ acceptedMediaTypes: input.acceptedMediaTypes,
257
+ prompt: input.prompt
258
+ });
259
+ try {
260
+ const result = await withTimeout(
261
+ generateObject({
262
+ model: input.model,
263
+ schema: input.schema,
264
+ system: input.system,
265
+ messages,
266
+ temperature: 0
267
+ }),
268
+ AI_TIMEOUT_MS,
269
+ `[internal] warranty claims ai timed out after ${AI_TIMEOUT_MS}ms`
270
+ );
271
+ return result.object;
272
+ } catch (err) {
273
+ if (isWarrantyAiUnavailableError(err)) throw err;
274
+ throw new WarrantyAiUnavailableError(err instanceof Error ? err.message : "[internal] warranty ai call failed");
275
+ }
276
+ }
277
+ async function loadDamageAssessmentFacts(input) {
278
+ const claim = await findOneWithDecryption(
279
+ input.em,
280
+ WarrantyClaim,
281
+ {
282
+ id: input.claimId,
283
+ tenantId: input.scope.tenantId,
284
+ organizationId: input.scope.organizationId,
285
+ deletedAt: null
286
+ },
287
+ {},
288
+ input.scope
289
+ );
290
+ if (!claim) {
291
+ throw new CrudHttpError(404, { error: "warranty_claims.errors.notFound" });
292
+ }
293
+ const line = await findOneWithDecryption(
294
+ input.em,
295
+ WarrantyClaimLine,
296
+ {
297
+ id: input.lineId,
298
+ claim: claim.id,
299
+ tenantId: input.scope.tenantId,
300
+ organizationId: input.scope.organizationId,
301
+ deletedAt: null
302
+ },
303
+ {},
304
+ input.scope
305
+ );
306
+ if (!line) {
307
+ throw new CrudHttpError(404, { error: "warranty_claims.errors.notFound" });
308
+ }
309
+ return { claim, line };
310
+ }
311
+ async function loadClaimPromptFacts(input) {
312
+ const claim = await findOneWithDecryption(
313
+ input.em,
314
+ WarrantyClaim,
315
+ {
316
+ id: input.claimId,
317
+ tenantId: input.scope.tenantId,
318
+ organizationId: input.scope.organizationId,
319
+ deletedAt: null
320
+ },
321
+ {},
322
+ input.scope
323
+ );
324
+ if (!claim) {
325
+ throw new CrudHttpError(404, { error: "warranty_claims.errors.notFound" });
326
+ }
327
+ const eventWhere = {
328
+ claim: claim.id,
329
+ tenantId: input.scope.tenantId,
330
+ organizationId: input.scope.organizationId
331
+ };
332
+ if (input.visibility) {
333
+ eventWhere.visibility = input.visibility;
334
+ }
335
+ const [lines, timelineEvents] = await Promise.all([
336
+ findWithDecryption(
337
+ input.em,
338
+ WarrantyClaimLine,
339
+ {
340
+ claim: claim.id,
341
+ tenantId: input.scope.tenantId,
342
+ organizationId: input.scope.organizationId,
343
+ deletedAt: null
344
+ },
345
+ { orderBy: { lineNo: "ASC" } },
346
+ input.scope
347
+ ),
348
+ findWithDecryption(
349
+ input.em,
350
+ WarrantyClaimEvent,
351
+ eventWhere,
352
+ { orderBy: { createdAt: "ASC" } },
353
+ input.scope
354
+ )
355
+ ]);
356
+ return buildClaimPromptFacts({
357
+ claim,
358
+ lines,
359
+ timelineEvents,
360
+ tone: input.tone
361
+ });
362
+ }
363
+ async function generateWarrantyText(input) {
364
+ const model = resolveWarrantyModel(input.container);
365
+ let text;
366
+ try {
367
+ const result = await withTimeout(
368
+ generateText({
369
+ model,
370
+ system: input.system,
371
+ prompt: input.prompt,
372
+ temperature: 0.3
373
+ }),
374
+ AI_TIMEOUT_MS,
375
+ `[internal] warranty claims ai timed out after ${AI_TIMEOUT_MS}ms`
376
+ );
377
+ text = result.text;
378
+ } catch (err) {
379
+ throw new WarrantyAiUnavailableError(err instanceof Error ? err.message : "[internal] warranty ai call failed");
380
+ }
381
+ const trimmed = text.trim();
382
+ if (!trimmed) {
383
+ throw new WarrantyAiUnavailableError(input.emptyMessage);
384
+ }
385
+ return trimmed;
386
+ }
387
+ async function assessDamagePhoto(input) {
388
+ const model = resolveWarrantyObjectModel(input.container);
389
+ const { claim, line } = await loadDamageAssessmentFacts(input);
390
+ const system = [
391
+ "You are a warranty damage assessor reviewing customer-submitted claim photos.",
392
+ "Use only visible evidence and the provided claim-line facts.",
393
+ "Never invent monetary amounts, credit amounts, refund amounts, fees, or replacement commitments.",
394
+ "If the image is unclear, set severity to unknown and lower confidence."
395
+ ].join(" ");
396
+ const prompt = [
397
+ "Assess the attached damage photo for the warranty claim line.",
398
+ "Return concise structured facts only.",
399
+ "Claim and line facts:",
400
+ promptJson({
401
+ claimId: claim.id,
402
+ claimNumber: claim.claimNumber,
403
+ claimType: claim.claimType,
404
+ claimStatus: claim.status,
405
+ lineId: line.id,
406
+ productName: nullableString(line.productName),
407
+ sku: nullableString(line.sku),
408
+ serialNumber: nullableString(line.serialNumber),
409
+ faultCode: nullableString(line.faultCode),
410
+ faultDescription: nullableString(line.faultDescription),
411
+ warrantyStatus: line.warrantyStatus
412
+ })
413
+ ].join("\n\n");
414
+ return generateWarrantyObject({
415
+ model,
416
+ container: input.container,
417
+ schema: damagePhotoAssessmentSchema,
418
+ system,
419
+ prompt,
420
+ attachmentId: input.attachmentId,
421
+ authContext: input.authContext,
422
+ acceptedMediaTypes: ["image"]
423
+ });
424
+ }
425
+ async function extractProofOfPurchase(input) {
426
+ const model = resolveWarrantyObjectModel(input.container);
427
+ const system = [
428
+ "You extract proof-of-purchase facts for a warranty desk from receipts, invoices, or order confirmations.",
429
+ "Use only facts visible in the attached image or PDF.",
430
+ "Return monetary amount as a string exactly as represented when possible; never coerce it into a numeric money mutation.",
431
+ "Use null for missing or unreadable fields and lower confidence when uncertain."
432
+ ].join(" ");
433
+ const prompt = [
434
+ "Extract proof-of-purchase facts from the attached document.",
435
+ "For purchaseDate, prefer ISO YYYY-MM-DD when the date is unambiguous; otherwise return the visible date string or null.",
436
+ "For currency, prefer an ISO currency code when visible or clearly implied; otherwise return null."
437
+ ].join("\n\n");
438
+ return generateWarrantyObject({
439
+ model,
440
+ container: input.container,
441
+ schema: proofOfPurchaseExtractionSchema,
442
+ system,
443
+ prompt,
444
+ attachmentId: input.attachmentId,
445
+ authContext: input.authContext,
446
+ acceptedMediaTypes: ["image", "pdf"]
447
+ });
448
+ }
449
+ async function buildClaimReplyDraft(input) {
450
+ const facts = await loadClaimPromptFacts({
451
+ em: input.em,
452
+ scope: input.scope,
453
+ claimId: input.claimId,
454
+ visibility: "customer",
455
+ tone: input.tone
456
+ });
457
+ const { system, prompt } = assembleClaimReplyPrompt(facts);
458
+ return {
459
+ draft: await generateWarrantyText({
460
+ container: input.container,
461
+ system,
462
+ prompt,
463
+ emptyMessage: "[internal] empty ai draft"
464
+ })
465
+ };
466
+ }
467
+ async function buildClaimSummary(input) {
468
+ const facts = await loadClaimPromptFacts({
469
+ em: input.em,
470
+ scope: input.scope,
471
+ claimId: input.claimId
472
+ });
473
+ const { system, prompt } = assembleClaimSummaryPrompt(facts);
474
+ return {
475
+ summary: await generateWarrantyText({
476
+ container: input.container,
477
+ system,
478
+ prompt,
479
+ emptyMessage: "[internal] empty ai draft"
480
+ })
481
+ };
482
+ }
483
+ export {
484
+ WarrantyAiNotConfiguredError,
485
+ WarrantyAiUnavailableError,
486
+ assembleClaimReplyPrompt,
487
+ assembleClaimSummaryPrompt,
488
+ assessDamagePhoto,
489
+ buildClaimPromptFacts,
490
+ buildClaimReplyDraft,
491
+ buildClaimSummary,
492
+ extractProofOfPurchase,
493
+ isWarrantyAiNotConfiguredError,
494
+ isWarrantyAiUnavailableError
495
+ };
496
+ //# sourceMappingURL=aiAssist.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/warranty_claims/lib/aiAssist.ts"],
4
+ "sourcesContent": ["import { generateObject, generateText } from 'ai'\nimport type { AwilixContainer } from 'awilix'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { z } from 'zod'\nimport {\n AiModelFactoryError,\n createModelFactory,\n type AiModelFactory,\n} from '@open-mercato/ai-assistant/modules/ai_assistant/lib/model-factory'\nimport {\n attachmentPartsToUiFileParts,\n resolveAttachmentParts,\n} from '@open-mercato/ai-assistant/modules/ai_assistant/lib/attachment-parts'\nimport type { AiChatRequestContext } from '@open-mercato/ai-assistant/modules/ai_assistant/lib/attachment-bridge-types'\nimport { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'\nimport { findOneWithDecryption, findWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { WarrantyClaim, WarrantyClaimEvent, WarrantyClaimLine } from '../data/entities'\nimport type {\n WarrantyClaimDisposition,\n WarrantyClaimEventKind,\n WarrantyClaimEventVisibility,\n WarrantyClaimLineStatus,\n WarrantyClaimPriority,\n WarrantyClaimStatus,\n WarrantyClaimType,\n WarrantyClaimWarrantyStatus,\n} from '../data/validators'\n\nconst MODULE_ID = 'warranty_claims'\nconst AI_TIMEOUT_MS = 30_000\n\ntype GenerateTextModel = Parameters<typeof generateText>[0]['model']\ntype GenerateObjectModel = Parameters<typeof generateObject>[0]['model']\ntype GenerateObjectMessages = NonNullable<Parameters<typeof generateObject>[0]['messages']>\n\nexport class WarrantyAiNotConfiguredError extends Error {\n constructor() {\n super('LLM not configured')\n this.name = 'WarrantyAiNotConfiguredError'\n }\n}\n\nexport class WarrantyAiUnavailableError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'WarrantyAiUnavailableError'\n }\n}\n\nexport function isWarrantyAiUnavailableError(err: unknown): boolean {\n if (err instanceof WarrantyAiUnavailableError) return true\n if (typeof err !== 'object' || err === null) return false\n return (err as { name?: unknown }).name === 'WarrantyAiUnavailableError'\n}\n\nexport type ClaimReplyTone = 'formal' | 'friendly' | 'concise'\n\nexport type ClaimReplyDraftInput = {\n em: EntityManager\n container: AwilixContainer\n scope: { tenantId: string; organizationId: string }\n claimId: string\n tone?: ClaimReplyTone\n}\n\nexport type ClaimSummaryInput = Omit<ClaimReplyDraftInput, 'tone'>\n\nexport type WarrantyDamagePhotoAssessment = {\n damageType: string\n severity: 'minor' | 'moderate' | 'severe' | 'unknown'\n probableCause: string\n misuseSuspected: boolean\n confidence: number\n summary: string\n}\n\nexport type WarrantyProofOfPurchaseExtraction = {\n purchaseDate: string | null\n serialNumber: string | null\n amount: string | null\n currency: string | null\n merchant: string | null\n confidence: number\n}\n\nexport type AssessDamagePhotoInput = {\n em: EntityManager\n container: AwilixContainer\n scope: { tenantId: string; organizationId: string }\n claimId: string\n lineId: string\n attachmentId: string\n authContext: AiChatRequestContext\n}\n\nexport type ExtractProofOfPurchaseInput = {\n em: EntityManager\n container: AwilixContainer\n scope: { tenantId: string; organizationId: string }\n attachmentId: string\n authContext: AiChatRequestContext\n}\n\nexport type ClaimPromptLineFacts = {\n productName: string | null\n sku: string | null\n serialNumber: string | null\n lineStatus: WarrantyClaimLineStatus\n disposition: WarrantyClaimDisposition | null\n qtyClaimed: string | null\n qtyApproved: string | null\n warrantyStatus: WarrantyClaimWarrantyStatus\n}\n\nexport type ClaimPromptTimelineEntry = {\n kind: WarrantyClaimEventKind\n visibility: WarrantyClaimEventVisibility\n body: string | null\n createdAt: string | null\n}\n\nexport type ClaimPromptFacts = {\n claimNumber: string\n status: WarrantyClaimStatus\n claimType: WarrantyClaimType\n priority: WarrantyClaimPriority\n reasonCode: string | null\n rejectionReasonCode: string | null\n customerName: string | null\n contactName: string | null\n resolutionSummary: string | null\n totals: {\n currencyCode: string | null\n claimedAmount: string | null\n approvedAmount: string | null\n recoveredAmount: string | null\n }\n lines: ClaimPromptLineFacts[]\n timeline: ClaimPromptTimelineEntry[]\n tone?: ClaimReplyTone\n}\n\nexport type ClaimPromptFactsInput = {\n claim: WarrantyClaim\n lines: WarrantyClaimLine[]\n timelineEvents: WarrantyClaimEvent[]\n tone?: ClaimReplyTone\n}\n\nfunction toIso(value: Date | string | null | undefined): string | null {\n if (!value) return null\n const date = value instanceof Date ? value : new Date(value)\n return Number.isNaN(date.getTime()) ? null : date.toISOString()\n}\n\nfunction nullableString(value: string | number | null | undefined): string | null {\n if (value === null || value === undefined) return null\n const text = String(value).trim()\n return text.length > 0 ? text : null\n}\n\nfunction sortTimeline(events: ClaimPromptTimelineEntry[]): ClaimPromptTimelineEntry[] {\n return events\n .slice()\n .sort((a, b) => {\n const aTime = a.createdAt ? new Date(a.createdAt).getTime() : Number.POSITIVE_INFINITY\n const bTime = b.createdAt ? new Date(b.createdAt).getTime() : Number.POSITIVE_INFINITY\n return aTime - bTime\n })\n}\n\nfunction serializeLine(line: WarrantyClaimLine): ClaimPromptLineFacts {\n return {\n productName: nullableString(line.productName),\n sku: nullableString(line.sku),\n serialNumber: nullableString(line.serialNumber),\n lineStatus: line.lineStatus,\n disposition: line.disposition ?? null,\n qtyClaimed: nullableString(line.qtyClaimed),\n qtyApproved: nullableString(line.qtyApproved),\n warrantyStatus: line.warrantyStatus,\n }\n}\n\nfunction serializeTimelineEvent(event: WarrantyClaimEvent): ClaimPromptTimelineEntry {\n return {\n kind: event.kind,\n visibility: event.visibility,\n body: nullableString(event.body),\n createdAt: toIso(event.createdAt),\n }\n}\n\nexport function buildClaimPromptFacts(input: ClaimPromptFactsInput): ClaimPromptFacts {\n return {\n claimNumber: input.claim.claimNumber,\n status: input.claim.status,\n claimType: input.claim.claimType,\n priority: input.claim.priority,\n reasonCode: nullableString(input.claim.reasonCode),\n rejectionReasonCode: nullableString(input.claim.rejectionReasonCode),\n customerName: nullableString(input.claim.customerName),\n contactName: null,\n resolutionSummary: nullableString(input.claim.resolutionSummary),\n totals: {\n currencyCode: nullableString(input.claim.currencyCode),\n claimedAmount: nullableString(input.claim.totalClaimedAmount),\n approvedAmount: nullableString(input.claim.totalApprovedAmount),\n recoveredAmount: nullableString(input.claim.totalRecoveredAmount),\n },\n lines: input.lines.map(serializeLine),\n timeline: sortTimeline(input.timelineEvents.map(serializeTimelineEvent)),\n tone: input.tone,\n }\n}\n\nfunction toneInstruction(tone: ClaimReplyTone | undefined): string {\n switch (tone) {\n case 'friendly':\n return 'Use a friendly, reassuring tone.'\n case 'concise':\n return 'Use a concise, direct tone.'\n case 'formal':\n default:\n return 'Use a formal, professional tone.'\n }\n}\n\nfunction promptJson(value: unknown): string {\n return JSON.stringify(value, null, 2)\n}\n\nconst damagePhotoAssessmentSchema = z.object({\n damageType: z.string().trim().min(1).max(200),\n severity: z.enum(['minor', 'moderate', 'severe', 'unknown']),\n probableCause: z.string().trim().min(1).max(1000),\n misuseSuspected: z.boolean(),\n confidence: z.number().min(0).max(1),\n summary: z.string().trim().min(1).max(1500),\n}).strict()\n\nconst proofOfPurchaseExtractionSchema = z.object({\n purchaseDate: z.string().trim().min(1).max(40).nullable(),\n serialNumber: z.string().trim().min(1).max(191).nullable(),\n amount: z.string().trim().min(1).max(80).nullable(),\n currency: z.string().trim().min(1).max(12).nullable(),\n merchant: z.string().trim().min(1).max(300).nullable(),\n confidence: z.number().min(0).max(1),\n}).strict()\n\nfunction terminalStatus(status: WarrantyClaimStatus): boolean {\n return status === 'resolved' || status === 'closed' || status === 'rejected' || status === 'cancelled'\n}\n\nexport function assembleClaimReplyPrompt(claim: ClaimPromptFacts): { system: string; prompt: string } {\n const customerTimeline = claim.timeline.filter((entry) => entry.visibility === 'customer')\n const latestCustomerMessage = customerTimeline\n .slice()\n .reverse()\n .find((entry) => entry.body)\n\n return {\n system: [\n 'You are a warranty-desk assistant writing on behalf of the merchant.',\n 'Match the language of the customer\\'s latest message when present.',\n 'Be factual, cite the claim number, and never invent commitments, refund amounts, replacement dates, shipping dates, or deadlines not present in the facts.',\n 'Keep the reply to about 150 words. Do not use markdown headers.',\n toneInstruction(claim.tone),\n ].join(' '),\n prompt: [\n `Draft a customer-facing reply for warranty claim ${claim.claimNumber}.`,\n latestCustomerMessage?.body\n ? `Customer's latest visible message: ${latestCustomerMessage.body}`\n : 'No customer message body is available; use the claim facts only.',\n 'Use only these customer-visible facts:',\n promptJson({\n claimNumber: claim.claimNumber,\n status: claim.status,\n claimType: claim.claimType,\n priority: claim.priority,\n reasonCode: claim.reasonCode,\n rejectionReasonCode: claim.rejectionReasonCode,\n customerName: claim.customerName,\n contactName: claim.contactName,\n resolutionSummary: claim.resolutionSummary,\n totals: claim.totals,\n lines: claim.lines,\n timeline: customerTimeline,\n }),\n ].join('\\n\\n'),\n }\n}\n\nexport function assembleClaimSummaryPrompt(claim: ClaimPromptFacts): { system: string; prompt: string } {\n return {\n system: [\n 'You summarize warranty and RMA claims for an internal operator.',\n 'Write plain text in 120 words or fewer.',\n 'Include customer-visible and internal timeline facts when they are provided.',\n 'Be factual, cite the claim number, and do not invent amounts, dates, or commitments.',\n 'When unresolved items exist, end with \"Open questions:\" followed by a bullet list.',\n ].join(' '),\n prompt: [\n `Summarize warranty claim ${claim.claimNumber}.`,\n terminalStatus(claim.status)\n ? 'The claim is in a terminal status; include open questions only if the facts still show unresolved items.'\n : 'The claim is not terminal; identify unresolved items and end with Open questions.',\n 'Use these facts:',\n promptJson({\n claimNumber: claim.claimNumber,\n status: claim.status,\n claimType: claim.claimType,\n priority: claim.priority,\n reasonCode: claim.reasonCode,\n rejectionReasonCode: claim.rejectionReasonCode,\n customerName: claim.customerName,\n contactName: claim.contactName,\n resolutionSummary: claim.resolutionSummary,\n totals: claim.totals,\n lines: claim.lines,\n timeline: claim.timeline,\n }),\n ].join('\\n\\n'),\n }\n}\n\nasync function withTimeout<T>(\n operation: Promise<T>,\n timeoutMs: number,\n timeoutMessage: string,\n): Promise<T> {\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutHandle = setTimeout(() => reject(new Error(timeoutMessage)), timeoutMs)\n })\n\n try {\n return await Promise.race([operation, timeoutPromise])\n } finally {\n if (timeoutHandle) {\n clearTimeout(timeoutHandle)\n }\n }\n}\n\nfunction isAiModelFactoryError(err: unknown): boolean {\n if (err instanceof AiModelFactoryError) return true\n if (typeof err !== 'object' || err === null) return false\n return (err as { name?: unknown }).name === 'AiModelFactoryError'\n}\n\nexport function isWarrantyAiNotConfiguredError(err: unknown): boolean {\n if (err instanceof WarrantyAiNotConfiguredError) return true\n if (typeof err !== 'object' || err === null) return false\n return (err as { name?: unknown }).name === 'WarrantyAiNotConfiguredError'\n}\n\nfunction resolveWarrantyModel(container: AwilixContainer): GenerateTextModel {\n let factory: AiModelFactory\n try {\n factory = createModelFactory(container)\n } catch {\n throw new WarrantyAiNotConfiguredError()\n }\n try {\n const resolution = factory.resolveModel({ moduleId: MODULE_ID })\n return resolution.model as GenerateTextModel\n } catch (err) {\n if (isAiModelFactoryError(err)) {\n throw new WarrantyAiNotConfiguredError()\n }\n throw err\n }\n}\n\nfunction resolveWarrantyObjectModel(container: AwilixContainer): GenerateObjectModel {\n return resolveWarrantyModel(container) as GenerateObjectModel\n}\n\nasync function buildAttachmentMessages(input: {\n container: AwilixContainer\n attachmentId: string\n authContext: AiChatRequestContext\n acceptedMediaTypes: readonly ['image'] | readonly ['image', 'pdf']\n prompt: string\n}): Promise<GenerateObjectMessages> {\n const parts = await resolveAttachmentParts({\n attachmentIds: [input.attachmentId],\n authContext: input.authContext,\n acceptedMediaTypes: input.acceptedMediaTypes,\n container: input.container,\n })\n const fileParts = attachmentPartsToUiFileParts(parts)\n if (fileParts.length === 0) {\n throw new WarrantyAiUnavailableError('[internal] warranty ai attachment content unavailable')\n }\n return [\n {\n role: 'user',\n content: [\n { type: 'text', text: input.prompt },\n ...fileParts,\n ],\n },\n ] as GenerateObjectMessages\n}\n\nasync function generateWarrantyObject<T extends Record<string, unknown>>(input: {\n model: GenerateObjectModel\n container: AwilixContainer\n schema: z.ZodType<T>\n system: string\n prompt: string\n attachmentId: string\n authContext: AiChatRequestContext\n acceptedMediaTypes: readonly ['image'] | readonly ['image', 'pdf']\n}): Promise<T> {\n const messages = await buildAttachmentMessages({\n container: input.container,\n attachmentId: input.attachmentId,\n authContext: input.authContext,\n acceptedMediaTypes: input.acceptedMediaTypes,\n prompt: input.prompt,\n })\n try {\n const result = await withTimeout(\n generateObject({\n model: input.model,\n schema: input.schema,\n system: input.system,\n messages,\n temperature: 0,\n }),\n AI_TIMEOUT_MS,\n `[internal] warranty claims ai timed out after ${AI_TIMEOUT_MS}ms`,\n )\n return result.object\n } catch (err) {\n if (isWarrantyAiUnavailableError(err)) throw err\n throw new WarrantyAiUnavailableError(err instanceof Error ? err.message : '[internal] warranty ai call failed')\n }\n}\n\nasync function loadDamageAssessmentFacts(input: AssessDamagePhotoInput): Promise<{\n claim: WarrantyClaim\n line: WarrantyClaimLine\n}> {\n const claim = await findOneWithDecryption(\n input.em,\n WarrantyClaim,\n {\n id: input.claimId,\n tenantId: input.scope.tenantId,\n organizationId: input.scope.organizationId,\n deletedAt: null,\n },\n {},\n input.scope,\n )\n if (!claim) {\n throw new CrudHttpError(404, { error: 'warranty_claims.errors.notFound' })\n }\n const line = await findOneWithDecryption(\n input.em,\n WarrantyClaimLine,\n {\n id: input.lineId,\n claim: claim.id,\n tenantId: input.scope.tenantId,\n organizationId: input.scope.organizationId,\n deletedAt: null,\n },\n {},\n input.scope,\n )\n if (!line) {\n throw new CrudHttpError(404, { error: 'warranty_claims.errors.notFound' })\n }\n return { claim, line }\n}\n\nasync function loadClaimPromptFacts(input: {\n em: EntityManager\n scope: { tenantId: string; organizationId: string }\n claimId: string\n visibility?: WarrantyClaimEventVisibility\n tone?: ClaimReplyTone\n}): Promise<ClaimPromptFacts> {\n const claim = await findOneWithDecryption(\n input.em,\n WarrantyClaim,\n {\n id: input.claimId,\n tenantId: input.scope.tenantId,\n organizationId: input.scope.organizationId,\n deletedAt: null,\n },\n {},\n input.scope,\n )\n if (!claim) {\n throw new CrudHttpError(404, { error: 'warranty_claims.errors.notFound' })\n }\n\n const eventWhere: {\n claim: string\n tenantId: string\n organizationId: string\n visibility?: WarrantyClaimEventVisibility\n } = {\n claim: claim.id,\n tenantId: input.scope.tenantId,\n organizationId: input.scope.organizationId,\n }\n if (input.visibility) {\n eventWhere.visibility = input.visibility\n }\n\n const [lines, timelineEvents] = await Promise.all([\n findWithDecryption(\n input.em,\n WarrantyClaimLine,\n {\n claim: claim.id,\n tenantId: input.scope.tenantId,\n organizationId: input.scope.organizationId,\n deletedAt: null,\n },\n { orderBy: { lineNo: 'ASC' } },\n input.scope,\n ),\n findWithDecryption(\n input.em,\n WarrantyClaimEvent,\n eventWhere,\n { orderBy: { createdAt: 'ASC' } },\n input.scope,\n ),\n ])\n\n return buildClaimPromptFacts({\n claim,\n lines,\n timelineEvents,\n tone: input.tone,\n })\n}\n\nasync function generateWarrantyText(input: {\n container: AwilixContainer\n system: string\n prompt: string\n emptyMessage: string\n}): Promise<string> {\n const model = resolveWarrantyModel(input.container)\n let text: string\n try {\n const result = await withTimeout(\n generateText({\n model,\n system: input.system,\n prompt: input.prompt,\n temperature: 0.3,\n }),\n AI_TIMEOUT_MS,\n `[internal] warranty claims ai timed out after ${AI_TIMEOUT_MS}ms`,\n )\n text = result.text\n } catch (err) {\n throw new WarrantyAiUnavailableError(err instanceof Error ? err.message : '[internal] warranty ai call failed')\n }\n const trimmed = text.trim()\n if (!trimmed) {\n throw new WarrantyAiUnavailableError(input.emptyMessage)\n }\n return trimmed\n}\n\nexport async function assessDamagePhoto(input: AssessDamagePhotoInput): Promise<WarrantyDamagePhotoAssessment> {\n const model = resolveWarrantyObjectModel(input.container)\n const { claim, line } = await loadDamageAssessmentFacts(input)\n const system = [\n 'You are a warranty damage assessor reviewing customer-submitted claim photos.',\n 'Use only visible evidence and the provided claim-line facts.',\n 'Never invent monetary amounts, credit amounts, refund amounts, fees, or replacement commitments.',\n 'If the image is unclear, set severity to unknown and lower confidence.',\n ].join(' ')\n const prompt = [\n 'Assess the attached damage photo for the warranty claim line.',\n 'Return concise structured facts only.',\n 'Claim and line facts:',\n promptJson({\n claimId: claim.id,\n claimNumber: claim.claimNumber,\n claimType: claim.claimType,\n claimStatus: claim.status,\n lineId: line.id,\n productName: nullableString(line.productName),\n sku: nullableString(line.sku),\n serialNumber: nullableString(line.serialNumber),\n faultCode: nullableString(line.faultCode),\n faultDescription: nullableString(line.faultDescription),\n warrantyStatus: line.warrantyStatus,\n }),\n ].join('\\n\\n')\n return generateWarrantyObject({\n model,\n container: input.container,\n schema: damagePhotoAssessmentSchema,\n system,\n prompt,\n attachmentId: input.attachmentId,\n authContext: input.authContext,\n acceptedMediaTypes: ['image'],\n })\n}\n\nexport async function extractProofOfPurchase(input: ExtractProofOfPurchaseInput): Promise<WarrantyProofOfPurchaseExtraction> {\n const model = resolveWarrantyObjectModel(input.container)\n const system = [\n 'You extract proof-of-purchase facts for a warranty desk from receipts, invoices, or order confirmations.',\n 'Use only facts visible in the attached image or PDF.',\n 'Return monetary amount as a string exactly as represented when possible; never coerce it into a numeric money mutation.',\n 'Use null for missing or unreadable fields and lower confidence when uncertain.',\n ].join(' ')\n const prompt = [\n 'Extract proof-of-purchase facts from the attached document.',\n 'For purchaseDate, prefer ISO YYYY-MM-DD when the date is unambiguous; otherwise return the visible date string or null.',\n 'For currency, prefer an ISO currency code when visible or clearly implied; otherwise return null.',\n ].join('\\n\\n')\n return generateWarrantyObject({\n model,\n container: input.container,\n schema: proofOfPurchaseExtractionSchema,\n system,\n prompt,\n attachmentId: input.attachmentId,\n authContext: input.authContext,\n acceptedMediaTypes: ['image', 'pdf'],\n })\n}\n\nexport async function buildClaimReplyDraft(input: ClaimReplyDraftInput): Promise<{ draft: string }> {\n const facts = await loadClaimPromptFacts({\n em: input.em,\n scope: input.scope,\n claimId: input.claimId,\n visibility: 'customer',\n tone: input.tone,\n })\n const { system, prompt } = assembleClaimReplyPrompt(facts)\n return {\n draft: await generateWarrantyText({\n container: input.container,\n system,\n prompt,\n emptyMessage: '[internal] empty ai draft',\n }),\n }\n}\n\nexport async function buildClaimSummary(input: ClaimSummaryInput): Promise<{ summary: string }> {\n const facts = await loadClaimPromptFacts({\n em: input.em,\n scope: input.scope,\n claimId: input.claimId,\n })\n const { system, prompt } = assembleClaimSummaryPrompt(facts)\n return {\n summary: await generateWarrantyText({\n container: input.container,\n system,\n prompt,\n emptyMessage: '[internal] empty ai draft',\n }),\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,gBAAgB,oBAAoB;AAG7C,SAAS,SAAS;AAClB;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB,0BAA0B;AAC1D,SAAS,eAAe,oBAAoB,yBAAyB;AAYrE,MAAM,YAAY;AAClB,MAAM,gBAAgB;AAMf,MAAM,qCAAqC,MAAM;AAAA,EACtD,cAAc;AACZ,UAAM,oBAAoB;AAC1B,SAAK,OAAO;AAAA,EACd;AACF;AAEO,MAAM,mCAAmC,MAAM;AAAA,EACpD,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,SAAS,6BAA6B,KAAuB;AAClE,MAAI,eAAe,2BAA4B,QAAO;AACtD,MAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,QAAO;AACpD,SAAQ,IAA2B,SAAS;AAC9C;AAgGA,SAAS,MAAM,OAAwD;AACrE,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,OAAO,iBAAiB,OAAO,QAAQ,IAAI,KAAK,KAAK;AAC3D,SAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,IAAI,OAAO,KAAK,YAAY;AAChE;AAEA,SAAS,eAAe,OAA0D;AAChF,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,QAAM,OAAO,OAAO,KAAK,EAAE,KAAK;AAChC,SAAO,KAAK,SAAS,IAAI,OAAO;AAClC;AAEA,SAAS,aAAa,QAAgE;AACpF,SAAO,OACJ,MAAM,EACN,KAAK,CAAC,GAAG,MAAM;AACd,UAAM,QAAQ,EAAE,YAAY,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,IAAI,OAAO;AACrE,UAAM,QAAQ,EAAE,YAAY,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,IAAI,OAAO;AACrE,WAAO,QAAQ;AAAA,EACjB,CAAC;AACL;AAEA,SAAS,cAAc,MAA+C;AACpE,SAAO;AAAA,IACL,aAAa,eAAe,KAAK,WAAW;AAAA,IAC5C,KAAK,eAAe,KAAK,GAAG;AAAA,IAC5B,cAAc,eAAe,KAAK,YAAY;AAAA,IAC9C,YAAY,KAAK;AAAA,IACjB,aAAa,KAAK,eAAe;AAAA,IACjC,YAAY,eAAe,KAAK,UAAU;AAAA,IAC1C,aAAa,eAAe,KAAK,WAAW;AAAA,IAC5C,gBAAgB,KAAK;AAAA,EACvB;AACF;AAEA,SAAS,uBAAuB,OAAqD;AACnF,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,YAAY,MAAM;AAAA,IAClB,MAAM,eAAe,MAAM,IAAI;AAAA,IAC/B,WAAW,MAAM,MAAM,SAAS;AAAA,EAClC;AACF;AAEO,SAAS,sBAAsB,OAAgD;AACpF,SAAO;AAAA,IACL,aAAa,MAAM,MAAM;AAAA,IACzB,QAAQ,MAAM,MAAM;AAAA,IACpB,WAAW,MAAM,MAAM;AAAA,IACvB,UAAU,MAAM,MAAM;AAAA,IACtB,YAAY,eAAe,MAAM,MAAM,UAAU;AAAA,IACjD,qBAAqB,eAAe,MAAM,MAAM,mBAAmB;AAAA,IACnE,cAAc,eAAe,MAAM,MAAM,YAAY;AAAA,IACrD,aAAa;AAAA,IACb,mBAAmB,eAAe,MAAM,MAAM,iBAAiB;AAAA,IAC/D,QAAQ;AAAA,MACN,cAAc,eAAe,MAAM,MAAM,YAAY;AAAA,MACrD,eAAe,eAAe,MAAM,MAAM,kBAAkB;AAAA,MAC5D,gBAAgB,eAAe,MAAM,MAAM,mBAAmB;AAAA,MAC9D,iBAAiB,eAAe,MAAM,MAAM,oBAAoB;AAAA,IAClE;AAAA,IACA,OAAO,MAAM,MAAM,IAAI,aAAa;AAAA,IACpC,UAAU,aAAa,MAAM,eAAe,IAAI,sBAAsB,CAAC;AAAA,IACvE,MAAM,MAAM;AAAA,EACd;AACF;AAEA,SAAS,gBAAgB,MAA0C;AACjE,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,WAAW,OAAwB;AAC1C,SAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AACtC;AAEA,MAAM,8BAA8B,EAAE,OAAO;AAAA,EAC3C,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC5C,UAAU,EAAE,KAAK,CAAC,SAAS,YAAY,UAAU,SAAS,CAAC;AAAA,EAC3D,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAI;AAAA,EAChD,iBAAiB,EAAE,QAAQ;AAAA,EAC3B,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACnC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAC5C,CAAC,EAAE,OAAO;AAEV,MAAM,kCAAkC,EAAE,OAAO;AAAA,EAC/C,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EACxD,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACzD,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EAClD,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EACpD,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACrD,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AACrC,CAAC,EAAE,OAAO;AAEV,SAAS,eAAe,QAAsC;AAC5D,SAAO,WAAW,cAAc,WAAW,YAAY,WAAW,cAAc,WAAW;AAC7F;AAEO,SAAS,yBAAyB,OAA6D;AACpG,QAAM,mBAAmB,MAAM,SAAS,OAAO,CAAC,UAAU,MAAM,eAAe,UAAU;AACzF,QAAM,wBAAwB,iBAC3B,MAAM,EACN,QAAQ,EACR,KAAK,CAAC,UAAU,MAAM,IAAI;AAE7B,SAAO;AAAA,IACL,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,MAAM,IAAI;AAAA,IAC5B,EAAE,KAAK,GAAG;AAAA,IACV,QAAQ;AAAA,MACN,oDAAoD,MAAM,WAAW;AAAA,MACrE,uBAAuB,OACnB,sCAAsC,sBAAsB,IAAI,KAChE;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,QACT,aAAa,MAAM;AAAA,QACnB,QAAQ,MAAM;AAAA,QACd,WAAW,MAAM;AAAA,QACjB,UAAU,MAAM;AAAA,QAChB,YAAY,MAAM;AAAA,QAClB,qBAAqB,MAAM;AAAA,QAC3B,cAAc,MAAM;AAAA,QACpB,aAAa,MAAM;AAAA,QACnB,mBAAmB,MAAM;AAAA,QACzB,QAAQ,MAAM;AAAA,QACd,OAAO,MAAM;AAAA,QACb,UAAU;AAAA,MACZ,CAAC;AAAA,IACH,EAAE,KAAK,MAAM;AAAA,EACf;AACF;AAEO,SAAS,2BAA2B,OAA6D;AACtG,SAAO;AAAA,IACL,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,GAAG;AAAA,IACV,QAAQ;AAAA,MACN,4BAA4B,MAAM,WAAW;AAAA,MAC7C,eAAe,MAAM,MAAM,IACvB,6GACA;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,QACT,aAAa,MAAM;AAAA,QACnB,QAAQ,MAAM;AAAA,QACd,WAAW,MAAM;AAAA,QACjB,UAAU,MAAM;AAAA,QAChB,YAAY,MAAM;AAAA,QAClB,qBAAqB,MAAM;AAAA,QAC3B,cAAc,MAAM;AAAA,QACpB,aAAa,MAAM;AAAA,QACnB,mBAAmB,MAAM;AAAA,QACzB,QAAQ,MAAM;AAAA,QACd,OAAO,MAAM;AAAA,QACb,UAAU,MAAM;AAAA,MAClB,CAAC;AAAA,IACH,EAAE,KAAK,MAAM;AAAA,EACf;AACF;AAEA,eAAe,YACb,WACA,WACA,gBACY;AACZ,MAAI;AACJ,QAAM,iBAAiB,IAAI,QAAe,CAAC,GAAG,WAAW;AACvD,oBAAgB,WAAW,MAAM,OAAO,IAAI,MAAM,cAAc,CAAC,GAAG,SAAS;AAAA,EAC/E,CAAC;AAED,MAAI;AACF,WAAO,MAAM,QAAQ,KAAK,CAAC,WAAW,cAAc,CAAC;AAAA,EACvD,UAAE;AACA,QAAI,eAAe;AACjB,mBAAa,aAAa;AAAA,IAC5B;AAAA,EACF;AACF;AAEA,SAAS,sBAAsB,KAAuB;AACpD,MAAI,eAAe,oBAAqB,QAAO;AAC/C,MAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,QAAO;AACpD,SAAQ,IAA2B,SAAS;AAC9C;AAEO,SAAS,+BAA+B,KAAuB;AACpE,MAAI,eAAe,6BAA8B,QAAO;AACxD,MAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,QAAO;AACpD,SAAQ,IAA2B,SAAS;AAC9C;AAEA,SAAS,qBAAqB,WAA+C;AAC3E,MAAI;AACJ,MAAI;AACF,cAAU,mBAAmB,SAAS;AAAA,EACxC,QAAQ;AACN,UAAM,IAAI,6BAA6B;AAAA,EACzC;AACA,MAAI;AACF,UAAM,aAAa,QAAQ,aAAa,EAAE,UAAU,UAAU,CAAC;AAC/D,WAAO,WAAW;AAAA,EACpB,SAAS,KAAK;AACZ,QAAI,sBAAsB,GAAG,GAAG;AAC9B,YAAM,IAAI,6BAA6B;AAAA,IACzC;AACA,UAAM;AAAA,EACR;AACF;AAEA,SAAS,2BAA2B,WAAiD;AACnF,SAAO,qBAAqB,SAAS;AACvC;AAEA,eAAe,wBAAwB,OAMH;AAClC,QAAM,QAAQ,MAAM,uBAAuB;AAAA,IACzC,eAAe,CAAC,MAAM,YAAY;AAAA,IAClC,aAAa,MAAM;AAAA,IACnB,oBAAoB,MAAM;AAAA,IAC1B,WAAW,MAAM;AAAA,EACnB,CAAC;AACD,QAAM,YAAY,6BAA6B,KAAK;AACpD,MAAI,UAAU,WAAW,GAAG;AAC1B,UAAM,IAAI,2BAA2B,uDAAuD;AAAA,EAC9F;AACA,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,EAAE,MAAM,QAAQ,MAAM,MAAM,OAAO;AAAA,QACnC,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,uBAA0D,OAS1D;AACb,QAAM,WAAW,MAAM,wBAAwB;AAAA,IAC7C,WAAW,MAAM;AAAA,IACjB,cAAc,MAAM;AAAA,IACpB,aAAa,MAAM;AAAA,IACnB,oBAAoB,MAAM;AAAA,IAC1B,QAAQ,MAAM;AAAA,EAChB,CAAC;AACD,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB,eAAe;AAAA,QACb,OAAO,MAAM;AAAA,QACb,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,QACd;AAAA,QACA,aAAa;AAAA,MACf,CAAC;AAAA,MACD;AAAA,MACA,iDAAiD,aAAa;AAAA,IAChE;AACA,WAAO,OAAO;AAAA,EAChB,SAAS,KAAK;AACZ,QAAI,6BAA6B,GAAG,EAAG,OAAM;AAC7C,UAAM,IAAI,2BAA2B,eAAe,QAAQ,IAAI,UAAU,oCAAoC;AAAA,EAChH;AACF;AAEA,eAAe,0BAA0B,OAGtC;AACD,QAAM,QAAQ,MAAM;AAAA,IAClB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,MACE,IAAI,MAAM;AAAA,MACV,UAAU,MAAM,MAAM;AAAA,MACtB,gBAAgB,MAAM,MAAM;AAAA,MAC5B,WAAW;AAAA,IACb;AAAA,IACA,CAAC;AAAA,IACD,MAAM;AAAA,EACR;AACA,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,cAAc,KAAK,EAAE,OAAO,kCAAkC,CAAC;AAAA,EAC3E;AACA,QAAM,OAAO,MAAM;AAAA,IACjB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,MACE,IAAI,MAAM;AAAA,MACV,OAAO,MAAM;AAAA,MACb,UAAU,MAAM,MAAM;AAAA,MACtB,gBAAgB,MAAM,MAAM;AAAA,MAC5B,WAAW;AAAA,IACb;AAAA,IACA,CAAC;AAAA,IACD,MAAM;AAAA,EACR;AACA,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,cAAc,KAAK,EAAE,OAAO,kCAAkC,CAAC;AAAA,EAC3E;AACA,SAAO,EAAE,OAAO,KAAK;AACvB;AAEA,eAAe,qBAAqB,OAMN;AAC5B,QAAM,QAAQ,MAAM;AAAA,IAClB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,MACE,IAAI,MAAM;AAAA,MACV,UAAU,MAAM,MAAM;AAAA,MACtB,gBAAgB,MAAM,MAAM;AAAA,MAC5B,WAAW;AAAA,IACb;AAAA,IACA,CAAC;AAAA,IACD,MAAM;AAAA,EACR;AACA,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,cAAc,KAAK,EAAE,OAAO,kCAAkC,CAAC;AAAA,EAC3E;AAEA,QAAM,aAKF;AAAA,IACF,OAAO,MAAM;AAAA,IACb,UAAU,MAAM,MAAM;AAAA,IACtB,gBAAgB,MAAM,MAAM;AAAA,EAC9B;AACA,MAAI,MAAM,YAAY;AACpB,eAAW,aAAa,MAAM;AAAA,EAChC;AAEA,QAAM,CAAC,OAAO,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,IAChD;AAAA,MACE,MAAM;AAAA,MACN;AAAA,MACA;AAAA,QACE,OAAO,MAAM;AAAA,QACb,UAAU,MAAM,MAAM;AAAA,QACtB,gBAAgB,MAAM,MAAM;AAAA,QAC5B,WAAW;AAAA,MACb;AAAA,MACA,EAAE,SAAS,EAAE,QAAQ,MAAM,EAAE;AAAA,MAC7B,MAAM;AAAA,IACR;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,EAAE,SAAS,EAAE,WAAW,MAAM,EAAE;AAAA,MAChC,MAAM;AAAA,IACR;AAAA,EACF,CAAC;AAED,SAAO,sBAAsB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,MAAM;AAAA,EACd,CAAC;AACH;AAEA,eAAe,qBAAqB,OAKhB;AAClB,QAAM,QAAQ,qBAAqB,MAAM,SAAS;AAClD,MAAI;AACJ,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB,aAAa;AAAA,QACX;AAAA,QACA,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,QACd,aAAa;AAAA,MACf,CAAC;AAAA,MACD;AAAA,MACA,iDAAiD,aAAa;AAAA,IAChE;AACA,WAAO,OAAO;AAAA,EAChB,SAAS,KAAK;AACZ,UAAM,IAAI,2BAA2B,eAAe,QAAQ,IAAI,UAAU,oCAAoC;AAAA,EAChH;AACA,QAAM,UAAU,KAAK,KAAK;AAC1B,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,2BAA2B,MAAM,YAAY;AAAA,EACzD;AACA,SAAO;AACT;AAEA,eAAsB,kBAAkB,OAAuE;AAC7G,QAAM,QAAQ,2BAA2B,MAAM,SAAS;AACxD,QAAM,EAAE,OAAO,KAAK,IAAI,MAAM,0BAA0B,KAAK;AAC7D,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AACV,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT,SAAS,MAAM;AAAA,MACf,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,QAAQ,KAAK;AAAA,MACb,aAAa,eAAe,KAAK,WAAW;AAAA,MAC5C,KAAK,eAAe,KAAK,GAAG;AAAA,MAC5B,cAAc,eAAe,KAAK,YAAY;AAAA,MAC9C,WAAW,eAAe,KAAK,SAAS;AAAA,MACxC,kBAAkB,eAAe,KAAK,gBAAgB;AAAA,MACtD,gBAAgB,KAAK;AAAA,IACvB,CAAC;AAAA,EACH,EAAE,KAAK,MAAM;AACb,SAAO,uBAAuB;AAAA,IAC5B;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA,cAAc,MAAM;AAAA,IACpB,aAAa,MAAM;AAAA,IACnB,oBAAoB,CAAC,OAAO;AAAA,EAC9B,CAAC;AACH;AAEA,eAAsB,uBAAuB,OAAgF;AAC3H,QAAM,QAAQ,2BAA2B,MAAM,SAAS;AACxD,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AACV,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,MAAM;AACb,SAAO,uBAAuB;AAAA,IAC5B;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA,cAAc,MAAM;AAAA,IACpB,aAAa,MAAM;AAAA,IACnB,oBAAoB,CAAC,SAAS,KAAK;AAAA,EACrC,CAAC;AACH;AAEA,eAAsB,qBAAqB,OAAyD;AAClG,QAAM,QAAQ,MAAM,qBAAqB;AAAA,IACvC,IAAI,MAAM;AAAA,IACV,OAAO,MAAM;AAAA,IACb,SAAS,MAAM;AAAA,IACf,YAAY;AAAA,IACZ,MAAM,MAAM;AAAA,EACd,CAAC;AACD,QAAM,EAAE,QAAQ,OAAO,IAAI,yBAAyB,KAAK;AACzD,SAAO;AAAA,IACL,OAAO,MAAM,qBAAqB;AAAA,MAChC,WAAW,MAAM;AAAA,MACjB;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AACF;AAEA,eAAsB,kBAAkB,OAAwD;AAC9F,QAAM,QAAQ,MAAM,qBAAqB;AAAA,IACvC,IAAI,MAAM;AAAA,IACV,OAAO,MAAM;AAAA,IACb,SAAS,MAAM;AAAA,EACjB,CAAC;AACD,QAAM,EAAE,QAAQ,OAAO,IAAI,2BAA2B,KAAK;AAC3D,SAAO;AAAA,IACL,SAAS,MAAM,qBAAqB;AAAA,MAClC,WAAW,MAAM;AAAA,MACjB;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ function applyIdsFilter(filters, query) {
2
+ if (query.id) {
3
+ filters.id = { $eq: query.id };
4
+ return;
5
+ }
6
+ if (query.ids?.length) filters.id = { $in: query.ids };
7
+ }
8
+ export {
9
+ applyIdsFilter
10
+ };
11
+ //# sourceMappingURL=apiIdsFilter.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/warranty_claims/lib/apiIdsFilter.ts"],
4
+ "sourcesContent": ["type IdFilterQuery = {\n id?: string | null\n ids?: string[] | null\n}\n\nexport function applyIdsFilter(filters: Record<string, unknown>, query: IdFilterQuery): void {\n if (query.id) {\n filters.id = { $eq: query.id }\n return\n }\n if (query.ids?.length) filters.id = { $in: query.ids }\n}\n"],
5
+ "mappings": "AAKO,SAAS,eAAe,SAAkC,OAA4B;AAC3F,MAAI,MAAM,IAAI;AACZ,YAAQ,KAAK,EAAE,KAAK,MAAM,GAAG;AAC7B;AAAA,EACF;AACA,MAAI,MAAM,KAAK,OAAQ,SAAQ,KAAK,EAAE,KAAK,MAAM,IAAI;AACvD;",
6
+ "names": []
7
+ }