@parv0888/scheme-engine 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/calculators/discount-application.d.ts.map +1 -1
  2. package/dist/calculators/discount-application.js +34 -23
  3. package/dist/calculators/discount-application.js.map +1 -1
  4. package/dist/esm/calculators/discount-application.js +34 -23
  5. package/dist/esm/calculators/discount-application.js.map +1 -1
  6. package/package.json +1 -1
  7. package/dist/calculators/discount-application.d.ts +0 -44
  8. package/dist/calculators/index.d.ts +0 -65
  9. package/dist/calculators/index.d.ts.map +0 -1
  10. package/dist/calculators/index.js +0 -196
  11. package/dist/calculators/index.js.map +0 -1
  12. package/dist/calculators/payout-types/article.d.ts +0 -23
  13. package/dist/calculators/payout-types/article.d.ts.map +0 -1
  14. package/dist/calculators/payout-types/article.js +0 -73
  15. package/dist/calculators/payout-types/article.js.map +0 -1
  16. package/dist/calculators/payout-types/basket.d.ts +0 -49
  17. package/dist/calculators/payout-types/basket.d.ts.map +0 -1
  18. package/dist/calculators/payout-types/basket.js +0 -108
  19. package/dist/calculators/payout-types/basket.js.map +0 -1
  20. package/dist/calculators/payout-types/coupon.d.ts +0 -23
  21. package/dist/calculators/payout-types/coupon.d.ts.map +0 -1
  22. package/dist/calculators/payout-types/coupon.js +0 -74
  23. package/dist/calculators/payout-types/coupon.js.map +0 -1
  24. package/dist/calculators/payout-types/discount.d.ts +0 -21
  25. package/dist/calculators/payout-types/discount.d.ts.map +0 -1
  26. package/dist/calculators/payout-types/discount.js +0 -110
  27. package/dist/calculators/payout-types/discount.js.map +0 -1
  28. package/dist/calculators/payout-types/fixed-discount.d.ts +0 -31
  29. package/dist/calculators/payout-types/fixed-discount.d.ts.map +0 -1
  30. package/dist/calculators/payout-types/fixed-discount.js +0 -65
  31. package/dist/calculators/payout-types/fixed-discount.js.map +0 -1
  32. package/dist/calculators/payout-types/foc.d.ts +0 -30
  33. package/dist/calculators/payout-types/foc.d.ts.map +0 -1
  34. package/dist/calculators/payout-types/foc.js +0 -130
  35. package/dist/calculators/payout-types/foc.js.map +0 -1
  36. package/dist/calculators/payout-types/mrp-percentage.d.ts +0 -34
  37. package/dist/calculators/payout-types/mrp-percentage.d.ts.map +0 -1
  38. package/dist/calculators/payout-types/mrp-percentage.js +0 -77
  39. package/dist/calculators/payout-types/mrp-percentage.js.map +0 -1
  40. package/dist/calculators/payout-types/nlp.d.ts +0 -22
  41. package/dist/calculators/payout-types/nlp.d.ts.map +0 -1
  42. package/dist/calculators/payout-types/nlp.js +0 -59
  43. package/dist/calculators/payout-types/nlp.js.map +0 -1
  44. package/dist/calculators/payout-types/per-unit.d.ts +0 -32
  45. package/dist/calculators/payout-types/per-unit.d.ts.map +0 -1
  46. package/dist/calculators/payout-types/per-unit.js +0 -94
  47. package/dist/calculators/payout-types/per-unit.js.map +0 -1
  48. package/dist/calculators/payout-types/product-new.d.ts +0 -27
  49. package/dist/calculators/payout-types/product-new.d.ts.map +0 -1
  50. package/dist/calculators/payout-types/product-new.js +0 -85
  51. package/dist/calculators/payout-types/product-new.js.map +0 -1
  52. package/dist/calculators/payout-types/product.d.ts +0 -31
  53. package/dist/calculators/payout-types/product.d.ts.map +0 -1
  54. package/dist/calculators/payout-types/product.js +0 -73
  55. package/dist/calculators/payout-types/product.js.map +0 -1
  56. package/dist/calculators/payout-types/topup.d.ts +0 -19
  57. package/dist/calculators/payout-types/topup.d.ts.map +0 -1
  58. package/dist/calculators/payout-types/topup.js +0 -46
  59. package/dist/calculators/payout-types/topup.js.map +0 -1
  60. package/dist/calculators/slab-matcher.d.ts +0 -41
  61. package/dist/calculators/slab-matcher.d.ts.map +0 -1
  62. package/dist/calculators/slab-matcher.js +0 -68
  63. package/dist/calculators/slab-matcher.js.map +0 -1
  64. package/dist/helpers/calc-type-checks.d.ts +0 -21
  65. package/dist/helpers/calc-type-checks.d.ts.map +0 -1
  66. package/dist/helpers/calc-type-checks.js +0 -36
  67. package/dist/helpers/calc-type-checks.js.map +0 -1
  68. package/dist/helpers/compare-value.d.ts +0 -40
  69. package/dist/helpers/compare-value.d.ts.map +0 -1
  70. package/dist/helpers/compare-value.js +0 -120
  71. package/dist/helpers/compare-value.js.map +0 -1
  72. package/dist/helpers/constraint-checks.d.ts +0 -30
  73. package/dist/helpers/constraint-checks.d.ts.map +0 -1
  74. package/dist/helpers/constraint-checks.js +0 -73
  75. package/dist/helpers/constraint-checks.js.map +0 -1
  76. package/dist/helpers/index.d.ts +0 -8
  77. package/dist/helpers/index.d.ts.map +0 -1
  78. package/dist/helpers/index.js +0 -24
  79. package/dist/helpers/index.js.map +0 -1
  80. package/dist/helpers/math.d.ts +0 -50
  81. package/dist/helpers/math.d.ts.map +0 -1
  82. package/dist/helpers/math.js +0 -96
  83. package/dist/helpers/math.js.map +0 -1
  84. package/dist/helpers/payout-type-checks.d.ts +0 -17
  85. package/dist/helpers/payout-type-checks.d.ts.map +0 -1
  86. package/dist/helpers/payout-type-checks.js +0 -34
  87. package/dist/helpers/payout-type-checks.js.map +0 -1
  88. package/dist/helpers/qualifier-checks.d.ts +0 -62
  89. package/dist/helpers/qualifier-checks.d.ts.map +0 -1
  90. package/dist/helpers/qualifier-checks.js +0 -194
  91. package/dist/helpers/qualifier-checks.js.map +0 -1
  92. package/dist/helpers/scheme-applicability.d.ts +0 -40
  93. package/dist/helpers/scheme-applicability.d.ts.map +0 -1
  94. package/dist/helpers/scheme-applicability.js +0 -99
  95. package/dist/helpers/scheme-applicability.js.map +0 -1
  96. package/dist/index.d.ts +0 -4
  97. package/dist/index.d.ts.map +0 -1
  98. package/dist/index.js +0 -26
  99. package/dist/index.js.map +0 -1
  100. package/dist/types/applied-scheme.d.ts +0 -157
  101. package/dist/types/applied-scheme.d.ts.map +0 -1
  102. package/dist/types/applied-scheme.js +0 -22
  103. package/dist/types/applied-scheme.js.map +0 -1
  104. package/dist/types/enums.d.ts +0 -91
  105. package/dist/types/enums.d.ts.map +0 -1
  106. package/dist/types/enums.js +0 -118
  107. package/dist/types/enums.js.map +0 -1
  108. package/dist/types/index.d.ts +0 -5
  109. package/dist/types/index.d.ts.map +0 -1
  110. package/dist/types/index.js +0 -21
  111. package/dist/types/index.js.map +0 -1
  112. package/dist/types/item-props.d.ts +0 -103
  113. package/dist/types/item-props.d.ts.map +0 -1
  114. package/dist/types/item-props.js +0 -3
  115. package/dist/types/item-props.js.map +0 -1
  116. package/dist/types/scheme.d.ts +0 -172
  117. package/dist/types/scheme.d.ts.map +0 -1
  118. package/dist/types/scheme.js +0 -3
  119. package/dist/types/scheme.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"discount-application.d.ts","sourceRoot":"","sources":["../../src/calculators/discount-application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgD,MAAM,gBAAgB,CAAC;AAC9F,OAAO,KAAK,EAAE,kBAAkB,EAAyB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAKhH,MAAM,WAAW,wBAAwB;IACvC,oIAAoI;IACpI,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAErC,+IAA+I;IAC/I,SAAS,EAAE,MAAM,CAAC;IAElB,+GAA+G;IAC/G,QAAQ,EAAE,MAAM,CAAC;IAEjB,mGAAmG;IACnG,OAAO,EAAE,MAAM,CAAC;IAEhB,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IAEZ,oGAAoG;IACpG,KAAK,EAAE,MAAM,CAAC;IAEd,2EAA2E;IAC3E,cAAc,EAAE,cAAc,CAAC;IAE/B,4HAA4H;IAC5H,mCAAmC,EAAE,OAAO,CAAC;IAE7C,0IAA0I;IAC1I,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAE1C,iJAAiJ;IACjJ,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAE7C,8FAA8F;IAC9F,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,wBAAwB,GAC9B,qBAAqB,CAkJvB;AAID,UAAU,YAAY;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,kBAAkB,EAC1B,aAAa,CAAC,EAAE,MAAM,GACrB,YAAY,CAmDd"}
