b2m-utils 0.0.293 → 0.0.295
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 +2 -1
- package/build/functions/getCtesFeesResult/index.d.ts +1 -1
- package/build/index.esm.js +41 -39
- package/build/index.esm.js.gz +0 -0
- package/build/index.esm.js.map +1 -1
- package/build/index.js +41 -39
- package/build/index.js.gz +0 -0
- package/build/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,5 +3,6 @@ import { RatecardLaneFeeWithFeeResult } from "../filterSiblingFees";
|
|
|
3
3
|
/**
|
|
4
4
|
* Calcula todas as fees do tipo TOTAL_PERCENTAGE de forma iterativa
|
|
5
5
|
* para resolver a interdependência entre elas (ex: TRT e GAC)
|
|
6
|
+
* @param preCalculatedValues - Opcional: Map de feeId -> valor já calculado (para valores alterados manualmente)
|
|
6
7
|
*/
|
|
7
|
-
export declare const calculateTotalPercentageFees: (allFees: RatecardLaneFee[], cte: Cte, allFeesForCalc?: RatecardLaneFee[]) => Map<number, RatecardLaneFeeWithFeeResult>;
|
|
8
|
+
export declare const calculateTotalPercentageFees: (allFees: RatecardLaneFee[], cte: Cte, allFeesForCalc?: RatecardLaneFee[], preCalculatedValues?: Map<number, number>) => Map<number, RatecardLaneFeeWithFeeResult>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Cte, RatecardLaneFee } from "../../types";
|
|
2
2
|
export declare const getCtesFeesResult: (feesToCalc: RatecardLaneFee[], cte: Cte, allFeesForCalc?: RatecardLaneFee[]) => {
|
|
3
3
|
total: number;
|
|
4
|
-
resultFee:
|
|
4
|
+
resultFee: any;
|
|
5
5
|
feeValue: number;
|
|
6
6
|
feeId: number;
|
|
7
7
|
}[];
|
package/build/index.esm.js
CHANGED
|
@@ -1000,8 +1000,9 @@ var calculateIcms = function (totalFromAllFees, icmsRate) {
|
|
|
1000
1000
|
/**
|
|
1001
1001
|
* Calcula todas as fees do tipo TOTAL_PERCENTAGE de forma iterativa
|
|
1002
1002
|
* para resolver a interdependência entre elas (ex: TRT e GAC)
|
|
1003
|
+
* @param preCalculatedValues - Opcional: Map de feeId -> valor já calculado (para valores alterados manualmente)
|
|
1003
1004
|
*/
|
|
1004
|
-
var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc) {
|
|
1005
|
+
var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc, preCalculatedValues) {
|
|
1005
1006
|
var results = new Map();
|
|
1006
1007
|
// Separar fees em dois grupos
|
|
1007
1008
|
// IMPORTANTE: ICMS não deve ser calculado aqui, ele tem tratamento especial no calculateFee
|
|
@@ -1019,16 +1020,22 @@ var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc) {
|
|
|
1019
1020
|
if (percentageFees.length === 0) {
|
|
1020
1021
|
return results;
|
|
1021
1022
|
}
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1023
|
+
var baseNonPercentage = 0;
|
|
1024
|
+
// Se temos valores pré-calculados, usar eles ao invés de recalcular
|
|
1025
|
+
if (preCalculatedValues) {
|
|
1026
|
+
baseNonPercentage = nonPercentageFees.reduce(function (sum, fee) {
|
|
1027
|
+
var _a;
|
|
1028
|
+
var value = ((_a = fee.fee) === null || _a === void 0 ? void 0 : _a.id) ? preCalculatedValues.get(fee.fee.id) : undefined;
|
|
1029
|
+
return sum + (value !== undefined ? value : 0);
|
|
1030
|
+
}, 0);
|
|
1031
|
+
}
|
|
1032
|
+
else {
|
|
1033
|
+
// Calcular normalmente
|
|
1034
|
+
var nonPercentageResults = filterSiblingFees(nonPercentageFees.map(function (it) {
|
|
1035
|
+
return calculateFee(it, cte, allFees, false, allFeesForCalc);
|
|
1036
|
+
}));
|
|
1037
|
+
baseNonPercentage = nonPercentageResults.reduce(function (sum, r) { return sum + (r.totalToCalc || 0); }, 0);
|
|
1038
|
+
}
|
|
1032
1039
|
// Calcular fees percentuais iterativamente até convergir
|
|
1033
1040
|
var maxIterations = 10;
|
|
1034
1041
|
var tolerance = 0.01; // Tolerância de 1 centavo
|
|
@@ -1036,10 +1043,8 @@ var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc) {
|
|
|
1036
1043
|
var previousValues = new Map();
|
|
1037
1044
|
percentageFees.forEach(function (pf) { return previousValues.set(pf.fee.id, 0); });
|
|
1038
1045
|
var _loop_1 = function (iteration) {
|
|
1039
|
-
console.log("\n--- Itera\u00E7\u00E3o ".concat(iteration + 1, " ---"));
|
|
1040
1046
|
// Calcular cada fee percentual com base nos valores atuais das outras
|
|
1041
1047
|
percentageFees.forEach(function (pf) {
|
|
1042
|
-
var _a;
|
|
1043
1048
|
// Calcular base: fees não-percentuais + outras fees percentuais (exceto ela mesma)
|
|
1044
1049
|
var basePercentage = Array.from(previousValues.entries())
|
|
1045
1050
|
.filter(function (_a) {
|
|
@@ -1053,7 +1058,6 @@ var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc) {
|
|
|
1053
1058
|
var baseValue = baseNonPercentage + basePercentage;
|
|
1054
1059
|
var percentValue = (+pf.value / 100);
|
|
1055
1060
|
var calculatedValue = baseValue * percentValue;
|
|
1056
|
-
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)));
|
|
1057
1061
|
previousValues.set(pf.fee.id, calculatedValue);
|
|
1058
1062
|
// Armazenar resultado
|
|
1059
1063
|
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')) }));
|
|
@@ -1076,7 +1080,6 @@ var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc) {
|
|
|
1076
1080
|
hasConverged = false;
|
|
1077
1081
|
}
|
|
1078
1082
|
if (hasConverged) {
|
|
1079
|
-
console.log("\u2705 Convergiu na itera\u00E7\u00E3o ".concat(iteration + 1, "!"));
|
|
1080
1083
|
return "break";
|
|
1081
1084
|
}
|
|
1082
1085
|
};
|
|
@@ -1085,11 +1088,6 @@ var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc) {
|
|
|
1085
1088
|
if (state_1 === "break")
|
|
1086
1089
|
break;
|
|
1087
1090
|
}
|
|
1088
|
-
console.log("\n\uD83D\uDCC8 Resultado final das fees percentuais:");
|
|
1089
|
-
results.forEach(function (result, feeId) {
|
|
1090
|
-
var _a;
|
|
1091
|
-
console.log(" ".concat((_a = result.fee) === null || _a === void 0 ? void 0 : _a.name, " (").concat(feeId, "): R$ ").concat((result.totalFee || 0).toFixed(2)));
|
|
1092
|
-
});
|
|
1093
1091
|
return results;
|
|
1094
1092
|
};
|
|
1095
1093
|
|
|
@@ -1376,7 +1374,7 @@ var getLaneFromRatecard = function (cte) {
|
|
|
1376
1374
|
};
|
|
1377
1375
|
|
|
1378
1376
|
var getCtesFeesResult = function (feesToCalc, cte, allFeesForCalc) {
|
|
1379
|
-
var _a, _b, _c;
|
|
1377
|
+
var _a, _b, _c, _d;
|
|
1380
1378
|
var results = [];
|
|
1381
1379
|
// Separar fees por tipo: normais, TOTAL_PERCENTAGE e ICMS
|
|
1382
1380
|
var icmsFee = feesToCalc.find(function (f) { var _a; return ((_a = f.fee) === null || _a === void 0 ? void 0 : _a.id) === FeeEnum.ICMS || f.feeId === FeeEnum.ICMS; });
|
|
@@ -1403,8 +1401,8 @@ var getCtesFeesResult = function (feesToCalc, cte, allFeesForCalc) {
|
|
|
1403
1401
|
});
|
|
1404
1402
|
if (siblingFees && (siblingFees === null || siblingFees === void 0 ? void 0 : siblingFees.length) > 0) {
|
|
1405
1403
|
var siblingFeesResults = [];
|
|
1406
|
-
for (var
|
|
1407
|
-
var item_1 = siblingFees_1[
|
|
1404
|
+
for (var _f = 0, siblingFees_1 = siblingFees; _f < siblingFees_1.length; _f++) {
|
|
1405
|
+
var item_1 = siblingFees_1[_f];
|
|
1408
1406
|
var result = calculateFee(item_1, cte, feesToCalc, false, allFeesForCalc);
|
|
1409
1407
|
siblingFeesResults.push(result);
|
|
1410
1408
|
}
|
|
@@ -1436,22 +1434,26 @@ var getCtesFeesResult = function (feesToCalc, cte, allFeesForCalc) {
|
|
|
1436
1434
|
var item = normalFees_1[_i];
|
|
1437
1435
|
_loop_1(item);
|
|
1438
1436
|
}
|
|
1439
|
-
// PASSADA 2: Calcular fees TOTAL_PERCENTAGE
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
var
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1437
|
+
// PASSADA 2: Calcular fees TOTAL_PERCENTAGE de forma iterativa
|
|
1438
|
+
if (totalPercentageFees.length > 0) {
|
|
1439
|
+
console.log("\n\uD83D\uDD04 [getCtesFeesResult] Calculando ".concat(totalPercentageFees.length, " fees TOTAL_PERCENTAGE"));
|
|
1440
|
+
console.log("\uD83D\uDCCB Fees: ".concat(totalPercentageFees.map(function (f) { var _a; return "".concat((_a = f.fee) === null || _a === void 0 ? void 0 : _a.name, " (").concat(f.value, "%)"); }).join(', ')));
|
|
1441
|
+
var percentageFeesCache = calculateTotalPercentageFees(feesToCalc, cte, allFeesForCalc);
|
|
1442
|
+
console.log("\u2705 Cache gerado com ".concat(percentageFeesCache.size, " fees"));
|
|
1443
|
+
for (var _e = 0, totalPercentageFees_1 = totalPercentageFees; _e < totalPercentageFees_1.length; _e++) {
|
|
1444
|
+
var item = totalPercentageFees_1[_e];
|
|
1445
|
+
if ((_d = item.fee) === null || _d === void 0 ? void 0 : _d.id) {
|
|
1446
|
+
var cachedResult = percentageFeesCache.get(item.fee.id);
|
|
1447
|
+
if (cachedResult && cachedResult.totalFee && cachedResult.totalFee > 0) {
|
|
1448
|
+
console.log(" ".concat(item.fee.name, ": R$ ").concat(cachedResult.totalFee.toFixed(2)));
|
|
1449
|
+
results.push({
|
|
1450
|
+
total: Number(cachedResult.totalFee.toFixed(2)),
|
|
1451
|
+
resultFee: cachedResult.resultFee || '',
|
|
1452
|
+
feeValue: item.value || 0,
|
|
1453
|
+
feeId: item.feeId,
|
|
1454
|
+
});
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1455
1457
|
}
|
|
1456
1458
|
}
|
|
1457
1459
|
// PASSADA 3: Calcular ICMS com base em todas as fees anteriores (normais + TOTAL_PERCENTAGE)
|
package/build/index.esm.js.gz
CHANGED
|
Binary file
|