wmixvideo / nfe

Nota Fiscal Eletrônica em Java.
Apache License 2.0
647 stars 376 forks source link

Uso da Biblioteca com precisão de mais de 2 dígitos #834

Closed edudoda closed 1 year ago

edudoda commented 2 years ago

Olá, estou com uma dúvida com relação ao uso da biblioteca quando os campos requerem precisão de mais de dois dígitos... por exemplo, os campos abaixo do bloco IPI, requerem 4 casas decimais:

Entretanto, ao utilizar o método abaixo para setar os campos, com um valorUnitario = 2,5000 :

 public void setValorUnidadeTributavel(final BigDecimal valorUnitario) {
        if (this.valorBaseCalculo != null || this.percentualAliquota != null) {
            throw new IllegalStateException("Nao pode setar valor unidade tributavel se valorBaseCalculo ou PercentualAliquota esta setado");
        }
        this.valorUnidadeTributavel = DFBigDecimalValidador.tamanho15comAte4CasasDecimais(valorUnitario, "Valor Unitario IPI Tributado"); 
    }

Notamos que os métodos de validação, tanto DFBigDecimalValidador.tamanho15comAte4CasasDecimais, quanto DFBigDecimalValidador.tamanho7ComAte4CasasDecimais por exemplo, ignoram a precisão ''.setScale(4)'', removendo os zeros não significativos, com isso o número fica = 2,5 e ao prosseguir obtemos o erro abaixo:

Erro ao validar a nota: cvc-pattern-valid: O valor '2.5' não tem um aspecto válido em relação ao padrão '0|0\.[0-9]{4}|[1-9]{1}[0-9]{0,10}(\.[0-9]{4})?' do tipo 'TDec_1104'.

Como fazer nesse caso?

fincatto commented 1 year ago

Olá @edudoda. Talvez seria o caso de trocar o DFBigDecimalValidador.tamanho15comAte4CasasDecimais para DFBigDecimalValidador.tamanho15com4CasasDecimais (implementar um metodo que obriga a ter 4 casas decimais) na formatação? Acho que pode ser uma saida valida que não deve quebrar a lógica dos demais.