Open gabrielhof opened 8 years ago
Estou tento o mesmo problema. Você conseguiu resolver @gabrielhof ?
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.
Obrigado @gabrielhof. Vou fazer o mesmo.
Caso tenha resposta da caixa, por favor, me avise?
Dede já agradeço.
@gabrielhof obteve resposta da Caixa se o código acima funciona?
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 :(
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’.
Estou tentando gerar um boleto da caixa com a carteira 1, mas está resultando no seguinte erro:
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?