1
+ {"version":3,"file":"discount-application.d.ts","sourceRoot":"","sources":["../../src/calculators/discount-application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgD,MAAM,gBAAgB,CAAC;AAC9F,OAAO,KAAK,EAAE,kBAAkB,EAAyB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAKhH,MAAM,WAAW,wBAAwB;IACvC,oIAAoI;IACpI,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAErC,+IAA+I;IAC/I,SAAS,EAAE,MAAM,CAAC;IAElB,+GAA+G;IAC/G,QAAQ,EAAE,MAAM,CAAC;IAEjB,mGAAmG;IACnG,OAAO,EAAE,MAAM,CAAC;IAEhB,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IAEZ,oGAAoG;IACpG,KAAK,EAAE,MAAM,CAAC;IAEd,2EAA2E;IAC3E,cAAc,EAAE,cAAc,CAAC;IAE/B,4HAA4H;IAC5H,mCAAmC,EAAE,OAAO,CAAC;IAE7C,0IAA0I;IAC1I,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAE1C,iJAAiJ;IACjJ,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAE7C,8FAA8F;IAC9F,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,wBAAwB,GAC9B,qBAAqB,CA4KvB;AAID,UAAU,YAAY;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,kBAAkB,EAC1B,aAAa,CAAC,EAAE,MAAM,GACrB,YAAY,CAyCd"}
@@ -33,9 +33,13 @@ function calculateAppliedDiscountValues(input) {
33
33
  const effectiveQty = batchQty ?? quantity;
34
34
  const effectivePrice = typeof scheme.price === "number" && scheme.price > 0 ? scheme.price : price;
35
35
  const effectiveBaseValue = batchQty ? effectivePrice * effectiveQty : baseValue;
36
+ // When batch pricing is active, each scheme entry represents a distinct
37
+ // batch with its own price/qty — discount must be computed on that batch's
38
+ // base value, not the full item's tempBaseValue.
39
+ const computeBase = batchQty ? effectiveBaseValue : tempBaseValue;
36
40
  // Recalculate PerUnit percentages if recalculation data present
37
41
  if (scheme.recalculateSchemeData) {
38
- const recalced = recalculateSchemePercentage(scheme, tempBaseValue);
42
+ const recalced = recalculateSchemePercentage(scheme, computeBase);
39
43
  if (isPrimary) {
40
44
  scheme.primaryDiscountPercent = recalced.discountPercent;
41
45
  }
@@ -49,6 +53,14 @@ function calculateAppliedDiscountValues(input) {
49
53
  if (scheme.schemePayoutType === enums_1.SchemePayoutType.FIXED_DISCOUNT) {
50
54
  currentValue = scheme[discountKey] || 0;
51
55
  }
56
+ // PerUnit without recalculation data: value was pre-computed during
57
+ // slab matching (calculatePerUnitPayout) and stored directly.
58
+ // When loaded from DB, percent is 0 and we use the stored value.
59
+ else if (scheme.schemePayoutType === enums_1.SchemePayoutType.PERUNIT &&
60
+ !scheme.recalculateSchemeData &&
61
+ currentPercent === 0) {
62
+ currentValue = scheme[discountKey] || 0;
63
+ }
52
64
  // Skip: PRODUCT + unitary scheme
53
65
  else if (scheme.schemePayoutType === enums_1.SchemePayoutType.PRODUCT &&
54
66
  companyUsesUnitaryProductScheme) {
@@ -56,9 +68,9 @@ function calculateAppliedDiscountValues(input) {
56
68
  }
57
69
  // FOC-type schemes
58
70
  else if ((0, payout_type_checks_1.isFocTypePayoutScheme)(scheme.schemePayoutType)) {
59
- const totalQty = quantity + freeQty;
71
+ const totalQty = effectiveQty + freeQty;
60
72
  if (totalQty > 0) {
61
- currentValue = (scheme.freeQty * tempBaseValue) / totalQty;
73
+ currentValue = (scheme.freeQty * computeBase) / totalQty;
62
74
  }
63
75
  // Zero out for pricing batch companies
64
76
  if ((scheme.schemePayoutType === enums_1.SchemePayoutType.PRODUCT ||
@@ -96,11 +108,21 @@ function calculateAppliedDiscountValues(input) {
96
108
  }
97
109
  // Markup discount
98
110
  else if (scheme.isMarkup) {
99
- currentValue = (0, math_1.calculateMarkupDiscount)(tempBaseValue, currentPercent);
111
+ currentValue = (0, math_1.calculateMarkupDiscount)(computeBase, currentPercent);
100
112
  }
101
113
  // Default: percentage-based discount
102
114
  else {
103
- currentValue = (0, math_1.calculateDiscount)(tempBaseValue, currentPercent);
115
+ currentValue = (0, math_1.calculateDiscount)(computeBase, currentPercent);
116
+ }
117
+ // Fallback: when the computation produces 0 but the scheme already has
118
+ // a pre-computed non-zero value (common when loaded from DB where percent
119
+ // is 0 and the value was pre-computed during scheme application), preserve
120
+ // the stored value instead of zeroing it out.
121
+ if (currentValue === 0 && !scheme.recalculateSchemeData) {
122
+ const storedValue = scheme[discountKey] || 0;
123
+ if (storedValue > 0) {
124
+ currentValue = storedValue;
125
+ }
104
126
  }
105
127
  // Bug 7 fix: Clamp to non-negative
106
128
  currentValue = (0, math_1.clampNonNegative)(currentValue);
@@ -143,24 +165,13 @@ function recalculateSchemePercentage(scheme, tempBaseValue) {
143
165
  }
144
166
  const data = scheme.recalculateSchemeData;
145
167
  const { discountAmountOfPerUnit, totalTaxPercentage, usesStdUnit, usesSuperUnit, usesAdditionalUnit, compareValue, calculationOnCompleteNumber, additionalCalculationLogic, } = data;
146
- // Approximate net prices proportional to tempBaseValue
147
- // The caller should provide more precise values via the recalculateSchemeData
148
- // For now, derive from the available data
149
- const quantity = scheme.productId ? 1 : 1; // quantity is per-item
150
- const netPrice = tempBaseValue ? tempBaseValue / (quantity || 1) : 0;
151
- // These are rough approximations — the real recalculation happens
152
- // when the caller sets up properly via RecalculateSchemeData
153
- let finalNetPrice = netPrice;
154
- if (usesStdUnit) {
155
- // The calling code should compute actual stdUnitNetPrice * factor
156
- finalNetPrice = netPrice;
157
- }
158
- else if (usesSuperUnit) {
159
- finalNetPrice = netPrice;
160
- }
161
- else if (usesAdditionalUnit) {
162
- finalNetPrice = netPrice;
163
- }
168
+ // Derive the per-unit net price from the total base value and the compare value
169
+ // (qty/units/amount) that was used during slab matching.
170
+ // tempBaseValue = qty * unitPrice, compareValue = qty (or units/amount for other
171
+ // constraint types), so tempBaseValue / compareValue gives back the correct
172
+ // per-unit (or per-std-unit / per-super-unit) finalNetPrice that the original
173
+ // calculatePerUnitPayout used.
174
+ const finalNetPrice = tempBaseValue && compareValue ? tempBaseValue / compareValue : 0;
164
175
  const discountAmountPreTax = discountAmountOfPerUnit / (1 + totalTaxPercentage / 100);
165
176
  let itemDiscountPercent;
166
177
  if (additionalCalculationLogic === enums_1.AdditionalCalculationLogic.DISCOUNT_VALUE_SUBTRACTED_FROM_PRICE) {
@@ -1 +1 @@
1
- {"version":3,"file":"discount-application.js","sourceRoot":"","sources":["../../src/calculators/discount-application.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discount-application.js","sourceRoot":"","sources":["../../src/calculators/discount-application.ts"],"names":[],"mappings":"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"}
@@ -29,9 +29,13 @@ export function calculateAppliedDiscountValues(input) {
29
29
  const effectiveQty = batchQty ?? quantity;
30
30
  const effectivePrice = typeof scheme.price === "number" && scheme.price > 0 ? scheme.price : price;
31
31
  const effectiveBaseValue = batchQty ? effectivePrice * effectiveQty : baseValue;
32
+ // When batch pricing is active, each scheme entry represents a distinct
33
+ // batch with its own price/qty — discount must be computed on that batch's
34
+ // base value, not the full item's tempBaseValue.
35
+ const computeBase = batchQty ? effectiveBaseValue : tempBaseValue;
32
36
  // Recalculate PerUnit percentages if recalculation data present
33
37
  if (scheme.recalculateSchemeData) {
34
- const recalced = recalculateSchemePercentage(scheme, tempBaseValue);
38
+ const recalced = recalculateSchemePercentage(scheme, computeBase);
35
39
  if (isPrimary) {
36
40
  scheme.primaryDiscountPercent = recalced.discountPercent;
37
41
  }
@@ -45,6 +49,14 @@ export function calculateAppliedDiscountValues(input) {
45
49
  if (scheme.schemePayoutType === SchemePayoutType.FIXED_DISCOUNT) {
46
50
  currentValue = scheme[discountKey] || 0;
47
51
  }
52
+ // PerUnit without recalculation data: value was pre-computed during
53
+ // slab matching (calculatePerUnitPayout) and stored directly.
54
+ // When loaded from DB, percent is 0 and we use the stored value.
55
+ else if (scheme.schemePayoutType === SchemePayoutType.PERUNIT &&
56
+ !scheme.recalculateSchemeData &&
57
+ currentPercent === 0) {
58
+ currentValue = scheme[discountKey] || 0;
59
+ }
48
60
  // Skip: PRODUCT + unitary scheme
49
61
  else if (scheme.schemePayoutType === SchemePayoutType.PRODUCT &&
50
62
  companyUsesUnitaryProductScheme) {
@@ -52,9 +64,9 @@ export function calculateAppliedDiscountValues(input) {
52
64
  }
53
65
  // FOC-type schemes
54
66
  else if (isFocTypePayoutScheme(scheme.schemePayoutType)) {
55
- const totalQty = quantity + freeQty;
67
+ const totalQty = effectiveQty + freeQty;
56
68
  if (totalQty > 0) {
57
- currentValue = (scheme.freeQty * tempBaseValue) / totalQty;
69
+ currentValue = (scheme.freeQty * computeBase) / totalQty;
58
70
  }
59
71
  // Zero out for pricing batch companies
60
72
  if ((scheme.schemePayoutType === SchemePayoutType.PRODUCT ||
@@ -92,11 +104,21 @@ export function calculateAppliedDiscountValues(input) {
92
104
  }
93
105
  // Markup discount
94
106
  else if (scheme.isMarkup) {
95
- currentValue = calculateMarkupDiscount(tempBaseValue, currentPercent);
107
+ currentValue = calculateMarkupDiscount(computeBase, currentPercent);
96
108
  }
97
109
  // Default: percentage-based discount
98
110
  else {
99
- currentValue = calculateDiscount(tempBaseValue, currentPercent);
111
+ currentValue = calculateDiscount(computeBase, currentPercent);
112
+ }
113
+ // Fallback: when the computation produces 0 but the scheme already has
114
+ // a pre-computed non-zero value (common when loaded from DB where percent
115
+ // is 0 and the value was pre-computed during scheme application), preserve
116
+ // the stored value instead of zeroing it out.
117
+ if (currentValue === 0 && !scheme.recalculateSchemeData) {
118
+ const storedValue = scheme[discountKey] || 0;
119
+ if (storedValue > 0) {
120
+ currentValue = storedValue;
121
+ }
100
122
  }
101
123
  // Bug 7 fix: Clamp to non-negative
102
124
  currentValue = clampNonNegative(currentValue);
@@ -139,24 +161,13 @@ export function recalculateSchemePercentage(scheme, tempBaseValue) {
139
161
  }
140
162
  const data = scheme.recalculateSchemeData;
141
163
  const { discountAmountOfPerUnit, totalTaxPercentage, usesStdUnit, usesSuperUnit, usesAdditionalUnit, compareValue, calculationOnCompleteNumber, additionalCalculationLogic, } = data;
142
- // Approximate net prices proportional to tempBaseValue
143
- // The caller should provide more precise values via the recalculateSchemeData
144
- // For now, derive from the available data
145
- const quantity = scheme.productId ? 1 : 1; // quantity is per-item
146
- const netPrice = tempBaseValue ? tempBaseValue / (quantity || 1) : 0;
147
- // These are rough approximations — the real recalculation happens
148
- // when the caller sets up properly via RecalculateSchemeData
149
- let finalNetPrice = netPrice;
150
- if (usesStdUnit) {
151
- // The calling code should compute actual stdUnitNetPrice * factor
152
- finalNetPrice = netPrice;
153
- }
154
- else if (usesSuperUnit) {
155
- finalNetPrice = netPrice;
156
- }
157
- else if (usesAdditionalUnit) {
158
- finalNetPrice = netPrice;
159
- }
164
+ // Derive the per-unit net price from the total base value and the compare value
165
+ // (qty/units/amount) that was used during slab matching.
166
+ // tempBaseValue = qty * unitPrice, compareValue = qty (or units/amount for other
167
+ // constraint types), so tempBaseValue / compareValue gives back the correct
168
+ // per-unit (or per-std-unit / per-super-unit) finalNetPrice that the original
169
+ // calculatePerUnitPayout used.
170
+ const finalNetPrice = tempBaseValue && compareValue ? tempBaseValue / compareValue : 0;
160
171
  const discountAmountPreTax = discountAmountOfPerUnit / (1 + totalTaxPercentage / 100);
161
172
  let itemDiscountPercent;
162
173
  if (additionalCalculationLogic === AdditionalCalculationLogic.DISCOUNT_VALUE_SUBTRACTED_FROM_PRICE) {
@@ -1 +1 @@
1
- {"version":3,"file":"discount-application.js","sourceRoot":"","sources":["../../../src/calculators/discount-application.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discount-application.js","sourceRoot":"","sources":["../../../src/calculators/discount-application.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parv0888/scheme-engine",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Pure-function scheme calculation engine for FieldAssist DMS",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -1,44 +0,0 @@
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
@@ -1,65 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,196 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/calculators/index.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
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
@@ -1 +0,0 @@
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"}