b2m-utils 0.0.310 → 0.0.311

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.
@@ -22,5 +22,6 @@ export declare enum FeeEnum {
22
22
  APPOINTMENT_MIN_VALUE = 167,
23
23
  TRT_PERCENTAGE_TOTAL = 169,
24
24
  TDA_PERCENTAGE_TOTAL = 170,
25
- TDE_PERCENTAGE_TOTAL = 171
25
+ TDE_PERCENTAGE_TOTAL = 171,
26
+ APPOINTMENT_BY_INVOICE_QUANTITY = 172
26
27
  }
@@ -1,3 +1,4 @@
1
1
  export declare enum RatecardFeeConfigKeyEnum {
2
- MIN_WEIGHT_FOR_FRACTION = "min_weight_for_fraction"
2
+ MIN_WEIGHT_FOR_FRACTION = "min_weight_for_fraction",
3
+ EXCLUDE_FROM_TOTAL_PERCENTAGE = "exclude_from_total_percentage"
3
4
  }
@@ -0,0 +1,7 @@
1
+ import { RatecardLaneFee } from "../../types";
2
+ /**
3
+ * Constrói um Map de exclusões de fees baseado nas configurações do tarifário
4
+ * @param fees - Array de fees do tarifário
5
+ * @returns Map onde a chave é o feeId e o valor é um Set de feeIds excluídos da base de cálculo
6
+ */
7
+ export declare const buildFeeExclusionsMap: (fees: RatecardLaneFee[]) => Map<number, Set<number>>;
@@ -0,0 +1,33 @@
1
+ import { Cte, RatecardLaneFee } from "../../types";
2
+ export interface FeeCalculationResult {
3
+ totalFee: number;
4
+ totalToCalc: number;
5
+ resultFee: string;
6
+ }
7
+ export interface CalculateFeesCacheOptions {
8
+ /** Fees a serem calculadas */
9
+ fees: RatecardLaneFee[];
10
+ /** CTE para cálculo */
11
+ cte: Cte;
12
+ /** Todas as fees disponíveis para cálculo */
13
+ allFeesForCalc?: RatecardLaneFee[];
14
+ /** Índices de fees excluídas (não serão calculadas) */
15
+ excludedIndexes?: Set<number>;
16
+ /** Valores pré-calculados para usar ao invés de calcular novamente */
17
+ preCalculatedValues?: Map<number, number>;
18
+ /** IDs de fees que foram editadas manualmente e não devem ser recalculadas */
19
+ manuallyEditedFeeIds?: Set<number>;
20
+ }
21
+ /**
22
+ * Calcula todas as fees em 3 passadas (normais, TOTAL_PERCENTAGE, ICMS) e retorna um cache detalhado
23
+ * com totalFee, totalToCalc e resultFee para cada fee.
24
+ *
25
+ * Esta função centraliza a lógica de cálculo que estava duplicada em vários lugares do ModalCte.
26
+ */
27
+ export declare const calculateFeesCacheWithDetails: (options: CalculateFeesCacheOptions) => {
28
+ [index: number]: FeeCalculationResult;
29
+ };
30
+ /**
31
+ * Calcula o total de fees usando calculateFeesCacheWithDetails
32
+ */
33
+ export declare const calculateFeesTotalFromCache: (options: CalculateFeesCacheOptions) => number;
@@ -5,5 +5,6 @@ import { RatecardLaneFeeWithFeeResult } from "../filterSiblingFees";
5
5
  * para resolver a interdependência entre elas (ex: TRT e GAC)
6
6
  * @param currentValues - Opcional: Map de feeId -> valor atual (para usar valores já calculados/editados)
7
7
  * @param manuallyEditedFeeIds - Opcional: Set de feeIds que foram editadas manualmente e não devem ser recalculadas
8
+ * @param feeExclusions - Opcional: Map de feeId -> Set de feeIds excluídos da base de cálculo
8
9
  */
