@dainamite/cpq 0.5.0 → 0.7.0
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.
- package/CHANGELOG.md +64 -0
- package/MIGRATION.md +74 -0
- package/dist/modules/cpq/acl.js +1 -0
- package/dist/modules/cpq/acl.js.map +2 -2
- package/dist/modules/cpq/api/_helpers/adjustmentCommandRoute.js +45 -0
- package/dist/modules/cpq/api/_helpers/adjustmentCommandRoute.js.map +7 -0
- package/dist/modules/cpq/api/_helpers/quoteMutationGuard.js +23 -0
- package/dist/modules/cpq/api/_helpers/quoteMutationGuard.js.map +7 -0
- package/dist/modules/cpq/api/_helpers/quoteRouteOpenApi.js +19 -0
- package/dist/modules/cpq/api/_helpers/quoteRouteOpenApi.js.map +7 -0
- package/dist/modules/cpq/api/orders/[orderId]/route.js +17 -1
- package/dist/modules/cpq/api/orders/[orderId]/route.js.map +2 -2
- package/dist/modules/cpq/api/orders/route.js +47 -2
- package/dist/modules/cpq/api/orders/route.js.map +2 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/restore/route.js +54 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/restore/route.js.map +7 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/route.js +42 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/route.js.map +2 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/items/route.js +27 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/items/route.js.map +2 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/[adjustmentId]/route.js +47 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/[adjustmentId]/route.js.map +7 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/preview/route.js +30 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/preview/route.js.map +7 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/route.js +47 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/route.js.map +7 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/recalculate/route.js +32 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/recalculate/route.js.map +2 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/status/route.js +33 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/status/route.js.map +2 -2
- package/dist/modules/cpq/api/quotes/price/route.js +43 -3
- package/dist/modules/cpq/api/quotes/price/route.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/AssetsTable.js +3 -9
- package/dist/modules/cpq/backend/cpq/inventory/AssetsTable.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/SubscriptionsTable.js +21 -25
- package/dist/modules/cpq/backend/cpq/inventory/SubscriptionsTable.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.js +48 -47
- package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.meta.js +1 -1
- package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.meta.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/page.meta.js +3 -3
- package/dist/modules/cpq/backend/cpq/inventory/page.meta.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/shared.js +37 -2
- package/dist/modules/cpq/backend/cpq/inventory/shared.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.js +174 -184
- package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.meta.js +1 -1
- package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.meta.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/offerings/[id]/page.js +168 -143
- package/dist/modules/cpq/backend/cpq/offerings/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/offerings/page.js +36 -34
- package/dist/modules/cpq/backend/cpq/offerings/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/orders/[id]/page.js +140 -280
- package/dist/modules/cpq/backend/cpq/orders/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/orders/page.js +6 -6
- package/dist/modules/cpq/backend/cpq/orders/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/orders/page.meta.js +1 -1
- package/dist/modules/cpq/backend/cpq/orders/page.meta.js.map +1 -1
- package/dist/modules/cpq/backend/cpq/price-rules/PriceRuleForm.js +41 -36
- package/dist/modules/cpq/backend/cpq/price-rules/PriceRuleForm.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.js +76 -72
- package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.meta.js +1 -1
- package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.meta.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/price-rules/page.js +18 -15
- package/dist/modules/cpq/backend/cpq/price-rules/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.js +23 -21
- package/dist/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/[id]/ImportPreview.js +22 -50
- package/dist/modules/cpq/backend/cpq/pricing/[id]/ImportPreview.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/[id]/page.js +74 -52
- package/dist/modules/cpq/backend/cpq/pricing/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/[id]/xlsxImport.js +20 -17
- package/dist/modules/cpq/backend/cpq/pricing/[id]/xlsxImport.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/page.js +1 -1
- package/dist/modules/cpq/backend/cpq/pricing/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/ArcQuoteConfigurator.js +115 -123
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/ArcQuoteConfigurator.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentDialog.js +208 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentDialog.js.map +7 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentsPanel.js +79 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentsPanel.js.map +7 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/arcLineRemoval.js +53 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/arcLineRemoval.js.map +7 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/priceAdjustmentContext.js +107 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/priceAdjustmentContext.js.map +7 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/usePriceAdjustments.js +130 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/usePriceAdjustments.js.map +7 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/page.js +269 -311
- package/dist/modules/cpq/backend/cpq/quotes/[id]/page.js.map +3 -3
- package/dist/modules/cpq/backend/cpq/quotes/page.js +23 -19
- package/dist/modules/cpq/backend/cpq/quotes/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/quotes/page.meta.js +1 -1
- package/dist/modules/cpq/backend/cpq/quotes/page.meta.js.map +1 -1
- package/dist/modules/cpq/backend/cpq/specifications/[id]/DependsOnRulesEditor.js +19 -15
- package/dist/modules/cpq/backend/cpq/specifications/[id]/DependsOnRulesEditor.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/specifications/[id]/page.js +171 -178
- package/dist/modules/cpq/backend/cpq/specifications/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/specifications/page.js +2 -2
- package/dist/modules/cpq/backend/cpq/specifications/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/detail/page.js +60 -50
- package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/detail/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/page.js +22 -18
- package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/wizards/page.js +1 -1
- package/dist/modules/cpq/backend/cpq/wizards/page.js.map +2 -2
- package/dist/modules/cpq/ce.js +8 -0
- package/dist/modules/cpq/ce.js.map +2 -2
- package/dist/modules/cpq/cli.js +34 -1
- package/dist/modules/cpq/cli.js.map +2 -2
- package/dist/modules/cpq/commands/price-adjustments.js +107 -0
- package/dist/modules/cpq/commands/price-adjustments.js.map +7 -0
- package/dist/modules/cpq/components/ArcLineDiff.js +53 -0
- package/dist/modules/cpq/components/ArcLineDiff.js.map +7 -0
- package/dist/modules/cpq/components/ChargeBreakdownTable.js +148 -0
- package/dist/modules/cpq/components/ChargeBreakdownTable.js.map +7 -0
- package/dist/modules/cpq/components/PriceWaterfall.js +68 -0
- package/dist/modules/cpq/components/PriceWaterfall.js.map +7 -0
- package/dist/modules/cpq/components/PricingSummaryCard.js +112 -0
- package/dist/modules/cpq/components/PricingSummaryCard.js.map +7 -0
- package/dist/modules/cpq/components/StatusPath.js +5 -3
- package/dist/modules/cpq/components/StatusPath.js.map +2 -2
- package/dist/modules/cpq/components/useCpqRowActions.js +10 -22
- package/dist/modules/cpq/components/useCpqRowActions.js.map +2 -2
- package/dist/modules/cpq/components/useGrantedFeatures.js +27 -0
- package/dist/modules/cpq/components/useGrantedFeatures.js.map +7 -0
- package/dist/modules/cpq/data/entities.js +97 -0
- package/dist/modules/cpq/data/entities.js.map +2 -2
- package/dist/modules/cpq/data/price-adjustments.js +70 -0
- package/dist/modules/cpq/data/price-adjustments.js.map +7 -0
- package/dist/modules/cpq/data/validators.js +4 -0
- package/dist/modules/cpq/data/validators.js.map +2 -2
- package/dist/modules/cpq/di.js +6 -0
- package/dist/modules/cpq/di.js.map +2 -2
- package/dist/modules/cpq/events.js +47 -0
- package/dist/modules/cpq/events.js.map +2 -2
- package/dist/modules/cpq/i18n/de.json +1220 -0
- package/dist/modules/cpq/i18n/en.json +1220 -0
- package/dist/modules/cpq/i18n/es.json +1220 -0
- package/dist/modules/cpq/i18n/pl.json +1220 -0
- package/dist/modules/cpq/index.js +1 -1
- package/dist/modules/cpq/index.js.map +2 -2
- package/dist/modules/cpq/lib/auditActor.js +10 -0
- package/dist/modules/cpq/lib/auditActor.js.map +7 -0
- package/dist/modules/cpq/lib/formatMoney.js +7 -0
- package/dist/modules/cpq/lib/formatMoney.js.map +7 -0
- package/dist/modules/cpq/lib/priceAdjustmentDefaults.js +60 -0
- package/dist/modules/cpq/lib/priceAdjustmentDefaults.js.map +7 -0
- package/dist/modules/cpq/lib/priceAdjustmentView.js +169 -0
- package/dist/modules/cpq/lib/priceAdjustmentView.js.map +7 -0
- package/dist/modules/cpq/lib/quotePermissions.js +13 -0
- package/dist/modules/cpq/lib/quotePermissions.js.map +7 -0
- package/dist/modules/cpq/lib/quoteSummaryView.js +28 -0
- package/dist/modules/cpq/lib/quoteSummaryView.js.map +7 -0
- package/dist/modules/cpq/migrations/Migration20261110213052.js +22 -0
- package/dist/modules/cpq/migrations/Migration20261110213052.js.map +7 -0
- package/dist/modules/cpq/services/arcLineRemoval.js +53 -0
- package/dist/modules/cpq/services/arcLineRemoval.js.map +7 -0
- package/dist/modules/cpq/services/arcPriceFreeze.js +79 -0
- package/dist/modules/cpq/services/arcPriceFreeze.js.map +7 -0
- package/dist/modules/cpq/services/cpqOrderService.js +25 -28
- package/dist/modules/cpq/services/cpqOrderService.js.map +2 -2
- package/dist/modules/cpq/services/cpqPricingService.js +7 -0
- package/dist/modules/cpq/services/cpqPricingService.js.map +2 -2
- package/dist/modules/cpq/services/cpqQuotingService.js +330 -109
- package/dist/modules/cpq/services/cpqQuotingService.js.map +2 -2
- package/dist/modules/cpq/services/orderPricingSummary.js +26 -0
- package/dist/modules/cpq/services/orderPricingSummary.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/adjustmentService.js +264 -0
- package/dist/modules/cpq/services/priceAdjustments/adjustmentService.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/chargeWaterfall.js +25 -0
- package/dist/modules/cpq/services/priceAdjustments/chargeWaterfall.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/loadQuoteAdjustments.js +38 -0
- package/dist/modules/cpq/services/priceAdjustments/loadQuoteAdjustments.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/pricingSnapshot.js +104 -0
- package/dist/modules/cpq/services/priceAdjustments/pricingSnapshot.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/quoteAdjustmentLifecycle.js +102 -0
- package/dist/modules/cpq/services/priceAdjustments/quoteAdjustmentLifecycle.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/quotePricingEvents.js +52 -0
- package/dist/modules/cpq/services/priceAdjustments/quotePricingEvents.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/quotePricingWrite.js +37 -0
- package/dist/modules/cpq/services/priceAdjustments/quotePricingWrite.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/resolveManualAdjustments.js +107 -0
- package/dist/modules/cpq/services/priceAdjustments/resolveManualAdjustments.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/storedAdjustmentFailure.js +30 -0
- package/dist/modules/cpq/services/priceAdjustments/storedAdjustmentFailure.js.map +7 -0
- package/dist/modules/cpq/services/types.js.map +2 -2
- package/dist/modules/cpq/setup.js +6 -0
- package/dist/modules/cpq/setup.js.map +2 -2
- package/dist/modules/cpq/widgets/injection/customer-inventory/widget.client.js +39 -31
- package/dist/modules/cpq/widgets/injection/customer-inventory/widget.client.js.map +2 -2
- package/dist/modules/cpq/widgets/injection/order-cpq-tab/widget.client.js +13 -5
- package/dist/modules/cpq/widgets/injection/order-cpq-tab/widget.client.js.map +2 -2
- package/dist/modules/cpq/widgets/injection/quote-configurator/widget.client.js +41 -21
- package/dist/modules/cpq/widgets/injection/quote-configurator/widget.client.js.map +2 -2
- package/dist/modules/cpq/widgets/injection-table.js +2 -2
- package/dist/modules/cpq/widgets/injection-table.js.map +2 -2
- package/dist/modules/cpq/workflows/WizardRunner.js +10 -8
- package/dist/modules/cpq/workflows/WizardRunner.js.map +2 -2
- package/dist/modules/cpq/workflows/WizardTrigger.js +15 -9
- package/dist/modules/cpq/workflows/WizardTrigger.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/CustomerSelectStep.js +9 -7
- package/dist/modules/cpq/workflows/steps/CustomerSelectStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/InventorySelectStep.js +9 -4
- package/dist/modules/cpq/workflows/steps/InventorySelectStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/ItemListStep.js +16 -19
- package/dist/modules/cpq/workflows/steps/ItemListStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/OfferingSelectStep.js +19 -32
- package/dist/modules/cpq/workflows/steps/OfferingSelectStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/ProductConfigureStep.js +8 -6
- package/dist/modules/cpq/workflows/steps/ProductConfigureStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/ReviewStep.js +32 -30
- package/dist/modules/cpq/workflows/steps/ReviewStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/index.js +12 -0
- package/dist/modules/cpq/workflows/steps/index.js.map +2 -2
- package/package.json +1 -1
- package/src/modules/cpq/__integration__/TC-CPQ-ARC-012.spec.ts +134 -0
- package/src/modules/cpq/__tests__/i18n/dictionaries.test.ts +62 -0
- package/src/modules/cpq/__tests__/i18n/hardcodedStrings.test.ts +35 -0
- package/src/modules/cpq/__tests__/i18n/sourceScan.ts +109 -0
- package/src/modules/cpq/acl.ts +1 -0
- package/src/modules/cpq/api/__tests__/adjustmentRoutes.test.ts +79 -0
- package/src/modules/cpq/api/__tests__/quoteWriteGuards.test.ts +100 -0
- package/src/modules/cpq/api/_helpers/__tests__/quoteMutationGuard.test.ts +48 -0
- package/src/modules/cpq/api/_helpers/adjustmentCommandRoute.ts +45 -0
- package/src/modules/cpq/api/_helpers/quoteMutationGuard.ts +38 -0
- package/src/modules/cpq/api/_helpers/quoteRouteOpenApi.ts +19 -0
- package/src/modules/cpq/api/orders/[orderId]/route.ts +18 -0
- package/src/modules/cpq/api/orders/route.ts +51 -1
- package/src/modules/cpq/api/quotes/[quoteId]/items/[lineId]/restore/route.ts +56 -0
- package/src/modules/cpq/api/quotes/[quoteId]/items/[lineId]/route.ts +48 -1
- package/src/modules/cpq/api/quotes/[quoteId]/items/route.ts +31 -1
- package/src/modules/cpq/api/quotes/[quoteId]/price-adjustments/[adjustmentId]/route.ts +39 -0
- package/src/modules/cpq/api/quotes/[quoteId]/price-adjustments/preview/route.ts +24 -0
- package/src/modules/cpq/api/quotes/[quoteId]/price-adjustments/route.ts +40 -0
- package/src/modules/cpq/api/quotes/[quoteId]/recalculate/__tests__/route.test.ts +95 -0
- package/src/modules/cpq/api/quotes/[quoteId]/recalculate/route.ts +40 -1
- package/src/modules/cpq/api/quotes/[quoteId]/status/__tests__/route.test.ts +74 -0
- package/src/modules/cpq/api/quotes/[quoteId]/status/route.ts +37 -1
- package/src/modules/cpq/api/quotes/price/__tests__/route.test.ts +37 -0
- package/src/modules/cpq/api/quotes/price/route.ts +28 -2
- package/src/modules/cpq/backend/cpq/inventory/AssetsTable.tsx +3 -9
- package/src/modules/cpq/backend/cpq/inventory/SubscriptionsTable.tsx +22 -26
- package/src/modules/cpq/backend/cpq/inventory/assets/[id]/page.meta.ts +1 -1
- package/src/modules/cpq/backend/cpq/inventory/assets/[id]/page.tsx +43 -46
- package/src/modules/cpq/backend/cpq/inventory/page.meta.ts +3 -3
- package/src/modules/cpq/backend/cpq/inventory/shared.tsx +37 -1
- package/src/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.meta.ts +1 -1
- package/src/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.tsx +164 -120
- package/src/modules/cpq/backend/cpq/offerings/[id]/page.tsx +169 -130
- package/src/modules/cpq/backend/cpq/offerings/page.tsx +34 -24
- package/src/modules/cpq/backend/cpq/orders/[id]/page.tsx +122 -308
- package/src/modules/cpq/backend/cpq/orders/page.meta.ts +1 -1
- package/src/modules/cpq/backend/cpq/orders/page.tsx +6 -6
- package/src/modules/cpq/backend/cpq/price-rules/PriceRuleForm.tsx +48 -34
- package/src/modules/cpq/backend/cpq/price-rules/[id]/page.meta.ts +1 -1
- package/src/modules/cpq/backend/cpq/price-rules/[id]/page.tsx +76 -70
- package/src/modules/cpq/backend/cpq/price-rules/page.tsx +25 -16
- package/src/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.tsx +24 -18
- package/src/modules/cpq/backend/cpq/pricing/[id]/ImportPreview.tsx +29 -19
- package/src/modules/cpq/backend/cpq/pricing/[id]/page.tsx +95 -47
- package/src/modules/cpq/backend/cpq/pricing/[id]/xlsxImport.ts +23 -15
- package/src/modules/cpq/backend/cpq/pricing/page.tsx +1 -1
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/ArcQuoteConfigurator.tsx +111 -88
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentDialog.tsx +260 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentsPanel.tsx +124 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/__tests__/PriceAdjustmentsPanel.test.tsx +76 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/arcLineRemoval.tsx +76 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/priceAdjustmentContext.tsx +133 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/usePriceAdjustments.tsx +165 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/page.tsx +304 -348
- package/src/modules/cpq/backend/cpq/quotes/page.meta.ts +1 -1
- package/src/modules/cpq/backend/cpq/quotes/page.tsx +29 -21
- package/src/modules/cpq/backend/cpq/specifications/[id]/DependsOnRulesEditor.tsx +19 -15
- package/src/modules/cpq/backend/cpq/specifications/[id]/page.tsx +171 -171
- package/src/modules/cpq/backend/cpq/specifications/page.tsx +2 -2
- package/src/modules/cpq/backend/cpq/wizards/[definitionCode]/detail/page.tsx +51 -41
- package/src/modules/cpq/backend/cpq/wizards/[definitionCode]/page.tsx +17 -13
- package/src/modules/cpq/backend/cpq/wizards/page.tsx +1 -1
- package/src/modules/cpq/ce.ts +8 -0
- package/src/modules/cpq/cli.ts +48 -1
- package/src/modules/cpq/commands/__tests__/price-adjustments.test.ts +54 -0
- package/src/modules/cpq/commands/price-adjustments.ts +90 -0
- package/src/modules/cpq/components/ArcLineDiff.tsx +87 -0
- package/src/modules/cpq/components/ChargeBreakdownTable.tsx +203 -0
- package/src/modules/cpq/components/PriceWaterfall.tsx +96 -0
- package/src/modules/cpq/components/PricingSummaryCard.tsx +128 -0
- package/src/modules/cpq/components/StatusPath.tsx +7 -4
- package/src/modules/cpq/components/__tests__/PriceWaterfall.test.tsx +38 -0
- package/src/modules/cpq/components/useCpqRowActions.tsx +17 -25
- package/src/modules/cpq/components/useGrantedFeatures.ts +35 -0
- package/src/modules/cpq/data/__tests__/price-adjustment-migration.test.ts +11 -0
- package/src/modules/cpq/data/__tests__/price-adjustments.test.ts +26 -0
- package/src/modules/cpq/data/entities.ts +83 -0
- package/src/modules/cpq/data/price-adjustments.ts +67 -0
- package/src/modules/cpq/data/validators.ts +3 -0
- package/src/modules/cpq/di.ts +6 -0
- package/src/modules/cpq/events.ts +53 -2
- package/src/modules/cpq/i18n/de.json +1220 -0
- package/src/modules/cpq/i18n/en.json +1220 -0
- package/src/modules/cpq/i18n/es.json +1220 -0
- package/src/modules/cpq/i18n/pl.json +1220 -0
- package/src/modules/cpq/index.ts +1 -1
- package/src/modules/cpq/lib/__tests__/auditActor.test.ts +12 -0
- package/src/modules/cpq/lib/__tests__/priceAdjustmentDefaults.test.ts +37 -0
- package/src/modules/cpq/lib/__tests__/priceAdjustmentView.test.ts +152 -0
- package/src/modules/cpq/lib/__tests__/quotePermissions.test.ts +30 -0
- package/src/modules/cpq/lib/__tests__/quoteSummaryView.test.ts +56 -0
- package/src/modules/cpq/lib/auditActor.ts +13 -0
- package/src/modules/cpq/lib/formatMoney.ts +4 -0
- package/src/modules/cpq/lib/priceAdjustmentDefaults.ts +36 -0
- package/src/modules/cpq/lib/priceAdjustmentView.ts +259 -0
- package/src/modules/cpq/lib/quotePermissions.ts +22 -0
- package/src/modules/cpq/lib/quoteSummaryView.ts +51 -0
- package/src/modules/cpq/migrations/.snapshot-open-mercato.json +3298 -2423
- package/src/modules/cpq/migrations/Migration20261110213052.ts +22 -0
- package/src/modules/cpq/services/__tests__/_helpers/mockEm.ts +9 -2
- package/src/modules/cpq/services/__tests__/adjustmentService.test.ts +183 -0
- package/src/modules/cpq/services/__tests__/arcLineRemoval.test.ts +109 -0
- package/src/modules/cpq/services/__tests__/arcPriceFreeze.test.ts +141 -0
- package/src/modules/cpq/services/__tests__/chargeWaterfall.test.ts +28 -0
- package/src/modules/cpq/services/__tests__/cpqOrderService.test.ts +35 -2
- package/src/modules/cpq/services/__tests__/cpqPricingService.test.ts +57 -0
- package/src/modules/cpq/services/__tests__/cpqQuotingService.arc.test.ts +237 -0
- package/src/modules/cpq/services/__tests__/cpqQuotingService.test.ts +58 -3
- package/src/modules/cpq/services/__tests__/orderPricingSummary.test.ts +50 -0
- package/src/modules/cpq/services/__tests__/pricingSnapshot.test.ts +62 -0
- package/src/modules/cpq/services/__tests__/quoteAdjustmentLifecycle.test.ts +35 -0
- package/src/modules/cpq/services/__tests__/quoteAdjustmentPricing.test.ts +65 -0
- package/src/modules/cpq/services/__tests__/quoteCloneAdjustments.test.ts +45 -0
- package/src/modules/cpq/services/__tests__/quoteDetachTargetAdjustments.test.ts +54 -0
- package/src/modules/cpq/services/__tests__/quoteEventsService.test.ts +72 -0
- package/src/modules/cpq/services/__tests__/quotePricingEvents.test.ts +126 -0
- package/src/modules/cpq/services/__tests__/quotePricingIsolation.test.ts +52 -0
- package/src/modules/cpq/services/__tests__/quotePricingWrite.test.ts +74 -0
- package/src/modules/cpq/services/__tests__/resolveManualAdjustments.test.ts +90 -0
- package/src/modules/cpq/services/__tests__/storedAdjustmentFailure.test.ts +9 -0
- package/src/modules/cpq/services/arcLineRemoval.ts +87 -0
- package/src/modules/cpq/services/arcPriceFreeze.ts +165 -0
- package/src/modules/cpq/services/cpqOrderService.ts +22 -28
- package/src/modules/cpq/services/cpqPricingService.ts +8 -0
- package/src/modules/cpq/services/cpqQuotingService.ts +374 -125
- package/src/modules/cpq/services/orderPricingSummary.ts +47 -0
- package/src/modules/cpq/services/priceAdjustments/adjustmentService.ts +249 -0
- package/src/modules/cpq/services/priceAdjustments/chargeWaterfall.ts +28 -0
- package/src/modules/cpq/services/priceAdjustments/loadQuoteAdjustments.ts +25 -0
- package/src/modules/cpq/services/priceAdjustments/pricingSnapshot.ts +86 -0
- package/src/modules/cpq/services/priceAdjustments/quoteAdjustmentLifecycle.ts +68 -0
- package/src/modules/cpq/services/priceAdjustments/quotePricingEvents.ts +94 -0
- package/src/modules/cpq/services/priceAdjustments/quotePricingWrite.ts +51 -0
- package/src/modules/cpq/services/priceAdjustments/resolveManualAdjustments.ts +116 -0
- package/src/modules/cpq/services/priceAdjustments/storedAdjustmentFailure.ts +31 -0
- package/src/modules/cpq/services/types.ts +34 -1
- package/src/modules/cpq/setup.ts +7 -1
- package/src/modules/cpq/widgets/injection/customer-inventory/widget.client.tsx +38 -31
- package/src/modules/cpq/widgets/injection/order-cpq-tab/widget.client.tsx +7 -5
- package/src/modules/cpq/widgets/injection/quote-configurator/widget.client.tsx +36 -21
- package/src/modules/cpq/widgets/injection-table.ts +8 -2
- package/src/modules/cpq/workflows/WizardRunner.tsx +8 -5
- package/src/modules/cpq/workflows/WizardTrigger.tsx +15 -9
- package/src/modules/cpq/workflows/steps/CustomerSelectStep.tsx +11 -7
- package/src/modules/cpq/workflows/steps/InventorySelectStep.tsx +9 -5
- package/src/modules/cpq/workflows/steps/ItemListStep.tsx +18 -12
- package/src/modules/cpq/workflows/steps/OfferingSelectStep.tsx +20 -16
- package/src/modules/cpq/workflows/steps/ProductConfigureStep.tsx +8 -6
- package/src/modules/cpq/workflows/steps/ReviewStep.tsx +33 -18
- package/src/modules/cpq/workflows/steps/index.ts +12 -0
- package/src/modules/cpq/workflows/types.ts +4 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/cpq/data/price-adjustments.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\n\nexport const adjustmentTypeSchema = z.enum(['discount_percent', 'discount_absolute', 'price_override'])\nconst adjustmentFields = {\n adjustmentType: adjustmentTypeSchema,\n // Match numeric(18,4), so saving never silently rounds the previewed input.\n value: z.number().finite().min(0).max(99_999_999_999_999).multipleOf(0.0001),\n currencyCode: z.string().regex(/^[A-Z]{3}$/).nullish(),\n chargeTypeFilter: z.enum(['nrc', 'mrc']).nullish(),\n reasonCode: z.string().trim().min(1).max(100),\n reasonNote: z.string().trim().max(500).nullish(),\n expectedRevision: z.number().int().min(0).optional(),\n}\nexport const cpqPriceAdjustmentInputSchema = z.object({\n ...adjustmentFields,\n level: z.enum(['charge', 'line']),\n quoteLineId: z.string().uuid(),\n chargeCode: z.string().trim().min(1).max(255).nullish(),\n windowKind: z.literal('relative').optional(),\n fromMonth: z.literal(1).optional(),\n toMonth: z.null().optional(),\n}).strict().superRefine((input, ctx) => {\n const error = (path: string, message: string) => ctx.addIssue({ code: 'custom', path: [path], message })\n if (input.level === 'charge' && !input.chargeCode) error('chargeCode', 'TARGET_NOT_FOUND')\n if (input.level === 'charge' && input.chargeTypeFilter) error('chargeTypeFilter', 'TYPE_NOT_ALLOWED')\n if (input.level === 'line' && input.chargeCode) error('chargeCode', 'TYPE_NOT_ALLOWED')\n if (input.level === 'line' && input.adjustmentType !== 'discount_percent') error('adjustmentType', 'TYPE_NOT_ALLOWED')\n if (input.adjustmentType === 'discount_percent' && (input.value <= 0 || input.value > 100)) error('value', 'INVALID_PERCENT')\n if (input.adjustmentType === 'discount_absolute' && input.value <= 0) error('value', 'INVALID_AMOUNT')\n if (input.adjustmentType !== 'discount_percent' && !input.currencyCode) error('currencyCode', 'CURRENCY_REQUIRED')\n if (input.reasonCode === 'other' && !input.reasonNote) error('reasonNote', 'REASON_NOTE_REQUIRED')\n})\nexport const cpqPriceAdjustmentPatchSchema = z.object(adjustmentFields).partial().strict()\nexport type PriceAdjustmentInput = z.infer<typeof cpqPriceAdjustmentInputSchema>\nexport type PriceAdjustmentPatch = z.infer<typeof cpqPriceAdjustmentPatchSchema>\n\n/** Pure pricing representation; persistence metadata stays outside the resolver. */\nexport const resolvedPriceAdjustmentSchema = z.object({\n ...cpqPriceAdjustmentInputSchema.shape,\n id: z.string().uuid(),\n createdByUserId: z.string().uuid().optional(),\n})\nexport type PriceAdjustment = z.infer<typeof resolvedPriceAdjustmentSchema>\nexport const adjustmentErrorSchema = z.object({\n adjustmentId: z.string(),\n quoteLineId: z.string(),\n chargeCode: z.string().optional(),\n code: z.enum(['ADJUSTMENT_TARGET_MISSING', 'TARGET_AMBIGUOUS', 'ABOVE_STANDARD', 'CURRENCY_MISMATCH', 'TYPE_NOT_ALLOWED', 'LINE_NOT_ELIGIBLE', 'ADJUSTMENT_OVERLAP']),\n})\nexport type AdjustmentError = z.infer<typeof adjustmentErrorSchema>\n\nexport const cpqPriceAdjustmentPreviewSchema = z.object({\n draft: cpqPriceAdjustmentInputSchema,\n replaceAdjustmentId: z.string().uuid().optional(),\n}).strict()\n\nexport const ADJUSTMENT_TOGGLE = 'cpq.manual_price_adjustments'\nexport const REASON_DICTIONARY = 'cpq.price_adjustment_reason'\nexport const DEFAULT_ADJUSTMENT_REASONS = [\n { value: 'competitive_match', label: 'Competitive match' },\n { value: 'volume_commitment', label: 'Volume commitment' },\n { value: 'loyalty', label: 'Loyalty' },\n { value: 'promotion', label: 'Promotion' },\n { value: 'strategic_deal', label: 'Strategic deal' },\n { value: 'price_correction', label: 'Price correction' },\n { value: 'other', label: 'Other' },\n] as const\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -278,6 +278,7 @@ const cpqPricePreviewItemSchema = z.object({
|
|
|
278
278
|
{ message: "One of offeringId or productId is required" }
|
|
279
279
|
);
|
|
280
280
|
const cpqPricePreviewSchema = z.object({
|
|
281
|
+
includeWaterfall: z.boolean().optional().default(false),
|
|
281
282
|
primaryItem: cpqPricePreviewItemSchema.nullish(),
|
|
282
283
|
childItems: z.array(cpqPricePreviewItemSchema),
|
|
283
284
|
currencyCode: z.string().min(1).optional()
|
|
@@ -541,6 +542,7 @@ const cpqConvertQuoteToOrderSchema = z.object({
|
|
|
541
542
|
const cpqOrderStatusTransitionSchema = z.object({
|
|
542
543
|
targetStatus: z.string().min(1)
|
|
543
544
|
});
|
|
545
|
+
import { cpqPriceAdjustmentInputSchema, cpqPriceAdjustmentPatchSchema } from "./price-adjustments.js";
|
|
544
546
|
export {
|
|
545
547
|
cpqAddQuoteItemSchema,
|
|
546
548
|
cpqArcQuoteTypeEnum,
|
|
@@ -566,6 +568,8 @@ export {
|
|
|
566
568
|
cpqOfferingComponentCreateSchema,
|
|
567
569
|
cpqOfferingComponentUpdateSchema,
|
|
568
570
|
cpqOrderStatusTransitionSchema,
|
|
571
|
+
cpqPriceAdjustmentInputSchema,
|
|
572
|
+
cpqPriceAdjustmentPatchSchema,
|
|
569
573
|
cpqPricePreviewSchema,
|
|
570
574
|
cpqPriceRuleCreateSchema,
|
|
571
575
|
cpqPriceRuleUpdateSchema,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/cpq/data/validators.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod'\nimport { normalizeChargePricing } from './charge-pricing'\n\n// \u2500\u2500\u2500 Product Specification \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqProductSpecificationCreateSchema = z.object({\n productId: z.string().uuid().optional(),\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n specType: z.enum(['simple', 'bundle']).optional().default('simple'),\n isAssetizable: z.boolean().optional().default(false),\n // `retired` was merged into `deprecated` \u2014 see migration\n // `<timestamp>-merge-spec-retired-into-deprecated.ts`. Offerings still have\n // four states because the user-facing semantics there are different\n // (a retired offering can't be re-sold; a deprecated one can but is\n // discouraged).\n lifecycleStatus: z.enum(['draft', 'active', 'deprecated']).optional().default('draft'),\n version: z.number().int().optional().default(1),\n effectiveFrom: z.string().datetime().nullish(),\n effectiveTo: z.string().datetime().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqProductSpecificationUpdateSchema = cpqProductSpecificationCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// \u2500\u2500\u2500 Product Offering \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqProductOfferingCreateSchema = z.object({\n specId: z.string().uuid(),\n catalogOfferId: z.string().uuid().nullish(),\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n offeringType: z.enum(['simple', 'bundle']).optional().default('simple'),\n designTimeValues: z.record(z.string(), z.unknown()).optional().default({}),\n // `retired` was merged into `deprecated` \u2014 see migration\n // `<timestamp>-merge-offering-retired-into-deprecated.ts`. Aligned with\n // specifications: a single 3-state lifecycle keeps the UX uniform.\n lifecycleStatus: z.enum(['draft', 'active', 'deprecated']).optional().default('draft'),\n effectiveFrom: z.string().datetime().nullish(),\n effectiveTo: z.string().datetime().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqProductOfferingUpdateSchema = cpqProductOfferingCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// \u2500\u2500\u2500 Bundle Slot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqBundleSlotCreateSchema = z.object({\n specId: z.string().uuid(),\n targetSpecId: z.string().uuid(),\n componentGroup: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n cardinalityMin: z.number().int().min(0).optional().default(0),\n cardinalityMax: z.number().int().min(0).nullish(),\n sortOrder: z.number().int().optional().default(0),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\nexport const cpqBundleSlotUpdateSchema = z.object({\n id: z.string().uuid(),\n componentGroup: z.string().min(1).optional(),\n name: z.string().min(1).optional(),\n description: z.string().nullish(),\n cardinalityMin: z.number().int().min(0).optional(),\n cardinalityMax: z.number().int().min(0).nullish(),\n sortOrder: z.number().int().optional(),\n isActive: z.boolean().optional(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\n// \u2500\u2500\u2500 Offering Component \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqOfferingComponentCreateSchema = z.object({\n offeringId: z.string().uuid(),\n slotId: z.string().uuid(),\n childOfferingId: z.string().uuid(),\n isDefault: z.boolean().optional().default(false),\n sortOrder: z.number().int().optional().default(0),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\nexport const cpqOfferingComponentUpdateSchema = z.object({\n id: z.string().uuid(),\n isDefault: z.boolean().optional(),\n sortOrder: z.number().int().optional(),\n isActive: z.boolean().optional(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\n// \u2500\u2500\u2500 Product Relationship \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqProductRelationshipCreateSchema = z.object({\n sourceSpecId: z.string().uuid(),\n targetSpecId: z.string().uuid(),\n relationshipType: z.enum(['parent_child', 'requires', 'excludes']),\n cardinalityMin: z.number().int().optional().default(0),\n cardinalityMax: z.number().int().nullish(),\n condition: z.record(z.string(), z.unknown()).nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqProductRelationshipUpdateSchema = cpqProductRelationshipCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// \u2500\u2500\u2500 Product Attribute \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqProductAttributeCreateSchema = z.object({\n productId: z.string().uuid().optional(),\n specId: z.string().uuid().nullish(),\n code: z.string().min(1),\n name: z.string().min(1),\n attributeType: z.enum(['enum', 'number', 'text', 'boolean', 'select', 'multi-select', 'reference']),\n resolutionTime: z.enum(['design_time', 'run_time']).optional().default('run_time'),\n options: z.array(z.object({ value: z.string(), label: z.string() })).nullish(),\n constraints: z.record(z.string(), z.unknown()).nullish(),\n referenceEntity: z.string().nullish(),\n referenceFilter: z.record(z.string(), z.unknown()).nullish(),\n dependsOn: z.record(z.string(), z.unknown()).nullish(),\n defaultValue: z.unknown().nullish(),\n helpText: z.string().nullish(),\n sortOrder: z.number().int().optional().default(0),\n isRequired: z.boolean().optional().default(true),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqProductAttributeUpdateSchema = cpqProductAttributeCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// `fixed` is a legacy alias for `flat` \u2014 older seeds (`demo_puffin`,\n// `demo_gix`) emit it directly and ~30+ rows in prod use it. The pricing\n// service treats them identically (fixedPrice + currencyCode, no table\n// lookup). XD-297 splits the charge \"shape\" into two axes \u2014 chargeModel\n// (flat | per_unit | volume | tiered) and pricingMethod (fixed | table).\n// Input accepts either the new split OR a legacy combined pricingMethod\n// (flat | per_unit | tiered); normalizeChargePricing() collapses both to a\n// canonical {model, source} that the route persists.\nconst cpqChargeModelEnum = z.enum(['flat', 'per_unit', 'volume', 'tiered'])\n// New sources (fixed | table) plus the legacy combined values for back-compat.\nconst cpqChargePricingMethodEnum = z.enum(['fixed', 'table', 'flat', 'tiered', 'per_unit'])\n\nconst requireField = (\n ctx: z.RefinementCtx,\n value: unknown,\n path: string,\n msg: string,\n) => {\n if (value === undefined || value === null || value === '') {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [path], message: msg })\n }\n}\n\nconst forbidField = (\n ctx: z.RefinementCtx,\n value: unknown,\n path: string,\n msg: string,\n) => {\n if (value !== undefined && value !== null && value !== '') {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [path], message: msg })\n }\n}\n\n// Shared shape between create/update so the refinement logic stays in one\n// place. Update is `.partial()` so its refinement runs only when fields\n// are present.\nconst cpqProductChargeBase = z.object({\n productId: z.string().uuid().optional(),\n offeringId: z.string().uuid().nullish(),\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n chargeType: z.enum(['nrc', 'mrc', 'usage']),\n chargeModel: cpqChargeModelEnum.optional(),\n pricingMethod: cpqChargePricingMethodEnum,\n pricingTableId: z.string().uuid().nullish(),\n priceColumnKey: z.string().nullish(),\n fixedPrice: z.union([z.string(), z.number().transform(String)]).nullish(),\n currencyCode: z.string().nullish(),\n quantityAttributeCode: z.string().nullish(),\n applicabilityCondition: z.record(z.string(), z.unknown()).nullish(),\n sortOrder: z.number().int().optional().default(0),\n isActive: z.boolean().optional().default(true),\n})\n\n// V-CHG-1: the (chargeModel \u00D7 pricingMethod) combination must match the fields.\n// fixed \u2192 fixedPrice + currencyCode required; table fields forbidden.\n// flat: no quantity attr; per_unit: quantity attr required.\n// volume / tiered + fixed is not a valid combination.\n// table \u2192 pricingTableId + priceColumnKey required; fixedPrice forbidden.\n// flat: no quantity attr; per_unit / volume / tiered: quantity attr required.\nconst refineChargePricingShape = (\n ctx: z.RefinementCtx,\n charge: {\n chargeModel?: 'flat' | 'per_unit' | 'volume' | 'tiered'\n pricingMethod?: 'fixed' | 'table' | 'flat' | 'tiered' | 'per_unit'\n pricingTableId?: string | null\n priceColumnKey?: string | null\n fixedPrice?: string | null\n currencyCode?: string | null\n quantityAttributeCode?: string | null\n },\n) => {\n if (charge.pricingMethod === undefined && charge.chargeModel === undefined) return\n const { model, source } = normalizeChargePricing(charge)\n\n if (source === 'fixed') {\n if (model === 'volume' || model === 'tiered') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['pricingMethod'],\n message: `V-CHG-1: ${model} pricing requires Table Lookup, not a fixed price`,\n })\n return\n }\n requireField(ctx, charge.fixedPrice, 'fixedPrice', 'V-CHG-1: fixedPrice is required for a fixed price')\n requireField(ctx, charge.currencyCode, 'currencyCode', 'V-CHG-1: currencyCode is required for a fixed price')\n forbidField(ctx, charge.pricingTableId, 'pricingTableId', 'V-CHG-1: pricingTableId must be empty for a fixed price')\n forbidField(ctx, charge.priceColumnKey, 'priceColumnKey', 'V-CHG-1: priceColumnKey must be empty for a fixed price')\n if (model === 'per_unit') {\n requireField(ctx, charge.quantityAttributeCode, 'quantityAttributeCode', 'V-CHG-1: quantityAttributeCode is required for per-unit pricing')\n } else {\n forbidField(ctx, charge.quantityAttributeCode, 'quantityAttributeCode', 'V-CHG-1: quantityAttributeCode must be empty for a flat fixed price')\n }\n return\n }\n\n // source === 'table'\n requireField(ctx, charge.pricingTableId, 'pricingTableId', 'V-CHG-1: pricingTableId is required for table lookup')\n requireField(ctx, charge.priceColumnKey, 'priceColumnKey', 'V-CHG-1: priceColumnKey is required for table lookup')\n forbidField(ctx, charge.fixedPrice, 'fixedPrice', 'V-CHG-1: fixedPrice must be empty for table lookup \u2014 price comes from the table')\n if (model === 'flat') {\n forbidField(ctx, charge.quantityAttributeCode, 'quantityAttributeCode', 'V-CHG-1: quantityAttributeCode must be empty for a flat table price')\n } else {\n requireField(ctx, charge.quantityAttributeCode, 'quantityAttributeCode', `V-CHG-1: quantityAttributeCode is required for ${model} pricing`)\n }\n}\n\nexport const cpqProductChargeCreateSchema = cpqProductChargeBase.superRefine((data, ctx) => {\n refineChargePricingShape(ctx, data)\n})\n\nexport const cpqProductChargeUpdateSchema = cpqProductChargeBase.partial().extend({\n id: z.string().uuid(),\n}).superRefine((data, ctx) => {\n // Enforce shape whenever either pricing axis is being changed \u2014 a\n // chargeModel-only PATCH (e.g. flat \u2192 per_unit) still alters the required\n // fields, so it must validate rather than silently persist a broken charge.\n if (data.pricingMethod !== undefined || data.chargeModel !== undefined) {\n refineChargePricingShape(ctx, data)\n }\n})\n\n// \u2500\u2500\u2500 Price Rule \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqPriceRuleCreateSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n productOfferingId: z.string().uuid().nullish(),\n ruleType: z.enum(['discount_percent', 'discount_absolute', 'surcharge_percent', 'surcharge_absolute', 'price_override']),\n value: z.number().min(0),\n chargeCodeFilter: z.string().nullish(),\n chargeTypeFilter: z.enum(['nrc', 'mrc', 'usage']).nullish(),\n applicabilityCondition: z.record(z.string(), z.unknown()).nullish(),\n sortOrder: z.number().int().optional().default(0),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqPriceRuleUpdateSchema = cpqPriceRuleCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// \u2500\u2500\u2500 Pricing Table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// V-PT-1: every dimension / price column needs a non-empty key + label,\n// and keys must be unique within their list (charges reference them by\n// key \u2014 duplicates would make lookup ambiguous).\nconst keyLabelItem = z.object({\n key: z.string().min(1, 'Key is required'),\n label: z.string().min(1, 'Label is required'),\n})\n\nconst uniqueKeys = (label: string) =>\n (items: Array<{ key: string }>, ctx: z.RefinementCtx) => {\n const seen = new Set<string>()\n items.forEach((item, idx) => {\n if (seen.has(item.key)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [idx, 'key'],\n message: `V-PT-1: duplicate ${label} key \"${item.key}\"`,\n })\n }\n seen.add(item.key)\n })\n }\n\nexport const cpqPricingTableCreateSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n dimensions: z.array(keyLabelItem).superRefine(uniqueKeys('dimension')),\n priceColumns: z.array(keyLabelItem).superRefine(uniqueKeys('price column')),\n currencyCodeList: z.array(z.string().min(1)).min(1),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqPricingTableUpdateSchema = cpqPricingTableCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\nexport const cpqPricingTableEntryCreateSchema = z.object({\n pricingTableId: z.string().uuid(),\n dimensionValues: z.record(z.string(), z.string()),\n tierNumber: z.number().int().nullish(),\n rangeFrom: z.number().nullish(),\n rangeTo: z.number().nullish(),\n currencyCode: z.string().min(1).optional().default('USD'),\n prices: z.record(z.string(), z.number()),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqPricingTableEntryUpdateSchema = cpqPricingTableEntryCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// \u2500\u2500\u2500 Quoting v2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqQuoteTypeEnum = z.enum(['new', 'amend', 'renew', 'cancel'])\nexport const cpqArcQuoteTypeEnum = z.enum(['amend', 'renew', 'cancel'])\nexport const cpqMergeActionEnum = z.enum(['standalone', 'absorb'])\nexport const cpqArcReasonCodeEnum = z.enum([\n 'upgrade',\n 'downgrade',\n 'config-change',\n 'price-adjustment',\n 'term-extension',\n 'term-reduction',\n 'consolidation',\n 'customer-request',\n 'non-payment',\n 'contract-breach',\n 'other',\n])\n\nexport const cpqCreateQuoteSchema = z.object({\n customerId: z.string().uuid(),\n quoteId: z.string().uuid().optional(), // Link to existing SalesQuote\n dealId: z.string().uuid().optional(),\n currencyCode: z.string().min(1).optional(),\n quoteType: cpqQuoteTypeEnum.optional().default('new'),\n})\n\n// Server enforces the one-way rule (new \u2192 amend|renew|cancel only) in the\n// service layer; the schema just shapes the body.\nexport const cpqUpdateQuoteSchema = z.object({\n quoteType: cpqQuoteTypeEnum.optional(),\n})\n\nconst cpqPricePreviewItemSchema = z.object({\n offeringId: z.string().uuid().nullish(),\n productId: z.string().uuid().nullish(),\n configuration: z.record(z.string(), z.unknown()),\n}).refine(\n (item) => item.offeringId || item.productId,\n { message: 'One of offeringId or productId is required' },\n)\n\nexport const cpqPricePreviewSchema = z.object({\n primaryItem: cpqPricePreviewItemSchema.nullish(),\n childItems: z.array(cpqPricePreviewItemSchema),\n currencyCode: z.string().min(1).optional(),\n})\n\nexport const cpqAddQuoteItemSchema = z.object({\n offeringId: z.string().uuid().optional(),\n productId: z.string().uuid().optional(),\n configuration: z.record(z.string(), z.unknown()).default({}),\n quantity: z.number().int().min(1).optional().default(1),\n usageEstimates: z\n .array(\n z.object({\n chargeCode: z.string().min(1),\n estimatedQuantity: z.number().min(0),\n }),\n )\n .optional(),\n action: z.enum(['add', 'modify', 'cancel']).optional().default('add'),\n parentLineId: z.string().uuid().optional(),\n startDate: z.string().optional(),\n termMonths: z.number().int().min(1).optional(),\n endDate: z.string().optional(),\n // ARC (XD-250): per-line target sub for amend / renew (standalone) / cancel.\n targetSubscriptionId: z.string().uuid().nullish(),\n // ARC (XD-250): existing item being changed by cancel/modify lines.\n sourceSubscriptionItemId: z.string().uuid().nullish(),\n})\n\nexport const cpqUpdateQuoteItemSchema = z.object({\n configuration: z.record(z.string(), z.unknown()),\n quantity: z.number().int().min(1).optional(),\n usageEstimates: z\n .array(\n z.object({\n chargeCode: z.string().min(1),\n estimatedQuantity: z.number().min(0),\n }),\n )\n .optional(),\n startDate: z.string().optional(),\n termMonths: z.number().int().min(1).optional(),\n endDate: z.string().optional(),\n targetSubscriptionId: z.string().uuid().nullish(),\n sourceSubscriptionItemId: z.string().uuid().nullish(),\n})\n\n// \u2500\u2500\u2500 ARC (Amend / Renew / Cancel) \u2014 XD-250 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqCreateQuoteFromSubscriptionSchema = z.object({\n subscriptionId: z.string().uuid(),\n type: cpqArcQuoteTypeEnum,\n renewTerm: z\n .object({\n newTermStart: z.string().min(1),\n newTermEnd: z.string().min(1),\n newTermMonths: z.number().int().min(1).optional(),\n })\n .optional(),\n})\n\nexport const cpqAttachTargetSubscriptionSchema = z.object({\n subscriptionId: z.string().uuid(),\n quoteType: cpqArcQuoteTypeEnum,\n mergeAction: cpqMergeActionEnum.optional(),\n newTermStart: z.string().min(1).optional(),\n newTermEnd: z.string().min(1).optional(),\n newTermMonths: z.number().int().min(1).optional(),\n})\n\nexport const cpqUpdateTargetSubscriptionSchema = z.object({\n mergeAction: cpqMergeActionEnum.optional(),\n newTermStart: z.string().min(1).nullish(),\n newTermEnd: z.string().min(1).nullish(),\n newTermMonths: z.number().int().min(1).nullish(),\n})\n\nexport const cpqCancelMetaSchema = z.object({\n reasonCode: cpqArcReasonCodeEnum,\n reasonText: z.string().nullish(),\n etfAmount: z\n .union([z.string(), z.number().transform(String)])\n .nullish(),\n etfCurrency: z.string().min(1).max(3).nullish(),\n})\n\nexport const cpqMergeMetaSchema = z.object({\n newTermStart: z.string().min(1),\n newTermEnd: z.string().min(1),\n newTermMonths: z.number().int().min(1).optional(),\n newSubCode: z.string().min(1).nullish(),\n newSubName: z.string().min(1).nullish(),\n})\n\nexport const cpqExpiringSubscriptionsQuerySchema = z.object({\n withinDays: z.coerce.number().int().min(1).max(365).optional().default(30),\n customerId: z.string().uuid().optional(),\n billingCycle: z.enum(['monthly', 'quarterly', 'annually']).optional(),\n status: z.string().optional().default('active'),\n page: z.coerce.number().int().min(1).optional().default(1),\n pageSize: z.coerce.number().int().min(1).max(100).optional().default(50),\n})\n\nexport const cpqChangeLogQuerySchema = z.object({\n page: z.coerce.number().int().min(1).optional().default(1),\n pageSize: z.coerce.number().int().min(1).max(100).optional().default(50),\n})\n\nexport const cpqRecalculateSchema = z.object({\n save: z.boolean(),\n})\n\nexport const cpqTransitionStatusSchema = z.object({\n targetStatus: z.string().min(1),\n})\n\nexport const cpqValidateRelationshipsSchema = z.object({\n offeringIds: z.array(z.string().uuid()),\n parentChildPairs: z\n .array(\n z.object({\n parentOfferingId: z.string().uuid(),\n childOfferingId: z.string().uuid(),\n }),\n )\n .optional()\n})\n\n// \u2500\u2500\u2500 Wizard \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst wizardTransitionConditionSchema = z.object({\n field: z.string().min(1),\n operator: z.enum(['eq', 'neq', 'gt', 'lt', 'gte', 'lte', 'exists', 'not_exists', 'in']),\n value: z.unknown().optional(),\n})\n\nconst wizardTransitionSchema = z.object({\n targetStepId: z.string().min(1),\n condition: wizardTransitionConditionSchema.optional(),\n isDefault: z.boolean().optional(),\n label: z.string().optional(),\n})\n\nconst wizardStepValidationSchema = z.object({\n field: z.string().min(1),\n operator: z.enum(['eq', 'neq', 'exists', 'not_exists']),\n value: z.unknown().optional(),\n message: z.string().min(1),\n})\n\nconst wizardStepDefinitionSchema = z.object({\n stepId: z.string().min(1),\n type: z.string().min(1),\n title: z.string().min(1),\n description: z.string().nullish(),\n config: z.record(z.string(), z.unknown()).default({}),\n transitions: z.array(wizardTransitionSchema).default([]),\n isOptional: z.boolean().optional().default(false),\n validationRules: z.array(wizardStepValidationSchema).optional(),\n})\n\nconst wizardApplicabilitySchema = z.object({\n specCodes: z.array(z.string()).optional(),\n offeringCodes: z.array(z.string()).optional(),\n customerSegments: z.array(z.string()).optional(),\n surface: z.enum(['backend', 'portal']).optional(),\n priority: z.number().int().optional().default(0),\n})\n\nexport const cpqWizardDefinitionCreateSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n steps: z.array(wizardStepDefinitionSchema).min(1),\n applicability: wizardApplicabilitySchema.nullish(),\n paramsSchema: z.record(z.string(), z.unknown()).nullish(),\n surface: z.enum(['backend', 'portal', 'any']).optional().default('backend'),\n isActive: z.boolean().optional().default(true),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\nexport const cpqWizardDefinitionUpdateSchema = cpqWizardDefinitionCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n// \u2500\u2500\u2500 Inventory Subscription \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst cpqInventorySubscriptionItemInputSchema = z.object({\n parentItemId: z.string().uuid().nullish(),\n productId: z.string().uuid().nullish(),\n offeringId: z.string().uuid().nullish(),\n specId: z.string().uuid().nullish(),\n name: z.string().min(1),\n configuration: z.record(z.string(), z.unknown()).optional().default({}),\n charges: z.array(z.record(z.string(), z.unknown())).nullish(),\n mrcAmount: z.number().optional().default(0),\n nrcAmount: z.number().optional().default(0),\n currencyCode: z.string().min(1).optional(),\n quantity: z.number().int().min(1).optional().default(1),\n capacityTotal: z.number().nullish(),\n capacityUnit: z.string().nullish(),\n sourceQuoteLineId: z.string().uuid().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n sortOrder: z.number().int().optional().default(0),\n})\n\nexport const cpqInventorySubscriptionCreateSchema = z.object({\n customerId: z.string().uuid(),\n code: z.string().min(1).optional(),\n name: z.string().min(1),\n description: z.string().nullish(),\n billingCycle: z.enum(['monthly', 'quarterly', 'annually']).optional().default('monthly'),\n currencyCode: z.string().min(1).optional(),\n startDate: z.string().nullish(),\n termMonths: z.number().int().min(1).nullish(),\n autoRenew: z.boolean().optional().default(true),\n sourceQuoteId: z.string().uuid().nullish(),\n sourceOrderId: z.string().uuid().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n items: z.array(cpqInventorySubscriptionItemInputSchema).min(1),\n})\n\nexport const cpqInventorySubscriptionUpdateSchema = z.object({\n id: z.string().uuid(),\n name: z.string().min(1).optional(),\n description: z.string().nullish(),\n billingCycle: z.enum(['monthly', 'quarterly', 'annually']).optional(),\n autoRenew: z.boolean().optional(),\n termMonths: z.number().int().min(1).nullish(),\n currentTermEnd: z.string().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\nexport const cpqInventoryStatusTransitionSchema = z.object({\n id: z.string().uuid(),\n targetStatus: z.string().min(1),\n})\n\n// \u2500\u2500\u2500 Inventory Subscription Item \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqInventorySubscriptionItemCreateSchema = z.object({\n subscriptionId: z.string().uuid(),\n parentItemId: z.string().uuid().nullish(),\n productId: z.string().uuid().nullish(),\n offeringId: z.string().uuid().nullish(),\n specId: z.string().uuid().nullish(),\n name: z.string().min(1),\n configuration: z.record(z.string(), z.unknown()).optional().default({}),\n charges: z.array(z.record(z.string(), z.unknown())).nullish(),\n mrcAmount: z.number().optional().default(0),\n nrcAmount: z.number().optional().default(0),\n currencyCode: z.string().min(1).optional(),\n quantity: z.number().int().min(1).optional().default(1),\n capacityTotal: z.number().nullish(),\n capacityUnit: z.string().nullish(),\n sourceQuoteLineId: z.string().uuid().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n sortOrder: z.number().int().optional().default(0),\n})\n\nexport const cpqInventorySubscriptionItemUpdateSchema = z.object({\n id: z.string().uuid(),\n name: z.string().min(1).optional(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n capacityTotal: z.number().nullish(),\n capacityUsed: z.number().nullish(),\n capacityUnit: z.string().nullish(),\n sortOrder: z.number().int().optional(),\n})\n\n// \u2500\u2500\u2500 Inventory Asset \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqInventoryAssetCreateSchema = z.object({\n customerId: z.string().uuid(),\n subscriptionId: z.string().uuid().nullish(),\n subscriptionItemId: z.string().uuid().nullish(),\n productId: z.string().uuid().nullish(),\n offeringId: z.string().uuid().nullish(),\n specId: z.string().uuid().nullish(),\n code: z.string().min(1).optional(),\n name: z.string().min(1),\n description: z.string().nullish(),\n assetType: z.enum(['one_time', 'license', 'physical', 'logical']).optional().default('one_time'),\n currencyCode: z.string().min(1).optional(),\n purchasePrice: z.number().optional().default(0),\n quantity: z.number().int().min(1).optional().default(1),\n purchaseDate: z.string().nullish(),\n deliveryDate: z.string().nullish(),\n configuration: z.record(z.string(), z.unknown()).optional().default({}),\n charges: z.array(z.record(z.string(), z.unknown())).nullish(),\n sourceQuoteId: z.string().uuid().nullish(),\n sourceOrderId: z.string().uuid().nullish(),\n sourceQuoteLineId: z.string().uuid().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\nexport const cpqInventoryAssetUpdateSchema = z.object({\n id: z.string().uuid(),\n name: z.string().min(1).optional(),\n description: z.string().nullish(),\n assetType: z.enum(['one_time', 'license', 'physical', 'logical']).optional(),\n deliveryDate: z.string().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\n// \u2500\u2500\u2500 CPQ Orders \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqConvertQuoteToOrderSchema = z.object({\n quoteId: z.string().uuid(),\n})\n\nexport const cpqOrderStatusTransitionSchema = z.object({\n targetStatus: z.string().min(1),\n})\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\nimport { normalizeChargePricing } from './charge-pricing'\n\n// \u2500\u2500\u2500 Product Specification \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqProductSpecificationCreateSchema = z.object({\n productId: z.string().uuid().optional(),\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n specType: z.enum(['simple', 'bundle']).optional().default('simple'),\n isAssetizable: z.boolean().optional().default(false),\n // `retired` was merged into `deprecated` \u2014 see migration\n // `<timestamp>-merge-spec-retired-into-deprecated.ts`. Offerings still have\n // four states because the user-facing semantics there are different\n // (a retired offering can't be re-sold; a deprecated one can but is\n // discouraged).\n lifecycleStatus: z.enum(['draft', 'active', 'deprecated']).optional().default('draft'),\n version: z.number().int().optional().default(1),\n effectiveFrom: z.string().datetime().nullish(),\n effectiveTo: z.string().datetime().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqProductSpecificationUpdateSchema = cpqProductSpecificationCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// \u2500\u2500\u2500 Product Offering \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqProductOfferingCreateSchema = z.object({\n specId: z.string().uuid(),\n catalogOfferId: z.string().uuid().nullish(),\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n offeringType: z.enum(['simple', 'bundle']).optional().default('simple'),\n designTimeValues: z.record(z.string(), z.unknown()).optional().default({}),\n // `retired` was merged into `deprecated` \u2014 see migration\n // `<timestamp>-merge-offering-retired-into-deprecated.ts`. Aligned with\n // specifications: a single 3-state lifecycle keeps the UX uniform.\n lifecycleStatus: z.enum(['draft', 'active', 'deprecated']).optional().default('draft'),\n effectiveFrom: z.string().datetime().nullish(),\n effectiveTo: z.string().datetime().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqProductOfferingUpdateSchema = cpqProductOfferingCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// \u2500\u2500\u2500 Bundle Slot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqBundleSlotCreateSchema = z.object({\n specId: z.string().uuid(),\n targetSpecId: z.string().uuid(),\n componentGroup: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n cardinalityMin: z.number().int().min(0).optional().default(0),\n cardinalityMax: z.number().int().min(0).nullish(),\n sortOrder: z.number().int().optional().default(0),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\nexport const cpqBundleSlotUpdateSchema = z.object({\n id: z.string().uuid(),\n componentGroup: z.string().min(1).optional(),\n name: z.string().min(1).optional(),\n description: z.string().nullish(),\n cardinalityMin: z.number().int().min(0).optional(),\n cardinalityMax: z.number().int().min(0).nullish(),\n sortOrder: z.number().int().optional(),\n isActive: z.boolean().optional(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\n// \u2500\u2500\u2500 Offering Component \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqOfferingComponentCreateSchema = z.object({\n offeringId: z.string().uuid(),\n slotId: z.string().uuid(),\n childOfferingId: z.string().uuid(),\n isDefault: z.boolean().optional().default(false),\n sortOrder: z.number().int().optional().default(0),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\nexport const cpqOfferingComponentUpdateSchema = z.object({\n id: z.string().uuid(),\n isDefault: z.boolean().optional(),\n sortOrder: z.number().int().optional(),\n isActive: z.boolean().optional(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\n// \u2500\u2500\u2500 Product Relationship \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqProductRelationshipCreateSchema = z.object({\n sourceSpecId: z.string().uuid(),\n targetSpecId: z.string().uuid(),\n relationshipType: z.enum(['parent_child', 'requires', 'excludes']),\n cardinalityMin: z.number().int().optional().default(0),\n cardinalityMax: z.number().int().nullish(),\n condition: z.record(z.string(), z.unknown()).nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqProductRelationshipUpdateSchema = cpqProductRelationshipCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// \u2500\u2500\u2500 Product Attribute \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqProductAttributeCreateSchema = z.object({\n productId: z.string().uuid().optional(),\n specId: z.string().uuid().nullish(),\n code: z.string().min(1),\n name: z.string().min(1),\n attributeType: z.enum(['enum', 'number', 'text', 'boolean', 'select', 'multi-select', 'reference']),\n resolutionTime: z.enum(['design_time', 'run_time']).optional().default('run_time'),\n options: z.array(z.object({ value: z.string(), label: z.string() })).nullish(),\n constraints: z.record(z.string(), z.unknown()).nullish(),\n referenceEntity: z.string().nullish(),\n referenceFilter: z.record(z.string(), z.unknown()).nullish(),\n dependsOn: z.record(z.string(), z.unknown()).nullish(),\n defaultValue: z.unknown().nullish(),\n helpText: z.string().nullish(),\n sortOrder: z.number().int().optional().default(0),\n isRequired: z.boolean().optional().default(true),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqProductAttributeUpdateSchema = cpqProductAttributeCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// `fixed` is a legacy alias for `flat` \u2014 older seeds (`demo_puffin`,\n// `demo_gix`) emit it directly and ~30+ rows in prod use it. The pricing\n// service treats them identically (fixedPrice + currencyCode, no table\n// lookup). XD-297 splits the charge \"shape\" into two axes \u2014 chargeModel\n// (flat | per_unit | volume | tiered) and pricingMethod (fixed | table).\n// Input accepts either the new split OR a legacy combined pricingMethod\n// (flat | per_unit | tiered); normalizeChargePricing() collapses both to a\n// canonical {model, source} that the route persists.\nconst cpqChargeModelEnum = z.enum(['flat', 'per_unit', 'volume', 'tiered'])\n// New sources (fixed | table) plus the legacy combined values for back-compat.\nconst cpqChargePricingMethodEnum = z.enum(['fixed', 'table', 'flat', 'tiered', 'per_unit'])\n\nconst requireField = (\n ctx: z.RefinementCtx,\n value: unknown,\n path: string,\n msg: string,\n) => {\n if (value === undefined || value === null || value === '') {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [path], message: msg })\n }\n}\n\nconst forbidField = (\n ctx: z.RefinementCtx,\n value: unknown,\n path: string,\n msg: string,\n) => {\n if (value !== undefined && value !== null && value !== '') {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [path], message: msg })\n }\n}\n\n// Shared shape between create/update so the refinement logic stays in one\n// place. Update is `.partial()` so its refinement runs only when fields\n// are present.\nconst cpqProductChargeBase = z.object({\n productId: z.string().uuid().optional(),\n offeringId: z.string().uuid().nullish(),\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n chargeType: z.enum(['nrc', 'mrc', 'usage']),\n chargeModel: cpqChargeModelEnum.optional(),\n pricingMethod: cpqChargePricingMethodEnum,\n pricingTableId: z.string().uuid().nullish(),\n priceColumnKey: z.string().nullish(),\n fixedPrice: z.union([z.string(), z.number().transform(String)]).nullish(),\n currencyCode: z.string().nullish(),\n quantityAttributeCode: z.string().nullish(),\n applicabilityCondition: z.record(z.string(), z.unknown()).nullish(),\n sortOrder: z.number().int().optional().default(0),\n isActive: z.boolean().optional().default(true),\n})\n\n// V-CHG-1: the (chargeModel \u00D7 pricingMethod) combination must match the fields.\n// fixed \u2192 fixedPrice + currencyCode required; table fields forbidden.\n// flat: no quantity attr; per_unit: quantity attr required.\n// volume / tiered + fixed is not a valid combination.\n// table \u2192 pricingTableId + priceColumnKey required; fixedPrice forbidden.\n// flat: no quantity attr; per_unit / volume / tiered: quantity attr required.\nconst refineChargePricingShape = (\n ctx: z.RefinementCtx,\n charge: {\n chargeModel?: 'flat' | 'per_unit' | 'volume' | 'tiered'\n pricingMethod?: 'fixed' | 'table' | 'flat' | 'tiered' | 'per_unit'\n pricingTableId?: string | null\n priceColumnKey?: string | null\n fixedPrice?: string | null\n currencyCode?: string | null\n quantityAttributeCode?: string | null\n },\n) => {\n if (charge.pricingMethod === undefined && charge.chargeModel === undefined) return\n const { model, source } = normalizeChargePricing(charge)\n\n if (source === 'fixed') {\n if (model === 'volume' || model === 'tiered') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['pricingMethod'],\n message: `V-CHG-1: ${model} pricing requires Table Lookup, not a fixed price`,\n })\n return\n }\n requireField(ctx, charge.fixedPrice, 'fixedPrice', 'V-CHG-1: fixedPrice is required for a fixed price')\n requireField(ctx, charge.currencyCode, 'currencyCode', 'V-CHG-1: currencyCode is required for a fixed price')\n forbidField(ctx, charge.pricingTableId, 'pricingTableId', 'V-CHG-1: pricingTableId must be empty for a fixed price')\n forbidField(ctx, charge.priceColumnKey, 'priceColumnKey', 'V-CHG-1: priceColumnKey must be empty for a fixed price')\n if (model === 'per_unit') {\n requireField(ctx, charge.quantityAttributeCode, 'quantityAttributeCode', 'V-CHG-1: quantityAttributeCode is required for per-unit pricing')\n } else {\n forbidField(ctx, charge.quantityAttributeCode, 'quantityAttributeCode', 'V-CHG-1: quantityAttributeCode must be empty for a flat fixed price')\n }\n return\n }\n\n // source === 'table'\n requireField(ctx, charge.pricingTableId, 'pricingTableId', 'V-CHG-1: pricingTableId is required for table lookup')\n requireField(ctx, charge.priceColumnKey, 'priceColumnKey', 'V-CHG-1: priceColumnKey is required for table lookup')\n forbidField(ctx, charge.fixedPrice, 'fixedPrice', 'V-CHG-1: fixedPrice must be empty for table lookup \u2014 price comes from the table')\n if (model === 'flat') {\n forbidField(ctx, charge.quantityAttributeCode, 'quantityAttributeCode', 'V-CHG-1: quantityAttributeCode must be empty for a flat table price')\n } else {\n requireField(ctx, charge.quantityAttributeCode, 'quantityAttributeCode', `V-CHG-1: quantityAttributeCode is required for ${model} pricing`)\n }\n}\n\nexport const cpqProductChargeCreateSchema = cpqProductChargeBase.superRefine((data, ctx) => {\n refineChargePricingShape(ctx, data)\n})\n\nexport const cpqProductChargeUpdateSchema = cpqProductChargeBase.partial().extend({\n id: z.string().uuid(),\n}).superRefine((data, ctx) => {\n // Enforce shape whenever either pricing axis is being changed \u2014 a\n // chargeModel-only PATCH (e.g. flat \u2192 per_unit) still alters the required\n // fields, so it must validate rather than silently persist a broken charge.\n if (data.pricingMethod !== undefined || data.chargeModel !== undefined) {\n refineChargePricingShape(ctx, data)\n }\n})\n\n// \u2500\u2500\u2500 Price Rule \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqPriceRuleCreateSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n productOfferingId: z.string().uuid().nullish(),\n ruleType: z.enum(['discount_percent', 'discount_absolute', 'surcharge_percent', 'surcharge_absolute', 'price_override']),\n value: z.number().min(0),\n chargeCodeFilter: z.string().nullish(),\n chargeTypeFilter: z.enum(['nrc', 'mrc', 'usage']).nullish(),\n applicabilityCondition: z.record(z.string(), z.unknown()).nullish(),\n sortOrder: z.number().int().optional().default(0),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqPriceRuleUpdateSchema = cpqPriceRuleCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// \u2500\u2500\u2500 Pricing Table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// V-PT-1: every dimension / price column needs a non-empty key + label,\n// and keys must be unique within their list (charges reference them by\n// key \u2014 duplicates would make lookup ambiguous).\nconst keyLabelItem = z.object({\n key: z.string().min(1, 'Key is required'),\n label: z.string().min(1, 'Label is required'),\n})\n\nconst uniqueKeys = (label: string) =>\n (items: Array<{ key: string }>, ctx: z.RefinementCtx) => {\n const seen = new Set<string>()\n items.forEach((item, idx) => {\n if (seen.has(item.key)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [idx, 'key'],\n message: `V-PT-1: duplicate ${label} key \"${item.key}\"`,\n })\n }\n seen.add(item.key)\n })\n }\n\nexport const cpqPricingTableCreateSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n dimensions: z.array(keyLabelItem).superRefine(uniqueKeys('dimension')),\n priceColumns: z.array(keyLabelItem).superRefine(uniqueKeys('price column')),\n currencyCodeList: z.array(z.string().min(1)).min(1),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqPricingTableUpdateSchema = cpqPricingTableCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\nexport const cpqPricingTableEntryCreateSchema = z.object({\n pricingTableId: z.string().uuid(),\n dimensionValues: z.record(z.string(), z.string()),\n tierNumber: z.number().int().nullish(),\n rangeFrom: z.number().nullish(),\n rangeTo: z.number().nullish(),\n currencyCode: z.string().min(1).optional().default('USD'),\n prices: z.record(z.string(), z.number()),\n isActive: z.boolean().optional().default(true),\n})\n\nexport const cpqPricingTableEntryUpdateSchema = cpqPricingTableEntryCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n\n// \u2500\u2500\u2500 Quoting v2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqQuoteTypeEnum = z.enum(['new', 'amend', 'renew', 'cancel'])\nexport const cpqArcQuoteTypeEnum = z.enum(['amend', 'renew', 'cancel'])\nexport const cpqMergeActionEnum = z.enum(['standalone', 'absorb'])\nexport const cpqArcReasonCodeEnum = z.enum([\n 'upgrade',\n 'downgrade',\n 'config-change',\n 'price-adjustment',\n 'term-extension',\n 'term-reduction',\n 'consolidation',\n 'customer-request',\n 'non-payment',\n 'contract-breach',\n 'other',\n])\n\nexport const cpqCreateQuoteSchema = z.object({\n customerId: z.string().uuid(),\n quoteId: z.string().uuid().optional(), // Link to existing SalesQuote\n dealId: z.string().uuid().optional(),\n currencyCode: z.string().min(1).optional(),\n quoteType: cpqQuoteTypeEnum.optional().default('new'),\n})\n\n// Server enforces the one-way rule (new \u2192 amend|renew|cancel only) in the\n// service layer; the schema just shapes the body.\nexport const cpqUpdateQuoteSchema = z.object({\n quoteType: cpqQuoteTypeEnum.optional(),\n})\n\nconst cpqPricePreviewItemSchema = z.object({\n offeringId: z.string().uuid().nullish(),\n productId: z.string().uuid().nullish(),\n configuration: z.record(z.string(), z.unknown()),\n}).refine(\n (item) => item.offeringId || item.productId,\n { message: 'One of offeringId or productId is required' },\n)\n\nexport const cpqPricePreviewSchema = z.object({\n includeWaterfall: z.boolean().optional().default(false),\n primaryItem: cpqPricePreviewItemSchema.nullish(),\n childItems: z.array(cpqPricePreviewItemSchema),\n currencyCode: z.string().min(1).optional(),\n})\n\nexport const cpqAddQuoteItemSchema = z.object({\n offeringId: z.string().uuid().optional(),\n productId: z.string().uuid().optional(),\n configuration: z.record(z.string(), z.unknown()).default({}),\n quantity: z.number().int().min(1).optional().default(1),\n usageEstimates: z\n .array(\n z.object({\n chargeCode: z.string().min(1),\n estimatedQuantity: z.number().min(0),\n }),\n )\n .optional(),\n action: z.enum(['add', 'modify', 'cancel']).optional().default('add'),\n parentLineId: z.string().uuid().optional(),\n startDate: z.string().optional(),\n termMonths: z.number().int().min(1).optional(),\n endDate: z.string().optional(),\n // ARC (XD-250): per-line target sub for amend / renew (standalone) / cancel.\n targetSubscriptionId: z.string().uuid().nullish(),\n // ARC (XD-250): existing item being changed by cancel/modify lines.\n sourceSubscriptionItemId: z.string().uuid().nullish(),\n})\n\nexport const cpqUpdateQuoteItemSchema = z.object({\n configuration: z.record(z.string(), z.unknown()),\n quantity: z.number().int().min(1).optional(),\n usageEstimates: z\n .array(\n z.object({\n chargeCode: z.string().min(1),\n estimatedQuantity: z.number().min(0),\n }),\n )\n .optional(),\n startDate: z.string().optional(),\n termMonths: z.number().int().min(1).optional(),\n endDate: z.string().optional(),\n targetSubscriptionId: z.string().uuid().nullish(),\n sourceSubscriptionItemId: z.string().uuid().nullish(),\n})\n\n// \u2500\u2500\u2500 ARC (Amend / Renew / Cancel) \u2014 XD-250 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqCreateQuoteFromSubscriptionSchema = z.object({\n subscriptionId: z.string().uuid(),\n type: cpqArcQuoteTypeEnum,\n renewTerm: z\n .object({\n newTermStart: z.string().min(1),\n newTermEnd: z.string().min(1),\n newTermMonths: z.number().int().min(1).optional(),\n })\n .optional(),\n})\n\nexport const cpqAttachTargetSubscriptionSchema = z.object({\n subscriptionId: z.string().uuid(),\n quoteType: cpqArcQuoteTypeEnum,\n mergeAction: cpqMergeActionEnum.optional(),\n newTermStart: z.string().min(1).optional(),\n newTermEnd: z.string().min(1).optional(),\n newTermMonths: z.number().int().min(1).optional(),\n})\n\nexport const cpqUpdateTargetSubscriptionSchema = z.object({\n mergeAction: cpqMergeActionEnum.optional(),\n newTermStart: z.string().min(1).nullish(),\n newTermEnd: z.string().min(1).nullish(),\n newTermMonths: z.number().int().min(1).nullish(),\n})\n\nexport const cpqCancelMetaSchema = z.object({\n reasonCode: cpqArcReasonCodeEnum,\n reasonText: z.string().nullish(),\n etfAmount: z\n .union([z.string(), z.number().transform(String)])\n .nullish(),\n etfCurrency: z.string().min(1).max(3).nullish(),\n})\n\nexport const cpqMergeMetaSchema = z.object({\n newTermStart: z.string().min(1),\n newTermEnd: z.string().min(1),\n newTermMonths: z.number().int().min(1).optional(),\n newSubCode: z.string().min(1).nullish(),\n newSubName: z.string().min(1).nullish(),\n})\n\nexport const cpqExpiringSubscriptionsQuerySchema = z.object({\n withinDays: z.coerce.number().int().min(1).max(365).optional().default(30),\n customerId: z.string().uuid().optional(),\n billingCycle: z.enum(['monthly', 'quarterly', 'annually']).optional(),\n status: z.string().optional().default('active'),\n page: z.coerce.number().int().min(1).optional().default(1),\n pageSize: z.coerce.number().int().min(1).max(100).optional().default(50),\n})\n\nexport const cpqChangeLogQuerySchema = z.object({\n page: z.coerce.number().int().min(1).optional().default(1),\n pageSize: z.coerce.number().int().min(1).max(100).optional().default(50),\n})\n\nexport const cpqRecalculateSchema = z.object({\n save: z.boolean(),\n})\n\nexport const cpqTransitionStatusSchema = z.object({\n targetStatus: z.string().min(1),\n})\n\nexport const cpqValidateRelationshipsSchema = z.object({\n offeringIds: z.array(z.string().uuid()),\n parentChildPairs: z\n .array(\n z.object({\n parentOfferingId: z.string().uuid(),\n childOfferingId: z.string().uuid(),\n }),\n )\n .optional()\n})\n\n// \u2500\u2500\u2500 Wizard \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst wizardTransitionConditionSchema = z.object({\n field: z.string().min(1),\n operator: z.enum(['eq', 'neq', 'gt', 'lt', 'gte', 'lte', 'exists', 'not_exists', 'in']),\n value: z.unknown().optional(),\n})\n\nconst wizardTransitionSchema = z.object({\n targetStepId: z.string().min(1),\n condition: wizardTransitionConditionSchema.optional(),\n isDefault: z.boolean().optional(),\n label: z.string().optional(),\n})\n\nconst wizardStepValidationSchema = z.object({\n field: z.string().min(1),\n operator: z.enum(['eq', 'neq', 'exists', 'not_exists']),\n value: z.unknown().optional(),\n message: z.string().min(1),\n})\n\nconst wizardStepDefinitionSchema = z.object({\n stepId: z.string().min(1),\n type: z.string().min(1),\n title: z.string().min(1),\n description: z.string().nullish(),\n config: z.record(z.string(), z.unknown()).default({}),\n transitions: z.array(wizardTransitionSchema).default([]),\n isOptional: z.boolean().optional().default(false),\n validationRules: z.array(wizardStepValidationSchema).optional(),\n})\n\nconst wizardApplicabilitySchema = z.object({\n specCodes: z.array(z.string()).optional(),\n offeringCodes: z.array(z.string()).optional(),\n customerSegments: z.array(z.string()).optional(),\n surface: z.enum(['backend', 'portal']).optional(),\n priority: z.number().int().optional().default(0),\n})\n\nexport const cpqWizardDefinitionCreateSchema = z.object({\n code: z.string().min(1),\n name: z.string().min(1),\n description: z.string().nullish(),\n steps: z.array(wizardStepDefinitionSchema).min(1),\n applicability: wizardApplicabilitySchema.nullish(),\n paramsSchema: z.record(z.string(), z.unknown()).nullish(),\n surface: z.enum(['backend', 'portal', 'any']).optional().default('backend'),\n isActive: z.boolean().optional().default(true),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\nexport const cpqWizardDefinitionUpdateSchema = cpqWizardDefinitionCreateSchema.partial().extend({\n id: z.string().uuid(),\n})\n// \u2500\u2500\u2500 Inventory Subscription \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst cpqInventorySubscriptionItemInputSchema = z.object({\n parentItemId: z.string().uuid().nullish(),\n productId: z.string().uuid().nullish(),\n offeringId: z.string().uuid().nullish(),\n specId: z.string().uuid().nullish(),\n name: z.string().min(1),\n configuration: z.record(z.string(), z.unknown()).optional().default({}),\n charges: z.array(z.record(z.string(), z.unknown())).nullish(),\n mrcAmount: z.number().optional().default(0),\n nrcAmount: z.number().optional().default(0),\n currencyCode: z.string().min(1).optional(),\n quantity: z.number().int().min(1).optional().default(1),\n capacityTotal: z.number().nullish(),\n capacityUnit: z.string().nullish(),\n sourceQuoteLineId: z.string().uuid().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n sortOrder: z.number().int().optional().default(0),\n})\n\nexport const cpqInventorySubscriptionCreateSchema = z.object({\n customerId: z.string().uuid(),\n code: z.string().min(1).optional(),\n name: z.string().min(1),\n description: z.string().nullish(),\n billingCycle: z.enum(['monthly', 'quarterly', 'annually']).optional().default('monthly'),\n currencyCode: z.string().min(1).optional(),\n startDate: z.string().nullish(),\n termMonths: z.number().int().min(1).nullish(),\n autoRenew: z.boolean().optional().default(true),\n sourceQuoteId: z.string().uuid().nullish(),\n sourceOrderId: z.string().uuid().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n items: z.array(cpqInventorySubscriptionItemInputSchema).min(1),\n})\n\nexport const cpqInventorySubscriptionUpdateSchema = z.object({\n id: z.string().uuid(),\n name: z.string().min(1).optional(),\n description: z.string().nullish(),\n billingCycle: z.enum(['monthly', 'quarterly', 'annually']).optional(),\n autoRenew: z.boolean().optional(),\n termMonths: z.number().int().min(1).nullish(),\n currentTermEnd: z.string().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\nexport const cpqInventoryStatusTransitionSchema = z.object({\n id: z.string().uuid(),\n targetStatus: z.string().min(1),\n})\n\n// \u2500\u2500\u2500 Inventory Subscription Item \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqInventorySubscriptionItemCreateSchema = z.object({\n subscriptionId: z.string().uuid(),\n parentItemId: z.string().uuid().nullish(),\n productId: z.string().uuid().nullish(),\n offeringId: z.string().uuid().nullish(),\n specId: z.string().uuid().nullish(),\n name: z.string().min(1),\n configuration: z.record(z.string(), z.unknown()).optional().default({}),\n charges: z.array(z.record(z.string(), z.unknown())).nullish(),\n mrcAmount: z.number().optional().default(0),\n nrcAmount: z.number().optional().default(0),\n currencyCode: z.string().min(1).optional(),\n quantity: z.number().int().min(1).optional().default(1),\n capacityTotal: z.number().nullish(),\n capacityUnit: z.string().nullish(),\n sourceQuoteLineId: z.string().uuid().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n sortOrder: z.number().int().optional().default(0),\n})\n\nexport const cpqInventorySubscriptionItemUpdateSchema = z.object({\n id: z.string().uuid(),\n name: z.string().min(1).optional(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n capacityTotal: z.number().nullish(),\n capacityUsed: z.number().nullish(),\n capacityUnit: z.string().nullish(),\n sortOrder: z.number().int().optional(),\n})\n\n// \u2500\u2500\u2500 Inventory Asset \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqInventoryAssetCreateSchema = z.object({\n customerId: z.string().uuid(),\n subscriptionId: z.string().uuid().nullish(),\n subscriptionItemId: z.string().uuid().nullish(),\n productId: z.string().uuid().nullish(),\n offeringId: z.string().uuid().nullish(),\n specId: z.string().uuid().nullish(),\n code: z.string().min(1).optional(),\n name: z.string().min(1),\n description: z.string().nullish(),\n assetType: z.enum(['one_time', 'license', 'physical', 'logical']).optional().default('one_time'),\n currencyCode: z.string().min(1).optional(),\n purchasePrice: z.number().optional().default(0),\n quantity: z.number().int().min(1).optional().default(1),\n purchaseDate: z.string().nullish(),\n deliveryDate: z.string().nullish(),\n configuration: z.record(z.string(), z.unknown()).optional().default({}),\n charges: z.array(z.record(z.string(), z.unknown())).nullish(),\n sourceQuoteId: z.string().uuid().nullish(),\n sourceOrderId: z.string().uuid().nullish(),\n sourceQuoteLineId: z.string().uuid().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\nexport const cpqInventoryAssetUpdateSchema = z.object({\n id: z.string().uuid(),\n name: z.string().min(1).optional(),\n description: z.string().nullish(),\n assetType: z.enum(['one_time', 'license', 'physical', 'logical']).optional(),\n deliveryDate: z.string().nullish(),\n metadata: z.record(z.string(), z.unknown()).nullish(),\n})\n\n// \u2500\u2500\u2500 CPQ Orders \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const cpqConvertQuoteToOrderSchema = z.object({\n quoteId: z.string().uuid(),\n})\n\nexport const cpqOrderStatusTransitionSchema = z.object({\n targetStatus: z.string().min(1),\n})\n\nexport { cpqPriceAdjustmentInputSchema, cpqPriceAdjustmentPatchSchema } from './price-adjustments'\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/modules/cpq/di.js
CHANGED
|
@@ -6,9 +6,15 @@ import { DefaultCpqQuotingService } from "./services/cpqQuotingService.js";
|
|
|
6
6
|
import { DefaultCpqWizardService } from "./services/cpqWizardService.js";
|
|
7
7
|
import { DefaultCpqInventoryService } from "./services/cpqInventoryService.js";
|
|
8
8
|
import { DefaultCpqOrderService } from "./services/cpqOrderService.js";
|
|
9
|
+
import { CpqAdjustmentService } from "./services/priceAdjustments/adjustmentService.js";
|
|
9
10
|
import { DefaultCpqBundleService } from "./services/cpqBundleService.js";
|
|
10
11
|
function register(container) {
|
|
11
12
|
container.register({
|
|
13
|
+
cpqAdjustmentService: asFunction(() => new CpqAdjustmentService({
|
|
14
|
+
em: container.resolve("em"),
|
|
15
|
+
quotingService: container.resolve("cpqQuotingService"),
|
|
16
|
+
featureTogglesService: container.resolve("featureTogglesService")
|
|
17
|
+
})).scoped(),
|
|
12
18
|
cpqPricingService: asFunction(({ em }) => {
|
|
13
19
|
return new DefaultCpqPricingService(em);
|
|
14
20
|
}).scoped().proxy(),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/modules/cpq/di.ts"],
|
|
4
|
-
"sourcesContent": ["import { asFunction } from 'awilix'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AppContainer } from '@open-mercato/shared/lib/di/container'\nimport type { SalesDocumentNumberGenerator } from '@open-mercato/core/modules/sales/services/salesDocumentNumberGenerator'\nimport { DefaultCpqPricingService } from './services/cpqPricingService'\nimport { DefaultCpqValidationService } from './services/cpqValidationService'\nimport { DefaultCpqProductService } from './services/cpqProductService'\nimport { DefaultCpqQuotingService } from './services/cpqQuotingService'\nimport { DefaultCpqWizardService } from './services/cpqWizardService'\nimport { DefaultCpqInventoryService } from './services/cpqInventoryService'\nimport { DefaultCpqOrderService } from './services/cpqOrderService'\nimport { DefaultCpqBundleService } from './services/cpqBundleService'\n\n/**\n * Resolve dependencies from the container closure rather than via destructured\n * factory parameters. The container uses InjectionMode.CLASSIC, and Turbopack\n * transpiles destructured arrow functions in a way that breaks Awilix's\n * parameter-name parser. Core modules are unaffected because they ship\n * pre-compiled in node_modules.\n */\nexport function register(container: AppContainer) {\n container.register({\n cpqPricingService: asFunction(({ em }: { em: EntityManager }) => {\n return new DefaultCpqPricingService(em)\n }).scoped().proxy(),\n cpqValidationService: asFunction(({ em }: { em: EntityManager }) => {\n return new DefaultCpqValidationService(em)\n }).scoped().proxy(),\n cpqProductService: asFunction(({ em }: { em: EntityManager }) => {\n return new DefaultCpqProductService(em)\n }).scoped().proxy(),\n cpqQuotingService: asFunction(({\n em,\n cpqPricingService,\n cpqValidationService,\n cpqProductService,\n salesDocumentNumberGenerator,\n }: {\n em: EntityManager\n cpqPricingService: DefaultCpqPricingService\n cpqValidationService: DefaultCpqValidationService\n cpqProductService: DefaultCpqProductService\n salesDocumentNumberGenerator: SalesDocumentNumberGenerator\n }) => {\n return new DefaultCpqQuotingService({\n em: container.resolve('em'),\n cpqPricingService: container.resolve('cpqPricingService'),\n cpqValidationService: container.resolve('cpqValidationService'),\n cpqProductService: container.resolve('cpqProductService'),\n salesDocumentNumberGenerator: container.resolve('salesDocumentNumberGenerator'),\n })\n }).scoped().proxy(),\n cpqInventoryService: asFunction(() => {\n return new DefaultCpqInventoryService(container.resolve('em'))\n }).scoped(),\n cpqOrderService: asFunction(() => {\n return new DefaultCpqOrderService({\n em: container.resolve('em'),\n cpqInventoryService: container.resolve('cpqInventoryService'),\n salesDocumentNumberGenerator: container.resolve('salesDocumentNumberGenerator'),\n })\n }).scoped(),\n cpqWizardService: asFunction(({ em }: { em: EntityManager }) => {\n return new DefaultCpqWizardService(em)\n }).scoped().proxy(),\n cpqBundleService: asFunction(() => {\n return new DefaultCpqBundleService(container.resolve('em'))\n }).scoped(),\n })\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,kBAAkB;AAI3B,SAAS,gCAAgC;AACzC,SAAS,mCAAmC;AAC5C,SAAS,gCAAgC;AACzC,SAAS,gCAAgC;AACzC,SAAS,+BAA+B;AACxC,SAAS,kCAAkC;AAC3C,SAAS,8BAA8B;AACvC,SAAS,+BAA+B;AASjC,SAAS,SAAS,WAAyB;AAChD,YAAU,SAAS;AAAA,IACjB,mBAAmB,WAAW,CAAC,EAAE,GAAG,MAA6B;AAC/D,aAAO,IAAI,yBAAyB,EAAE;AAAA,IACxC,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,IAClB,sBAAsB,WAAW,CAAC,EAAE,GAAG,MAA6B;AAClE,aAAO,IAAI,4BAA4B,EAAE;AAAA,IAC3C,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,IAClB,mBAAmB,WAAW,CAAC,EAAE,GAAG,MAA6B;AAC/D,aAAO,IAAI,yBAAyB,EAAE;AAAA,IACxC,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,IAClB,mBAAmB,WAAW,CAAC;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAMM;AACJ,aAAO,IAAI,yBAAyB;AAAA,QAClC,IAAI,UAAU,QAAQ,IAAI;AAAA,QAC1B,mBAAmB,UAAU,QAAQ,mBAAmB;AAAA,QACxD,sBAAsB,UAAU,QAAQ,sBAAsB;AAAA,QAC9D,mBAAmB,UAAU,QAAQ,mBAAmB;AAAA,QACxD,8BAA8B,UAAU,QAAQ,8BAA8B;AAAA,MAChF,CAAC;AAAA,IACH,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,IAClB,qBAAqB,WAAW,MAAM;AACpC,aAAO,IAAI,2BAA2B,UAAU,QAAQ,IAAI,CAAC;AAAA,IAC/D,CAAC,EAAE,OAAO;AAAA,IACV,iBAAiB,WAAW,MAAM;AAChC,aAAO,IAAI,uBAAuB;AAAA,QAChC,IAAI,UAAU,QAAQ,IAAI;AAAA,QAC1B,qBAAqB,UAAU,QAAQ,qBAAqB;AAAA,QAC5D,8BAA8B,UAAU,QAAQ,8BAA8B;AAAA,MAChF,CAAC;AAAA,IACH,CAAC,EAAE,OAAO;AAAA,IACV,kBAAkB,WAAW,CAAC,EAAE,GAAG,MAA6B;AAC9D,aAAO,IAAI,wBAAwB,EAAE;AAAA,IACvC,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,IAClB,kBAAkB,WAAW,MAAM;AACjC,aAAO,IAAI,wBAAwB,UAAU,QAAQ,IAAI,CAAC;AAAA,IAC5D,CAAC,EAAE,OAAO;AAAA,EACZ,CAAC;AACH;",
|
|
4
|
+
"sourcesContent": ["import { asFunction } from 'awilix'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AppContainer } from '@open-mercato/shared/lib/di/container'\nimport type { SalesDocumentNumberGenerator } from '@open-mercato/core/modules/sales/services/salesDocumentNumberGenerator'\nimport { DefaultCpqPricingService } from './services/cpqPricingService'\nimport { DefaultCpqValidationService } from './services/cpqValidationService'\nimport { DefaultCpqProductService } from './services/cpqProductService'\nimport { DefaultCpqQuotingService } from './services/cpqQuotingService'\nimport { DefaultCpqWizardService } from './services/cpqWizardService'\nimport { DefaultCpqInventoryService } from './services/cpqInventoryService'\nimport { DefaultCpqOrderService } from './services/cpqOrderService'\nimport { CpqAdjustmentService } from './services/priceAdjustments/adjustmentService'\nimport { DefaultCpqBundleService } from './services/cpqBundleService'\n\n/**\n * Resolve dependencies from the container closure rather than via destructured\n * factory parameters. The container uses InjectionMode.CLASSIC, and Turbopack\n * transpiles destructured arrow functions in a way that breaks Awilix's\n * parameter-name parser. Core modules are unaffected because they ship\n * pre-compiled in node_modules.\n */\nexport function register(container: AppContainer) {\n container.register({\n cpqAdjustmentService: asFunction(() => new CpqAdjustmentService({\n em: container.resolve('em'),\n quotingService: container.resolve('cpqQuotingService'),\n featureTogglesService: container.resolve('featureTogglesService'),\n })).scoped(),\n cpqPricingService: asFunction(({ em }: { em: EntityManager }) => {\n return new DefaultCpqPricingService(em)\n }).scoped().proxy(),\n cpqValidationService: asFunction(({ em }: { em: EntityManager }) => {\n return new DefaultCpqValidationService(em)\n }).scoped().proxy(),\n cpqProductService: asFunction(({ em }: { em: EntityManager }) => {\n return new DefaultCpqProductService(em)\n }).scoped().proxy(),\n cpqQuotingService: asFunction(({\n em,\n cpqPricingService,\n cpqValidationService,\n cpqProductService,\n salesDocumentNumberGenerator,\n }: {\n em: EntityManager\n cpqPricingService: DefaultCpqPricingService\n cpqValidationService: DefaultCpqValidationService\n cpqProductService: DefaultCpqProductService\n salesDocumentNumberGenerator: SalesDocumentNumberGenerator\n }) => {\n return new DefaultCpqQuotingService({\n em: container.resolve('em'),\n cpqPricingService: container.resolve('cpqPricingService'),\n cpqValidationService: container.resolve('cpqValidationService'),\n cpqProductService: container.resolve('cpqProductService'),\n salesDocumentNumberGenerator: container.resolve('salesDocumentNumberGenerator'),\n })\n }).scoped().proxy(),\n cpqInventoryService: asFunction(() => {\n return new DefaultCpqInventoryService(container.resolve('em'))\n }).scoped(),\n cpqOrderService: asFunction(() => {\n return new DefaultCpqOrderService({\n em: container.resolve('em'),\n cpqInventoryService: container.resolve('cpqInventoryService'),\n salesDocumentNumberGenerator: container.resolve('salesDocumentNumberGenerator'),\n })\n }).scoped(),\n cpqWizardService: asFunction(({ em }: { em: EntityManager }) => {\n return new DefaultCpqWizardService(em)\n }).scoped().proxy(),\n cpqBundleService: asFunction(() => {\n return new DefaultCpqBundleService(container.resolve('em'))\n }).scoped(),\n })\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,kBAAkB;AAI3B,SAAS,gCAAgC;AACzC,SAAS,mCAAmC;AAC5C,SAAS,gCAAgC;AACzC,SAAS,gCAAgC;AACzC,SAAS,+BAA+B;AACxC,SAAS,kCAAkC;AAC3C,SAAS,8BAA8B;AACvC,SAAS,4BAA4B;AACrC,SAAS,+BAA+B;AASjC,SAAS,SAAS,WAAyB;AAChD,YAAU,SAAS;AAAA,IACjB,sBAAsB,WAAW,MAAM,IAAI,qBAAqB;AAAA,MAC9D,IAAI,UAAU,QAAQ,IAAI;AAAA,MAC1B,gBAAgB,UAAU,QAAQ,mBAAmB;AAAA,MACrD,uBAAuB,UAAU,QAAQ,uBAAuB;AAAA,IAClE,CAAC,CAAC,EAAE,OAAO;AAAA,IACX,mBAAmB,WAAW,CAAC,EAAE,GAAG,MAA6B;AAC/D,aAAO,IAAI,yBAAyB,EAAE;AAAA,IACxC,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,IAClB,sBAAsB,WAAW,CAAC,EAAE,GAAG,MAA6B;AAClE,aAAO,IAAI,4BAA4B,EAAE;AAAA,IAC3C,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,IAClB,mBAAmB,WAAW,CAAC,EAAE,GAAG,MAA6B;AAC/D,aAAO,IAAI,yBAAyB,EAAE;AAAA,IACxC,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,IAClB,mBAAmB,WAAW,CAAC;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAMM;AACJ,aAAO,IAAI,yBAAyB;AAAA,QAClC,IAAI,UAAU,QAAQ,IAAI;AAAA,QAC1B,mBAAmB,UAAU,QAAQ,mBAAmB;AAAA,QACxD,sBAAsB,UAAU,QAAQ,sBAAsB;AAAA,QAC9D,mBAAmB,UAAU,QAAQ,mBAAmB;AAAA,QACxD,8BAA8B,UAAU,QAAQ,8BAA8B;AAAA,MAChF,CAAC;AAAA,IACH,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,IAClB,qBAAqB,WAAW,MAAM;AACpC,aAAO,IAAI,2BAA2B,UAAU,QAAQ,IAAI,CAAC;AAAA,IAC/D,CAAC,EAAE,OAAO;AAAA,IACV,iBAAiB,WAAW,MAAM;AAChC,aAAO,IAAI,uBAAuB;AAAA,QAChC,IAAI,UAAU,QAAQ,IAAI;AAAA,QAC1B,qBAAqB,UAAU,QAAQ,qBAAqB;AAAA,QAC5D,8BAA8B,UAAU,QAAQ,8BAA8B;AAAA,MAChF,CAAC;AAAA,IACH,CAAC,EAAE,OAAO;AAAA,IACV,kBAAkB,WAAW,CAAC,EAAE,GAAG,MAA6B;AAC9D,aAAO,IAAI,wBAAwB,EAAE;AAAA,IACvC,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,IAClB,kBAAkB,WAAW,MAAM;AACjC,aAAO,IAAI,wBAAwB,UAAU,QAAQ,IAAI,CAAC;AAAA,IAC5D,CAAC,EAAE,OAAO;AAAA,EACZ,CAAC;AACH;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
import { createModuleEvents } from "@open-mercato/shared/modules/events";
|
|
2
|
+
const quotePricingSnapshotFields = [
|
|
3
|
+
{ path: "tenantId", type: "text" },
|
|
4
|
+
{ path: "organizationId", type: "text" },
|
|
5
|
+
{ path: "quoteId", type: "text", label: "CPQ quote id" },
|
|
6
|
+
{ path: "quoteType", type: "select", label: "Quote type" },
|
|
7
|
+
{ path: "cpqStatus", type: "text", label: "Status" },
|
|
8
|
+
{ path: "currencyCode", type: "text" },
|
|
9
|
+
{ path: "pricingRevision", type: "number" },
|
|
10
|
+
{ path: "snapshotHash", type: "text" },
|
|
11
|
+
{ path: "dealValue.list", type: "number", label: "Deal value (list)" },
|
|
12
|
+
{ path: "dealValue.standard", type: "number", label: "Deal value (standard)" },
|
|
13
|
+
{ path: "dealValue.offer", type: "number", label: "Deal value (offer)" },
|
|
14
|
+
{ path: "discountDepth.rule", type: "number", label: "Rule discount depth", optional: true },
|
|
15
|
+
{ path: "discountDepth.manual", type: "number", label: "Manual discount depth", optional: true },
|
|
16
|
+
{ path: "discountDepth.total", type: "number", label: "Total discount depth", optional: true },
|
|
17
|
+
{ path: "discountDepth.maxLineManual", type: "number", label: "Max line manual discount depth", optional: true },
|
|
18
|
+
{ path: "hasTimeBasedAdjustments", type: "boolean" },
|
|
19
|
+
{ path: "occurredAt", type: "date" }
|
|
20
|
+
];
|
|
2
21
|
const events = [
|
|
3
22
|
{
|
|
4
23
|
id: "cpq.subscription.activated",
|
|
@@ -41,6 +60,34 @@ const events = [
|
|
|
41
60
|
entity: "subscription",
|
|
42
61
|
category: "lifecycle",
|
|
43
62
|
clientBroadcast: true
|
|
63
|
+
},
|
|
64
|
+
// Quote pricing signals (manual price adjustments). Emitted after the quote
|
|
65
|
+
// write commits by `withQuotePricingWrite`; payload carries the pricing
|
|
66
|
+
// snapshot (deal value, discount depth, snapshot hash) so project workflows
|
|
67
|
+
// can route approvals without CPQ code.
|
|
68
|
+
{
|
|
69
|
+
id: "cpq.quote.pricing_changed",
|
|
70
|
+
label: "Quote Pricing Changed",
|
|
71
|
+
entity: "quote",
|
|
72
|
+
category: "custom",
|
|
73
|
+
clientBroadcast: true,
|
|
74
|
+
payloadSchema: { fields: [...quotePricingSnapshotFields, { path: "cause", type: "select" }] }
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: "cpq.quote.status_changed",
|
|
78
|
+
label: "Quote Status Changed",
|
|
79
|
+
entity: "quote",
|
|
80
|
+
category: "lifecycle",
|
|
81
|
+
clientBroadcast: true,
|
|
82
|
+
payloadSchema: {
|
|
83
|
+
fields: [
|
|
84
|
+
...quotePricingSnapshotFields,
|
|
85
|
+
{ path: "fromStatus", type: "text" },
|
|
86
|
+
{ path: "toStatus", type: "text" },
|
|
87
|
+
{ path: "cause", type: "select" },
|
|
88
|
+
{ path: "actorUserId", type: "text", optional: true }
|
|
89
|
+
]
|
|
90
|
+
}
|
|
44
91
|
}
|
|
45
92
|
];
|
|
46
93
|
const eventsConfig = createModuleEvents({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/modules/cpq/events.ts"],
|
|
4
|
-
"sourcesContent": ["import { createModuleEvents } from '@open-mercato/shared/modules/events'\n\n/**\n * CPQ Module Events.\n *\n * Subscription lifecycle events: `activated` (new-sale onboarding) plus\n * the XD-250 ARC (Amend / Renew / Cancel / merge) events. Downstream\n * modules (billing, notifications) subscribe to these to react to\n * subscription mutations driven by CPQ orders.\n *\n * Emission rule: events fire AFTER
|
|
5
|
-
"mappings": "AAAA,SAAS,0BAA0B;
|
|
4
|
+
"sourcesContent": ["import { createModuleEvents } from '@open-mercato/shared/modules/events'\nimport type { EventPayloadSchemaField } from '@open-mercato/shared/modules/events'\n\n/** Fields shared by both quote pricing signals (see `quotePricingEvents.ts`). */\nconst quotePricingSnapshotFields: EventPayloadSchemaField[] = [\n { path: 'tenantId', type: 'text' },\n { path: 'organizationId', type: 'text' },\n { path: 'quoteId', type: 'text', label: 'CPQ quote id' },\n { path: 'quoteType', type: 'select', label: 'Quote type' },\n { path: 'cpqStatus', type: 'text', label: 'Status' },\n { path: 'currencyCode', type: 'text' },\n { path: 'pricingRevision', type: 'number' },\n { path: 'snapshotHash', type: 'text' },\n { path: 'dealValue.list', type: 'number', label: 'Deal value (list)' },\n { path: 'dealValue.standard', type: 'number', label: 'Deal value (standard)' },\n { path: 'dealValue.offer', type: 'number', label: 'Deal value (offer)' },\n { path: 'discountDepth.rule', type: 'number', label: 'Rule discount depth', optional: true },\n { path: 'discountDepth.manual', type: 'number', label: 'Manual discount depth', optional: true },\n { path: 'discountDepth.total', type: 'number', label: 'Total discount depth', optional: true },\n { path: 'discountDepth.maxLineManual', type: 'number', label: 'Max line manual discount depth', optional: true },\n { path: 'hasTimeBasedAdjustments', type: 'boolean' },\n { path: 'occurredAt', type: 'date' },\n]\n\n/**\n * CPQ Module Events.\n *\n * Subscription lifecycle events: `activated` (new-sale onboarding) plus\n * the XD-250 ARC (Amend / Renew / Cancel / merge) events. Downstream\n * modules (billing, notifications) subscribe to these to react to\n * subscription mutations driven by CPQ orders.\n *\n * Emission rule: events fire AFTER their transaction commits.\n * Subscription events: `cpqOrderService.activateOrder` is the sole emitter.\n * Quote events: `withQuotePricingWrite` (plus `cloneQuote` for the copy).\n */\nconst events = [\n {\n id: 'cpq.subscription.activated',\n label: 'Subscription Activated',\n entity: 'subscription',\n category: 'lifecycle',\n clientBroadcast: true,\n },\n {\n id: 'cpq.subscription.amended',\n label: 'Subscription Amended',\n entity: 'subscription',\n category: 'lifecycle',\n clientBroadcast: true,\n },\n {\n id: 'cpq.subscription.renewed',\n label: 'Subscription Renewed',\n entity: 'subscription',\n category: 'lifecycle',\n clientBroadcast: true,\n },\n {\n id: 'cpq.subscription.merged',\n label: 'Subscription Merged',\n entity: 'subscription',\n category: 'lifecycle',\n clientBroadcast: true,\n },\n {\n id: 'cpq.subscription.cancelled',\n label: 'Subscription Cancelled',\n entity: 'subscription',\n category: 'lifecycle',\n clientBroadcast: true,\n },\n {\n id: 'cpq.subscription.superseded',\n label: 'Subscription Superseded',\n entity: 'subscription',\n category: 'lifecycle',\n clientBroadcast: true,\n },\n // Quote pricing signals (manual price adjustments). Emitted after the quote\n // write commits by `withQuotePricingWrite`; payload carries the pricing\n // snapshot (deal value, discount depth, snapshot hash) so project workflows\n // can route approvals without CPQ code.\n {\n id: 'cpq.quote.pricing_changed',\n label: 'Quote Pricing Changed',\n entity: 'quote',\n category: 'custom',\n clientBroadcast: true,\n payloadSchema: { fields: [...quotePricingSnapshotFields, { path: 'cause', type: 'select' }] },\n },\n {\n id: 'cpq.quote.status_changed',\n label: 'Quote Status Changed',\n entity: 'quote',\n category: 'lifecycle',\n clientBroadcast: true,\n payloadSchema: {\n fields: [\n ...quotePricingSnapshotFields,\n { path: 'fromStatus', type: 'text' },\n { path: 'toStatus', type: 'text' },\n { path: 'cause', type: 'select' },\n { path: 'actorUserId', type: 'text', optional: true },\n ],\n },\n },\n] as const\n\nexport const eventsConfig = createModuleEvents({\n moduleId: 'cpq',\n events,\n})\n\n/** Type-safe event emitter for the CPQ module. */\nexport const emitCpqEvent = eventsConfig.emit\n\n/** Event IDs that can be emitted by the CPQ module. */\nexport type CpqEventId = (typeof events)[number]['id']\n\nexport default eventsConfig\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,0BAA0B;AAInC,MAAM,6BAAwD;AAAA,EAC5D,EAAE,MAAM,YAAY,MAAM,OAAO;AAAA,EACjC,EAAE,MAAM,kBAAkB,MAAM,OAAO;AAAA,EACvC,EAAE,MAAM,WAAW,MAAM,QAAQ,OAAO,eAAe;AAAA,EACvD,EAAE,MAAM,aAAa,MAAM,UAAU,OAAO,aAAa;AAAA,EACzD,EAAE,MAAM,aAAa,MAAM,QAAQ,OAAO,SAAS;AAAA,EACnD,EAAE,MAAM,gBAAgB,MAAM,OAAO;AAAA,EACrC,EAAE,MAAM,mBAAmB,MAAM,SAAS;AAAA,EAC1C,EAAE,MAAM,gBAAgB,MAAM,OAAO;AAAA,EACrC,EAAE,MAAM,kBAAkB,MAAM,UAAU,OAAO,oBAAoB;AAAA,EACrE,EAAE,MAAM,sBAAsB,MAAM,UAAU,OAAO,wBAAwB;AAAA,EAC7E,EAAE,MAAM,mBAAmB,MAAM,UAAU,OAAO,qBAAqB;AAAA,EACvE,EAAE,MAAM,sBAAsB,MAAM,UAAU,OAAO,uBAAuB,UAAU,KAAK;AAAA,EAC3F,EAAE,MAAM,wBAAwB,MAAM,UAAU,OAAO,yBAAyB,UAAU,KAAK;AAAA,EAC/F,EAAE,MAAM,uBAAuB,MAAM,UAAU,OAAO,wBAAwB,UAAU,KAAK;AAAA,EAC7F,EAAE,MAAM,+BAA+B,MAAM,UAAU,OAAO,kCAAkC,UAAU,KAAK;AAAA,EAC/G,EAAE,MAAM,2BAA2B,MAAM,UAAU;AAAA,EACnD,EAAE,MAAM,cAAc,MAAM,OAAO;AACrC;AAcA,MAAM,SAAS;AAAA,EACb;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,eAAe,EAAE,QAAQ,CAAC,GAAG,4BAA4B,EAAE,MAAM,SAAS,MAAM,SAAS,CAAC,EAAE;AAAA,EAC9F;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,eAAe;AAAA,MACb,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,EAAE,MAAM,cAAc,MAAM,OAAO;AAAA,QACnC,EAAE,MAAM,YAAY,MAAM,OAAO;AAAA,QACjC,EAAE,MAAM,SAAS,MAAM,SAAS;AAAA,QAChC,EAAE,MAAM,eAAe,MAAM,QAAQ,UAAU,KAAK;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,eAAe,mBAAmB;AAAA,EAC7C,UAAU;AAAA,EACV;AACF,CAAC;AAGM,MAAM,eAAe,aAAa;AAKzC,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|