caelum / caelum-stella

O Caelum Stella visa suprir as necessidades do dia a dia do desenvolvedor brasileiro
http://stella.caelum.com.br
663 stars 340 forks source link

Erro agência no boleto Santander #252

Closed brubraz closed 1 year ago

brubraz commented 5 years ago

Prezados,

No campo Agência / Código do Beneficiário do boleto Santander, a agência está vindo com 5 dígitos (sem o dígito verificador). image

Santander.java

    public String getAgenciaECodigoBeneficiario(Beneficiario beneficiario) {
        StringBuilder builder = new StringBuilder();
        builder.append(StellaStringUtils.leftPadWithZeros(beneficiario.getAgencia(), 5));
        builder.append("/").append(this.getNumeroConvenioFormatado(beneficiario));
        return builder.toString();
    }

O método acima está criando uma agência de 5 dígitos e ignorando o dígito verificador. Temos duas opções aceitas pelo banco para corrigir esse comportamento: remover um dígito OU adicionar o dígito verificador.

1) Removendo o dígito extra

    public String getAgenciaECodigoBeneficiario(Beneficiario beneficiario) {
        StringBuilder builder = new StringBuilder();
        builder.append(StellaStringUtils.leftPadWithZeros(beneficiario.getAgencia(), 4));
        builder.append("/").append(this.getNumeroConvenioFormatado(beneficiario));
        return builder.toString();
    }

2) Adicionando o dígito verificador

    public String getAgenciaECodigoBeneficiario(Beneficiario beneficiario) {
        StringBuilder builder = new StringBuilder();
        builder.append(StellaStringUtils.leftPadWithZeros(beneficiario.getAgencia(), 4));
        builder.append("-").append(beneficiario.getDigitoAgencia());
        builder.append("/").append(this.getNumeroConvenioFormatado(beneficiario));
        return builder.toString();
    }
angeliski commented 5 years ago

Olá @brunobrazio Obrigado pelo report. Você pode abrir um PR com essa correção?

brubraz commented 5 years ago

@angeliski já criei o pull request para correção. Só não consegui referenciar nessa issue.

brubraz commented 5 years ago

Também corrigi o teste do Santander, que estava passando o número do convenio em vez do código do beneficiário.

    @Test
    public void naoAparecerNuloEmAgenciaECodigoBeneficiarioFormatado() throws Exception {
        this.banco = new Santander();

        beneficiario.comAgencia("12345").comDigitoAgencia(null).comNumeroConvenio("1234567");

        assertThat(banco.getAgenciaECodigoBeneficiario(beneficiario), is("12345/1234567"));
    }
lrweck commented 4 years ago

Novidades pessoal?