BoletoNet / boleto2net

Nova versão do Boleto.Net
Apache License 2.0
162 stars 139 forks source link

Validação de número de conta no banco safra #327

Closed henrique25teles closed 2 years ago

henrique25teles commented 3 years ago

Adicionada validação de quantidade de dígitos de conta do banco safra no ValidaBoleto.

Motivo da adição: Ao chamar o método ValidarDados

public void ValidarDados()
        {
            // Banco Obrigatório
            if (Banco == null)
                throw new Exception("Boleto não possui Banco.");

            // Cedente Obrigatório
            if (Banco.Cedente == null)
                throw new Exception("Boleto não possui cedente.");

            // Conta Bancária Obrigatória
            if (Banco.Cedente.ContaBancaria == null)
                throw new Exception("Boleto não possui conta bancária.");

            // Sacado Obrigatório
            if (Sacado == null)
                throw new Exception("Boleto não possui sacado.");

            // Verifica se data do processamento é valida
            if (DataProcessamento == DateTime.MinValue)
                DataProcessamento = DateTime.Now;

            // Verifica se data de emissão é valida
            if (DataEmissao == DateTime.MinValue)
                DataEmissao = DateTime.Now;

            // Aceite
            if ((Aceite != "A") & (Aceite != "N"))
                throw new Exception("Aceite do Boleto deve ser definido com A ou N");

            Banco.ValidaBoleto(this);
            Banco.FormataNossoNumero(this);
            **Boleto2Net.Banco.FormataCodigoBarra(this);**
            Boleto2Net.Banco.FormataLinhaDigitavel(this);
        }

Dentro do método Boleto2Net.Banco.FormataCodigoBarra é montado o CampoLivre Se o CampoLivre tiver menos de 25 caracteres, retorna um erro genérico. "Campo Livre ({codigoBarra.CampoLivre}) deve conter 25 dígitos." Com esse erro não é possível eu saber onde estou passando informações erradas sem subir o projeto boletoNet na minha solução e debuggar.

Por essa razão, adicionei uma validação de conta no ValidaBoleto do safra carteira 1 para que antes de gerar o campo livre, seja validado se a quantidade de caracteres da conta seja válido.

rafd75 commented 3 years ago

@henrique25teles , boa tarde...

Entendi o que você sugeriu... Você comentou que implementou na "Carteira 1", mas na verdade, você fez no "Banco Safra", o que influencia também a "carteira 2" - salvo engano aqui, acho que é isso.

Não seria melhor, validar esses dados dentro do próprio método FormataCampoLivre?

Por exemplo, o FormataNossoNumero possuí algumas regras - Se não me engano, no BB, lembro que existe carteiras com o nosso número sendo diferente...

No caso do campo livre do Safra, a regra é igual para carteira 1 e 2 (concluí pois comparei os 2 métodos e estão iguais) - mas poderia ser diferente...

Então acho que você escreveu o que seria mais correto (implementar a regra na carteira 1) mas acabou fazendo no banco.

E já que estamos pensando em implementar isso, já não seria o caso de validar todos os campos que formam o Campo Livre? Ou seja, no caso do SAFRA:

boleto.Banco.Digito boleto.Banco.Cedente.ContaBancaria.Agencia boleto.Banco.Cedente.ContaBancaria.DigitoAgencia boleto.Banco.Cedente.ContaBancaria.Conta boleto.Banco.Cedente.ContaBancaria.DigitoConta boleto.NossoNumero boleto.NossoNumeroDV }

henrique25teles commented 2 years ago

@rafd75 Desculpe a demora para responder. Eu não sou muito ativo na comunidade e só percebi agora que meu PR não tinha sido aceito. Fiz um novo commit, removendo a validação do ValidaBoleto() e transferindo para o método FormataCodigoBarraCampoLivre(). Dessa forma a validação fica apenas na carteira e não para o banco inteiro. Fiz uns testes aqui para ver se não ia dar problema e passou tranquilo.

image

Usei esse documento para validar os campos pelo tamanho correto.

Apenas salientando que o Nº da conta e Nº da agência nessa documentação estão com o dígito. Eu validei o dígito da conta e da agência separadamente.

Fica tudo certo assim ?

Validei apenas no banco safra, depois quando tiver com tempo, eu faço parecido nos outros bancos que tenho acesso por aqui.

rafd75 commented 2 years ago

Oi @henrique25teles ...

Beleza! ... Legal as exceptions também...

abs!