b2m-utils 0.0.287 → 0.0.289

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/build/index.js CHANGED
@@ -582,10 +582,72 @@ var calculateFee = function (ratecardLaneFee, cte, allFees, debug, allFeesForCal
582
582
  switch (fee_1.feeCalculationTypeId) {
583
583
  case exports.FeeCalculationTypeEnum.TOTAL_PERCENTAGE:
584
584
  if (allFees && Array.isArray(allFees) && (allFees === null || allFees === void 0 ? void 0 : allFees.length) > 0) {
585
- var filteredFees_1 = allFees.filter(function (i) { var _a, _b, _c; return ((_a = i.fee) === null || _a === void 0 ? void 0 : _a.id) !== fee_1.id && ((_b = i.fee) === null || _b === void 0 ? void 0 : _b.id) !== exports.FeeEnum.ICMS && ((_c = i.fee) === null || _c === void 0 ? void 0 : _c.parentId) !== fee_1.parentId; });
586
- var filteredFeesResults = filterSiblingFees(filteredFees_1.map(function (it) {
587
- return calculateFee(it, cte, filteredFees_1, debug, allFeesForCalc);
585
+ var filteredFees = allFees.filter(function (i) { var _a, _b, _c; return ((_a = i.fee) === null || _a === void 0 ? void 0 : _a.id) !== fee_1.id && ((_b = i.fee) === null || _b === void 0 ? void 0 : _b.id) !== exports.FeeEnum.ICMS && ((_c = i.fee) === null || _c === void 0 ? void 0 : _c.parentId) !== fee_1.parentId; });
586
+ // Separar fees em dois grupos
587
+ var nonPercentageFees = filteredFees.filter(function (i) { var _a; return ((_a = i.fee) === null || _a === void 0 ? void 0 : _a.feeCalculationTypeId) !== exports.FeeCalculationTypeEnum.TOTAL_PERCENTAGE; });
588
+ var percentageFees_1 = filteredFees.filter(function (i) { var _a; return ((_a = i.fee) === null || _a === void 0 ? void 0 : _a.feeCalculationTypeId) === exports.FeeCalculationTypeEnum.TOTAL_PERCENTAGE; });
589
+ // Calcular fees não-percentuais (base fixa)
590
+ var nonPercentageResults_1 = filterSiblingFees(nonPercentageFees.map(function (it) {
591
+ return calculateFee(it, cte, allFees, debug, allFeesForCalc);
588
592
  }));
593
+ // Calcular fees percentuais iterativamente até convergir
594
+ var percentageResults = [];
595
+ var maxIterations = 10;
596
+ var tolerance_1 = 0.01; // Tolerância de 1 centavo
597
+ // Inicializar com valores zerados
598
+ var previousValues_1 = new Map();
599
+ percentageFees_1.forEach(function (pf) { return previousValues_1.set(pf.fee.id, 0); });
600
+ console.log("\n\uD83D\uDD04 Iniciando c\u00E1lculo iterativo para fee ".concat(fee_1.id, " (").concat(fee_1.name, ")"));
601
+ console.log("\uD83D\uDCCA Base n\u00E3o-percentual: R$ ".concat(nonPercentageResults_1.reduce(function (sum, r) { return sum + (r.totalToCalc || 0); }, 0).toFixed(2)));
602
+ console.log("\uD83D\uDCCB Fees percentuais a calcular: ".concat(percentageFees_1.map(function (f) { var _a; return "".concat((_a = f.fee) === null || _a === void 0 ? void 0 : _a.name, " (").concat(f.value, "%)"); }).join(', ')));
603
+ var _loop_1 = function (iteration) {
604
+ console.log("\n--- Itera\u00E7\u00E3o ".concat(iteration + 1, " ---"));
605
+ // Calcular cada fee percentual com base nos valores atuais das outras
606
+ var currentResults = percentageFees_1.map(function (pf) {
607
+ var _a;
608
+ // Criar uma lista temporária com os valores já calculados das outras fees percentuais
609
+ var tempFees = percentageFees_1
610
+ .filter(function (f) { return f.fee.id !== pf.fee.id; })
611
+ .map(function (f) { return (__assign(__assign({}, f), { totalFee: previousValues_1.get(f.fee.id) || 0, totalToCalc: previousValues_1.get(f.fee.id) || 0 })); });
612
+ // Calcular base: fees não-percentuais + outras fees percentuais
613
+ var baseNonPercentage = nonPercentageResults_1.reduce(function (sum, r) { return sum + (r.totalToCalc || 0); }, 0);
614
+ var basePercentage = tempFees.reduce(function (sum, f) { return sum + (f.totalFee || 0); }, 0);
615
+ var baseValue = baseNonPercentage + basePercentage;
616
+ var percentValue = (+pf.value / 100);
617
+ var calculatedValue = baseValue * percentValue;
618
+ console.log(" ".concat((_a = pf.fee) === null || _a === void 0 ? void 0 : _a.name, ": base=").concat(baseValue.toFixed(2), " (").concat(baseNonPercentage.toFixed(2), " + ").concat(basePercentage.toFixed(2), ") \u00D7 ").concat(pf.value, "% = ").concat(calculatedValue.toFixed(2)));
619
+ return __assign(__assign({}, pf), { totalFee: calculatedValue, totalToCalc: calculatedValue, fee: pf.fee, feeValue: pf.value, resultFee: "".concat(convertNumberToCurrency(baseValue, 'pt-br'), " x ").concat(+pf.value, "% = ").concat(convertNumberToCurrency(calculatedValue, 'pt-br')) });
620
+ });
621
+ // Verificar convergência
622
+ var hasConverged = true;
623
+ currentResults.forEach(function (result) {
624
+ var _a;
625
+ var prevValue = previousValues_1.get(result.feeId) || 0;
626
+ var diff = Math.abs(result.totalFee - prevValue);
627
+ if (diff > tolerance_1) {
628
+ hasConverged = false;
629
+ }
630
+ console.log(" ".concat((_a = result.fee) === null || _a === void 0 ? void 0 : _a.name, ": anterior=").concat(prevValue.toFixed(2), ", atual=").concat(result.totalFee.toFixed(2), ", diff=").concat(diff.toFixed(4)));
631
+ previousValues_1.set(result.feeId, result.totalFee);
632
+ });
633
+ percentageResults = currentResults;
634
+ if (hasConverged) {
635
+ console.log("\u2705 Convergiu na itera\u00E7\u00E3o ".concat(iteration + 1, "!"));
636
+ return "break";
637
+ }
638
+ };
639
+ for (var iteration = 0; iteration < maxIterations; iteration++) {
640
+ var state_1 = _loop_1(iteration);
641
+ if (state_1 === "break")
642
+ break;
643
+ }
644
+ console.log("\n\uD83D\uDCC8 Resultado final das fees percentuais:");
645
+ percentageResults.forEach(function (r) {
646
+ var _a;
647
+ console.log(" ".concat((_a = r.fee) === null || _a === void 0 ? void 0 : _a.name, ": R$ ").concat((r.totalFee || 0).toFixed(2)));
648
+ });
649
+ // Combinar resultados
650
+ var filteredFeesResults = __spreadArray(__spreadArray([], nonPercentageResults_1, true), percentageResults, true);
589
651
  var totalFromAllFees = filteredFeesResults.map(function (result) {
590
652
  if (result === null || result === void 0 ? void 0 : result.totalToCalc) {
591
653
  return result.totalToCalc;
package/build/index.js.gz CHANGED
Binary file