@open-mercato/core 0.4.5-develop-3ce83a8b24 → 0.4.5-develop-4849712ccb

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 (163) hide show
  1. package/dist/generated/entities/catalog_product/index.js +16 -0
  2. package/dist/generated/entities/catalog_product/index.js.map +2 -2
  3. package/dist/generated/entities/catalog_product_unit_conversion/index.js +27 -0
  4. package/dist/generated/entities/catalog_product_unit_conversion/index.js.map +7 -0
  5. package/dist/generated/entities/sales_credit_memo_line/index.js +7 -1
  6. package/dist/generated/entities/sales_credit_memo_line/index.js.map +2 -2
  7. package/dist/generated/entities/sales_invoice_line/index.js +7 -1
  8. package/dist/generated/entities/sales_invoice_line/index.js.map +2 -2
  9. package/dist/generated/entities/sales_order_line/index.js +6 -0
  10. package/dist/generated/entities/sales_order_line/index.js.map +2 -2
  11. package/dist/generated/entities/sales_quote_line/index.js +6 -0
  12. package/dist/generated/entities/sales_quote_line/index.js.map +2 -2
  13. package/dist/generated/entities.ids.generated.js +1 -0
  14. package/dist/generated/entities.ids.generated.js.map +2 -2
  15. package/dist/generated/entity-fields-registry.js +2 -0
  16. package/dist/generated/entity-fields-registry.js.map +2 -2
  17. package/dist/modules/catalog/api/prices/route.js +123 -8
  18. package/dist/modules/catalog/api/prices/route.js.map +2 -2
  19. package/dist/modules/catalog/api/product-unit-conversions/route.js +194 -0
  20. package/dist/modules/catalog/api/product-unit-conversions/route.js.map +7 -0
  21. package/dist/modules/catalog/api/products/route.js +351 -201
  22. package/dist/modules/catalog/api/products/route.js.map +2 -2
  23. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +1267 -497
  24. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
  25. package/dist/modules/catalog/backend/catalog/products/create/page.js +733 -210
  26. package/dist/modules/catalog/backend/catalog/products/create/page.js.map +2 -2
  27. package/dist/modules/catalog/commands/index.js +1 -0
  28. package/dist/modules/catalog/commands/index.js.map +2 -2
  29. package/dist/modules/catalog/commands/productUnitConversions.js +503 -0
  30. package/dist/modules/catalog/commands/productUnitConversions.js.map +7 -0
  31. package/dist/modules/catalog/commands/products.js +355 -73
  32. package/dist/modules/catalog/commands/products.js.map +2 -2
  33. package/dist/modules/catalog/commands/shared.js +18 -4
  34. package/dist/modules/catalog/commands/shared.js.map +2 -2
  35. package/dist/modules/catalog/components/products/ProductUomSection.js +591 -0
  36. package/dist/modules/catalog/components/products/ProductUomSection.js.map +7 -0
  37. package/dist/modules/catalog/components/products/productForm.js +66 -5
  38. package/dist/modules/catalog/components/products/productForm.js.map +2 -2
  39. package/dist/modules/catalog/components/products/productFormUtils.js +68 -0
  40. package/dist/modules/catalog/components/products/productFormUtils.js.map +7 -0
  41. package/dist/modules/catalog/data/entities.js +86 -0
  42. package/dist/modules/catalog/data/entities.js.map +2 -2
  43. package/dist/modules/catalog/data/validators.js +65 -3
  44. package/dist/modules/catalog/data/validators.js.map +2 -2
  45. package/dist/modules/catalog/events.js +3 -0
  46. package/dist/modules/catalog/events.js.map +2 -2
  47. package/dist/modules/catalog/lib/unitCodes.js +7 -0
  48. package/dist/modules/catalog/lib/unitCodes.js.map +7 -0
  49. package/dist/modules/catalog/lib/unitResolution.js +53 -0
  50. package/dist/modules/catalog/lib/unitResolution.js.map +7 -0
  51. package/dist/modules/catalog/migrations/Migration20260218225422.js +19 -0
  52. package/dist/modules/catalog/migrations/Migration20260218225422.js.map +7 -0
  53. package/dist/modules/catalog/migrations/Migration20260219084500.js +27 -0
  54. package/dist/modules/catalog/migrations/Migration20260219084500.js.map +7 -0
  55. package/dist/modules/catalog/search.js +69 -1
  56. package/dist/modules/catalog/search.js.map +2 -2
  57. package/dist/modules/catalog/seed/examples.js +91 -42
  58. package/dist/modules/catalog/seed/examples.js.map +2 -2
  59. package/dist/modules/dashboards/seed/analytics.js +3 -0
  60. package/dist/modules/dashboards/seed/analytics.js.map +2 -2
  61. package/dist/modules/sales/api/order-lines/route.js +98 -15
  62. package/dist/modules/sales/api/order-lines/route.js.map +2 -2
  63. package/dist/modules/sales/api/quote-lines/route.js +101 -14
  64. package/dist/modules/sales/api/quote-lines/route.js.map +2 -2
  65. package/dist/modules/sales/api/quotes/public/[token]/route.js +87 -12
  66. package/dist/modules/sales/api/quotes/public/[token]/route.js.map +2 -2
  67. package/dist/modules/sales/commands/documents.js +1424 -260
  68. package/dist/modules/sales/commands/documents.js.map +3 -3
  69. package/dist/modules/sales/commands/shared.js +6 -2
  70. package/dist/modules/sales/commands/shared.js.map +2 -2
  71. package/dist/modules/sales/components/documents/ItemsSection.js +216 -86
  72. package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
  73. package/dist/modules/sales/components/documents/LineItemDialog.js +913 -241
  74. package/dist/modules/sales/components/documents/LineItemDialog.js.map +3 -3
  75. package/dist/modules/sales/components/documents/ShipmentsSection.js +15 -3
  76. package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
  77. package/dist/modules/sales/data/entities.js +59 -3
  78. package/dist/modules/sales/data/entities.js.map +2 -2
  79. package/dist/modules/sales/data/validators.js +35 -0
  80. package/dist/modules/sales/data/validators.js.map +2 -2
  81. package/dist/modules/sales/frontend/quote/[token]/page.js +15 -1
  82. package/dist/modules/sales/frontend/quote/[token]/page.js.map +2 -2
  83. package/dist/modules/sales/migrations/Migration20260218225423.js +31 -0
  84. package/dist/modules/sales/migrations/Migration20260218225423.js.map +7 -0
  85. package/dist/modules/sales/migrations/Migration20260219084501.js +71 -0
  86. package/dist/modules/sales/migrations/Migration20260219084501.js.map +7 -0
  87. package/dist/modules/sales/search.js +28 -0
  88. package/dist/modules/sales/search.js.map +2 -2
  89. package/dist/modules/sales/seed/examples.js +14 -1
  90. package/dist/modules/sales/seed/examples.js.map +2 -2
  91. package/dist/modules/sales/widgets/injection/document-history/widget.client.js +1 -1
  92. package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +2 -2
  93. package/generated/entities/catalog_product/index.ts +8 -0
  94. package/generated/entities/catalog_product_unit_conversion/index.ts +12 -0
  95. package/generated/entities/sales_credit_memo_line/index.ts +3 -0
  96. package/generated/entities/sales_invoice_line/index.ts +3 -0
  97. package/generated/entities/sales_order_line/index.ts +3 -0
  98. package/generated/entities/sales_quote_line/index.ts +3 -0
  99. package/generated/entities.ids.generated.ts +1 -0
  100. package/generated/entity-fields-registry.ts +2 -0
  101. package/package.json +2 -2
  102. package/src/modules/auth/i18n/de.json +1 -1
  103. package/src/modules/auth/i18n/en.json +1 -1
  104. package/src/modules/auth/i18n/es.json +1 -1
  105. package/src/modules/auth/i18n/pl.json +1 -1
  106. package/src/modules/catalog/api/prices/route.ts +213 -81
  107. package/src/modules/catalog/api/product-unit-conversions/route.ts +195 -0
  108. package/src/modules/catalog/api/products/route.ts +638 -402
  109. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +2085 -1072
  110. package/src/modules/catalog/backend/catalog/products/create/page.tsx +1288 -593
  111. package/src/modules/catalog/commands/index.ts +1 -0
  112. package/src/modules/catalog/commands/productUnitConversions.ts +626 -0
  113. package/src/modules/catalog/commands/products.ts +1151 -693
  114. package/src/modules/catalog/commands/shared.ts +19 -5
  115. package/src/modules/catalog/components/products/ProductUomSection.tsx +745 -0
  116. package/src/modules/catalog/components/products/productForm.ts +369 -256
  117. package/src/modules/catalog/components/products/productFormUtils.ts +82 -0
  118. package/src/modules/catalog/data/entities.ts +82 -1
  119. package/src/modules/catalog/data/validators.ts +118 -34
  120. package/src/modules/catalog/events.ts +3 -0
  121. package/src/modules/catalog/i18n/de.json +56 -0
  122. package/src/modules/catalog/i18n/en.json +56 -0
  123. package/src/modules/catalog/i18n/es.json +56 -0
  124. package/src/modules/catalog/i18n/pl.json +56 -0
  125. package/src/modules/catalog/lib/unitCodes.ts +1 -0
  126. package/src/modules/catalog/lib/unitResolution.ts +62 -0
  127. package/src/modules/catalog/migrations/.snapshot-open-mercato.json +245 -0
  128. package/src/modules/catalog/migrations/Migration20260218225422.ts +21 -0
  129. package/src/modules/catalog/migrations/Migration20260219084500.ts +26 -0
  130. package/src/modules/catalog/search.ts +73 -1
  131. package/src/modules/catalog/seed/examples.ts +552 -479
  132. package/src/modules/dashboards/i18n/de.json +1 -1
  133. package/src/modules/dashboards/i18n/en.json +1 -1
  134. package/src/modules/dashboards/i18n/es.json +1 -1
  135. package/src/modules/dashboards/i18n/pl.json +1 -1
  136. package/src/modules/dashboards/seed/analytics.ts +3 -0
  137. package/src/modules/sales/api/order-lines/route.ts +158 -68
  138. package/src/modules/sales/api/quote-lines/route.ts +161 -67
  139. package/src/modules/sales/api/quotes/public/[token]/route.ts +122 -36
  140. package/src/modules/sales/commands/documents.ts +4250 -2424
  141. package/src/modules/sales/commands/shared.ts +7 -2
  142. package/src/modules/sales/components/documents/ItemsSection.tsx +580 -310
  143. package/src/modules/sales/components/documents/LineItemDialog.tsx +1988 -833
  144. package/src/modules/sales/components/documents/ShipmentsSection.tsx +17 -3
  145. package/src/modules/sales/components/documents/lineItemTypes.ts +6 -0
  146. package/src/modules/sales/data/entities.ts +53 -0
  147. package/src/modules/sales/data/validators.ts +36 -0
  148. package/src/modules/sales/frontend/quote/[token]/page.tsx +25 -1
  149. package/src/modules/sales/i18n/de.json +23 -3
  150. package/src/modules/sales/i18n/en.json +23 -3
  151. package/src/modules/sales/i18n/es.json +23 -3
  152. package/src/modules/sales/i18n/pl.json +23 -3
  153. package/src/modules/sales/lib/types.ts +30 -0
  154. package/src/modules/sales/migrations/.snapshot-open-mercato.json +172 -0
  155. package/src/modules/sales/migrations/Migration20260218225423.ts +37 -0
  156. package/src/modules/sales/migrations/Migration20260219084501.ts +73 -0
  157. package/src/modules/sales/search.ts +28 -0
  158. package/src/modules/sales/seed/examples.ts +20 -1
  159. package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +1 -1
  160. package/src/modules/workflows/i18n/de.json +4 -4
  161. package/src/modules/workflows/i18n/en.json +4 -4
  162. package/src/modules/workflows/i18n/es.json +4 -4
  163. package/src/modules/workflows/i18n/pl.json +4 -4