9
- export declare const calculateTotalPercentageFees: (allFees: RatecardLaneFee[], cte: Cte, allFeesForCalc?: RatecardLaneFee[], currentValues?: Map<number, number>, manuallyEditedFeeIds?: Set<number>) => Map<number, RatecardLaneFeeWithFeeResult>;
10
+ export declare const calculateTotalPercentageFees: (allFees: RatecardLaneFee[], cte: Cte, allFeesForCalc?: RatecardLaneFee[], currentValues?: Map<number, number>, manuallyEditedFeeIds?: Set<number>, feeExclusions?: Map<number, Set<number>>) => Map<number, RatecardLaneFeeWithFeeResult>;
@@ -1,5 +1,7 @@
1
1
  export * from './applyRedeliveryMultiplier';
2
+ export * from './buildFeeExclusionsMap';
2
3
  export * from './calculateFee';
4
+ export * from './calculateFeesCacheWithDetails';
3
5
  export * from './calculateFeesTotal';
4
6
  export * from './calculateIcms';
5
7
  export * from './calculateTotalPercentageFees';
@@ -187,6 +187,7 @@ var FeeEnum;
187
187
  FeeEnum[FeeEnum["TRT_PERCENTAGE_TOTAL"] = 169] = "TRT_PERCENTAGE_TOTAL";
188
188
  FeeEnum[FeeEnum["TDA_PERCENTAGE_TOTAL"] = 170] = "TDA_PERCENTAGE_TOTAL";
189
189
  FeeEnum[FeeEnum["TDE_PERCENTAGE_TOTAL"] = 171] = "TDE_PERCENTAGE_TOTAL";
190
+ FeeEnum[FeeEnum["APPOINTMENT_BY_INVOICE_QUANTITY"] = 172] = "APPOINTMENT_BY_INVOICE_QUANTITY";
190
191
  })(FeeEnum || (FeeEnum = {}));
191
192
 
192
193
  var FreightRegionEnum;
@@ -251,6 +252,8 @@ var RatecardFeeConfigKeyEnum;
251
252
  (function (RatecardFeeConfigKeyEnum) {
252
253
  // Configurações de fração de peso
253
254
  RatecardFeeConfigKeyEnum["MIN_WEIGHT_FOR_FRACTION"] = "min_weight_for_fraction";
255
+ // Configurações de exclusão de fees
256
+ RatecardFeeConfigKeyEnum["EXCLUDE_FROM_TOTAL_PERCENTAGE"] = "exclude_from_total_percentage";
254
257
  })(RatecardFeeConfigKeyEnum || (RatecardFeeConfigKeyEnum = {}));
255
258
 
256
259
  var RatecardFeeConfigTypeEnum;
@@ -413,6 +416,33 @@ var applyRedeliveryMultiplier = function (total, cte) {
413
416
  };
414
417
  };
415
418
 
419
+ /**
420
+ * Constrói um Map de exclusões de fees baseado nas configurações do tarifário
421
+ * @param fees - Array de fees do tarifário
422
+ * @returns Map onde a chave é o feeId e o valor é um Set de feeIds excluídos da base de cálculo
423
+ */
424
+ var buildFeeExclusionsMap = function (fees) {
425
+ var exclusionsMap = new Map();
426
+ fees.forEach(function (fee) {
427
+ var _a;
428
+ if (!((_a = fee.fee) === null || _a === void 0 ? void 0 : _a.id) || !fee.fee.RatecardFeeConfig)
429
+ return;
430
+ // Procurar pela configuração de exclusão
431
+ var excludeConfig = fee.fee.RatecardFeeConfig.find(function (config) { var _a; return ((_a = config.feeConfig) === null || _a === void 0 ? void 0 : _a.configKey) === RatecardFeeConfigKeyEnum.EXCLUDE_FROM_TOTAL_PERCENTAGE; });
432
+ if (excludeConfig === null || excludeConfig === void 0 ? void 0 : excludeConfig.configValue) {
433
+ // Parse dos IDs separados por vírgula
434
+ var excludedIds = excludeConfig.configValue
435
+ .split(',')
436
+ .map(function (id) { return parseInt(id.trim(), 10); })
437
+ .filter(function (id) { return !isNaN(id); });
438
+ if (excludedIds.length > 0) {
439
+ exclusionsMap.set(fee.fee.id, new Set(excludedIds));
440
+ }
441
+ }
442
+ });
443
+ return exclusionsMap;
444
+ };
445
+
416
446
  /******************************************************************************
417
447
  Copyright (c) Microsoft Corporation.
418
448
 
@@ -989,8 +1019,9 @@ var calculateFee = function (ratecardLaneFee, cte, allFees, debug, allFeesForCal
989
1019
  * para resolver a interdependência entre elas (ex: TRT e GAC)
990
1020
  * @param currentValues - Opcional: Map de feeId -> valor atual (para usar valores já calculados/editados)
991
1021
  * @param manuallyEditedFeeIds - Opcional: Set de feeIds que foram editadas manualmente e não devem ser recalculadas
1022
+ * @param feeExclusions - Opcional: Map de feeId -> Set de feeIds excluídos da base de cálculo
992
1023
  */
993
- var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc, currentValues, manuallyEditedFeeIds) {
1024
+ var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc, currentValues, manuallyEditedFeeIds, feeExclusions) {
994
1025
  var results = new Map();
995
1026
  // Separar fees em dois grupos
996
1027
  // IMPORTANTE: ICMS não deve ser calculado aqui, ele tem tratamento especial no calculateFee
@@ -1051,11 +1082,12 @@ var calculateTotalPercentageFees = function (allFees, cte, allFeesForCalc, curre
1051
1082
  results.set(pf.fee.id, __assign(__assign({}, pf), { totalFee: manualValue, totalToCalc: manualValue, resultFee: "".concat(convertNumberToCurrency(manualValue, 'pt-br'), " (editado manualmente)") }));
1052
1083
  return;
1053
1084
  }
1054
- // Calcular base: fees não-percentuais + outras fees percentuais (exceto ela mesma)
1085
+ // Calcular base: fees não-percentuais + outras fees percentuais (exceto ela mesma e excluídas)
1086
+ var excludedFeeIds = (feeExclusions === null || feeExclusions === void 0 ? void 0 : feeExclusions.get(pf.fee.id)) || new Set();
1055
1087
  var basePercentage = Array.from(previousValues.entries())
1056
1088
  .filter(function (_a) {
1057
1089
  var feeId = _a[0];
1058
- return feeId !== pf.fee.id;
1090
+ return feeId !== pf.fee.id && !excludedFeeIds.has(feeId);
1059
1091
  })
1060
1092
  .reduce(function (sum, _a) {
1061
1093
  var value = _a[1];
@@ -1132,6 +1164,98 @@ var calculateIcms = function (totalFromAllFees, icmsRate) {
1132
1164
  };
1133
1165
  };
1134
1166
 
1167
+ /**
1168
+ * Calcula todas as fees em 3 passadas (normais, TOTAL_PERCENTAGE, ICMS) e retorna um cache detalhado
1169
+ * com totalFee, totalToCalc e resultFee para cada fee.
1170
+ *
1171
+ * Esta função centraliza a lógica de cálculo que estava duplicada em vários lugares do ModalCte.
1172
+ */
1173
+ var calculateFeesCacheWithDetails = function (options) {
1174
+ var fees = options.fees, cte = options.cte, allFeesForCalc = options.allFeesForCalc, _a = options.excludedIndexes, excludedIndexes = _a === void 0 ? new Set() : _a, preCalculatedValues = options.preCalculatedValues, manuallyEditedFeeIds = options.manuallyEditedFeeIds;
1175
+ var cache = {};
1176
+ // Filtrar fees não excluídas
1177
+ var nonExcludedFees = fees.filter(function (_, idx) { return !excludedIndexes.has(idx); });
1178
+ // Construir mapa de exclusões a partir das configurações
1179
+ var feeExclusions = buildFeeExclusionsMap(fees);
1180
+ // PASSADA 1: Calcular fees normais (não TOTAL_PERCENTAGE, não ICMS)
1181
+ fees.forEach(function (fee, idx) {
1182
+ var _a, _b;
1183
+ if (excludedIndexes.has(idx))
1184
+ return;
1185
+ if (((_a = fee.fee) === null || _a === void 0 ? void 0 : _a.feeCalculationTypeId) !== FeeCalculationTypeEnum.TOTAL_PERCENTAGE &&
1186
+ ((_b = fee.fee) === null || _b === void 0 ? void 0 : _b.id) !== FeeEnum.ICMS) {
1187
+ var calculated = calculateFee(fee, cte, nonExcludedFees, true, allFeesForCalc);
1188
+ if (calculated) {
1189
+ cache[idx] = {
1190
+ totalFee: Number((calculated.totalFee || 0).toFixed(2)),
1191
+ totalToCalc: Number((calculated.totalToCalc || 0).toFixed(2)),
1192
+ resultFee: calculated.resultFee || '',
1193
+ };
1194
+ }
1195
+ }
1196
+ });
1197
+ // PASSADA 2: Calcular TOTAL_PERCENTAGE de forma iterativa com exclusões
1198
+ var percentageFeesCache = calculateTotalPercentageFees(nonExcludedFees, cte, allFeesForCalc, preCalculatedValues, manuallyEditedFeeIds, feeExclusions);
1199
+ fees.forEach(function (fee, idx) {
1200
+ var _a, _b;
1201
+ if (excludedIndexes.has(idx))
1202
+ return;
1203
+ if (((_a = fee.fee) === null || _a === void 0 ? void 0 : _a.feeCalculationTypeId) === FeeCalculationTypeEnum.TOTAL_PERCENTAGE && ((_b = fee.fee) === null || _b === void 0 ? void 0 : _b.id)) {
1204
+ var cachedResult = percentageFeesCache.get(fee.fee.id);
1205
+ if (cachedResult) {
1206
+ cache[idx] = {
1207
+ totalFee: Number((cachedResult.totalFee || 0).toFixed(2)),
1208
+ totalToCalc: Number((cachedResult.totalToCalc || 0).toFixed(2)),
1209
+ resultFee: cachedResult.resultFee || '',
1210
+ };
1211
+ }
1212
+ }
1213
+ });
1214
+ // PASSADA 3: Calcular ICMS
1215
+ fees.forEach(function (fee, idx) {
1216
+ var _a;
1217
+ if (excludedIndexes.has(idx))
1218
+ return;
1219
+ if (((_a = fee.fee) === null || _a === void 0 ? void 0 : _a.id) === FeeEnum.ICMS) {
1220
+ var icmsRate = ((cte === null || cte === void 0 ? void 0 : cte.icmsIncidence) !== undefined && (cte === null || cte === void 0 ? void 0 : cte.icmsIncidence) !== null && !isNaN(+cte.icmsIncidence))
1221
+ ? +(cte.icmsIncidence) / 100
1222
+ : fee.value || 0;
1223
+ var valuesWithoutIcms = Object.entries(cache)
1224
+ .filter(function (_a) {
1225
+ var _b;
1226
+ var key = _a[0];
1227
+ var feeIdx = Number(key);
1228
+ var f = fees[feeIdx];
1229
+ return ((_b = f.fee) === null || _b === void 0 ? void 0 : _b.id) !== FeeEnum.ICMS;
1230
+ })
1231
+ .map(function (_a) {
1232
+ var calcFee = _a[1];
1233
+ return (calcFee === null || calcFee === void 0 ? void 0 : calcFee.totalToCalc) || 0;
1234
+ })
1235
+ .filter(function (val) { return val > 0; });
1236
+ var icmsCalculation = calculateIcms(valuesWithoutIcms, icmsRate);
1237
+ if (icmsCalculation.isValid) {
1238
+ var resultFee = icmsCalculation.totalValueFromAllFees && icmsCalculation.valueToDivide
1239
+ ? "(".concat(icmsCalculation.totalValueFromAllFees.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' }), " / ").concat(icmsCalculation.valueToDivide, ") x ").concat(icmsRate, " = ").concat(icmsCalculation.total.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' }))
1240
+ : '';
1241
+ cache[idx] = {
1242
+ totalFee: Number(icmsCalculation.total.toFixed(2)),
1243
+ totalToCalc: Number(icmsCalculation.total.toFixed(2)),
1244
+ resultFee: resultFee,
1245
+ };
1246
+ }
1247
+ }
1248
+ });
1249
+ return cache;
1250
+ };
1251
+ /**
1252
+ * Calcula o total de fees usando calculateFeesCacheWithDetails
1253
+ */
1254
+ var calculateFeesTotalFromCache = function (options) {
1255
+ var cache = calculateFeesCacheWithDetails(options);
1256
+ return Object.values(cache).reduce(function (sum, calcFee) { return sum + ((calcFee === null || calcFee === void 0 ? void 0 : calcFee.totalToCalc) || 0); }, 0);
1257
+ };
1258
+
1135
1259
  /**
1136
1260
  * Calcula o total de fees de forma consistente, usando cálculo iterativo para TOTAL_PERCENTAGE
1137
1261
  * @param fees - Array de fees a calcular
@@ -1143,6 +1267,8 @@ var calculateFeesTotal = function (fees, cte, allFeesForCalc) {
1143
1267
  if (!fees || fees.length === 0)
1144
1268
  return 0;
1145
1269
  var cache = {};
1270
+ // Construir mapa de exclusões a partir das configurações
1271
+ var feeExclusions = buildFeeExclusionsMap(fees);
1146
1272
  // PASSADA 1: Calcular fees normais (não TOTAL_PERCENTAGE, não ICMS)
1147
1273
  fees.forEach(function (fee, idx) {
1148
1274
  var _a, _b;
@@ -1151,8 +1277,8 @@ var calculateFeesTotal = function (fees, cte, allFeesForCalc) {
1151
1277
  cache[idx] = calculateFee(fee, cte, fees, true, allFeesForCalc);
1152
1278
  }
1153
1279
  });
1154
- // PASSADA 2: Calcular TOTAL_PERCENTAGE de forma iterativa
1155
- var percentageFeesCache = calculateTotalPercentageFees(fees, cte, allFeesForCalc);
1280
+ // PASSADA 2: Calcular TOTAL_PERCENTAGE de forma iterativa com exclusões
1281
+ var percentageFeesCache = calculateTotalPercentageFees(fees, cte, allFeesForCalc, undefined, undefined, feeExclusions);
1156
1282
  fees.forEach(function (fee, idx) {
1157
1283
  var _a, _b;
1158
1284
  if (((_a = fee.fee) === null || _a === void 0 ? void 0 : _a.feeCalculationTypeId) === FeeCalculationTypeEnum.TOTAL_PERCENTAGE &&
@@ -1269,6 +1395,7 @@ var getFilteredFeesToAudit = function (_a) {
1269
1395
  FeeEnum.COLLECT_PERCENTAGE_TOTAL,
1270
1396
  FeeEnum.COLLECT_REVERSE_PERCENTAGE_TOTAL,
1271
1397
  FeeEnum.APPOINTMENT_MIN_VALUE,
1398
+ FeeEnum.APPOINTMENT_BY_INVOICE_QUANTITY,
1272
1399
  ];
1273
1400
  if (collectAndAppointmentFees.includes((_a = i.fee) === null || _a === void 0 ? void 0 : _a.id)) {
1274
1401
  switch ((_b = i.fee) === null || _b === void 0 ? void 0 : _b.id) {
@@ -8277,5 +8404,5 @@ var isTariffMatch = function (chargedName, auditedTariffName) {
8277
8404
  });
8278
8405
  };
8279
8406
 
8280
- export { ApplicationColumnNameEnum, ApplicationEnum, CarrierDocumentConfigTypeKeyEnum, CountryEnum, CteStatusEnum, CteVehicleTypeEnum, CurrencyEnum, DocumentTypeEnum, DomainConfigurationEnum, DomainTypeEnum, EXPORT_CTE_COLUMN_LABELS, EXPORT_CTE_TYPE_LABELS, ExportCteColumn, ExportCteTypeEnum, FeeCalculationTypeEnum, FeeCategoryEnum, FeeEnum, FreightRegionEnum, ImapHostsEnum, InputTypeEnum, ModalEnum, NotificationTypeEnum, PermissionEnum, RatecardConditionalFeeTypeEnum, RatecardConfigKeyEnum, RatecardFeeConfigKeyEnum, RatecardFeeConfigTypeEnum, RatecardModalEnum, SlaRegionEnum, SpotStatusEnum, TARIFF_MAPPING, TrackProcessProviderTypeEnum, addTariffMapping, applyRedeliveryMultiplier, buildDynamicMapping, calculateFee, calculateFeesTotal, calculateIcms, calculateTotalPercentageFees, convertNumberToCurrency, filterSiblingFees, findAuditedMatch, formatDateString, getAllFeesForCalculation, getAuditTotalFromCte, getConfigurationFromDomain, getContractFromFreight, getContractRouteFromFreight, getCookies, getCteDateRange, getCteLane, getCteLaneFeesTotal, getCtesFeesResult, getDataFromToken, getFilteredFeesToAudit, getFormattedFreightPlaceName, getLaneFeesToCalc, getLaneFromRatecard, getNormalizedCityName, getRatecardFromCte, getRouteDeliveryTimeFromFreight, getRouteOnTimeFromFreight, getTariffVariations, isTariffMatch, matchAllTariffs, normalizeString, parseAliases, renderChargedValue, setFormattedDatesInObjects, verifyConditionalFee, verifyDefaultFees };
8407
+ export { ApplicationColumnNameEnum, ApplicationEnum, CarrierDocumentConfigTypeKeyEnum, CountryEnum, CteStatusEnum, CteVehicleTypeEnum, CurrencyEnum, DocumentTypeEnum, DomainConfigurationEnum, DomainTypeEnum, EXPORT_CTE_COLUMN_LABELS, EXPORT_CTE_TYPE_LABELS, ExportCteColumn, ExportCteTypeEnum, FeeCalculationTypeEnum, FeeCategoryEnum, FeeEnum, FreightRegionEnum, ImapHostsEnum, InputTypeEnum, ModalEnum, NotificationTypeEnum, PermissionEnum, RatecardConditionalFeeTypeEnum, RatecardConfigKeyEnum, RatecardFeeConfigKeyEnum, RatecardFeeConfigTypeEnum, RatecardModalEnum, SlaRegionEnum, SpotStatusEnum, TARIFF_MAPPING, TrackProcessProviderTypeEnum, addTariffMapping, applyRedeliveryMultiplier, buildDynamicMapping, buildFeeExclusionsMap, calculateFee, calculateFeesCacheWithDetails, calculateFeesTotal, calculateFeesTotalFromCache, calculateIcms, calculateTotalPercentageFees, convertNumberToCurrency, filterSiblingFees, findAuditedMatch, formatDateString, getAllFeesForCalculation, getAuditTotalFromCte, getConfigurationFromDomain, getContractFromFreight, getContractRouteFromFreight, getCookies, getCteDateRange, getCteLane, getCteLaneFeesTotal, getCtesFeesResult, getDataFromToken, getFilteredFeesToAudit, getFormattedFreightPlaceName, getLaneFeesToCalc, getLaneFromRatecard, getNormalizedCityName, getRatecardFromCte, getRouteDeliveryTimeFromFreight, getRouteOnTimeFromFreight, getTariffVariations, isTariffMatch, matchAllTariffs, normalizeString, parseAliases, renderChargedValue, setFormattedDatesInObjects, verifyConditionalFee, verifyDefaultFees };
8281
8408
  //# sourceMappingURL=index.esm.js.map
Binary file