b2m-utils 0.0.289 → 0.0.291
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/functions/calculateTotalPercentageFees/index.d.ts +7 -0
- package/build/functions/index.d.ts +1 -0
- package/build/index.esm.js +96 -65
- package/build/index.esm.js.gz +0 -0
- package/build/index.esm.js.map +1 -1
- package/build/index.js +96 -64
- package/build/index.js.gz +0 -0
- package/build/index.js.map +1 -1
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -582,72 +582,18 @@ 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
|
-
|
|
586
|
-
//
|
|
587
|
-
var
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
585
|
+
// Filtrar fees excluindo a própria fee, ICMS e fees irmãs
|
|
586
|
+
// IMPORTANTE: Também excluir outras fees TOTAL_PERCENTAGE para evitar recursão infinita
|
|
587
|
+
var filteredFees = allFees.filter(function (i) {
|
|
588
|
+
var _a, _b, _c, _d;
|
|
589
|
+
return ((_a = i.fee) === null || _a === void 0 ? void 0 : _a.id) !== fee_1.id &&
|
|
590
|
+
((_b = i.fee) === null || _b === void 0 ? void 0 : _b.id) !== exports.FeeEnum.ICMS &&
|
|
591
|
+
((_c = i.fee) === null || _c === void 0 ? void 0 : _c.parentId) !== fee_1.parentId &&
|
|
592
|
+
((_d = i.fee) === null || _d === void 0 ? void 0 : _d.feeCalculationTypeId) !== exports.FeeCalculationTypeEnum.TOTAL_PERCENTAGE;
|
|
593
|
+
});
|
|
594
|
+
var filteredFeesResults = filterSiblingFees(filteredFees.map(function (it) {
|
|
591
595
|
return calculateFee(it, cte, allFees, debug, allFeesForCalc);
|
|
592
596
|
}));
|
|
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);
|
|
651
597
|
var totalFromAllFees = filteredFeesResults.map(function (result) {
|
|
652
598
|
if (result === null || result === void 0 ? void 0 : result.totalToCalc) {
|
|
653
599
|
return result.totalToCalc;
|
|
@@ -1055,6 +1001,91 @@ var calculateIcms = function (totalFromAllFees, icmsRate) {
|
|
|
1055
1001
|
};
|
|
1056
1002
|
};
|
|
1057
1003
|
|
|
1004
|
+
/**
|
|
1005
|
+
* Calcula todas as fees do tipo TOTAL_PERCENTAGE de forma iterativa
|
|
1006
|
+
* para resolver a interdependência entre elas (ex: TRT e GAC)
|
|
1007
|
+
*/
|
|
1008
|
+
var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc) {
|
|
1009
|
+
var results = new Map();
|
|
1010
|
+
// Separar fees em dois grupos
|
|
1011
|
+
var nonPercentageFees = allFees.filter(function (i) { var _a; return ((_a = i.fee) === null || _a === void 0 ? void 0 : _a.feeCalculationTypeId) !== exports.FeeCalculationTypeEnum.TOTAL_PERCENTAGE; });
|
|
1012
|
+
var percentageFees = allFees.filter(function (i) { var _a; return ((_a = i.fee) === null || _a === void 0 ? void 0 : _a.feeCalculationTypeId) === exports.FeeCalculationTypeEnum.TOTAL_PERCENTAGE; });
|
|
1013
|
+
// Se não houver fees percentuais, retornar vazio
|
|
1014
|
+
if (percentageFees.length === 0) {
|
|
1015
|
+
return results;
|
|
1016
|
+
}
|
|
1017
|
+
console.log("\n\uD83D\uDD04 Calculando ".concat(percentageFees.length, " fees TOTAL_PERCENTAGE de forma iterativa"));
|
|
1018
|
+
console.log("\uD83D\uDCCB Fees: ".concat(percentageFees.map(function (f) { var _a; return "".concat((_a = f.fee) === null || _a === void 0 ? void 0 : _a.name, " (").concat(f.value, "%)"); }).join(', ')));
|
|
1019
|
+
// Calcular fees não-percentuais (base fixa)
|
|
1020
|
+
var nonPercentageResults = filterSiblingFees(nonPercentageFees.map(function (it) {
|
|
1021
|
+
return calculateFee(it, cte, allFees, false, allFeesForCalc);
|
|
1022
|
+
}));
|
|
1023
|
+
var baseNonPercentage = nonPercentageResults.reduce(function (sum, r) { return sum + (r.totalToCalc || 0); }, 0);
|
|
1024
|
+
console.log("\uD83D\uDCCA Base n\u00E3o-percentual: R$ ".concat(baseNonPercentage.toFixed(2)));
|
|
1025
|
+
// Calcular fees percentuais iterativamente até convergir
|
|
1026
|
+
var maxIterations = 10;
|
|
1027
|
+
var tolerance = 0.01; // Tolerância de 1 centavo
|
|
1028
|
+
// Inicializar com valores zerados
|
|
1029
|
+
var previousValues = new Map();
|
|
1030
|
+
percentageFees.forEach(function (pf) { return previousValues.set(pf.fee.id, 0); });
|
|
1031
|
+
var _loop_1 = function (iteration) {
|
|
1032
|
+
console.log("\n--- Itera\u00E7\u00E3o ".concat(iteration + 1, " ---"));
|
|
1033
|
+
// Calcular cada fee percentual com base nos valores atuais das outras
|
|
1034
|
+
percentageFees.forEach(function (pf) {
|
|
1035
|
+
var _a;
|
|
1036
|
+
// Calcular base: fees não-percentuais + outras fees percentuais (exceto ela mesma)
|
|
1037
|
+
var basePercentage = Array.from(previousValues.entries())
|
|
1038
|
+
.filter(function (_a) {
|
|
1039
|
+
var feeId = _a[0];
|
|
1040
|
+
return feeId !== pf.fee.id;
|
|
1041
|
+
})
|
|
1042
|
+
.reduce(function (sum, _a) {
|
|
1043
|
+
var value = _a[1];
|
|
1044
|
+
return sum + value;
|
|
1045
|
+
}, 0);
|
|
1046
|
+
var baseValue = baseNonPercentage + basePercentage;
|
|
1047
|
+
var percentValue = (+pf.value / 100);
|
|
1048
|
+
var calculatedValue = baseValue * percentValue;
|
|
1049
|
+
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)));
|
|
1050
|
+
previousValues.set(pf.fee.id, calculatedValue);
|
|
1051
|
+
// Armazenar resultado
|
|
1052
|
+
results.set(pf.fee.id, __assign(__assign({}, pf), { totalFee: calculatedValue, totalToCalc: calculatedValue, resultFee: "".concat(convertNumberToCurrency(baseValue, 'pt-br'), " x ").concat(+pf.value, "% = ").concat(convertNumberToCurrency(calculatedValue, 'pt-br')) }));
|
|
1053
|
+
});
|
|
1054
|
+
// Verificar convergência
|
|
1055
|
+
var hasConverged = true;
|
|
1056
|
+
var currentIteration = iteration;
|
|
1057
|
+
if (currentIteration > 0) {
|
|
1058
|
+
percentageFees.forEach(function (pf) {
|
|
1059
|
+
var currentValue = previousValues.get(pf.fee.id) || 0;
|
|
1060
|
+
var result = results.get(pf.fee.id);
|
|
1061
|
+
var prevValue = (result === null || result === void 0 ? void 0 : result.totalFee) || 0;
|
|
1062
|
+
var diff = Math.abs(currentValue - prevValue);
|
|
1063
|
+
if (diff > tolerance) {
|
|
1064
|
+
hasConverged = false;
|
|
1065
|
+
}
|
|
1066
|
+
});
|
|
1067
|
+
}
|
|
1068
|
+
else {
|
|
1069
|
+
hasConverged = false;
|
|
1070
|
+
}
|
|
1071
|
+
if (hasConverged) {
|
|
1072
|
+
console.log("\u2705 Convergiu na itera\u00E7\u00E3o ".concat(iteration + 1, "!"));
|
|
1073
|
+
return "break";
|
|
1074
|
+
}
|
|
1075
|
+
};
|
|
1076
|
+
for (var iteration = 0; iteration < maxIterations; iteration++) {
|
|
1077
|
+
var state_1 = _loop_1(iteration);
|
|
1078
|
+
if (state_1 === "break")
|
|
1079
|
+
break;
|
|
1080
|
+
}
|
|
1081
|
+
console.log("\n\uD83D\uDCC8 Resultado final das fees percentuais:");
|
|
1082
|
+
results.forEach(function (result, feeId) {
|
|
1083
|
+
var _a;
|
|
1084
|
+
console.log(" ".concat((_a = result.fee) === null || _a === void 0 ? void 0 : _a.name, " (").concat(feeId, "): R$ ").concat((result.totalFee || 0).toFixed(2)));
|
|
1085
|
+
});
|
|
1086
|
+
return results;
|
|
1087
|
+
};
|
|
1088
|
+
|
|
1058
1089
|
var verifyConditionalFee = function (conditionalFeeToVerify, cte) {
|
|
1059
1090
|
var _a, _b;
|
|
1060
1091
|
if (conditionalFeeToVerify === null || conditionalFeeToVerify === void 0 ? void 0 : conditionalFeeToVerify.id) {
|
|
@@ -8077,6 +8108,7 @@ exports.applyRedeliveryMultiplier = applyRedeliveryMultiplier;
|
|
|
8077
8108
|
exports.buildDynamicMapping = buildDynamicMapping;
|
|
8078
8109
|
exports.calculateFee = calculateFee;
|
|
8079
8110
|
exports.calculateIcms = calculateIcms;
|
|
8111
|
+
exports.calculateTotalPercentageFees = calculateTotalPercentageFees;
|
|
8080
8112
|
exports.convertNumberToCurrency = convertNumberToCurrency;
|
|
8081
8113
|
exports.filterSiblingFees = filterSiblingFees;
|
|
8082
8114
|
exports.findAuditedMatch = findAuditedMatch;
|
package/build/index.js.gz
CHANGED
|
Binary file
|