@senior-gestao-empresarial/erpx-components 4.20.4 → 4.21.0

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.
@@ -37611,6 +37611,90 @@
37611
37611
  return ErpRateioEditorConverter;
37612
37612
  }());
37613
37613
 
37614
+ var CASAS_DECIMAIS_VALOR = 2;
37615
+ /**
37616
+ * Arredonda um valor para o número de casas decimais informado (default: 2).
37617
+ */
37618
+ function arredondar(valor, casas) {
37619
+ if (casas === void 0) { casas = CASAS_DECIMAIS_VALOR; }
37620
+ return +(valor || 0).toFixed(casas);
37621
+ }
37622
+ /**
37623
+ * Proporcionaliza um valor de acordo com o percentual informado, arredondando para
37624
+ * 2 casas decimais (percentual nulo é tratado como zero).
37625
+ */
37626
+ function proporcionaliza(valorTotal, percentual) {
37627
+ var percentualSeguro = percentual || 0;
37628
+ return arredondar(valorTotal * (percentualSeguro / 100));
37629
+ }
37630
+ /**
37631
+ * Recalcula o valor de cada centro de custo com base no valor da conta financeira.
37632
+ */
37633
+ function atualizaValorCentrosCusto(centrosCusto, valorConta) {
37634
+ if (!centrosCusto) {
37635
+ return;
37636
+ }
37637
+ centrosCusto.forEach(function (centroCusto) {
37638
+ centroCusto.valor = proporcionaliza(valorConta, centroCusto.percentual);
37639
+ });
37640
+ }
37641
+ /**
37642
+ * Distribui o valor total entre os centros de custo de acordo com os percentuais,
37643
+ * corrigindo diferenças de arredondamento no último centro.
37644
+ */
37645
+ function distribuirCentrosCusto(valorTotal, centrosCusto) {
37646
+ if (!centrosCusto || centrosCusto.length === 0) {
37647
+ return centrosCusto;
37648
+ }
37649
+ var valorTotalCentros = 0;
37650
+ var ultimo;
37651
+ var distribuicao = centrosCusto.map(function (centroCusto) {
37652
+ var distribuido = __assign(__assign({}, centroCusto), { valor: proporcionaliza(valorTotal, centroCusto.percentual) });
37653
+ valorTotalCentros += distribuido.valor;
37654
+ ultimo = distribuido;
37655
+ return distribuido;
37656
+ });
37657
+ var diferenca = arredondar(valorTotal - valorTotalCentros);
37658
+ if (ultimo && diferenca !== 0) {
37659
+ ultimo.valor = arredondar(ultimo.valor + diferenca);
37660
+ }
37661
+ return distribuicao;
37662
+ }
37663
+ /**
37664
+ * Constrói uma conta financeira já com o valor proporcionalizado e com os centros de
37665
+ * custo distribuídos.
37666
+ */
37667
+ function distribuirConta(valorTotal, conta) {
37668
+ var distribuida = __assign(__assign({}, conta), { valor: proporcionaliza(valorTotal, conta.percentual) });
37669
+ distribuida.centrosCusto = distribuirCentrosCusto(distribuida.valor, conta.centrosCusto);
37670
+ return distribuida;
37671
+ }
37672
+ /**
37673
+ * Distribui o valor total entre as contas financeiras de acordo com os percentuais,
37674
+ * corrigindo diferenças de arredondamento na última conta e cascateando o recálculo
37675
+ * para os centros de custo.
37676
+ */
37677
+ function atualizaValoresRateioManual(rateiosContasFinanceiras, valorTotal) {
37678
+ if (!rateiosContasFinanceiras || rateiosContasFinanceiras.length === 0) {
37679
+ return rateiosContasFinanceiras;
37680
+ }
37681
+ var valorTotalContasFinanceiras = 0;
37682
+ var ultima;
37683
+ var distribuicaoRateioFinal = rateiosContasFinanceiras.map(function (rateioContaFinanceira) {
37684
+ var distribuicao = distribuirConta(valorTotal, rateioContaFinanceira);
37685
+ valorTotalContasFinanceiras += distribuicao.valor;
37686
+ ultima = distribuicao;
37687
+ return distribuicao;
37688
+ });
37689
+ var diferencaValores = arredondar(valorTotal - valorTotalContasFinanceiras);
37690
+ // Corrige diferença de percentual e arredondamentos para a última conta financeira
37691
+ if (ultima && diferencaValores !== 0) {
37692
+ ultima.valor = arredondar(ultima.valor + diferencaValores);
37693
+ atualizaValorCentrosCusto(ultima.centrosCusto, ultima.valor);
37694
+ }
37695
+ return distribuicaoRateioFinal;
37696
+ }
37697
+
37614
37698
  var fallback = {
37615
37699
  "erpx.tributos.badge_tipo_calculo_imposto_info_sign_text_calculado": "Valor calculado pelo sistema conforme regras fiscais",
37616
37700
  "erpx.tributos.badge_tipo_calculo_imposto_info_sign_text_herdado": "Valor gerado por um processo de origem",
@@ -37679,6 +37763,7 @@
37679
37763
  exports.ErpTributosComponent = ErpTributosComponent;
37680
37764
  exports.ErpTributosModule = ErpTributosModule;
37681
37765
  exports.ExportUtils = ExportUtils;
37766
+ exports.atualizaValoresRateioManual = atualizaValoresRateioManual;
37682
37767
  exports.fallback = fallback;
37683
37768
  exports.isEmpty = isEmpty;
37684
37769
  exports.isNotEmpty = isNotEmpty;