Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Boleto Caixa - Geração para carteira 1 parece estar incompleta #195

Open
gabrielhof opened this issue Oct 19, 2016 · 6 comments
Open

Boleto Caixa - Geração para carteira 1 parece estar incompleta #195

gabrielhof opened this issue Oct 19, 2016 · 6 comments

Comments

@gabrielhof
Copy link

gabrielhof commented Oct 19, 2016

Estou tentando gerar um boleto da caixa com a carteira 1, mas está resultando no seguinte erro:

br.com.caelum.stella.boleto.exception.CriacaoBoletoException: Erro na geração do código de barras. Número de digitos diferente de 44. Verifique se todos os dados foram preenchidos corretamente.
        at br.com.caelum.stella.boleto.bancos.CodigoDeBarrasBuilder.validaTamahoDoCodigoDeBarrasCompletoGerado(CodigoDeBarrasBuilder.java:54)
        at br.com.caelum.stella.boleto.bancos.CodigoDeBarrasBuilder.comCampoLivre(CodigoDeBarrasBuilder.java:45)
        at br.com.caelum.stella.boleto.bancos.Caixa.geraCodigoDeBarrasPara(Caixa.java:52)
        at br.com.caelum.stella.boleto.Boleto.getCodigoDeBarras(Boleto.java:499)
        at br.com.caelum.stella.boleto.Boleto.getLinhaDigitavel(Boleto.java:507)

Olhando o código, me parece que o suporte à carteira 1 não está completo.

Na verdade, o que parece é que a regra implementada para a carteira 24 vale para todas as carteiras, de acordo com o documento da Caixa.

Alguém mais está tendo esse problema ou pode confirmar isso?

@kevinnascimento
Copy link

Estou tento o mesmo problema. Você conseguiu resolver @gabrielhof ?

@gabrielhof
Copy link
Author

Eu implementei uma solução @kevinnascimento, mas ainda não tive retorno da homologação do banco.

Basicamente, o que eu fiz foi estender a classe Caixa e sobrescrever o método geraCodigoDeBarrasPara(Boleto boleto), implementando a regra que acredito ser a correta:

package br.com.caelum.stella.boleto.bancos;

import static br.com.caelum.stella.boleto.utils.StellaStringUtils.leftPadWithZeros;

import br.com.caelum.stella.boleto.Beneficiario;
import br.com.caelum.stella.boleto.Boleto;

public class CaixaCarteira1E2Impl extends br.com.caelum.stella.boleto.bancos.Caixa {

    private static final long serialVersionUID = 3148542686671820352L;

    @Override
    public String geraCodigoDeBarrasPara(Boleto boleto) {
        Beneficiario beneficiario = boleto.getBeneficiario();
        String carteira = beneficiario.getCarteira();

        if (!carteira.matches("^[1,2].{0,1}")) {
            throw new IllegalArgumentException("A carteira digitada não é suportada: " + carteira);
        }

        StringBuilder campoLivre = new StringBuilder();

        String nossoNumeroCompleto = getNossoNumeroFormatado(beneficiario);
        campoLivre.append(leftPadWithZeros(beneficiario.getCodigoBeneficiario(), 6));
        campoLivre.append(beneficiario.getDigitoCodigoBeneficiario());
        campoLivre.append(nossoNumeroCompleto.substring(2, 5));
        campoLivre.append(nossoNumeroCompleto.substring(0, 1));
        campoLivre.append(nossoNumeroCompleto.substring(5, 8));
        campoLivre.append(nossoNumeroCompleto.substring(1, 2));
        campoLivre.append(nossoNumeroCompleto.substring(8));
        campoLivre.append(geradorDeDigito.geraDigitoMod11AceitandoRestoZero(campoLivre.toString()));

        return new CodigoDeBarrasBuilder(boleto).comCampoLivre(campoLivre);
    }

}

É importante notar que eu criei o package br.com.caelum.stella.boleto.bancos dentro do meu projeto para criar essa nova classe. Fiz isso porque precisava utilizar a classe CodigoDeBarrasBuilder e, por algum motivo que desconheço, essa classe é package protected.

Sim, a solução não é nada bonita, é só como um quebra-galho.
Assim que tiver resposta da homologação do banco, vou implementar uma solução mais elegante e subir um Pull Request.

@kevinnascimento
Copy link

Obrigado @gabrielhof. Vou fazer o mesmo.

Caso tenha resposta da caixa, por favor, me avise?

Dede já agradeço.

@raphaelLacerda
Copy link
Member

@gabrielhof obteve resposta da Caixa se o código acima funciona?

@gabrielhof
Copy link
Author

Sim, obtive resposta da Caixa. O boleto não foi homologado, mas não tive acesso ao resultado da homologação para saber qual o problema :(

@edenir-anschau
Copy link
Contributor

edenir-anschau commented Aug 29, 2017

Olá @kevinnascimento, @gabrielhof @raphaelLacerda, vcs tem alguma novidade sobre o cenário acima? Consegui uma pré-homologação utilizando a regra da carteira 2 para gerar o boleto com a carteira 1.
Pelo o que eu vi, não muda nada se for um ou 2 na regra de geração do código de barras, ambos são para o nosso número com 17 posições.

A implementação atual para carteira 1 é para nosso número com 18 posições que são "válidos" para códigos de convênio entre 000001 e 060000, e que precisam registrar títulos com nosso número de 18 posições iniciados em ‘9’.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants