BoletoNet / BoletoNetCore

Versão do BoletoNet para .NET Core
MIT License
186 stars 117 forks source link

Sicredi - NossoNumero x NossoNumeroDV #185

Closed marcianobandeira closed 1 year ago

marcianobandeira commented 2 years ago

Boa tarde,

Eu ja vinha utilizando a emissão de boletos do banco do brasil e do sicredi há algum tempo e tudo funcionando perfeitamente.

Agora estou iniciando a utilização do Bradesco, mas notei que a propriedade NossoNumero da Classe Boleto não vem com o dígito verificador, assim como ocorre para o sicredi.

No metodo FormataNossoNumero da classe BancoSicrediCarteira1 ocorre a concatenação:

    public void FormataNossoNumero(Boleto boleto)
    {
        var DataDocumento = boleto.DataEmissao.ToString("yy");
        var nossoNumero = boleto.NossoNumero;

        boleto.NossoNumero = string.Format("{0}2{1}", DataDocumento, nossoNumero.PadLeft(5, '0'));

        boleto.NossoNumeroDV = Mod11(Sequencial(boleto)).ToString();

        ********************************* AQUI **************************************
        boleto.NossoNumero = string.Concat(boleto.NossoNumero, Mod11(Sequencial(boleto)));

        boleto.NossoNumeroFormatado = string.Format("{0}/{1}-{2}", boleto.NossoNumero.Substring(0, 2), boleto.NossoNumero.Substring(2, 6), boleto.NossoNumero.Substring(8));            
    }

Contudo, esse comportamento não segue o padrão das classes BancoItauCarteira109 e BancoBradescoCarteira09 por exemplo, onde não há essa concatenação.

@carloscds voce acha que seria interessante padronizar esse comportamento?

Não cheguei a olhar ainda a sequencia que o métodos são chamados, mas a depender, essa mudança poderia impactar no método: FormataCodigoBarraCampoLivre da classe do sicredi também, pois alí é usado a propriedade NossoNumero, só não tenho certeza se já estará preenchida com o digito ou não.

Ipojuca commented 2 years ago

Boa tarde estou com um probleminha neste método também. Somente com SICREDI Caso vc carregue um boleto que já foi gerado para uma reimpressão tentar calcular o digito novamente, pelo menos aqui na minha estrutura está acontecendo isso. Para sanar estou verificando se o "nossonumero" já tem 9 posições o que em teoria indica que já foi calculado o digito verificador e então só faço a formatação.

   public void FormataNossoNumero(Boleto boleto)
        {
            if (boleto.NossoNumero.Length != 9)
            {
                var DataDocumento = boleto.DataEmissao.ToString("yy");
                var nossoNumero = boleto.NossoNumero;

                boleto.NossoNumero = string.Format("{0}2{1}", DataDocumento, nossoNumero.PadLeft(5, '0'));

                boleto.NossoNumeroDV = Mod11(Sequencial(boleto)).ToString();
                boleto.NossoNumero = string.Concat(boleto.NossoNumero, Mod11(Sequencial(boleto)));
            }

            boleto.NossoNumeroFormatado = string.Format("{0}/{1}-{2}", boleto.NossoNumero.Substring(0, 2), boleto.NossoNumero.Substring(2, 6), boleto.NossoNumero.Substring(8));
        }
carloscds commented 2 years ago

@Ipojuca Você esta informando o nosso numero na reimpressao ?

Ipojuca commented 2 years ago

Na verdade eu carrego os dados do Banco de dados para o objeto Boleto quando o sistema de impressão tenta validar os dados o nosso numero que já estava concatenado ao digito acaba gerando um digito extra. (Não sei se me fiz entender) Talvez a solução possa ser também o que o @marcianobandeira falou sobre padronizar sem o digito aí não gera esse problema pelo qual eu passei e fica um comportamento padrão.

marcianobandeira commented 2 years ago

boa tarde senhores... é isso mesmo @Ipojuca a classe do sicredi está concatenando o digito verificador, comportamento que outras classes não tem. Em caso de alterar esse comportamento no sicredi é necessário dar uma verificada nos impactos que pode causar em outros locais, na classe de registro online por exemplo.

carloscds commented 2 years ago

Obrigado @marcianobandeira , @Ipojuca pode fazer a alteracao e mandar um PR.

Ipojuca commented 2 years ago

@carloscds vou fazer mais testes deixando o digito verificador de fora do processo para manter o padrão com outros bancos e te envio amanhã no PR.

Ipojuca commented 2 years ago

Bom dia @carloscds ei vi que vc aceitou o último PR que fiz na sexta dia 15/07 porém o pacote no Nuget se mantem na versão 235 do dia 12/07

carloscds commented 2 years ago

@Ipojuca Sim, nao geramos pacote a cada PR no Nuget, somente no MyGet: https://www.myget.org/gallery/boletonetcorebuild

marcianobandeira commented 2 years ago

bom dia senhores, com as mudanças identifiquei um problema na leitura de retorno, está identificando o nosso numero errado... vou enviar um PR para correção