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.
@@ -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: string;
4
+ resultFee: any;
5
5
  feeValue: number;
6
6
  feeId: number;
7
7
  }[];
@@ -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
- console.log("\n\uD83D\uDD04 Calculando ".concat(percentageFees.length, " fees TOTAL_PERCENTAGE de forma iterativa"));
1023
- 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(', ')));
1024
- // Calcular fees não-percentuais (base fixa)
1025
- console.log("\uD83D\uDCCB Fees n\u00E3o-percentuais: ".concat(nonPercentageFees.map(function (f) { var _a; return "".concat((_a = f.fee) === null || _a === void 0 ? void 0 : _a.name); }).join(', ')));
1026
- var nonPercentageResults = filterSiblingFees(nonPercentageFees.map(function (it) {
1027
- return calculateFee(it, cte, allFees, false, allFeesForCalc);
1028
- }));
1029
- var baseNonPercentage = nonPercentageResults.reduce(function (sum, r) { return sum + (r.totalToCalc || 0); }, 0);
1030
- console.log("\uD83D\uDCCA Base n\u00E3o-percentual: R$ ".concat(baseNonPercentage.toFixed(2)));
1031
- console.log("\uD83D\uDCCA Detalhamento: ".concat(nonPercentageResults.map(function (r) { var _a, _b; return "".concat((_a = r.fee) === null || _a === void 0 ? void 0 : _a.name, "=").concat((_b = r.totalToCalc) === null || _b === void 0 ? void 0 : _b.toFixed(2)); }).join(', ')));
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 _e = 0, siblingFees_1 = siblingFees; _e < siblingFees_1.length; _e++) {
1407
- var item_1 = siblingFees_1[_e];
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 usando a soma das fees normais já calculadas
1440
- for (var _d = 0, totalPercentageFees_1 = totalPercentageFees; _d < totalPercentageFees_1.length; _d++) {
1441
- var item = totalPercentageFees_1[_d];
1442
- // Calcular soma das fees normais (excluindo TOTAL_PERCENTAGE e ICMS)
1443
- var totalWithoutPercentageFees = results
1444
- .filter(function (r) { return r.total > 0; })
1445
- .reduce(function (sum, r) { return sum + r.total; }, 0);
1446
- var percentage = item.value || 0;
1447
- var calculatedValue = (totalWithoutPercentageFees * percentage) / 100;
1448
- if (!isNaN(+calculatedValue) && calculatedValue > 0) {
1449
- results.push({
1450
- total: +(calculatedValue).toFixed(2),
1451
- resultFee: "".concat(convertNumberToCurrency(totalWithoutPercentageFees, 'pt-br'), " x ").concat(percentage, "% = ").concat(convertNumberToCurrency(calculatedValue, 'pt-br')),
1452
- feeValue: percentage,
1453
- feeId: item.feeId,
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)
Binary file