@@ -403,6 +403,10 @@ const searchConfig = {
403
403
  entityId: "sales:sales_order_line",
404
404
  enabled: true,
405
405
  priority: 7,
406
+ fieldPolicy: {
407
+ searchable: ["name", "description", "quantity_unit", "normalized_unit"],
408
+ excluded: ["uom_snapshot", "metadata", "catalog_snapshot", "configuration", "promotion_snapshot"]
409
+ },
406
410
  buildSource: async (ctx) => {
407
411
  const { t: translate } = await resolveTranslations();
408
412
  const record = ctx.record;
@@ -411,6 +415,9 @@ const searchConfig = {
411
415
  appendLine(lines, "Description", record.description);
412
416
  appendLine(lines, "Kind", record.kind);
413
417
  appendLine(lines, "Quantity", record.quantity);
418
+ appendLine(lines, "Quantity unit", record.quantity_unit ?? record.quantityUnit);
419
+ appendLine(lines, "Normalized quantity", record.normalized_quantity ?? record.normalizedQuantity);
420
+ appendLine(lines, "Normalized unit", record.normalized_unit ?? record.normalizedUnit);
414
421
  appendLine(lines, "Status", record.status);
415
422
  return buildIndexSource(ctx, buildOrderLinePresenter(translate, record), lines);
416
423
  },
@@ -424,6 +431,10 @@ const searchConfig = {
424
431
  entityId: "sales:sales_quote_line",
425
432
  enabled: true,
426
433
  priority: 7,
434
+ fieldPolicy: {
435
+ searchable: ["name", "description", "quantity_unit", "normalized_unit"],
436
+ excluded: ["uom_snapshot", "metadata", "catalog_snapshot", "configuration", "promotion_snapshot"]
437
+ },
427
438
  buildSource: async (ctx) => {
428
439
  const { t: translate } = await resolveTranslations();
429
440
  const record = ctx.record;
@@ -432,6 +443,9 @@ const searchConfig = {
432
443
  appendLine(lines, "Description", record.description);
433
444
  appendLine(lines, "Kind", record.kind);
434
445
  appendLine(lines, "Quantity", record.quantity);
446
+ appendLine(lines, "Quantity unit", record.quantity_unit ?? record.quantityUnit);
447
+ appendLine(lines, "Normalized quantity", record.normalized_quantity ?? record.normalizedQuantity);
448
+ appendLine(lines, "Normalized unit", record.normalized_unit ?? record.normalizedUnit);
435
449
  appendLine(lines, "Status", record.status);
436
450
  return buildIndexSource(ctx, buildQuoteLinePresenter(translate, record), lines);
437
451
  },
@@ -543,6 +557,10 @@ const searchConfig = {
543
557
  entityId: "sales:sales_invoice_line",
544
558
  enabled: true,
545
559
  priority: 5,
560
+ fieldPolicy: {
561
+ searchable: ["description", "quantity_unit", "normalized_unit"],
562
+ excluded: ["uom_snapshot", "metadata"]
563
+ },
546
564
  buildSource: async (ctx) => {
547
565
  const { t: translate } = await resolveTranslations();
548
566
  const record = ctx.record;
@@ -550,6 +568,9 @@ const searchConfig = {
550
568
  appendLine(lines, "Description", record.description);
551
569
  appendLine(lines, "Kind", record.kind);
552
570
  appendLine(lines, "Quantity", record.quantity);
571
+ appendLine(lines, "Quantity unit", record.quantity_unit ?? record.quantityUnit);
572
+ appendLine(lines, "Normalized quantity", record.normalized_quantity ?? record.normalizedQuantity);
573
+ appendLine(lines, "Normalized unit", record.normalized_unit ?? record.normalizedUnit);
553
574
  return buildIndexSource(ctx, buildInvoiceLinePresenter(translate, record), lines);
554
575
  },
555
576
  formatResult: async (ctx) => {
@@ -582,6 +603,10 @@ const searchConfig = {
582
603
  entityId: "sales:sales_credit_memo_line",
583
604
  enabled: true,
584
605
  priority: 5,
606
+ fieldPolicy: {
607
+ searchable: ["description", "quantity_unit", "normalized_unit"],
608
+ excluded: ["uom_snapshot", "metadata"]
609
+ },
585
610
  buildSource: async (ctx) => {
586
611
  const { t: translate } = await resolveTranslations();
587
612
  const record = ctx.record;
@@ -589,6 +614,9 @@ const searchConfig = {
589
614
  appendLine(lines, "Description", record.description);
590
615
  appendLine(lines, "Kind", record.kind);
591
616
  appendLine(lines, "Quantity", record.quantity);
617
+ appendLine(lines, "Quantity unit", record.quantity_unit ?? record.quantityUnit);
618
+ appendLine(lines, "Normalized quantity", record.normalized_quantity ?? record.normalizedQuantity);
619
+ appendLine(lines, "Normalized unit", record.normalized_unit ?? record.normalizedUnit);
592
620
  return buildIndexSource(ctx, buildCreditMemoLinePresenter(translate, record), lines);
593
621
  },
594
622
  formatResult: async (ctx) => {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/modules/sales/search.ts"],
4
- "sourcesContent": ["import type { SearchBuildContext, SearchIndexSource, SearchModuleConfig, SearchResultPresenter } from '@open-mercato/shared/modules/search'\nimport type { TranslateFn } from '@open-mercato/shared/lib/i18n/context'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\n\ntype SalesDocumentKind = 'order' | 'quote' | 'invoice' | 'credit_memo'\n\nconst SALES_CONFIG_URL = '/backend/config/sales'\nconst SALES_CHANNELS_URL = '/backend/sales/channels'\nconst SALES_ORDERS_URL = '/backend/sales/orders'\nconst SALES_QUOTES_URL = '/backend/sales/quotes'\n\nfunction normalizeText(value: unknown): string | null {\n if (value === null || value === undefined) return null\n if (typeof value === 'string') {\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : null\n }\n if (value instanceof Date) return value.toISOString()\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return null\n}\n\nfunction pickText(...candidates: Array<unknown>): string | null {\n for (const candidate of candidates) {\n const text = normalizeText(candidate)\n if (text) return text\n }\n return null\n}\n\nfunction readRecordText(record: Record<string, unknown>, ...keys: string[]): string | null {\n for (const key of keys) {\n const text = normalizeText(record[key])\n if (text) return text\n }\n return null\n}\n\nfunction readObjectText(source: unknown, ...keys: string[]): string | null {\n if (!source || typeof source !== 'object') return null\n const record = source as Record<string, unknown>\n return readRecordText(record, ...keys)\n}\n\nfunction formatSubtitle(...parts: Array<unknown>): string | undefined {\n const text = parts\n .map((part) => normalizeText(part))\n .filter((value): value is string => Boolean(value))\n if (!text.length) return undefined\n return text.join(' \u00B7 ')\n}\n\nfunction snippet(value: unknown, maxLength = 140): string | undefined {\n const text = normalizeText(value)\n if (!text) return undefined\n if (text.length <= maxLength) return text\n return `${text.slice(0, maxLength - 3)}...`\n}\n\nfunction appendLine(lines: string[], label: string, value: unknown) {\n if (value === null || value === undefined) return\n const text = Array.isArray(value)\n ? value.map((item) => normalizeText(item)).filter(Boolean).join(', ')\n : typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)\n if (!text.trim()) return\n lines.push(`${label}: ${text}`)\n}\n\nfunction friendlyLabel(input: string): string {\n return input\n .replace(/^cf:/, '')\n .replace(/_/g, ' ')\n .replace(/([a-z])([A-Z])/g, (_match, firstChar, secondChar) => `${firstChar} ${secondChar}`)\n .replace(/\\b\\w/g, (character) => character.toUpperCase())\n}\n\nfunction appendCustomFieldLines(lines: string[], customFields: Record<string, unknown>) {\n for (const [key, value] of Object.entries(customFields)) {\n if (value === null || value === undefined) continue\n appendLine(lines, friendlyLabel(key), value)\n }\n}\n\nfunction buildIndexSource(\n ctx: SearchBuildContext,\n presenter: SearchResultPresenter,\n lines: string[],\n): SearchIndexSource | null {\n appendCustomFieldLines(lines, ctx.customFields)\n if (!lines.length) return null\n return {\n text: lines,\n presenter,\n checksumSource: { record: ctx.record, customFields: ctx.customFields },\n }\n}\n\nfunction buildOrderUrl(orderId: string | null): string | null {\n if (!orderId) return null\n return `${SALES_ORDERS_URL}/${encodeURIComponent(orderId)}`\n}\n\nfunction buildQuoteUrl(quoteId: string | null): string | null {\n if (!quoteId) return null\n return `${SALES_QUOTES_URL}/${encodeURIComponent(quoteId)}`\n}\n\nfunction resolveDocumentKind(record: Record<string, unknown>): SalesDocumentKind | null {\n const kind = readRecordText(record, 'document_kind', 'documentKind', 'context_type', 'contextType', 'kind')\n if (!kind) return null\n if (kind === 'order' || kind === 'quote' || kind === 'invoice' || kind === 'credit_memo') return kind\n return null\n}\n\nfunction resolveDocumentId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'document_id', 'documentId', 'context_id', 'contextId')\n}\n\nfunction resolveOrderId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'order_id', 'orderId')\n}\n\nfunction resolveQuoteId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'quote_id', 'quoteId')\n}\n\nfunction resolveDocumentUrl(kind: SalesDocumentKind | null, documentId: string | null): string | null {\n if (!documentId) return null\n if (kind === 'quote') return buildQuoteUrl(documentId)\n if (kind === 'order') return buildOrderUrl(documentId)\n return null\n}\n\nfunction resolveCustomerName(record: Record<string, unknown>): string | null {\n const snapshot = record.customer_snapshot ?? record.customerSnapshot\n const snapshotName = readObjectText(\n snapshot,\n 'display_name',\n 'displayName',\n 'company_name',\n 'companyName',\n 'legal_name',\n 'legalName',\n 'name',\n )\n if (snapshotName) return snapshotName\n const firstName = readObjectText(snapshot, 'first_name', 'firstName')\n const lastName = readObjectText(snapshot, 'last_name', 'lastName')\n if (firstName || lastName) return `${firstName ?? ''} ${lastName ?? ''}`.trim()\n return readRecordText(record, 'customer_name', 'customerName')\n}\n\nfunction formatAmount(amount: unknown, currency: unknown): string | null {\n const amountText = normalizeText(amount)\n if (!amountText) return null\n const currencyText = normalizeText(currency)\n return currencyText ? `${amountText} ${currencyText}` : amountText\n}\n\nfunction buildDocumentTitle(label: string, number: string | null, fallbackId: string | null): string {\n if (number) return `${label} ${number}`\n if (fallbackId) return `${label} ${fallbackId}`\n return label\n}\n\nfunction buildOrderPresenter(\n translate: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const label = translate('sales.search.badge.order', 'Order')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'order_number', 'orderNumber') ?? readRecordText(customFields, 'order_number', 'orderNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n resolveCustomerName(record),\n readRecordText(record, 'status'),\n readRecordText(record, 'fulfillment_status', 'fulfillmentStatus'),\n readRecordText(record, 'payment_status', 'paymentStatus'),\n )\n return { title, subtitle, icon: 'shopping-cart', badge: label }\n}\n\nfunction buildQuotePresenter(\n translate: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const label = translate('sales.search.badge.quote', 'Quote')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'quote_number', 'quoteNumber') ?? readRecordText(customFields, 'quote_number', 'quoteNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n resolveCustomerName(record),\n readRecordText(record, 'status'),\n readRecordText(record, 'valid_until', 'validUntil'),\n )\n return { title, subtitle, icon: 'file-text', badge: label }\n}\n\nfunction buildInvoicePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.invoice', 'Invoice')\n const title = buildDocumentTitle(label, readRecordText(record, 'invoice_number', 'invoiceNumber'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'status'),\n readRecordText(record, 'due_date', 'dueDate'),\n formatAmount(readRecordText(record, 'grand_total_gross_amount', 'grandTotalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title, subtitle, icon: 'receipt', badge: label }\n}\n\nfunction buildCreditMemoPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.creditMemo', 'Credit memo')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'credit_memo_number', 'creditMemoNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'status'),\n formatAmount(readRecordText(record, 'grand_total_gross_amount', 'grandTotalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title, subtitle, icon: 'file-minus', badge: label }\n}\n\nfunction buildShipmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shipment', 'Shipment')\n const title = buildDocumentTitle(label, readRecordText(record, 'shipment_number', 'shipmentNumber'), readRecordText(record, 'id'))\n const tracking = record.tracking_numbers ?? record.trackingNumbers\n const subtitle = formatSubtitle(readRecordText(record, 'status'), Array.isArray(tracking) ? tracking.join(', ') : tracking)\n return { title, subtitle, icon: 'truck', badge: label }\n}\n\nfunction buildPaymentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.payment', 'Payment')\n const title = buildDocumentTitle(label, readRecordText(record, 'payment_reference', 'paymentReference'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n formatAmount(readRecordText(record, 'amount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title, subtitle, icon: 'credit-card', badge: label }\n}\n\nfunction buildPaymentAllocationPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.paymentAllocation', 'Payment allocation')\n const title = buildDocumentTitle(label, null, readRecordText(record, 'id'))\n const subtitle = formatSubtitle(formatAmount(readRecordText(record, 'amount'), record.currency_code ?? record.currencyCode))\n return { title, subtitle, icon: 'layers', badge: label }\n}\n\nfunction buildDocumentAddressPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.address', 'Address')\n const title = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'company_name', 'companyName'),\n readRecordText(record, 'address_line1', 'addressLine1'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'address_line1', 'addressLine1'),\n readRecordText(record, 'city'),\n readRecordText(record, 'region'),\n readRecordText(record, 'country'),\n )\n return { title: title ?? label, subtitle, icon: 'map-pin', badge: label }\n}\n\nfunction buildNotePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.note', 'Note')\n const title = snippet(readRecordText(record, 'body'), 120) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'author_user_id', 'authorUserId'))\n return { title, subtitle, icon: 'sticky-note', badge: label }\n}\n\nfunction buildOrderLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.orderLine', 'Order line')\n const lineTitle = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'description'),\n readRecordText(record, 'line_number', 'lineNumber'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildQuoteLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.quoteLine', 'Quote line')\n const lineTitle = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'description'),\n readRecordText(record, 'line_number', 'lineNumber'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildInvoiceLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.invoiceLine', 'Invoice line')\n const lineTitle = pickText(readRecordText(record, 'description'), readRecordText(record, 'line_number', 'lineNumber'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildCreditMemoLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.creditMemoLine', 'Credit memo line')\n const lineTitle = pickText(readRecordText(record, 'description'), readRecordText(record, 'line_number', 'lineNumber'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildShipmentItemPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shipmentItem', 'Shipment item')\n const subtitle = formatSubtitle(readRecordText(record, 'quantity'))\n return { title: label, subtitle, icon: 'package', badge: label }\n}\n\nfunction buildOrderAdjustmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.orderAdjustment', 'Order adjustment')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'code'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'amount_gross', 'amountGross'), record.currency_code ?? record.currencyCode),\n )\n return { title: title ? `${label} ${title}` : label, subtitle, icon: 'sliders', badge: label }\n}\n\nfunction buildQuoteAdjustmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.quoteAdjustment', 'Quote adjustment')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'code'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'amount_gross', 'amountGross'), record.currency_code ?? record.currencyCode),\n )\n return { title: title ? `${label} ${title}` : label, subtitle, icon: 'sliders', badge: label }\n}\n\nfunction buildChannelPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.channel', 'Channel')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'code'), readRecordText(record, 'status'))\n return { title, subtitle, icon: 'store', badge: label }\n}\n\nfunction buildShippingMethodPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shippingMethod', 'Shipping method')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'carrier_code', 'carrierCode'), readRecordText(record, 'service_level', 'serviceLevel'))\n return { title, subtitle, icon: 'truck', badge: label }\n}\n\nfunction buildDeliveryWindowPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.deliveryWindow', 'Delivery window')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'lead_time_days', 'leadTimeDays'), readRecordText(record, 'timezone'))\n return { title, subtitle, icon: 'clock', badge: label }\n}\n\nfunction buildPaymentMethodPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.paymentMethod', 'Payment method')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'provider_key', 'providerKey'))\n return { title, subtitle, icon: 'credit-card', badge: label }\n}\n\nfunction buildTaxRatePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.taxRate', 'Tax rate')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'rate'), readRecordText(record, 'country_code', 'countryCode'))\n return { title, subtitle, icon: 'percent', badge: label }\n}\n\nfunction buildDocumentTagPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.documentTag', 'Document tag')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'slug'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'description'))\n return { title, subtitle, icon: 'tag', badge: label }\n}\n\nexport const searchConfig: SearchModuleConfig = {\n entities: [\n {\n entityId: 'sales:sales_channel',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name ?? ctx.customFields.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Website', record.website_url ?? record.websiteUrl)\n appendLine(lines, 'Contact email', record.contact_email ?? record.contactEmail)\n appendLine(lines, 'Contact phone', record.contact_phone ?? record.contactPhone)\n return buildIndexSource(ctx, buildChannelPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildChannelPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const channelId = readRecordText(ctx.record, 'id')\n return channelId ? `${SALES_CHANNELS_URL}/${encodeURIComponent(channelId)}/edit` : SALES_CHANNELS_URL\n },\n },\n {\n entityId: 'sales:sales_order',\n enabled: true,\n priority: 10,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Order number', record.order_number ?? record.orderNumber)\n appendLine(lines, 'Customer', resolveCustomerName(record))\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Fulfillment status', record.fulfillment_status ?? record.fulfillmentStatus)\n appendLine(lines, 'Payment status', record.payment_status ?? record.paymentStatus)\n appendLine(lines, 'External reference', record.external_reference ?? record.externalReference)\n appendLine(lines, 'Customer reference', record.customer_reference ?? record.customerReference)\n return buildIndexSource(ctx, buildOrderPresenter(translate, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderPresenter(translate, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => buildOrderUrl(readRecordText(ctx.record, 'id')),\n },\n {\n entityId: 'sales:sales_quote',\n enabled: true,\n priority: 10,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Quote number', record.quote_number ?? record.quoteNumber)\n appendLine(lines, 'Customer', resolveCustomerName(record))\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Valid until', record.valid_until ?? record.validUntil)\n appendLine(lines, 'External reference', record.external_reference ?? record.externalReference)\n appendLine(lines, 'Customer reference', record.customer_reference ?? record.customerReference)\n return buildIndexSource(ctx, buildQuotePresenter(translate, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuotePresenter(translate, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(readRecordText(ctx.record, 'id')),\n },\n {\n entityId: 'sales:sales_order_line',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Status', record.status)\n return buildIndexSource(ctx, buildOrderLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_quote_line',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Status', record.status)\n return buildIndexSource(ctx, buildQuoteLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuoteLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(resolveQuoteId(ctx.record)),\n },\n {\n entityId: 'sales:sales_order_adjustment',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Amount gross', record.amount_gross ?? record.amountGross)\n return buildIndexSource(ctx, buildOrderAdjustmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderAdjustmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_quote_adjustment',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Amount gross', record.amount_gross ?? record.amountGross)\n return buildIndexSource(ctx, buildQuoteAdjustmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuoteAdjustmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(resolveQuoteId(ctx.record)),\n },\n {\n entityId: 'sales:sales_shipment',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Shipment number', record.shipment_number ?? record.shipmentNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Carrier', record.carrier_name ?? record.carrierName)\n appendLine(lines, 'Tracking numbers', record.tracking_numbers ?? record.trackingNumbers)\n return buildIndexSource(ctx, buildShipmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShipmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_shipment_item',\n enabled: true,\n priority: 5,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Shipment', record.shipment_id ?? record.shipmentId)\n return buildIndexSource(ctx, buildShipmentItemPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShipmentItemPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_invoice',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Invoice number', record.invoice_number ?? record.invoiceNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Due date', record.due_date ?? record.dueDate)\n appendLine(lines, 'Total gross', record.grand_total_gross_amount ?? record.grandTotalGrossAmount)\n return buildIndexSource(ctx, buildInvoicePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildInvoicePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_invoice_line',\n enabled: true,\n priority: 5,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n return buildIndexSource(ctx, buildInvoiceLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildInvoiceLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_credit_memo',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Credit memo number', record.credit_memo_number ?? record.creditMemoNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Issue date', record.issue_date ?? record.issueDate)\n appendLine(lines, 'Total gross', record.grand_total_gross_amount ?? record.grandTotalGrossAmount)\n return buildIndexSource(ctx, buildCreditMemoPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildCreditMemoPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_credit_memo_line',\n enabled: true,\n priority: 5,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n return buildIndexSource(ctx, buildCreditMemoLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildCreditMemoLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_payment',\n enabled: true,\n priority: 8,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Payment reference', record.payment_reference ?? record.paymentReference)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Amount', record.amount)\n appendLine(lines, 'Currency', record.currency_code ?? record.currencyCode)\n return buildIndexSource(ctx, buildPaymentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_payment_allocation',\n enabled: true,\n priority: 5,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Amount', record.amount)\n appendLine(lines, 'Currency', record.currency_code ?? record.currencyCode)\n appendLine(lines, 'Order', record.order_id ?? record.orderId)\n appendLine(lines, 'Invoice', record.invoice_id ?? record.invoiceId)\n return buildIndexSource(ctx, buildPaymentAllocationPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentAllocationPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_note',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Body', record.body)\n appendLine(lines, 'Author', record.author_user_id ?? record.authorUserId)\n appendLine(lines, 'Context type', record.context_type ?? record.contextType)\n return buildIndexSource(ctx, buildNotePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildNotePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const kind = resolveDocumentKind(ctx.record)\n const documentId = resolveDocumentId(ctx.record)\n return resolveDocumentUrl(kind, documentId)\n },\n },\n {\n entityId: 'sales:sales_document_address',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Company', record.company_name ?? record.companyName)\n appendLine(lines, 'Address', record.address_line1 ?? record.addressLine1)\n appendLine(lines, 'City', record.city)\n appendLine(lines, 'Region', record.region)\n appendLine(lines, 'Country', record.country)\n return buildIndexSource(ctx, buildDocumentAddressPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDocumentAddressPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const kind = resolveDocumentKind(ctx.record)\n const documentId = resolveDocumentId(ctx.record)\n return resolveDocumentUrl(kind, documentId)\n },\n },\n {\n entityId: 'sales:sales_shipping_method',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Carrier', record.carrier_code ?? record.carrierCode)\n appendLine(lines, 'Service level', record.service_level ?? record.serviceLevel)\n return buildIndexSource(ctx, buildShippingMethodPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShippingMethodPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_delivery_window',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Lead time', record.lead_time_days ?? record.leadTimeDays)\n appendLine(lines, 'Timezone', record.timezone)\n return buildIndexSource(ctx, buildDeliveryWindowPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDeliveryWindowPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_payment_method',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Provider', record.provider_key ?? record.providerKey)\n appendLine(lines, 'Terms', record.terms)\n return buildIndexSource(ctx, buildPaymentMethodPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentMethodPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_tax_rate',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Rate', record.rate)\n appendLine(lines, 'Country', record.country_code ?? record.countryCode)\n return buildIndexSource(ctx, buildTaxRatePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildTaxRatePresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_document_tag',\n enabled: true,\n priority: 3,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Slug', record.slug)\n appendLine(lines, 'Description', record.description)\n return buildIndexSource(ctx, buildDocumentTagPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDocumentTagPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_ORDERS_URL,\n },\n ],\n}\n\nexport default searchConfig\nexport const config = searchConfig\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { SearchBuildContext, SearchIndexSource, SearchModuleConfig, SearchResultPresenter } from '@open-mercato/shared/modules/search'\nimport type { TranslateFn } from '@open-mercato/shared/lib/i18n/context'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\n\ntype SalesDocumentKind = 'order' | 'quote' | 'invoice' | 'credit_memo'\n\nconst SALES_CONFIG_URL = '/backend/config/sales'\nconst SALES_CHANNELS_URL = '/backend/sales/channels'\nconst SALES_ORDERS_URL = '/backend/sales/orders'\nconst SALES_QUOTES_URL = '/backend/sales/quotes'\n\nfunction normalizeText(value: unknown): string | null {\n if (value === null || value === undefined) return null\n if (typeof value === 'string') {\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : null\n }\n if (value instanceof Date) return value.toISOString()\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return null\n}\n\nfunction pickText(...candidates: Array<unknown>): string | null {\n for (const candidate of candidates) {\n const text = normalizeText(candidate)\n if (text) return text\n }\n return null\n}\n\nfunction readRecordText(record: Record<string, unknown>, ...keys: string[]): string | null {\n for (const key of keys) {\n const text = normalizeText(record[key])\n if (text) return text\n }\n return null\n}\n\nfunction readObjectText(source: unknown, ...keys: string[]): string | null {\n if (!source || typeof source !== 'object') return null\n const record = source as Record<string, unknown>\n return readRecordText(record, ...keys)\n}\n\nfunction formatSubtitle(...parts: Array<unknown>): string | undefined {\n const text = parts\n .map((part) => normalizeText(part))\n .filter((value): value is string => Boolean(value))\n if (!text.length) return undefined\n return text.join(' \u00B7 ')\n}\n\nfunction snippet(value: unknown, maxLength = 140): string | undefined {\n const text = normalizeText(value)\n if (!text) return undefined\n if (text.length <= maxLength) return text\n return `${text.slice(0, maxLength - 3)}...`\n}\n\nfunction appendLine(lines: string[], label: string, value: unknown) {\n if (value === null || value === undefined) return\n const text = Array.isArray(value)\n ? value.map((item) => normalizeText(item)).filter(Boolean).join(', ')\n : typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)\n if (!text.trim()) return\n lines.push(`${label}: ${text}`)\n}\n\nfunction friendlyLabel(input: string): string {\n return input\n .replace(/^cf:/, '')\n .replace(/_/g, ' ')\n .replace(/([a-z])([A-Z])/g, (_match, firstChar, secondChar) => `${firstChar} ${secondChar}`)\n .replace(/\\b\\w/g, (character) => character.toUpperCase())\n}\n\nfunction appendCustomFieldLines(lines: string[], customFields: Record<string, unknown>) {\n for (const [key, value] of Object.entries(customFields)) {\n if (value === null || value === undefined) continue\n appendLine(lines, friendlyLabel(key), value)\n }\n}\n\nfunction buildIndexSource(\n ctx: SearchBuildContext,\n presenter: SearchResultPresenter,\n lines: string[],\n): SearchIndexSource | null {\n appendCustomFieldLines(lines, ctx.customFields)\n if (!lines.length) return null\n return {\n text: lines,\n presenter,\n checksumSource: { record: ctx.record, customFields: ctx.customFields },\n }\n}\n\nfunction buildOrderUrl(orderId: string | null): string | null {\n if (!orderId) return null\n return `${SALES_ORDERS_URL}/${encodeURIComponent(orderId)}`\n}\n\nfunction buildQuoteUrl(quoteId: string | null): string | null {\n if (!quoteId) return null\n return `${SALES_QUOTES_URL}/${encodeURIComponent(quoteId)}`\n}\n\nfunction resolveDocumentKind(record: Record<string, unknown>): SalesDocumentKind | null {\n const kind = readRecordText(record, 'document_kind', 'documentKind', 'context_type', 'contextType', 'kind')\n if (!kind) return null\n if (kind === 'order' || kind === 'quote' || kind === 'invoice' || kind === 'credit_memo') return kind\n return null\n}\n\nfunction resolveDocumentId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'document_id', 'documentId', 'context_id', 'contextId')\n}\n\nfunction resolveOrderId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'order_id', 'orderId')\n}\n\nfunction resolveQuoteId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'quote_id', 'quoteId')\n}\n\nfunction resolveDocumentUrl(kind: SalesDocumentKind | null, documentId: string | null): string | null {\n if (!documentId) return null\n if (kind === 'quote') return buildQuoteUrl(documentId)\n if (kind === 'order') return buildOrderUrl(documentId)\n return null\n}\n\nfunction resolveCustomerName(record: Record<string, unknown>): string | null {\n const snapshot = record.customer_snapshot ?? record.customerSnapshot\n const snapshotName = readObjectText(\n snapshot,\n 'display_name',\n 'displayName',\n 'company_name',\n 'companyName',\n 'legal_name',\n 'legalName',\n 'name',\n )\n if (snapshotName) return snapshotName\n const firstName = readObjectText(snapshot, 'first_name', 'firstName')\n const lastName = readObjectText(snapshot, 'last_name', 'lastName')\n if (firstName || lastName) return `${firstName ?? ''} ${lastName ?? ''}`.trim()\n return readRecordText(record, 'customer_name', 'customerName')\n}\n\nfunction formatAmount(amount: unknown, currency: unknown): string | null {\n const amountText = normalizeText(amount)\n if (!amountText) return null\n const currencyText = normalizeText(currency)\n return currencyText ? `${amountText} ${currencyText}` : amountText\n}\n\nfunction buildDocumentTitle(label: string, number: string | null, fallbackId: string | null): string {\n if (number) return `${label} ${number}`\n if (fallbackId) return `${label} ${fallbackId}`\n return label\n}\n\nfunction buildOrderPresenter(\n translate: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const label = translate('sales.search.badge.order', 'Order')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'order_number', 'orderNumber') ?? readRecordText(customFields, 'order_number', 'orderNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n resolveCustomerName(record),\n readRecordText(record, 'status'),\n readRecordText(record, 'fulfillment_status', 'fulfillmentStatus'),\n readRecordText(record, 'payment_status', 'paymentStatus'),\n )\n return { title, subtitle, icon: 'shopping-cart', badge: label }\n}\n\nfunction buildQuotePresenter(\n translate: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const label = translate('sales.search.badge.quote', 'Quote')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'quote_number', 'quoteNumber') ?? readRecordText(customFields, 'quote_number', 'quoteNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n resolveCustomerName(record),\n readRecordText(record, 'status'),\n readRecordText(record, 'valid_until', 'validUntil'),\n )\n return { title, subtitle, icon: 'file-text', badge: label }\n}\n\nfunction buildInvoicePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.invoice', 'Invoice')\n const title = buildDocumentTitle(label, readRecordText(record, 'invoice_number', 'invoiceNumber'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'status'),\n readRecordText(record, 'due_date', 'dueDate'),\n formatAmount(readRecordText(record, 'grand_total_gross_amount', 'grandTotalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title, subtitle, icon: 'receipt', badge: label }\n}\n\nfunction buildCreditMemoPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.creditMemo', 'Credit memo')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'credit_memo_number', 'creditMemoNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'status'),\n formatAmount(readRecordText(record, 'grand_total_gross_amount', 'grandTotalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title, subtitle, icon: 'file-minus', badge: label }\n}\n\nfunction buildShipmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shipment', 'Shipment')\n const title = buildDocumentTitle(label, readRecordText(record, 'shipment_number', 'shipmentNumber'), readRecordText(record, 'id'))\n const tracking = record.tracking_numbers ?? record.trackingNumbers\n const subtitle = formatSubtitle(readRecordText(record, 'status'), Array.isArray(tracking) ? tracking.join(', ') : tracking)\n return { title, subtitle, icon: 'truck', badge: label }\n}\n\nfunction buildPaymentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.payment', 'Payment')\n const title = buildDocumentTitle(label, readRecordText(record, 'payment_reference', 'paymentReference'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n formatAmount(readRecordText(record, 'amount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title, subtitle, icon: 'credit-card', badge: label }\n}\n\nfunction buildPaymentAllocationPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.paymentAllocation', 'Payment allocation')\n const title = buildDocumentTitle(label, null, readRecordText(record, 'id'))\n const subtitle = formatSubtitle(formatAmount(readRecordText(record, 'amount'), record.currency_code ?? record.currencyCode))\n return { title, subtitle, icon: 'layers', badge: label }\n}\n\nfunction buildDocumentAddressPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.address', 'Address')\n const title = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'company_name', 'companyName'),\n readRecordText(record, 'address_line1', 'addressLine1'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'address_line1', 'addressLine1'),\n readRecordText(record, 'city'),\n readRecordText(record, 'region'),\n readRecordText(record, 'country'),\n )\n return { title: title ?? label, subtitle, icon: 'map-pin', badge: label }\n}\n\nfunction buildNotePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.note', 'Note')\n const title = snippet(readRecordText(record, 'body'), 120) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'author_user_id', 'authorUserId'))\n return { title, subtitle, icon: 'sticky-note', badge: label }\n}\n\nfunction buildOrderLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.orderLine', 'Order line')\n const lineTitle = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'description'),\n readRecordText(record, 'line_number', 'lineNumber'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildQuoteLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.quoteLine', 'Quote line')\n const lineTitle = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'description'),\n readRecordText(record, 'line_number', 'lineNumber'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildInvoiceLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.invoiceLine', 'Invoice line')\n const lineTitle = pickText(readRecordText(record, 'description'), readRecordText(record, 'line_number', 'lineNumber'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildCreditMemoLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.creditMemoLine', 'Credit memo line')\n const lineTitle = pickText(readRecordText(record, 'description'), readRecordText(record, 'line_number', 'lineNumber'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildShipmentItemPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shipmentItem', 'Shipment item')\n const subtitle = formatSubtitle(readRecordText(record, 'quantity'))\n return { title: label, subtitle, icon: 'package', badge: label }\n}\n\nfunction buildOrderAdjustmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.orderAdjustment', 'Order adjustment')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'code'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'amount_gross', 'amountGross'), record.currency_code ?? record.currencyCode),\n )\n return { title: title ? `${label} ${title}` : label, subtitle, icon: 'sliders', badge: label }\n}\n\nfunction buildQuoteAdjustmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.quoteAdjustment', 'Quote adjustment')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'code'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'amount_gross', 'amountGross'), record.currency_code ?? record.currencyCode),\n )\n return { title: title ? `${label} ${title}` : label, subtitle, icon: 'sliders', badge: label }\n}\n\nfunction buildChannelPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.channel', 'Channel')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'code'), readRecordText(record, 'status'))\n return { title, subtitle, icon: 'store', badge: label }\n}\n\nfunction buildShippingMethodPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shippingMethod', 'Shipping method')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'carrier_code', 'carrierCode'), readRecordText(record, 'service_level', 'serviceLevel'))\n return { title, subtitle, icon: 'truck', badge: label }\n}\n\nfunction buildDeliveryWindowPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.deliveryWindow', 'Delivery window')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'lead_time_days', 'leadTimeDays'), readRecordText(record, 'timezone'))\n return { title, subtitle, icon: 'clock', badge: label }\n}\n\nfunction buildPaymentMethodPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.paymentMethod', 'Payment method')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'provider_key', 'providerKey'))\n return { title, subtitle, icon: 'credit-card', badge: label }\n}\n\nfunction buildTaxRatePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.taxRate', 'Tax rate')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'rate'), readRecordText(record, 'country_code', 'countryCode'))\n return { title, subtitle, icon: 'percent', badge: label }\n}\n\nfunction buildDocumentTagPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.documentTag', 'Document tag')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'slug'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'description'))\n return { title, subtitle, icon: 'tag', badge: label }\n}\n\nexport const searchConfig: SearchModuleConfig = {\n entities: [\n {\n entityId: 'sales:sales_channel',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name ?? ctx.customFields.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Website', record.website_url ?? record.websiteUrl)\n appendLine(lines, 'Contact email', record.contact_email ?? record.contactEmail)\n appendLine(lines, 'Contact phone', record.contact_phone ?? record.contactPhone)\n return buildIndexSource(ctx, buildChannelPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildChannelPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const channelId = readRecordText(ctx.record, 'id')\n return channelId ? `${SALES_CHANNELS_URL}/${encodeURIComponent(channelId)}/edit` : SALES_CHANNELS_URL\n },\n },\n {\n entityId: 'sales:sales_order',\n enabled: true,\n priority: 10,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Order number', record.order_number ?? record.orderNumber)\n appendLine(lines, 'Customer', resolveCustomerName(record))\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Fulfillment status', record.fulfillment_status ?? record.fulfillmentStatus)\n appendLine(lines, 'Payment status', record.payment_status ?? record.paymentStatus)\n appendLine(lines, 'External reference', record.external_reference ?? record.externalReference)\n appendLine(lines, 'Customer reference', record.customer_reference ?? record.customerReference)\n return buildIndexSource(ctx, buildOrderPresenter(translate, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderPresenter(translate, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => buildOrderUrl(readRecordText(ctx.record, 'id')),\n },\n {\n entityId: 'sales:sales_quote',\n enabled: true,\n priority: 10,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Quote number', record.quote_number ?? record.quoteNumber)\n appendLine(lines, 'Customer', resolveCustomerName(record))\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Valid until', record.valid_until ?? record.validUntil)\n appendLine(lines, 'External reference', record.external_reference ?? record.externalReference)\n appendLine(lines, 'Customer reference', record.customer_reference ?? record.customerReference)\n return buildIndexSource(ctx, buildQuotePresenter(translate, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuotePresenter(translate, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(readRecordText(ctx.record, 'id')),\n },\n {\n entityId: 'sales:sales_order_line',\n enabled: true,\n priority: 7,\n fieldPolicy: {\n searchable: ['name', 'description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata', 'catalog_snapshot', 'configuration', 'promotion_snapshot'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n appendLine(lines, 'Status', record.status)\n return buildIndexSource(ctx, buildOrderLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_quote_line',\n enabled: true,\n priority: 7,\n fieldPolicy: {\n searchable: ['name', 'description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata', 'catalog_snapshot', 'configuration', 'promotion_snapshot'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n appendLine(lines, 'Status', record.status)\n return buildIndexSource(ctx, buildQuoteLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuoteLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(resolveQuoteId(ctx.record)),\n },\n {\n entityId: 'sales:sales_order_adjustment',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Amount gross', record.amount_gross ?? record.amountGross)\n return buildIndexSource(ctx, buildOrderAdjustmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderAdjustmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_quote_adjustment',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Amount gross', record.amount_gross ?? record.amountGross)\n return buildIndexSource(ctx, buildQuoteAdjustmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuoteAdjustmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(resolveQuoteId(ctx.record)),\n },\n {\n entityId: 'sales:sales_shipment',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Shipment number', record.shipment_number ?? record.shipmentNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Carrier', record.carrier_name ?? record.carrierName)\n appendLine(lines, 'Tracking numbers', record.tracking_numbers ?? record.trackingNumbers)\n return buildIndexSource(ctx, buildShipmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShipmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_shipment_item',\n enabled: true,\n priority: 5,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Shipment', record.shipment_id ?? record.shipmentId)\n return buildIndexSource(ctx, buildShipmentItemPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShipmentItemPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_invoice',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Invoice number', record.invoice_number ?? record.invoiceNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Due date', record.due_date ?? record.dueDate)\n appendLine(lines, 'Total gross', record.grand_total_gross_amount ?? record.grandTotalGrossAmount)\n return buildIndexSource(ctx, buildInvoicePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildInvoicePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_invoice_line',\n enabled: true,\n priority: 5,\n fieldPolicy: {\n searchable: ['description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n return buildIndexSource(ctx, buildInvoiceLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildInvoiceLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_credit_memo',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Credit memo number', record.credit_memo_number ?? record.creditMemoNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Issue date', record.issue_date ?? record.issueDate)\n appendLine(lines, 'Total gross', record.grand_total_gross_amount ?? record.grandTotalGrossAmount)\n return buildIndexSource(ctx, buildCreditMemoPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildCreditMemoPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_credit_memo_line',\n enabled: true,\n priority: 5,\n fieldPolicy: {\n searchable: ['description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n return buildIndexSource(ctx, buildCreditMemoLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildCreditMemoLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_payment',\n enabled: true,\n priority: 8,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Payment reference', record.payment_reference ?? record.paymentReference)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Amount', record.amount)\n appendLine(lines, 'Currency', record.currency_code ?? record.currencyCode)\n return buildIndexSource(ctx, buildPaymentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_payment_allocation',\n enabled: true,\n priority: 5,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Amount', record.amount)\n appendLine(lines, 'Currency', record.currency_code ?? record.currencyCode)\n appendLine(lines, 'Order', record.order_id ?? record.orderId)\n appendLine(lines, 'Invoice', record.invoice_id ?? record.invoiceId)\n return buildIndexSource(ctx, buildPaymentAllocationPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentAllocationPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_note',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Body', record.body)\n appendLine(lines, 'Author', record.author_user_id ?? record.authorUserId)\n appendLine(lines, 'Context type', record.context_type ?? record.contextType)\n return buildIndexSource(ctx, buildNotePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildNotePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const kind = resolveDocumentKind(ctx.record)\n const documentId = resolveDocumentId(ctx.record)\n return resolveDocumentUrl(kind, documentId)\n },\n },\n {\n entityId: 'sales:sales_document_address',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Company', record.company_name ?? record.companyName)\n appendLine(lines, 'Address', record.address_line1 ?? record.addressLine1)\n appendLine(lines, 'City', record.city)\n appendLine(lines, 'Region', record.region)\n appendLine(lines, 'Country', record.country)\n return buildIndexSource(ctx, buildDocumentAddressPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDocumentAddressPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const kind = resolveDocumentKind(ctx.record)\n const documentId = resolveDocumentId(ctx.record)\n return resolveDocumentUrl(kind, documentId)\n },\n },\n {\n entityId: 'sales:sales_shipping_method',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Carrier', record.carrier_code ?? record.carrierCode)\n appendLine(lines, 'Service level', record.service_level ?? record.serviceLevel)\n return buildIndexSource(ctx, buildShippingMethodPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShippingMethodPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_delivery_window',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Lead time', record.lead_time_days ?? record.leadTimeDays)\n appendLine(lines, 'Timezone', record.timezone)\n return buildIndexSource(ctx, buildDeliveryWindowPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDeliveryWindowPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_payment_method',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Provider', record.provider_key ?? record.providerKey)\n appendLine(lines, 'Terms', record.terms)\n return buildIndexSource(ctx, buildPaymentMethodPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentMethodPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_tax_rate',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Rate', record.rate)\n appendLine(lines, 'Country', record.country_code ?? record.countryCode)\n return buildIndexSource(ctx, buildTaxRatePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildTaxRatePresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_document_tag',\n enabled: true,\n priority: 3,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Slug', record.slug)\n appendLine(lines, 'Description', record.description)\n return buildIndexSource(ctx, buildDocumentTagPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDocumentTagPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_ORDERS_URL,\n },\n ],\n}\n\nexport default searchConfig\nexport const config = searchConfig\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1027,6 +1027,9 @@ async function seedSalesExamples(em, container, scope) {
1027
1027
  comment: line.comment ?? null,
1028
1028
  quantity: line.quantity,
1029
1029
  quantityUnit: line.quantityUnit ?? null,
1030
+ normalizedQuantity: line.quantity,
1031
+ normalizedUnit: line.quantityUnit ?? null,
1032
+ uomSnapshot: null,
1030
1033
  currencyCode,
1031
1034
  unitPriceNet,
1032
1035
  unitPriceGross,
@@ -1110,6 +1113,9 @@ async function seedSalesExamples(em, container, scope) {
1110
1113
  comment: source.comment,
1111
1114
  quantity: toAmount(source.quantity),
1112
1115
  quantityUnit: source.quantityUnit ?? null,
1116
+ normalizedQuantity: toAmount(source.normalizedQuantity ?? source.quantity),
1117
+ normalizedUnit: source.normalizedUnit ?? source.quantityUnit ?? null,
1118
+ uomSnapshot: source.uomSnapshot && typeof source.uomSnapshot === "object" ? toSnapshot(source.uomSnapshot) : null,
1113
1119
  currencyCode: source.currencyCode,
1114
1120
  unitPriceNet: toAmount(source.unitPriceNet ?? 0),
1115
1121
  unitPriceGross: toAmount(source.unitPriceGross ?? source.unitPriceNet ?? 0),
@@ -1129,7 +1135,8 @@ async function seedSalesExamples(em, container, scope) {
1129
1135
  em.persist(line);
1130
1136
  });
1131
1137
  calculation.adjustments.forEach((adj, idx) => {
1132
- const lineIndex = adj.metadata && typeof adj.metadata === "object" ? adj.metadata.lineIndex : null;
1138
+ const adjMeta = adj.metadata && typeof adj.metadata === "object" ? adj.metadata : null;
1139
+ const lineIndex = adjMeta ? adjMeta.lineIndex : null;
1133
1140
  const lineRef = typeof lineIndex === "number" && lineIndex >= 0 && lineIndex < seed.lines.length ? lineSnapshots[lineIndex]?.id ?? null : null;
1134
1141
  const adjustment = em.create(SalesQuoteAdjustment, {
1135
1142
  id: adj.id ?? randomUUID(),
@@ -1217,6 +1224,9 @@ async function seedSalesExamples(em, container, scope) {
1217
1224
  comment: line.comment ?? null,
1218
1225
  quantity: line.quantity,
1219
1226
  quantityUnit: line.quantityUnit ?? null,
1227
+ normalizedQuantity: line.quantity,
1228
+ normalizedUnit: line.quantityUnit ?? null,
1229
+ uomSnapshot: null,
1220
1230
  currencyCode,
1221
1231
  unitPriceNet,
1222
1232
  unitPriceGross,
@@ -1309,6 +1319,9 @@ async function seedSalesExamples(em, container, scope) {
1309
1319
  comment: source.comment,
1310
1320
  quantity: toAmount(source.quantity),
1311
1321
  quantityUnit: source.quantityUnit ?? null,
1322
+ normalizedQuantity: toAmount(source.normalizedQuantity ?? source.quantity),
1323
+ normalizedUnit: source.normalizedUnit ?? source.quantityUnit ?? null,
1324
+ uomSnapshot: source.uomSnapshot && typeof source.uomSnapshot === "object" ? toSnapshot(source.uomSnapshot) : null,
1312
1325
  reservedQuantity: "0",
1313
1326
  fulfilledQuantity: "0",
1314
1327
  invoicedQuantity: "0",