@dainamite/cpq 0.2.2 → 0.4.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 +62 -0
- package/MIGRATION.md +34 -1
- package/README.md +17 -12
- package/dist/modules/cpq/api/product-attributes/route.js +28 -53
- package/dist/modules/cpq/api/product-attributes/route.js.map +2 -2
- package/dist/modules/cpq/api/product-charges/route.js +12 -2
- package/dist/modules/cpq/api/product-charges/route.js.map +2 -2
- package/dist/modules/cpq/api/product-offerings/route.js +2 -0
- package/dist/modules/cpq/api/product-offerings/route.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/offerings/[id]/page.js +128 -59
- package/dist/modules/cpq/backend/cpq/offerings/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.js +11 -11
- package/dist/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/specifications/[id]/page.js +55 -1
- package/dist/modules/cpq/backend/cpq/specifications/[id]/page.js.map +2 -2
- package/dist/modules/cpq/cli.js +58 -4
- package/dist/modules/cpq/cli.js.map +3 -3
- package/dist/modules/cpq/data/charge-pricing.js +12 -0
- package/dist/modules/cpq/data/charge-pricing.js.map +7 -0
- package/dist/modules/cpq/data/entities.js +3 -0
- package/dist/modules/cpq/data/entities.js.map +2 -2
- package/dist/modules/cpq/data/validators.js +36 -15
- package/dist/modules/cpq/data/validators.js.map +2 -2
- package/dist/modules/cpq/events.js +7 -0
- package/dist/modules/cpq/events.js.map +2 -2
- package/dist/modules/cpq/lib/seeds/demo.js +103 -0
- package/dist/modules/cpq/lib/seeds/demo.js.map +7 -0
- package/dist/modules/cpq/migrations/Migration20260602000000_cpq_charge_model_split.js +28 -0
- package/dist/modules/cpq/migrations/Migration20260602000000_cpq_charge_model_split.js.map +7 -0
- package/dist/modules/cpq/services/cpqOrderService.js +130 -76
- package/dist/modules/cpq/services/cpqOrderService.js.map +2 -2
- package/dist/modules/cpq/services/cpqPricingService.js +53 -29
- package/dist/modules/cpq/services/cpqPricingService.js.map +3 -3
- package/dist/modules/cpq/services/types.js.map +2 -2
- package/package.json +11 -9
- package/src/modules/cpq/__integration__/TC-CPQ-012.spec.ts +34 -4
- package/src/modules/cpq/__tests__/package-isolation.test.ts +8 -3
- package/src/modules/cpq/api/product-attributes/__tests__/serializeAttribute.test.ts +62 -0
- package/src/modules/cpq/api/product-attributes/route.ts +34 -52
- package/src/modules/cpq/api/product-charges/route.ts +23 -2
- package/src/modules/cpq/api/product-offerings/route.ts +2 -0
- package/src/modules/cpq/backend/cpq/offerings/[id]/page.tsx +151 -62
- package/src/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.tsx +24 -22
- package/src/modules/cpq/backend/cpq/specifications/[id]/page.tsx +73 -1
- package/src/modules/cpq/cli.ts +83 -4
- package/src/modules/cpq/data/__tests__/charge-pricing.test.ts +49 -0
- package/src/modules/cpq/data/__tests__/validators.test.ts +60 -5
- package/src/modules/cpq/data/charge-pricing.ts +48 -0
- package/src/modules/cpq/data/entities.ts +10 -0
- package/src/modules/cpq/data/validators.ts +56 -26
- package/src/modules/cpq/events.ts +11 -3
- package/src/modules/cpq/lib/seeds/__tests__/demo.test.ts +78 -0
- package/src/modules/cpq/lib/seeds/demo.ts +145 -0
- package/src/modules/cpq/migrations/.snapshot-open-mercato.json +16 -0
- package/src/modules/cpq/migrations/Migration20260602000000_cpq_charge_model_split.ts +57 -0
- package/src/modules/cpq/services/__tests__/cpqPricingService.test.ts +172 -1
- package/src/modules/cpq/services/cpqOrderService.ts +214 -103
- package/src/modules/cpq/services/cpqPricingService.ts +82 -34
- package/src/modules/cpq/services/types.ts +4 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { normalizeChargePricing } from "./charge-pricing.js";
|
|
2
3
|
const cpqProductSpecificationCreateSchema = z.object({
|
|
3
4
|
productId: z.string().uuid().optional(),
|
|
4
5
|
code: z.string().min(1),
|
|
@@ -112,7 +113,8 @@ const cpqProductAttributeCreateSchema = z.object({
|
|
|
112
113
|
const cpqProductAttributeUpdateSchema = cpqProductAttributeCreateSchema.partial().extend({
|
|
113
114
|
id: z.string().uuid()
|
|
114
115
|
});
|
|
115
|
-
const
|
|
116
|
+
const cpqChargeModelEnum = z.enum(["flat", "per_unit", "volume", "tiered"]);
|
|
117
|
+
const cpqChargePricingMethodEnum = z.enum(["fixed", "table", "flat", "tiered", "per_unit"]);
|
|
116
118
|
const requireField = (ctx, value, path, msg) => {
|
|
117
119
|
if (value === void 0 || value === null || value === "") {
|
|
118
120
|
ctx.addIssue({ code: z.ZodIssueCode.custom, path: [path], message: msg });
|
|
@@ -130,7 +132,8 @@ const cpqProductChargeBase = z.object({
|
|
|
130
132
|
name: z.string().min(1),
|
|
131
133
|
description: z.string().nullish(),
|
|
132
134
|
chargeType: z.enum(["nrc", "mrc", "usage"]),
|
|
133
|
-
|
|
135
|
+
chargeModel: cpqChargeModelEnum.optional(),
|
|
136
|
+
pricingMethod: cpqChargePricingMethodEnum,
|
|
134
137
|
pricingTableId: z.string().uuid().nullish(),
|
|
135
138
|
priceColumnKey: z.string().nullish(),
|
|
136
139
|
fixedPrice: z.union([z.string(), z.number().transform(String)]).nullish(),
|
|
@@ -141,20 +144,36 @@ const cpqProductChargeBase = z.object({
|
|
|
141
144
|
isActive: z.boolean().optional().default(true)
|
|
142
145
|
});
|
|
143
146
|
const refineChargePricingShape = (ctx, charge) => {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if (
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
147
|
+
if (charge.pricingMethod === void 0 && charge.chargeModel === void 0) return;
|
|
148
|
+
const { model, source } = normalizeChargePricing(charge);
|
|
149
|
+
if (source === "fixed") {
|
|
150
|
+
if (model === "volume" || model === "tiered") {
|
|
151
|
+
ctx.addIssue({
|
|
152
|
+
code: z.ZodIssueCode.custom,
|
|
153
|
+
path: ["pricingMethod"],
|
|
154
|
+
message: `V-CHG-1: ${model} pricing requires Table Lookup, not a fixed price`
|
|
155
|
+
});
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
requireField(ctx, charge.fixedPrice, "fixedPrice", "V-CHG-1: fixedPrice is required for a fixed price");
|
|
159
|
+
requireField(ctx, charge.currencyCode, "currencyCode", "V-CHG-1: currencyCode is required for a fixed price");
|
|
160
|
+
forbidField(ctx, charge.pricingTableId, "pricingTableId", "V-CHG-1: pricingTableId must be empty for a fixed price");
|
|
161
|
+
forbidField(ctx, charge.priceColumnKey, "priceColumnKey", "V-CHG-1: priceColumnKey must be empty for a fixed price");
|
|
162
|
+
if (model === "per_unit") {
|
|
163
|
+
requireField(ctx, charge.quantityAttributeCode, "quantityAttributeCode", "V-CHG-1: quantityAttributeCode is required for per-unit pricing");
|
|
164
|
+
} else {
|
|
165
|
+
forbidField(ctx, charge.quantityAttributeCode, "quantityAttributeCode", "V-CHG-1: quantityAttributeCode must be empty for a flat fixed price");
|
|
166
|
+
}
|
|
152
167
|
return;
|
|
153
168
|
}
|
|
154
|
-
requireField(ctx, charge.pricingTableId, "pricingTableId",
|
|
155
|
-
requireField(ctx, charge.priceColumnKey, "priceColumnKey",
|
|
156
|
-
|
|
157
|
-
|
|
169
|
+
requireField(ctx, charge.pricingTableId, "pricingTableId", "V-CHG-1: pricingTableId is required for table lookup");
|
|
170
|
+
requireField(ctx, charge.priceColumnKey, "priceColumnKey", "V-CHG-1: priceColumnKey is required for table lookup");
|
|
171
|
+
forbidField(ctx, charge.fixedPrice, "fixedPrice", "V-CHG-1: fixedPrice must be empty for table lookup \u2014 price comes from the table");
|
|
172
|
+
if (model === "flat") {
|
|
173
|
+
forbidField(ctx, charge.quantityAttributeCode, "quantityAttributeCode", "V-CHG-1: quantityAttributeCode must be empty for a flat table price");
|
|
174
|
+
} else {
|
|
175
|
+
requireField(ctx, charge.quantityAttributeCode, "quantityAttributeCode", `V-CHG-1: quantityAttributeCode is required for ${model} pricing`);
|
|
176
|
+
}
|
|
158
177
|
};
|
|
159
178
|
const cpqProductChargeCreateSchema = cpqProductChargeBase.superRefine((data, ctx) => {
|
|
160
179
|
refineChargePricingShape(ctx, data);
|
|
@@ -162,7 +181,9 @@ const cpqProductChargeCreateSchema = cpqProductChargeBase.superRefine((data, ctx
|
|
|
162
181
|
const cpqProductChargeUpdateSchema = cpqProductChargeBase.partial().extend({
|
|
163
182
|
id: z.string().uuid()
|
|
164
183
|
}).superRefine((data, ctx) => {
|
|
165
|
-
if (data.pricingMethod !== void 0
|
|
184
|
+
if (data.pricingMethod !== void 0 || data.chargeModel !== void 0) {
|
|
185
|
+
refineChargePricingShape(ctx, data);
|
|
186
|
+
}
|
|
166
187
|
});
|
|
167
188
|
const cpqPriceRuleCreateSchema = z.object({
|
|
168
189
|
code: z.string().min(1),
|
|
@@ -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'\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). We accept it on input and normalise to `flat` so storage\n// stays canonical.\nconst cpqChargePricingMethodEnum = z.enum(['flat', 'fixed', '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 pricingMethod: cpqChargePricingMethodEnum.transform((v) => (v === 'fixed' ? 'flat' : v)),\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: pricing method must match the configured fields.\n// - flat \u2192 fixedPrice + currencyCode required; table fields forbidden\n// - per_unit \u2192 pricingTableId + priceColumnKey + quantityAttributeCode\n// required; fixedPrice forbidden\n// - tiered \u2192 same as per_unit (rangeFrom/rangeTo come from the table)\nconst refineChargePricingShape = (\n ctx: z.RefinementCtx,\n charge: {\n pricingMethod?: '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 const method = charge.pricingMethod\n if (!method) return\n if (method === 'flat') {\n requireField(ctx, charge.fixedPrice, 'fixedPrice', 'V-CHG-1: fixedPrice is required for flat pricing')\n requireField(ctx, charge.currencyCode, 'currencyCode', 'V-CHG-1: currencyCode is required for flat pricing')\n forbidField(ctx, charge.pricingTableId, 'pricingTableId', 'V-CHG-1: pricingTableId must be empty for flat pricing')\n forbidField(ctx, charge.priceColumnKey, 'priceColumnKey', 'V-CHG-1: priceColumnKey must be empty for flat pricing')\n forbidField(ctx, charge.quantityAttributeCode, 'quantityAttributeCode', 'V-CHG-1: quantityAttributeCode must be empty for flat pricing')\n return\n }\n // per_unit | tiered\n requireField(ctx, charge.pricingTableId, 'pricingTableId', `V-CHG-1: pricingTableId is required for ${method} pricing`)\n requireField(ctx, charge.priceColumnKey, 'priceColumnKey', `V-CHG-1: priceColumnKey is required for ${method} pricing`)\n requireField(ctx, charge.quantityAttributeCode, 'quantityAttributeCode', `V-CHG-1: quantityAttributeCode is required for ${method} pricing`)\n forbidField(ctx, charge.fixedPrice, 'fixedPrice', `V-CHG-1: fixedPrice must be empty for ${method} pricing \u2014 price comes from the pricing table`)\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 // On update, only enforce shape if pricingMethod is present in payload\n // (PATCH semantics \u2014 service merges with the persisted row).\n if (data.pricingMethod !== undefined) refineChargePricingShape(ctx, data)\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 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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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { createModuleEvents } from "@open-mercato/shared/modules/events";
|
|
2
2
|
const events = [
|
|
3
|
+
{
|
|
4
|
+
id: "cpq.subscription.activated",
|
|
5
|
+
label: "Subscription Activated",
|
|
6
|
+
entity: "subscription",
|
|
7
|
+
category: "lifecycle",
|
|
8
|
+
clientBroadcast: true
|
|
9
|
+
},
|
|
3
10
|
{
|
|
4
11
|
id: "cpq.subscription.amended",
|
|
5
12
|
label: "Subscription Amended",
|
|
@@ -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 *
|
|
5
|
-
"mappings": "AAAA,SAAS,0BAA0B;
|
|
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 the activation transaction commits.\n * `cpqOrderService.activateOrder` is the sole emitter site.\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] 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;AAanC,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;AACF;AAEO,MAAM,eAAe,mBAAmB;AAAA,EAC7C,UAAU;AAAA,EACV;AACF,CAAC;AAGM,MAAM,eAAe,aAAa;AAKzC,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
const PRODUCT_SKU = "DEMO-CPQ-CLOUD";
|
|
2
|
+
const SPEC_CODE = "DEMO-CPQ-CLOUD-SPEC";
|
|
3
|
+
const OFFERING_CODE = "DEMO-CPQ-CLOUD-OFFER";
|
|
4
|
+
const CHARGE_CODE = "DEMO-CPQ-CLOUD-MRC";
|
|
5
|
+
async function resetCpqDemo(em, scope) {
|
|
6
|
+
const { CpqProductSpecification, CpqProductOffering, CpqProductCharge } = await import("../../data/entities.js");
|
|
7
|
+
const { CatalogProduct } = await import("@open-mercato/core/modules/catalog/data/entities");
|
|
8
|
+
await em.nativeDelete(CpqProductCharge, { ...scope, code: CHARGE_CODE });
|
|
9
|
+
await em.nativeDelete(CpqProductOffering, { ...scope, code: OFFERING_CODE });
|
|
10
|
+
await em.nativeDelete(CpqProductSpecification, { ...scope, code: SPEC_CODE });
|
|
11
|
+
await em.nativeDelete(CatalogProduct, { ...scope, sku: PRODUCT_SKU });
|
|
12
|
+
}
|
|
13
|
+
async function seedCpqDemo(em, scope, options = {}) {
|
|
14
|
+
if (options.reset) await resetCpqDemo(em, scope);
|
|
15
|
+
const { CpqProductSpecification, CpqProductOffering, CpqProductCharge } = await import("../../data/entities.js");
|
|
16
|
+
const { CatalogProduct } = await import("@open-mercato/core/modules/catalog/data/entities");
|
|
17
|
+
const result = {
|
|
18
|
+
productsCreated: 0,
|
|
19
|
+
specsCreated: 0,
|
|
20
|
+
offeringsCreated: 0,
|
|
21
|
+
chargesCreated: 0
|
|
22
|
+
};
|
|
23
|
+
let product = await em.findOne(CatalogProduct, { ...scope, sku: PRODUCT_SKU, deletedAt: null });
|
|
24
|
+
if (!product) {
|
|
25
|
+
product = em.create(CatalogProduct, {
|
|
26
|
+
...scope,
|
|
27
|
+
title: "Demo Cloud Plan",
|
|
28
|
+
sku: PRODUCT_SKU,
|
|
29
|
+
handle: PRODUCT_SKU.toLowerCase(),
|
|
30
|
+
productType: "configurable",
|
|
31
|
+
description: "Generic CPQ demo product seeded by `mercato cpq seed`.",
|
|
32
|
+
isConfigurable: true,
|
|
33
|
+
isActive: true
|
|
34
|
+
});
|
|
35
|
+
em.persist(product);
|
|
36
|
+
await em.flush();
|
|
37
|
+
result.productsCreated += 1;
|
|
38
|
+
}
|
|
39
|
+
let spec = await em.findOne(CpqProductSpecification, { ...scope, code: SPEC_CODE, deletedAt: null });
|
|
40
|
+
if (!spec) {
|
|
41
|
+
spec = em.create(CpqProductSpecification, {
|
|
42
|
+
...scope,
|
|
43
|
+
productId: product.id,
|
|
44
|
+
code: SPEC_CODE,
|
|
45
|
+
name: "Demo Cloud Specification",
|
|
46
|
+
specType: "simple",
|
|
47
|
+
lifecycleStatus: "active",
|
|
48
|
+
isActive: true
|
|
49
|
+
});
|
|
50
|
+
em.persist(spec);
|
|
51
|
+
await em.flush();
|
|
52
|
+
result.specsCreated += 1;
|
|
53
|
+
}
|
|
54
|
+
let offering = await em.findOne(CpqProductOffering, { ...scope, code: OFFERING_CODE, deletedAt: null });
|
|
55
|
+
if (!offering) {
|
|
56
|
+
offering = em.create(CpqProductOffering, {
|
|
57
|
+
...scope,
|
|
58
|
+
specId: spec.id,
|
|
59
|
+
code: OFFERING_CODE,
|
|
60
|
+
name: "Demo Cloud Offering",
|
|
61
|
+
offeringType: "simple",
|
|
62
|
+
designTimeValues: {},
|
|
63
|
+
lifecycleStatus: "active",
|
|
64
|
+
isActive: true
|
|
65
|
+
});
|
|
66
|
+
em.persist(offering);
|
|
67
|
+
await em.flush();
|
|
68
|
+
result.offeringsCreated += 1;
|
|
69
|
+
}
|
|
70
|
+
const charge = await em.findOne(CpqProductCharge, {
|
|
71
|
+
...scope,
|
|
72
|
+
offeringId: offering.id,
|
|
73
|
+
code: CHARGE_CODE,
|
|
74
|
+
deletedAt: null
|
|
75
|
+
});
|
|
76
|
+
if (!charge) {
|
|
77
|
+
em.persist(
|
|
78
|
+
em.create(CpqProductCharge, {
|
|
79
|
+
...scope,
|
|
80
|
+
productId: product.id,
|
|
81
|
+
offeringId: offering.id,
|
|
82
|
+
code: CHARGE_CODE,
|
|
83
|
+
name: "Monthly platform fee",
|
|
84
|
+
chargeType: "mrc",
|
|
85
|
+
chargeModel: "flat",
|
|
86
|
+
pricingMethod: "fixed",
|
|
87
|
+
fixedPrice: "99.0000",
|
|
88
|
+
// Neutral default — this seed ships generically with @dainamite/cpq.
|
|
89
|
+
currencyCode: "USD",
|
|
90
|
+
sortOrder: 0,
|
|
91
|
+
isActive: true
|
|
92
|
+
})
|
|
93
|
+
);
|
|
94
|
+
result.chargesCreated += 1;
|
|
95
|
+
}
|
|
96
|
+
await em.flush();
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
export {
|
|
100
|
+
resetCpqDemo,
|
|
101
|
+
seedCpqDemo
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=demo.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/cpq/lib/seeds/demo.ts"],
|
|
4
|
+
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\n\n/**\n * Minimal, self-contained CPQ test-data seed.\n *\n * Creates one neutral catalog product with a Specification, an Offering, and\n * a fixed monthly charge \u2014 enough to exercise the CPQ admin (Product\n * Specifications / Offerings lists) and quoting locally. Idempotent: every\n * row is matched by a stable `DEMO-CPQ-*` code / sku, so re-running is a\n * no-op rather than a duplicate.\n *\n * Intentionally generic (NOT customer-specific) so it ships with\n * `@dainamite/cpq`. Rich, vertical demo catalogs live in the `demo_<x>`\n * app modules + `mercato demo_tenants seed`.\n */\n\nexport type CpqDemoScope = { tenantId: string; organizationId: string }\nexport type CpqDemoResult = {\n productsCreated: number\n specsCreated: number\n offeringsCreated: number\n chargesCreated: number\n}\n\nconst PRODUCT_SKU = 'DEMO-CPQ-CLOUD'\nconst SPEC_CODE = 'DEMO-CPQ-CLOUD-SPEC'\nconst OFFERING_CODE = 'DEMO-CPQ-CLOUD-OFFER'\nconst CHARGE_CODE = 'DEMO-CPQ-CLOUD-MRC'\n\nexport async function resetCpqDemo(em: EntityManager, scope: CpqDemoScope): Promise<void> {\n const { CpqProductSpecification, CpqProductOffering, CpqProductCharge } = await import(\n '../../data/entities'\n )\n const { CatalogProduct } = await import('@open-mercato/core/modules/catalog/data/entities')\n // Leaves first, roots last.\n await em.nativeDelete(CpqProductCharge, { ...scope, code: CHARGE_CODE } as never)\n await em.nativeDelete(CpqProductOffering, { ...scope, code: OFFERING_CODE } as never)\n await em.nativeDelete(CpqProductSpecification, { ...scope, code: SPEC_CODE } as never)\n await em.nativeDelete(CatalogProduct, { ...scope, sku: PRODUCT_SKU } as never)\n}\n\nexport async function seedCpqDemo(\n em: EntityManager,\n scope: CpqDemoScope,\n options: { reset?: boolean } = {},\n): Promise<CpqDemoResult> {\n if (options.reset) await resetCpqDemo(em, scope)\n\n const { CpqProductSpecification, CpqProductOffering, CpqProductCharge } = await import(\n '../../data/entities'\n )\n const { CatalogProduct } = await import('@open-mercato/core/modules/catalog/data/entities')\n\n const result: CpqDemoResult = {\n productsCreated: 0,\n specsCreated: 0,\n offeringsCreated: 0,\n chargesCreated: 0,\n }\n\n // \u2500\u2500 Catalog product (idempotent by sku) \u2500\u2500\n let product = await em.findOne(CatalogProduct, { ...scope, sku: PRODUCT_SKU, deletedAt: null } as never)\n if (!product) {\n product = em.create(CatalogProduct, {\n ...scope,\n title: 'Demo Cloud Plan',\n sku: PRODUCT_SKU,\n handle: PRODUCT_SKU.toLowerCase(),\n productType: 'configurable',\n description: 'Generic CPQ demo product seeded by `mercato cpq seed`.',\n isConfigurable: true,\n isActive: true,\n })\n em.persist(product)\n await em.flush()\n result.productsCreated += 1\n }\n\n // \u2500\u2500 Specification (idempotent by code) \u2500\u2500\n let spec = await em.findOne(CpqProductSpecification, { ...scope, code: SPEC_CODE, deletedAt: null } as never)\n if (!spec) {\n spec = em.create(CpqProductSpecification, {\n ...scope,\n productId: product.id,\n code: SPEC_CODE,\n name: 'Demo Cloud Specification',\n specType: 'simple',\n lifecycleStatus: 'active',\n isActive: true,\n })\n em.persist(spec)\n await em.flush()\n result.specsCreated += 1\n }\n\n // \u2500\u2500 Offering (idempotent by code) \u2500\u2500\n let offering = await em.findOne(CpqProductOffering, { ...scope, code: OFFERING_CODE, deletedAt: null } as never)\n if (!offering) {\n offering = em.create(CpqProductOffering, {\n ...scope,\n specId: spec.id,\n code: OFFERING_CODE,\n name: 'Demo Cloud Offering',\n offeringType: 'simple',\n designTimeValues: {},\n lifecycleStatus: 'active',\n isActive: true,\n })\n em.persist(offering)\n await em.flush()\n result.offeringsCreated += 1\n }\n\n // \u2500\u2500 Charge (idempotent by offering + code, matching the DB unique\n // constraint `(org, tenant, offering_id, code)`) \u2014 fixed monthly fee \u2500\u2500\n const charge = await em.findOne(CpqProductCharge, {\n ...scope,\n offeringId: offering.id,\n code: CHARGE_CODE,\n deletedAt: null,\n } as never)\n if (!charge) {\n em.persist(\n em.create(CpqProductCharge, {\n ...scope,\n productId: product.id,\n offeringId: offering.id,\n code: CHARGE_CODE,\n name: 'Monthly platform fee',\n chargeType: 'mrc',\n chargeModel: 'flat',\n pricingMethod: 'fixed',\n fixedPrice: '99.0000',\n // Neutral default \u2014 this seed ships generically with @dainamite/cpq.\n currencyCode: 'USD',\n sortOrder: 0,\n isActive: true,\n }),\n )\n result.chargesCreated += 1\n }\n\n await em.flush()\n return result\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Migration } from "@mikro-orm/migrations";
|
|
2
|
+
class Migration20260602000000_cpq_charge_model_split extends Migration {
|
|
3
|
+
async up() {
|
|
4
|
+
this.addSql(`alter table "cpq_product_charges" add column "charge_model" text null;`);
|
|
5
|
+
this.addSql(`update "cpq_product_charges" set "charge_model" = case
|
|
6
|
+
when "pricing_method" = 'per_unit' then 'per_unit'
|
|
7
|
+
when "pricing_method" = 'tiered' then 'tiered'
|
|
8
|
+
else 'flat'
|
|
9
|
+
end where "charge_model" is null;`);
|
|
10
|
+
this.addSql(`update "cpq_product_charges" set "pricing_method" = case
|
|
11
|
+
when "pricing_method" in ('per_unit', 'tiered', 'volume', 'table') then 'table'
|
|
12
|
+
else 'fixed'
|
|
13
|
+
end;`);
|
|
14
|
+
}
|
|
15
|
+
async down() {
|
|
16
|
+
this.addSql(`update "cpq_product_charges" set "pricing_method" = case
|
|
17
|
+
when "charge_model" = 'tiered' then 'tiered'
|
|
18
|
+
when "charge_model" = 'per_unit' and "pricing_method" = 'table' then 'per_unit'
|
|
19
|
+
when "charge_model" = 'volume' then 'per_unit'
|
|
20
|
+
else 'flat'
|
|
21
|
+
end;`);
|
|
22
|
+
this.addSql(`alter table "cpq_product_charges" drop column "charge_model";`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
Migration20260602000000_cpq_charge_model_split
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=Migration20260602000000_cpq_charge_model_split.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/cpq/migrations/Migration20260602000000_cpq_charge_model_split.ts"],
|
|
4
|
+
"sourcesContent": ["import { Migration } from '@mikro-orm/migrations'\n\n/**\n * XD-297 \u2014 split the charge \"shape\" into two orthogonal axes.\n *\n * Before: `cpq_product_charges.pricing_method` conflated *how quantity drives\n * the charge* (flat | per_unit | tiered) with *where the price comes from*\n * (a fixed price for `flat`, a table lookup for `per_unit` / `tiered`).\n *\n * After:\n * - `charge_model` \u2014 flat | per_unit | volume | tiered (new column)\n * - `pricing_method` \u2014 fixed | table (repurposed)\n *\n * The backfill maps every legacy row to the equivalent split shape:\n * flat \u2192 (charge_model=flat, pricing_method=fixed)\n * per_unit \u2192 (charge_model=per_unit, pricing_method=table)\n * tiered \u2192 (charge_model=tiered, pricing_method=table)\n *\n * Hand-written because the data backfill (re-coding existing `pricing_method`\n * values) is beyond what MikroORM's schema generator can emit. The pricing\n * service additionally normalises any row that predates this migration, so the\n * change is safe even before it is applied.\n */\nexport class Migration20260602000000_cpq_charge_model_split extends Migration {\n async up(): Promise<void> {\n this.addSql(`alter table \"cpq_product_charges\" add column \"charge_model\" text null;`)\n\n // Derive charge_model from the legacy combined pricing_method FIRST \u2026\n this.addSql(`update \"cpq_product_charges\" set \"charge_model\" = case\n when \"pricing_method\" = 'per_unit' then 'per_unit'\n when \"pricing_method\" = 'tiered' then 'tiered'\n else 'flat'\n end where \"charge_model\" is null;`)\n\n // \u2026 then collapse pricing_method to the new {fixed, table} axis.\n this.addSql(`update \"cpq_product_charges\" set \"pricing_method\" = case\n when \"pricing_method\" in ('per_unit', 'tiered', 'volume', 'table') then 'table'\n else 'fixed'\n end;`)\n }\n\n async down(): Promise<void> {\n // Best-effort re-collapse to the legacy combined value. `per_unit + fixed`\n // reverts to `flat` (the old fixed-price path: 1 \u00D7 fixedPrice) rather than\n // `per_unit` (old table lookup) so it doesn't silently under-bill; only a\n // genuine `per_unit + table` keeps the per_unit model. `volume` has no\n // legacy equivalent and falls back to per_unit.\n this.addSql(`update \"cpq_product_charges\" set \"pricing_method\" = case\n when \"charge_model\" = 'tiered' then 'tiered'\n when \"charge_model\" = 'per_unit' and \"pricing_method\" = 'table' then 'per_unit'\n when \"charge_model\" = 'volume' then 'per_unit'\n else 'flat'\n end;`)\n\n this.addSql(`alter table \"cpq_product_charges\" drop column \"charge_model\";`)\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,iBAAiB;AAuBnB,MAAM,uDAAuD,UAAU;AAAA,EAC5E,MAAM,KAAoB;AACxB,SAAK,OAAO,wEAAwE;AAGpF,SAAK,OAAO;AAAA;AAAA;AAAA;AAAA,sCAIsB;AAGlC,SAAK,OAAO;AAAA;AAAA;AAAA,SAGP;AAAA,EACP;AAAA,EAEA,MAAM,OAAsB;AAM1B,SAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,SAKP;AAEL,SAAK,OAAO,+DAA+D;AAAA,EAC7E;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|