@parv0888/scheme-engine 0.1.1 → 0.1.2
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/dist/calculators/discount-application.d.ts +44 -0
- package/dist/calculators/index.d.ts +65 -0
- package/dist/calculators/index.d.ts.map +1 -0
- package/dist/calculators/index.js +196 -0
- package/dist/calculators/index.js.map +1 -0
- package/dist/calculators/payout-types/article.d.ts +23 -0
- package/dist/calculators/payout-types/article.d.ts.map +1 -0
- package/dist/calculators/payout-types/article.js +73 -0
- package/dist/calculators/payout-types/article.js.map +1 -0
- package/dist/calculators/payout-types/basket.d.ts +49 -0
- package/dist/calculators/payout-types/basket.d.ts.map +1 -0
- package/dist/calculators/payout-types/basket.js +108 -0
- package/dist/calculators/payout-types/basket.js.map +1 -0
- package/dist/calculators/payout-types/coupon.d.ts +23 -0
- package/dist/calculators/payout-types/coupon.d.ts.map +1 -0
- package/dist/calculators/payout-types/coupon.js +74 -0
- package/dist/calculators/payout-types/coupon.js.map +1 -0
- package/dist/calculators/payout-types/discount.d.ts +21 -0
- package/dist/calculators/payout-types/discount.d.ts.map +1 -0
- package/dist/calculators/payout-types/discount.js +110 -0
- package/dist/calculators/payout-types/discount.js.map +1 -0
- package/dist/calculators/payout-types/fixed-discount.d.ts +31 -0
- package/dist/calculators/payout-types/fixed-discount.d.ts.map +1 -0
- package/dist/calculators/payout-types/fixed-discount.js +65 -0
- package/dist/calculators/payout-types/fixed-discount.js.map +1 -0
- package/dist/calculators/payout-types/foc.d.ts +30 -0
- package/dist/calculators/payout-types/foc.d.ts.map +1 -0
- package/dist/calculators/payout-types/foc.js +130 -0
- package/dist/calculators/payout-types/foc.js.map +1 -0
- package/dist/calculators/payout-types/mrp-percentage.d.ts +34 -0
- package/dist/calculators/payout-types/mrp-percentage.d.ts.map +1 -0
- package/dist/calculators/payout-types/mrp-percentage.js +77 -0
- package/dist/calculators/payout-types/mrp-percentage.js.map +1 -0
- package/dist/calculators/payout-types/nlp.d.ts +22 -0
- package/dist/calculators/payout-types/nlp.d.ts.map +1 -0
- package/dist/calculators/payout-types/nlp.js +59 -0
- package/dist/calculators/payout-types/nlp.js.map +1 -0
- package/dist/calculators/payout-types/per-unit.d.ts +32 -0
- package/dist/calculators/payout-types/per-unit.d.ts.map +1 -0
- package/dist/calculators/payout-types/per-unit.js +94 -0
- package/dist/calculators/payout-types/per-unit.js.map +1 -0
- package/dist/calculators/payout-types/product-new.d.ts +27 -0
- package/dist/calculators/payout-types/product-new.d.ts.map +1 -0
- package/dist/calculators/payout-types/product-new.js +85 -0
- package/dist/calculators/payout-types/product-new.js.map +1 -0
- package/dist/calculators/payout-types/product.d.ts +31 -0
- package/dist/calculators/payout-types/product.d.ts.map +1 -0
- package/dist/calculators/payout-types/product.js +73 -0
- package/dist/calculators/payout-types/product.js.map +1 -0
- package/dist/calculators/payout-types/topup.d.ts +19 -0
- package/dist/calculators/payout-types/topup.d.ts.map +1 -0
- package/dist/calculators/payout-types/topup.js +46 -0
- package/dist/calculators/payout-types/topup.js.map +1 -0
- package/dist/calculators/slab-matcher.d.ts +41 -0
- package/dist/calculators/slab-matcher.d.ts.map +1 -0
- package/dist/calculators/slab-matcher.js +68 -0
- package/dist/calculators/slab-matcher.js.map +1 -0
- package/dist/helpers/calc-type-checks.d.ts +21 -0
- package/dist/helpers/calc-type-checks.d.ts.map +1 -0
- package/dist/helpers/calc-type-checks.js +36 -0
- package/dist/helpers/calc-type-checks.js.map +1 -0
- package/dist/helpers/compare-value.d.ts +40 -0
- package/dist/helpers/compare-value.d.ts.map +1 -0
- package/dist/helpers/compare-value.js +120 -0
- package/dist/helpers/compare-value.js.map +1 -0
- package/dist/helpers/constraint-checks.d.ts +30 -0
- package/dist/helpers/constraint-checks.d.ts.map +1 -0
- package/dist/helpers/constraint-checks.js +73 -0
- package/dist/helpers/constraint-checks.js.map +1 -0
- package/dist/helpers/index.d.ts +8 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +24 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/math.d.ts +50 -0
- package/dist/helpers/math.d.ts.map +1 -0
- package/dist/helpers/math.js +96 -0
- package/dist/helpers/math.js.map +1 -0
- package/dist/helpers/payout-type-checks.d.ts +17 -0
- package/dist/helpers/payout-type-checks.d.ts.map +1 -0
- package/dist/helpers/payout-type-checks.js +34 -0
- package/dist/helpers/payout-type-checks.js.map +1 -0
- package/dist/helpers/qualifier-checks.d.ts +62 -0
- package/dist/helpers/qualifier-checks.d.ts.map +1 -0
- package/dist/helpers/qualifier-checks.js +194 -0
- package/dist/helpers/qualifier-checks.js.map +1 -0
- package/dist/helpers/scheme-applicability.d.ts +40 -0
- package/dist/helpers/scheme-applicability.d.ts.map +1 -0
- package/dist/helpers/scheme-applicability.js +99 -0
- package/dist/helpers/scheme-applicability.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/types/applied-scheme.d.ts +157 -0
- package/dist/types/applied-scheme.d.ts.map +1 -0
- package/dist/types/applied-scheme.js +22 -0
- package/dist/types/applied-scheme.js.map +1 -0
- package/dist/types/enums.d.ts +91 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +118 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/item-props.d.ts +103 -0
- package/dist/types/item-props.d.ts.map +1 -0
- package/dist/types/item-props.js +3 -0
- package/dist/types/item-props.js.map +1 -0
- package/dist/types/scheme.d.ts +172 -0
- package/dist/types/scheme.d.ts.map +1 -0
- package/dist/types/scheme.js +3 -0
- package/dist/types/scheme.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { SchemeCategory } from "../types/enums";
|
|
2
|
+
import type { AppliedSchemeEntry, AppliedDiscountResult } from "../types/applied-scheme";
|
|
3
|
+
export interface DiscountApplicationInput {
|
|
4
|
+
/** Schemes already applied/matched for this line item (typically one entry per scheme, or per batch for batch-priced companies). */
|
|
5
|
+
appliedSchemes: AppliedSchemeEntry[];
|
|
6
|
+
/** Base monetary value used as the starting point for % discount calculations (usually `unit price × billed quantity`, excluding free qty). */
|
|
7
|
+
baseValue: number;
|
|
8
|
+
/** Billed quantity for the line (saleable quantity that contributes to value/discount), excluding free qty. */
|
|
9
|
+
quantity: number;
|
|
10
|
+
/** Free quantity given via FOC/product schemes (used for some effective discount computations). */
|
|
11
|
+
freeQty: number;
|
|
12
|
+
/** Product MRP (Maximum Retail Price) used for MRP-based discount schemes. */
|
|
13
|
+
mrp: number;
|
|
14
|
+
/** Selling price used for discount calculations (typically PTR/ex-tax unit price for this line). */
|
|
15
|
+
price: number;
|
|
16
|
+
/** Whether we’re computing primary or secondary scheme discount totals. */
|
|
17
|
+
schemeCategory: SchemeCategory;
|
|
18
|
+
/** If true, successive discounts are applied on the reduced base (gross-total chaining) rather than original base value. */
|
|
19
|
+
useGrossTotalForSuccessiveDiscounts: boolean;
|
|
20
|
+
/** Company-level behavior: Product payout schemes can be treated as unitary (discount distribution instead of adding free item value). */
|
|
21
|
+
companyUsesUnitaryProductScheme?: boolean;
|
|
22
|
+
/** Company-level behavior: same SKU can be split into multiple pricing batches; discount must be computed per-batch to avoid double counting. */
|
|
23
|
+
companyUsesPricingBatchNumberInDms?: boolean;
|
|
24
|
+
/** Company-level behavior: toggles alternate bottler flows where some payout rules differ. */
|
|
25
|
+
enableBottlerCompanyFlows?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Calculate the total primary or secondary discount value from applied schemes.
|
|
29
|
+
* Pure function — returns results without mutating the input.
|
|
30
|
+
*
|
|
31
|
+
* Bug 7 fix: Clamps negative discount values to 0.
|
|
32
|
+
* Bug 5 fix: Returns warning when MRP < price causes zero-out.
|
|
33
|
+
*/
|
|
34
|
+
export declare function calculateAppliedDiscountValues(input: DiscountApplicationInput): AppliedDiscountResult;
|
|
35
|
+
interface RecalcResult {
|
|
36
|
+
discountPercent: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Recalculates perUnit discount percentage based on updated net prices.
|
|
40
|
+
* Pure function – returns new percent, caller decides where to assign.
|
|
41
|
+
*/
|
|
42
|
+
export declare function recalculateSchemePercentage(scheme: AppliedSchemeEntry, tempBaseValue?: number): RecalcResult;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=discount-application.d.ts.map
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { Scheme } from "../types/scheme";
|
|
2
|
+
import type { SchemeSlabResult } from "../types/applied-scheme";
|
|
3
|
+
import type { QualifierItem } from "../helpers/qualifier-checks";
|
|
4
|
+
import type { PerUnitPriceProps } from "../types/item-props";
|
|
5
|
+
import type { BasketItem } from "./payout-types/basket";
|
|
6
|
+
import type { Basket } from "../types/scheme";
|
|
7
|
+
export interface CalculateSchemeSlabInput {
|
|
8
|
+
/** Full scheme configuration as received from DB/API. */
|
|
9
|
+
scheme: Scheme;
|
|
10
|
+
/** Precomputed metric used to match slabs (qty/amount/units depending on scheme.constraintType). */
|
|
11
|
+
compareValue: number;
|
|
12
|
+
/** Precomputed total amount for the qualifying set (usually sum of price×qty). */
|
|
13
|
+
totalAmount: number;
|
|
14
|
+
/** Items that are considered applicable for this scheme (after applicability filtering). */
|
|
15
|
+
applicableProducts: QualifierItem[];
|
|
16
|
+
/** Whether calculation should use MRP billing payouts (use slab.mrpPayout instead of slab.payout). */
|
|
17
|
+
isMrpBilling: boolean;
|
|
18
|
+
/** Product MRP used by PercentageDiscountOnMRP schemes. */
|
|
19
|
+
productMrp: number;
|
|
20
|
+
/** Product PTR/ex-tax unit price used by PercentageDiscountOnMRP schemes. */
|
|
21
|
+
productPtr: number;
|
|
22
|
+
/** Total tax % used to convert MRP-inclusive prices to ex-tax values when needed. */
|
|
23
|
+
totalTaxPercentage: number;
|
|
24
|
+
/** Net price inputs used by PerUnitDiscount schemes (supports std/super/additional unit calculations). */
|
|
25
|
+
perUnitPrices: PerUnitPriceProps;
|
|
26
|
+
/** Price of the free/payout product when the company distributes unitary product scheme value as discount. */
|
|
27
|
+
focProductPrice?: number;
|
|
28
|
+
/** Basket definitions (groups of product IDs) referenced by basket slabs. */
|
|
29
|
+
baskets?: Basket[];
|
|
30
|
+
/** Actual basket-selected items for this order/cart (used to qualify and apply basket schemes). */
|
|
31
|
+
selectedItems?: BasketItem[];
|
|
32
|
+
/** Company rule: treat PRODUCT payout schemes as unitary discount distribution. */
|
|
33
|
+
companyUsesUnitaryProductScheme?: boolean;
|
|
34
|
+
/** Company rule: interpret step FOC logic in DMS-specific way. */
|
|
35
|
+
companyUsesStepfocSchemeInDms?: boolean;
|
|
36
|
+
/** Feature toggle: enable alternate continuous scheme logic for some FOC flows. */
|
|
37
|
+
applyContinuousSchemeLogic?: boolean;
|
|
38
|
+
/** Feature toggle: enable step-multiplier scheme logic for some FOC flows. */
|
|
39
|
+
applyStepMultiplierSchemeLogic?: boolean;
|
|
40
|
+
/** Buyer type flag used by some company flows (retailer vs other). */
|
|
41
|
+
isBuyerRetailer?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Master dispatcher: routes to the correct payout-type calculator.
|
|
45
|
+
*
|
|
46
|
+
* This is the primary public API for scheme calculation. Given a scheme
|
|
47
|
+
* and pre-computed aggregates, it returns a pure SchemeSlabResult that
|
|
48
|
+
* the caller can use to update item state.
|
|
49
|
+
*/
|
|
50
|
+
export declare function calculateSchemeSlabResult(input: CalculateSchemeSlabInput): SchemeSlabResult;
|
|
51
|
+
export { calculateDiscountPayout } from "./payout-types/discount";
|
|
52
|
+
export { calculateMrpPercentageDiscountPayout } from "./payout-types/mrp-percentage";
|
|
53
|
+
export { calculatePerUnitPayout } from "./payout-types/per-unit";
|
|
54
|
+
export { calculateFixedDiscountPayout } from "./payout-types/fixed-discount";
|
|
55
|
+
export { calculateFocPayout } from "./payout-types/foc";
|
|
56
|
+
export { calculateProductPayout } from "./payout-types/product";
|
|
57
|
+
export { calculateProductSchemeNewPayout } from "./payout-types/product-new";
|
|
58
|
+
export { calculateBasketPayout } from "./payout-types/basket";
|
|
59
|
+
export { calculateCouponPayout } from "./payout-types/coupon";
|
|
60
|
+
export { calculateTopupPayout } from "./payout-types/topup";
|
|
61
|
+
export { calculateArticlePayout } from "./payout-types/article";
|
|
62
|
+
export { calculateNlpPayout } from "./payout-types/nlp";
|
|
63
|
+
export { findMatchingSlab, findInterpolationSlabs } from "./slab-matcher";
|
|
64
|
+
export { calculateAppliedDiscountValues, recalculateSchemePercentage } from "./discount-application";
|
|
65
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/calculators/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAgB9C,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,oGAAoG;IACpG,YAAY,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,kBAAkB,EAAE,aAAa,EAAE,CAAC;IACpC,sGAAsG;IACtG,YAAY,EAAE,OAAO,CAAC;IAGtB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,kBAAkB,EAAE,MAAM,CAAC;IAG3B,0GAA0G;IAC1G,aAAa,EAAE,iBAAiB,CAAC;IAGjC,8GAA8G;IAC9G,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,mGAAmG;IACnG,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;IAG7B,mFAAmF;IACnF,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,kEAAkE;IAClE,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,mFAAmF;IACnF,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,8EAA8E;IAC9E,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,sEAAsE;IACtE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA8BD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,wBAAwB,GAAG,gBAAgB,CAmI3F;AAGD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recalculateSchemePercentage = exports.calculateAppliedDiscountValues = exports.findInterpolationSlabs = exports.findMatchingSlab = exports.calculateNlpPayout = exports.calculateArticlePayout = exports.calculateTopupPayout = exports.calculateCouponPayout = exports.calculateBasketPayout = exports.calculateProductSchemeNewPayout = exports.calculateProductPayout = exports.calculateFocPayout = exports.calculateFixedDiscountPayout = exports.calculatePerUnitPayout = exports.calculateMrpPercentageDiscountPayout = exports.calculateDiscountPayout = void 0;
|
|
4
|
+
exports.calculateSchemeSlabResult = calculateSchemeSlabResult;
|
|
5
|
+
const enums_1 = require("../types/enums");
|
|
6
|
+
const applied_scheme_1 = require("../types/applied-scheme");
|
|
7
|
+
const discount_1 = require("./payout-types/discount");
|
|
8
|
+
const mrp_percentage_1 = require("./payout-types/mrp-percentage");
|
|
9
|
+
const per_unit_1 = require("./payout-types/per-unit");
|
|
10
|
+
const fixed_discount_1 = require("./payout-types/fixed-discount");
|
|
11
|
+
const foc_1 = require("./payout-types/foc");
|
|
12
|
+
const product_1 = require("./payout-types/product");
|
|
13
|
+
const product_new_1 = require("./payout-types/product-new");
|
|
14
|
+
const basket_1 = require("./payout-types/basket");
|
|
15
|
+
const coupon_1 = require("./payout-types/coupon");
|
|
16
|
+
const topup_1 = require("./payout-types/topup");
|
|
17
|
+
const article_1 = require("./payout-types/article");
|
|
18
|
+
const nlp_1 = require("./payout-types/nlp");
|
|
19
|
+
/**
|
|
20
|
+
* Detects if a scheme is a GST Claim scheme based on naming conventions.
|
|
21
|
+
*/
|
|
22
|
+
function isGstClaimScheme(scheme) {
|
|
23
|
+
const GSTSchemeName = "GST Claim";
|
|
24
|
+
const hasGstBase = scheme.name.toLowerCase().trim() === GSTSchemeName.toLowerCase().trim() &&
|
|
25
|
+
(scheme.schemeSubType2 || "").toLowerCase().trim() ===
|
|
26
|
+
enums_1.SchemeSubType2.NON_CLAIMABLE.toLowerCase().trim() &&
|
|
27
|
+
scheme.payoutCalculationType.toLowerCase().trim() ===
|
|
28
|
+
enums_1.SchemePayoutCalculationType.CONTINUOUS &&
|
|
29
|
+
scheme.payoutType.toLowerCase().trim() ===
|
|
30
|
+
enums_1.SchemePayoutType.DISCOUNT.toLowerCase().trim();
|
|
31
|
+
const isPrimaryGstScheme = scheme.category === "Primary" &&
|
|
32
|
+
scheme.schemeSubType.toLowerCase().trim() ===
|
|
33
|
+
enums_1.SchemeSubType.NON_EXTENDABLE.toLowerCase().trim();
|
|
34
|
+
const isSecondaryGstScheme = scheme.category === "Secondary" &&
|
|
35
|
+
scheme.schemeSubType.toLowerCase().trim() ===
|
|
36
|
+
enums_1.SchemeSubType.EXTENDABLE.toLowerCase().trim();
|
|
37
|
+
return hasGstBase && (isPrimaryGstScheme || isSecondaryGstScheme);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Master dispatcher: routes to the correct payout-type calculator.
|
|
41
|
+
*
|
|
42
|
+
* This is the primary public API for scheme calculation. Given a scheme
|
|
43
|
+
* and pre-computed aggregates, it returns a pure SchemeSlabResult that
|
|
44
|
+
* the caller can use to update item state.
|
|
45
|
+
*/
|
|
46
|
+
function calculateSchemeSlabResult(input) {
|
|
47
|
+
const { scheme } = input;
|
|
48
|
+
const payoutType = scheme.payoutType;
|
|
49
|
+
switch (payoutType) {
|
|
50
|
+
case enums_1.SchemePayoutType.DISCOUNT:
|
|
51
|
+
return (0, discount_1.calculateDiscountPayout)({
|
|
52
|
+
scheme,
|
|
53
|
+
compareValue: input.compareValue,
|
|
54
|
+
applicableProducts: input.applicableProducts,
|
|
55
|
+
isMrpBilling: input.isMrpBilling,
|
|
56
|
+
isGstClaimScheme: isGstClaimScheme(scheme),
|
|
57
|
+
});
|
|
58
|
+
case enums_1.SchemePayoutType.PERCENTAGE_DISCOUNT_ON_MRP:
|
|
59
|
+
return (0, mrp_percentage_1.calculateMrpPercentageDiscountPayout)({
|
|
60
|
+
scheme,
|
|
61
|
+
compareValue: input.compareValue,
|
|
62
|
+
applicableProducts: input.applicableProducts,
|
|
63
|
+
isMrpBilling: input.isMrpBilling,
|
|
64
|
+
productMrp: input.productMrp,
|
|
65
|
+
productPtr: input.productPtr,
|
|
66
|
+
totalTaxPercentage: input.totalTaxPercentage,
|
|
67
|
+
});
|
|
68
|
+
case enums_1.SchemePayoutType.PERUNIT:
|
|
69
|
+
return (0, per_unit_1.calculatePerUnitPayout)({
|
|
70
|
+
scheme,
|
|
71
|
+
compareValue: input.compareValue,
|
|
72
|
+
applicableProducts: input.applicableProducts,
|
|
73
|
+
isMrpBilling: input.isMrpBilling,
|
|
74
|
+
totalTaxPercentage: input.totalTaxPercentage,
|
|
75
|
+
perUnitPrices: input.perUnitPrices,
|
|
76
|
+
});
|
|
77
|
+
case enums_1.SchemePayoutType.FIXED_DISCOUNT:
|
|
78
|
+
return (0, fixed_discount_1.calculateFixedDiscountPayout)({
|
|
79
|
+
scheme,
|
|
80
|
+
compareValue: input.compareValue,
|
|
81
|
+
totalAmount: input.totalAmount,
|
|
82
|
+
applicableProducts: input.applicableProducts,
|
|
83
|
+
isMrpBilling: input.isMrpBilling,
|
|
84
|
+
itemBaseValues: [],
|
|
85
|
+
});
|
|
86
|
+
case enums_1.SchemePayoutType.FOC:
|
|
87
|
+
case enums_1.SchemePayoutType.FOC_SLAB:
|
|
88
|
+
return (0, foc_1.calculateFocPayout)({
|
|
89
|
+
scheme,
|
|
90
|
+
compareValue: input.compareValue,
|
|
91
|
+
applicableProducts: input.applicableProducts,
|
|
92
|
+
isMrpBilling: input.isMrpBilling,
|
|
93
|
+
companyUsesStepfocSchemeInDms: input.companyUsesStepfocSchemeInDms,
|
|
94
|
+
applyContinuousSchemeLogic: input.applyContinuousSchemeLogic,
|
|
95
|
+
applyStepMultiplierSchemeLogic: input.applyStepMultiplierSchemeLogic,
|
|
96
|
+
});
|
|
97
|
+
case enums_1.SchemePayoutType.PRODUCT:
|
|
98
|
+
return (0, product_1.calculateProductPayout)({
|
|
99
|
+
scheme,
|
|
100
|
+
compareValue: input.compareValue,
|
|
101
|
+
totalAmount: input.totalAmount,
|
|
102
|
+
applicableProducts: input.applicableProducts,
|
|
103
|
+
isMrpBilling: input.isMrpBilling,
|
|
104
|
+
focProductPrice: input.focProductPrice,
|
|
105
|
+
companyUsesUnitaryProductScheme: input.companyUsesUnitaryProductScheme,
|
|
106
|
+
});
|
|
107
|
+
case enums_1.SchemePayoutType.PRODUCT_SCHEME_NEW:
|
|
108
|
+
return (0, product_new_1.calculateProductSchemeNewPayout)({
|
|
109
|
+
scheme,
|
|
110
|
+
compareValue: input.compareValue,
|
|
111
|
+
totalAmount: input.totalAmount,
|
|
112
|
+
applicableProducts: input.applicableProducts,
|
|
113
|
+
isMrpBilling: input.isMrpBilling,
|
|
114
|
+
focProductPrice: input.focProductPrice,
|
|
115
|
+
companyUsesUnitaryProductScheme: input.companyUsesUnitaryProductScheme,
|
|
116
|
+
});
|
|
117
|
+
case enums_1.SchemePayoutType.BASKET:
|
|
118
|
+
return (0, basket_1.calculateBasketPayout)({
|
|
119
|
+
scheme,
|
|
120
|
+
compareValue: input.compareValue,
|
|
121
|
+
applicableProducts: input.applicableProducts,
|
|
122
|
+
baskets: input.baskets || [],
|
|
123
|
+
selectedItems: input.selectedItems || [],
|
|
124
|
+
isMrpBilling: input.isMrpBilling,
|
|
125
|
+
});
|
|
126
|
+
case enums_1.SchemePayoutType.COUPON:
|
|
127
|
+
return (0, coupon_1.calculateCouponPayout)({
|
|
128
|
+
scheme,
|
|
129
|
+
compareValue: input.compareValue,
|
|
130
|
+
totalAmount: input.totalAmount,
|
|
131
|
+
applicableProducts: input.applicableProducts,
|
|
132
|
+
isMrpBilling: input.isMrpBilling,
|
|
133
|
+
});
|
|
134
|
+
case enums_1.SchemePayoutType.TOPUP:
|
|
135
|
+
return (0, topup_1.calculateTopupPayout)({
|
|
136
|
+
scheme,
|
|
137
|
+
compareValue: input.compareValue,
|
|
138
|
+
applicableProducts: input.applicableProducts,
|
|
139
|
+
isMrpBilling: input.isMrpBilling,
|
|
140
|
+
});
|
|
141
|
+
case enums_1.SchemePayoutType.ARTICLE:
|
|
142
|
+
return (0, article_1.calculateArticlePayout)({
|
|
143
|
+
scheme,
|
|
144
|
+
compareValue: input.compareValue,
|
|
145
|
+
totalAmount: input.totalAmount,
|
|
146
|
+
applicableProducts: input.applicableProducts,
|
|
147
|
+
isMrpBilling: input.isMrpBilling,
|
|
148
|
+
});
|
|
149
|
+
case enums_1.SchemePayoutType.NLP:
|
|
150
|
+
return (0, nlp_1.calculateNlpPayout)({
|
|
151
|
+
scheme,
|
|
152
|
+
compareValue: input.compareValue,
|
|
153
|
+
totalAmount: input.totalAmount,
|
|
154
|
+
applicableProducts: input.applicableProducts,
|
|
155
|
+
isMrpBilling: input.isMrpBilling,
|
|
156
|
+
productPtr: input.productPtr,
|
|
157
|
+
});
|
|
158
|
+
default: {
|
|
159
|
+
const result = (0, applied_scheme_1.createEmptySlabResult)(payoutType);
|
|
160
|
+
result.warnings.push(`Payout type not matching: ${payoutType}`);
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// ─── Re-exports ─────────────────────────────────────────────────
|
|
166
|
+
var discount_2 = require("./payout-types/discount");
|
|
167
|
+
Object.defineProperty(exports, "calculateDiscountPayout", { enumerable: true, get: function () { return discount_2.calculateDiscountPayout; } });
|
|
168
|
+
var mrp_percentage_2 = require("./payout-types/mrp-percentage");
|
|
169
|
+
Object.defineProperty(exports, "calculateMrpPercentageDiscountPayout", { enumerable: true, get: function () { return mrp_percentage_2.calculateMrpPercentageDiscountPayout; } });
|
|
170
|
+
var per_unit_2 = require("./payout-types/per-unit");
|
|
171
|
+
Object.defineProperty(exports, "calculatePerUnitPayout", { enumerable: true, get: function () { return per_unit_2.calculatePerUnitPayout; } });
|
|
172
|
+
var fixed_discount_2 = require("./payout-types/fixed-discount");
|
|
173
|
+
Object.defineProperty(exports, "calculateFixedDiscountPayout", { enumerable: true, get: function () { return fixed_discount_2.calculateFixedDiscountPayout; } });
|
|
174
|
+
var foc_2 = require("./payout-types/foc");
|
|
175
|
+
Object.defineProperty(exports, "calculateFocPayout", { enumerable: true, get: function () { return foc_2.calculateFocPayout; } });
|
|
176
|
+
var product_2 = require("./payout-types/product");
|
|
177
|
+
Object.defineProperty(exports, "calculateProductPayout", { enumerable: true, get: function () { return product_2.calculateProductPayout; } });
|
|
178
|
+
var product_new_2 = require("./payout-types/product-new");
|
|
179
|
+
Object.defineProperty(exports, "calculateProductSchemeNewPayout", { enumerable: true, get: function () { return product_new_2.calculateProductSchemeNewPayout; } });
|
|
180
|
+
var basket_2 = require("./payout-types/basket");
|
|
181
|
+
Object.defineProperty(exports, "calculateBasketPayout", { enumerable: true, get: function () { return basket_2.calculateBasketPayout; } });
|
|
182
|
+
var coupon_2 = require("./payout-types/coupon");
|
|
183
|
+
Object.defineProperty(exports, "calculateCouponPayout", { enumerable: true, get: function () { return coupon_2.calculateCouponPayout; } });
|
|
184
|
+
var topup_2 = require("./payout-types/topup");
|
|
185
|
+
Object.defineProperty(exports, "calculateTopupPayout", { enumerable: true, get: function () { return topup_2.calculateTopupPayout; } });
|
|
186
|
+
var article_2 = require("./payout-types/article");
|
|
187
|
+
Object.defineProperty(exports, "calculateArticlePayout", { enumerable: true, get: function () { return article_2.calculateArticlePayout; } });
|
|
188
|
+
var nlp_2 = require("./payout-types/nlp");
|
|
189
|
+
Object.defineProperty(exports, "calculateNlpPayout", { enumerable: true, get: function () { return nlp_2.calculateNlpPayout; } });
|
|
190
|
+
var slab_matcher_1 = require("./slab-matcher");
|
|
191
|
+
Object.defineProperty(exports, "findMatchingSlab", { enumerable: true, get: function () { return slab_matcher_1.findMatchingSlab; } });
|
|
192
|
+
Object.defineProperty(exports, "findInterpolationSlabs", { enumerable: true, get: function () { return slab_matcher_1.findInterpolationSlabs; } });
|
|
193
|
+
var discount_application_1 = require("./discount-application");
|
|
194
|
+
Object.defineProperty(exports, "calculateAppliedDiscountValues", { enumerable: true, get: function () { return discount_application_1.calculateAppliedDiscountValues; } });
|
|
195
|
+
Object.defineProperty(exports, "recalculateSchemePercentage", { enumerable: true, get: function () { return discount_application_1.recalculateSchemePercentage; } });
|
|
196
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/calculators/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Scheme } from "../../types/scheme";
|
|
2
|
+
import type { SchemeSlabResult } from "../../types/applied-scheme";
|
|
3
|
+
import type { QualifierItem } from "../../helpers/qualifier-checks";
|
|
4
|
+
export interface ArticleCalculatorInput {
|
|
5
|
+
scheme: Scheme;
|
|
6
|
+
compareValue: number;
|
|
7
|
+
totalAmount: number;
|
|
8
|
+
applicableProducts: QualifierItem[];
|
|
9
|
+
isMrpBilling: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Article payout type.
|
|
13
|
+
*
|
|
14
|
+
* Semantics (from golden fixtures): payout is a per-unit value.
|
|
15
|
+
* - STEP: discountValue = payout × slab.constraint × floor(compareValue / slab.constraint)
|
|
16
|
+
* - CONTINUOUS: discountValue = payout × compareValue
|
|
17
|
+
*
|
|
18
|
+
* Returns discountPercent as an effective % on totalAmount so downstream logic can
|
|
19
|
+
* derive an amount consistently.
|
|
20
|
+
*/
|
|
21
|
+
export declare function calculateArticlePayout(): SchemeSlabResult;
|
|
22
|
+
export declare function calculateArticlePayout(input: ArticleCalculatorInput): SchemeSlabResult;
|
|
23
|
+
//# sourceMappingURL=article.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article.d.ts","sourceRoot":"","sources":["../../../src/calculators/payout-types/article.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAMnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,aAAa,EAAE,CAAC;IACpC,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAAC;AAC3D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateArticlePayout = calculateArticlePayout;
|
|
4
|
+
const enums_1 = require("../../types/enums");
|
|
5
|
+
const applied_scheme_1 = require("../../types/applied-scheme");
|
|
6
|
+
const calc_type_checks_1 = require("../../helpers/calc-type-checks");
|
|
7
|
+
const constraint_checks_1 = require("../../helpers/constraint-checks");
|
|
8
|
+
const slab_matcher_1 = require("../slab-matcher");
|
|
9
|
+
function calculateArticlePayout(input) {
|
|
10
|
+
if (!input) {
|
|
11
|
+
const result = (0, applied_scheme_1.createEmptySlabResult)(enums_1.SchemePayoutType.ARTICLE);
|
|
12
|
+
result.warnings.push("Article payout type is not yet implemented");
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
const { scheme, compareValue, totalAmount, applicableProducts } = input;
|
|
16
|
+
const result = (0, applied_scheme_1.createEmptySlabResult)(enums_1.SchemePayoutType.ARTICLE);
|
|
17
|
+
if (!(0, constraint_checks_1.isValidConstraintType)(scheme.constraintType)) {
|
|
18
|
+
result.warnings.push(`Invalid constraint type: ${scheme.constraintType}`);
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
const slabs = [...scheme.slabs].sort((a, b) => b.constraint - a.constraint);
|
|
22
|
+
if (slabs.length === 0) {
|
|
23
|
+
result.warnings.push("Slab list is empty");
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
const matcherParams = {
|
|
27
|
+
slabs,
|
|
28
|
+
compareValue,
|
|
29
|
+
applicableProducts,
|
|
30
|
+
payoutType: enums_1.SchemePayoutType.ARTICLE,
|
|
31
|
+
discountOn: scheme.discountOn ?? null,
|
|
32
|
+
};
|
|
33
|
+
const payoutCalcType = scheme.payoutCalculationType;
|
|
34
|
+
if ((0, calc_type_checks_1.isPayoutCalcTypeStep)(payoutCalcType)) {
|
|
35
|
+
const match = (0, slab_matcher_1.findMatchingSlab)(matcherParams);
|
|
36
|
+
if (!match)
|
|
37
|
+
return result;
|
|
38
|
+
const { slab } = match;
|
|
39
|
+
let stepMultiplier = 0;
|
|
40
|
+
if (slab.constraint > 0) {
|
|
41
|
+
stepMultiplier = Math.floor(compareValue / slab.constraint);
|
|
42
|
+
}
|
|
43
|
+
const discountValue = slab.payout * slab.constraint * stepMultiplier;
|
|
44
|
+
let effectivePercent = 0;
|
|
45
|
+
if (totalAmount > 0) {
|
|
46
|
+
effectivePercent = (discountValue / totalAmount) * 100;
|
|
47
|
+
}
|
|
48
|
+
result.matched = true;
|
|
49
|
+
result.matchedSlabId = slab.id;
|
|
50
|
+
result.discountPercent = effectivePercent;
|
|
51
|
+
result.targetMethod = "setDiscountScheme";
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
if ((0, calc_type_checks_1.isPayoutCalcTypeContinuous)(payoutCalcType)) {
|
|
55
|
+
const match = (0, slab_matcher_1.findMatchingSlab)(matcherParams);
|
|
56
|
+
if (!match)
|
|
57
|
+
return result;
|
|
58
|
+
const { slab } = match;
|
|
59
|
+
const discountValue = slab.payout * compareValue;
|
|
60
|
+
let effectivePercent = 0;
|
|
61
|
+
if (totalAmount > 0) {
|
|
62
|
+
effectivePercent = (discountValue / totalAmount) * 100;
|
|
63
|
+
}
|
|
64
|
+
result.matched = true;
|
|
65
|
+
result.matchedSlabId = slab.id;
|
|
66
|
+
result.discountPercent = effectivePercent;
|
|
67
|
+
result.targetMethod = "setDiscountScheme";
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
result.warnings.push(`No matching calculation type found: ${payoutCalcType}`);
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=article.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article.js","sourceRoot":"","sources":["../../../src/calculators/payout-types/article.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Scheme, Basket } from "../../types/scheme";
|
|
2
|
+
import type { SchemeSlabResult } from "../../types/applied-scheme";
|
|
3
|
+
import { type QualifierItem } from "../../helpers/qualifier-checks";
|
|
4
|
+
export interface BasketItem {
|
|
5
|
+
/** SKU id. */
|
|
6
|
+
productId: number;
|
|
7
|
+
/** Billed quantity for the SKU within basket selection. */
|
|
8
|
+
quantity: number;
|
|
9
|
+
/** Unit price used for basket amount calculation (PTR/ex-tax in most flows). */
|
|
10
|
+
price: number;
|
|
11
|
+
/** Alternate category/group string for qualifier filtering. */
|
|
12
|
+
category1: string | null;
|
|
13
|
+
/** Primary category id for qualifier filtering. */
|
|
14
|
+
primaryCategoryId: number;
|
|
15
|
+
/** Secondary category id for qualifier filtering. */
|
|
16
|
+
secondaryCategoryId: number;
|
|
17
|
+
/** Attribute text 1 for qualifier filtering. */
|
|
18
|
+
productAttributeText1: string | null;
|
|
19
|
+
/** Whether the item is saleable/must-sell eligible. */
|
|
20
|
+
isSaleable: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface BasketCalculatorInput {
|
|
23
|
+
/** Full scheme configuration. */
|
|
24
|
+
scheme: Scheme;
|
|
25
|
+
/** Precomputed compare value used for slab matching (not always used directly in basket logic). */
|
|
26
|
+
compareValue: number;
|
|
27
|
+
/** Items contributing to qualification for this scheme (qualifier checks run on this). */
|
|
28
|
+
applicableProducts: QualifierItem[];
|
|
29
|
+
/** Basket definitions referenced by slab qualifierSchemeSlabs. */
|
|
30
|
+
baskets: Basket[];
|
|
31
|
+
/** Items selected in the basket context (used to compute basket totals and mandatory basket qualification). */
|
|
32
|
+
selectedItems: BasketItem[];
|
|
33
|
+
/** Whether to use MRP billing payout (slab.mrpPayout) where applicable. */
|
|
34
|
+
isMrpBilling: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface BasketResult extends SchemeSlabResult {
|
|
37
|
+
/** Product IDs the discount should be applied to */
|
|
38
|
+
applicableProductIds: number[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Calculate payout for BASKET payout type.
|
|
42
|
+
*
|
|
43
|
+
* Slabs sorted by id desc.
|
|
44
|
+
* Validates mandatory baskets pass constraint (qty or amount).
|
|
45
|
+
* itemDiscountPercent = slab.basketInvoicePayout
|
|
46
|
+
* Only applies to basket product items.
|
|
47
|
+
*/
|
|
48
|
+
export declare function calculateBasketPayout(input: BasketCalculatorInput): BasketResult;
|
|
49
|
+
//# sourceMappingURL=basket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basket.d.ts","sourceRoot":"","sources":["../../../src/calculators/payout-types/basket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAoB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAKnE,OAAO,EAAmE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAGrI,MAAM,WAAW,UAAU;IACzB,cAAc;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mDAAmD;IACnD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,uDAAuD;IACvD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,mGAAmG;IACnG,YAAY,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,kBAAkB,EAAE,aAAa,EAAE,CAAC;IACpC,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,+GAA+G;IAC/G,aAAa,EAAE,UAAU,EAAE,CAAC;IAC5B,2EAA2E;IAC3E,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,oDAAoD;IACpD,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,CA8GhF"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateBasketPayout = calculateBasketPayout;
|
|
4
|
+
const enums_1 = require("../../types/enums");
|
|
5
|
+
const applied_scheme_1 = require("../../types/applied-scheme");
|
|
6
|
+
const calc_type_checks_1 = require("../../helpers/calc-type-checks");
|
|
7
|
+
const constraint_checks_1 = require("../../helpers/constraint-checks");
|
|
8
|
+
const qualifier_checks_1 = require("../../helpers/qualifier-checks");
|
|
9
|
+
/**
|
|
10
|
+
* Calculate payout for BASKET payout type.
|
|
11
|
+
*
|
|
12
|
+
* Slabs sorted by id desc.
|
|
13
|
+
* Validates mandatory baskets pass constraint (qty or amount).
|
|
14
|
+
* itemDiscountPercent = slab.basketInvoicePayout
|
|
15
|
+
* Only applies to basket product items.
|
|
16
|
+
*/
|
|
17
|
+
function calculateBasketPayout(input) {
|
|
18
|
+
const { scheme, compareValue, applicableProducts, baskets, selectedItems, isMrpBilling } = input;
|
|
19
|
+
const result = {
|
|
20
|
+
...(0, applied_scheme_1.createEmptySlabResult)(enums_1.SchemePayoutType.BASKET),
|
|
21
|
+
applicableProductIds: [],
|
|
22
|
+
};
|
|
23
|
+
if (!(0, constraint_checks_1.isValidConstraintType)(scheme.constraintType)) {
|
|
24
|
+
result.warnings.push(`Invalid constraint type: ${scheme.constraintType}`);
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
if (!(0, calc_type_checks_1.isPayoutCalcTypeContinuous)(scheme.payoutCalculationType)) {
|
|
28
|
+
result.warnings.push(`No matching calculation type found: ${scheme.payoutCalculationType}`);
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
const slabs = [...scheme.slabs].sort((a, b) => b.id - a.id);
|
|
32
|
+
if (slabs.length === 0) {
|
|
33
|
+
result.warnings.push("Slab list is empty");
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
for (const slab of slabs) {
|
|
37
|
+
// Check qualifiers
|
|
38
|
+
const qualifierParams = {
|
|
39
|
+
secondQualifier: slab.secondQualifier,
|
|
40
|
+
secondQualifierType: slab.secondQualifierType,
|
|
41
|
+
discountOn: scheme.discountOn ?? null,
|
|
42
|
+
firstQualifier: slab.firstQualifier,
|
|
43
|
+
thirdQualifier: slab.thirdQualifier,
|
|
44
|
+
thirdQualifierType: slab.thirdQualifierType,
|
|
45
|
+
slabConstraint: slab.constraint,
|
|
46
|
+
};
|
|
47
|
+
if (!(0, qualifier_checks_1.checkIfSecondaryCategoryFilterPassed)(qualifierParams, applicableProducts)) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
// Get all basket product IDs for this slab
|
|
51
|
+
const slabBasketIds = slab.qualifierSchemeSlabs.map((v) => v.basketId);
|
|
52
|
+
const slabBaskets = baskets.filter((v) => slabBasketIds.includes(+v.id));
|
|
53
|
+
const allBasketProductIds = slabBaskets.map((v) => v.productIds).flat();
|
|
54
|
+
const allBasketSelectedItems = selectedItems.filter((v) => allBasketProductIds.includes(v.productId));
|
|
55
|
+
// Check slab constraint against basket items total
|
|
56
|
+
const basketTotalAmount = allBasketSelectedItems.reduce((acc, v) => acc + v.quantity * v.price, 0);
|
|
57
|
+
if (basketTotalAmount < slab.constraint) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
// Check mandatory baskets
|
|
61
|
+
const mandatoryBasketSlabs = slab.qualifierSchemeSlabs.filter((v) => v.isBasketMandatory);
|
|
62
|
+
let basketsConstraintPassed = mandatoryBasketSlabs.length === 0 ? false : true;
|
|
63
|
+
for (const basketSlab of mandatoryBasketSlabs) {
|
|
64
|
+
const basket = baskets.find((v) => v.id == basketSlab.basketId);
|
|
65
|
+
if (!basket) {
|
|
66
|
+
result.warnings.push(`Basket not found: ${basketSlab.basketId}`);
|
|
67
|
+
basketsConstraintPassed = false;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
const basketProductIds = basket.productIds;
|
|
71
|
+
const basketSelectedItems = selectedItems.filter((v) => basketProductIds?.includes(v.productId));
|
|
72
|
+
const constraint = basketSlab.quantity;
|
|
73
|
+
let basketCompareValue;
|
|
74
|
+
if (scheme.constraintType === enums_1.SchemeConstraintType.QUANTITY) {
|
|
75
|
+
basketCompareValue = basketSelectedItems.reduce((acc, v) => acc + v.quantity, 0);
|
|
76
|
+
}
|
|
77
|
+
else if (scheme.constraintType === enums_1.SchemeConstraintType.AMOUNT) {
|
|
78
|
+
basketCompareValue = basketSelectedItems.reduce((acc, v) => acc + v.quantity * v.price, 0);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
result.warnings.push(`Basket scheme: Invalid constraint type: ${scheme.constraintType}`);
|
|
82
|
+
basketCompareValue = -1;
|
|
83
|
+
}
|
|
84
|
+
if (basketCompareValue >= constraint) {
|
|
85
|
+
basketsConstraintPassed = true;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
basketsConstraintPassed = false;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (basketsConstraintPassed) {
|
|
93
|
+
// Get applicable basket product IDs
|
|
94
|
+
const basketIds = slab.qualifierSchemeSlabs.map((v) => v.basketId.toString());
|
|
95
|
+
const applicableBasketProductIds = baskets
|
|
96
|
+
.filter((v) => basketIds.includes(v.id.toString()))
|
|
97
|
+
.reduce((acc, v) => acc.concat(v.productIds), []);
|
|
98
|
+
result.matched = true;
|
|
99
|
+
result.matchedSlabId = slab.id;
|
|
100
|
+
result.discountPercent = slab.basketInvoicePayout;
|
|
101
|
+
result.applicableProductIds = applicableBasketProductIds;
|
|
102
|
+
result.targetMethod = "setDiscountScheme";
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=basket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basket.js","sourceRoot":"","sources":["../../../src/calculators/payout-types/basket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Scheme } from "../../types/scheme";
|
|
2
|
+
import type { SchemeSlabResult } from "../../types/applied-scheme";
|
|
3
|
+
import type { QualifierItem } from "../../helpers/qualifier-checks";
|
|
4
|
+
export interface CouponCalculatorInput {
|
|
5
|
+
/** Full scheme configuration. */
|
|
6
|
+
scheme: Scheme;
|
|
7
|
+
/** Precomputed compare value used for slab matching. */
|
|
8
|
+
compareValue: number;
|
|
9
|
+
/** Total amount of the qualifying set (used when converting coupon value to %). */
|
|
10
|
+
totalAmount: number;
|
|
11
|
+
/** Items contributing to qualification for this scheme. */
|
|
12
|
+
applicableProducts: QualifierItem[];
|
|
13
|
+
/** Whether to use MRP billing payout (slab.mrpPayout) for payout quantities. */
|
|
14
|
+
isMrpBilling: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Calculate payout for COUPON payout type.
|
|
18
|
+
*
|
|
19
|
+
* Continuous: placeholder discount (totalCouponValue = 0) + addProduct
|
|
20
|
+
* Step: addProduct with slab.payout qty
|
|
21
|
+
*/
|
|
22
|
+
export declare function calculateCouponPayout(input: CouponCalculatorInput): SchemeSlabResult;
|
|
23
|
+
//# sourceMappingURL=coupon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coupon.d.ts","sourceRoot":"","sources":["../../../src/calculators/payout-types/coupon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAMnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,kBAAkB,EAAE,aAAa,EAAE,CAAC;IACpC,gFAAgF;IAChF,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAoEpF"}
|