Dificuldade na criação de boleto com template.

45 views
Skip to first unread message

Philemon da Silva Souza

unread,
May 7, 2020, 9:36:07 PM5/7/20
to JRimum Community
Bom dia pessoal!

Estou tentando fazer a integração do meu sistema para a geração de boletos do SICREDI.
Durante a criação do objeto BoletoViewer, devo inserir uma URL de template, correto?

Pesquisando no fórum, encontrei essa URL: "desenvolvimento/SICREDI/Template/TemplateBoletoSicredi.pdf"

Mas, quando tento aplica-lá ao meu objeto, recebo uma excessão:
"java.lang.IllegalStateException: java.io.FileNotFoundException: desenvolvimento\SICREDI\Template\TemplateBoletoSicredi.pdf (O sistema não pode encontrar o caminho especificado)"

Alguém tem alguma ideia do que eu estou fazendo de errado? Esta é realmente a ULR? Existe alguma lista com as URLs pra cada banco? Vou precisar homologar mais bancos posteriormente...

No meu código, faço:

BoletoViewer boletoViewer = new BoletoViewer(getBoletoJrimum());
boletoViewer.setTemplate("desenvolvimento/SICREDI/Template/TemplateBoletoSicredi.pdf");

*Esse "getBoletoJrimum()" me retorna um objeto "Boleto" já configurado.

Estou me integrando pelo Maven, usando o XML:
<repository>
<id>jrimum.org</id>
<url>http://jrimum.org/maven/content/groups/public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>

Atenciosamente
-Philemon da Silva Souza

Pedro Domingues .

unread,
May 7, 2020, 9:38:31 PM5/7/20
to jrimum-c...@googlegroups.com
Olá esta url tem que ser com o caminho do seu projeto, direcionando onde você colocou a template do boleto.

Eu tive a homologacao da sicredi semana passada. Se precisar de mais ajuda estamos ai.

Enviado do Outlook Mobile


From: jrimum-c...@googlegroups.com <jrimum-c...@googlegroups.com> on behalf of Philemon da Silva Souza <philemo...@gmail.com>
Sent: Thursday, May 7, 2020 4:20:10 PM
To: JRimum Community <jrimum-c...@googlegroups.com>
Subject: Dificuldade na criação de boleto com template.
 
--
--
Você recebeu esta mensagem porque está inscrito no Grupo "JRimum
Community" nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
jrimum-c...@googlegroups.com
ANTES DE POSTAR... leia:
https://groups.google.com/d/topic/jrimum-community/ULU8QHHgaBs/discussion
Para cancelar a sua inscrição neste grupo, envie um e-mail para
jrimum-communi...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com/group/jrimum-community?hl=pt-BR?hl=pt-BR

---
Você recebeu essa mensagem porque está inscrito no grupo "JRimum Community" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jrimum-communi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/jrimum-community/ff7c4922-e918-4b7e-b6af-b826ed4869f2%40googlegroups.com.

Philemon da Silva Souza

unread,
May 8, 2020, 9:51:10 AM5/8/20
to JRimum Community
Caramba cara. Adoraria uma ajuda aqui sim!

Consegui gerar o arquivo PDF do título em questão. Mas tem um erro na minha Linha digitável:

No boleto que eu gerei a linha é: 
"74891.12032 84728.902218 03327.111070 8 82700000031058"

2.PNG

Mas, no boleto que eu tenho de exemplo (para o mesmo título), a linha digitável é:
"74891.12032 84728.902218 13327.111053 9 82700000031058"

3.PNG

Como você pode ver, a partir do 22º dígito, tem algumas diferenças. 
Pesquisei no manual fornecido pelo SICREDI e achei o seguinte:

1.PNG
Estou lidando com o problema um passo de cada vez, então o primeiro erro/diferença na linha digitável parece ser o "Nosso número".

Mas o que é estranho pra mim, é que no boleto gerado por mim, o nosso número é:
20384728-9"
E no boleto de exemplo, o nosso número também é:
"20384728-9"

No código o nosso número esta sendo inserido no boleto da seguinte forma:

//Criar Título
tituloJirimum = new Titulo(getContaBancaria(), getPagador(), getBeneficiario());
tituloJirimum.setNumeroDoDocumento(configurarNumeroDoDocumento(getNumeroDocumento()));

tituloJirimum.setNossoNumero(configurarNossoNumero(getNossoNumero())); // <<<<<
tituloJirimum.setDigitoDoNossoNumero(configurarDigitoDoNossoNumero(getNossoNumero()));// <<<<<

tituloJirimum.setValor(configurarValor(getValor()));
tituloJirimum.setDataDoDocumento(getDataEmissao());
tituloJirimum.setDataDoVencimento(getDataVencimento());
tituloJirimum.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL);
tituloJirimum.setParametrosBancarios(retornarParametrosBancarios());
tituloJirimum.setAceite(Aceite.N);

A função "configurarNossoNumero(String nossoNumero)", pega o "NossoNúmero" cadastrado no BD, que é a seguinte String:
"20384728-9", e, com ele, faz:
protected String configurarNossoNumero(String nossoNumeroComDigito) {
String nossoNumero = nossoNumeroComDigito.split("-")[0];
return nossoNumero;
}


Na linha abaixo, a função "configurarDigitoNossoNumero(String nossoNumero)" pega a mesma String ("20384728-9") e realiza:
protected String configurarDigitoDoNossoNumero(String nossoNumero) {
return nossoNumero.split("-")[1];
}

De forma que acredito que esteja tudo certo, pois no própio PDF gerado pelo boleto, o NossoNúmero já vem impresso no documento da maneira correta (olha a primeira imagem).

Estou bem confuso em relação à isso. Já testei configurar o NossoNúmero de várias outras formas, mas o documento PDF não é nem sequer gerado. O Jrimum aponta erro na geração do NossoNúmero (pelo que sou muito grato, parabéns ao tratamento de exceções do time).

Desculpa se estou incomodando, mas esse negócio tem pairado em cima da minha cabeça igual uma nuvem.

Agradeço desde já a atenção. 



Pedro Domingues

unread,
May 8, 2020, 10:35:16 AM5/8/20
to jrimum-c...@googlegroups.com

Mestre,

estou te mandando o método que gera o boleto da sicredi para você dar uma olhada.

 

Pode ser que esta diferença esta na agência, n° do convenio e etc.

 

Também pode ser que a forma que você esta compondo o nosso numero pode estar dando diferença.

 

 

public static Boleto createBoleto(ContasReceberParcelas parcelas) {

                               /*

                               * INFORMANDO DADOS SOBRE O beneficiente.

                               */

                               Cedente cedente = new Cedente(parcelas.getContasReceber().getEmpresa().getRazaoSocial(),

                                                               parcelas.getContasReceber().getEmpresa().getCnpj());

 

                               /*

                               * INFORMANDO DADOS SOBRE O PAGADOR.

                               */

                               String nome;

 

                               if (parcelas.getContasReceber().getPessoa().getTipo().equals("F")) {

                                               nome = parcelas.getContasReceber().getPessoa().getNome();

                               } else {

                                               nome = parcelas.getContasReceber().getPessoa().getPessoaJuridica().getRazaoSocial();

 

                               }

 

                               Sacado sacado = new Sacado(nome, parcelas.getContasReceber().getPessoa().getCpfCnpj());

 

                               // Informando o endereço do sacado.

                               Endereco enderecoSac = new Endereco();

                               enderecoSac.setUF(UnidadeFederativa

                                                               .valueOfSigla(parcelas.getContasReceber().getPessoa().getEndereco().getMunicipio().getUf().getSigla()));

                                enderecoSac.setLocalidade(parcelas.getContasReceber().getPessoa().getEndereco().getMunicipio().getNome());

                               enderecoSac.setCep(new CEP(parcelas.getContasReceber().getPessoa().getEndereco().getCep()));

                               enderecoSac.setBairro(parcelas.getContasReceber().getPessoa().getEndereco().getBairro());

                               enderecoSac.setLogradouro(parcelas.getContasReceber().getPessoa().getEndereco().getLogradouro());

                               enderecoSac.setNumero(parcelas.getContasReceber().getPessoa().getEndereco().getNumero());

                               sacado.addEndereco(enderecoSac);

 

                               /*

                               * INFORMANDO OS DADOS SOBRE O TÍTULO.

                               */

 

                               ContaBancaria contaBancaria = new ContaBancaria();

 

                               contaBancaria.setBanco(BancosSuportados.BANCO_SICREDI.create());

                               contaBancaria.setNumeroDaConta(

                                                               new NumeroDaConta(Integer.parseInt(parcelas.getContasReceber().getContaBanco().getNumeroConvenio())));

                               contaBancaria.setAgencia(new Agencia(

                                                               Integer.parseInt(

                                                                                               Biblioteca.formataContaAgenciaJRimun(parcelas.getContasReceber().getContaBanco().getAgencia())),

                                                               "X"));

 

                               Carteira carteira = new Carteira(1);

                               carteira.setTipoCobranca(TipoDeCobranca.SEM_REGISTRO);

                               contaBancaria.setCarteira(carteira);

 

                               Titulo titulo = new Titulo(contaBancaria, sacado, cedente);

 

                               titulo.setNumeroDoDocumento(parcelas.getIdContasReceberParcelas().toString());

                               titulo.setNossoNumero(Biblioteca.formataContaAgenciaJRimun(

                                                               Biblioteca.apenasNumeros(Biblioteca.formataContaAgenciaJRimun(parcelas.getNossoNumero()))));

                                titulo.setDigitoDoNossoNumero(Biblioteca.formataDigitoContaAgenciaJRimun(parcelas.getNossoNumero()));

                               titulo.setValor(parcelas.getValor());

                               titulo.setDataDoDocumento(parcelas.getContasReceber().getDataLancamento());

                               titulo.setDataDoVencimento(parcelas.getDataVencimento());

                                titulo.setTipoDeDocumento(TipoDeTitulo.valueOf(parcelas.getContasReceber().getTipoTituloSicredi().getCodigo()));

                               titulo.setAceite(parcelas.getContasReceber().getAceite());

 

                               titulo.setParametrosBancarios(

                                                               new ParametrosBancariosMap("PostoDaAgencia", parcelas.getContasReceber().getContaBanco().getPosto()));

                               ParametrosBancariosMap param = new ParametrosBancariosMap();

                               param.adicione(param);

 

                               titulo.setTipoDeMoeda(TipoDeMoeda.REAL);

                               /*

                               * INFORMANDO OS DADOS SOBRE O BOLETO.

                               */

                               Boleto boleto = new Boleto(titulo);

                               boleto.setLocalPagamento("PREFERENCIALMENTE EM CANAIS ELETRÔNICOS DA SUA INSTITUIÇÃO FINANCEIRA");

                               boleto.setInstrucaoAoSacado("Evite multas, pague em dias suas contas.");

                               boleto.setDataDeProcessamento(parcelas.getContasReceber().getDataLancamento());

 

                               StringBuilder instrucoes = new StringBuilder();

 

                               // DESCONTO

                               if (parcelas.getDescontoBoleto().compareTo(BigDecimal.ZERO) == 1) {

                                               if (parcelas.getContasReceber().getTipoDescontoSicredi().equals("A")) {

                                                               instrucoes.append("APLICAR DESCONTO DE R$ " + parcelas.getContasReceber().getDescontoBoleto()

                                                                                              + " PARA PAGAMENTO ANTERIOR A DATA DE VENCIMENTO \n");

                                               } else {

                                                               instrucoes.append("APLICAR DESCONTO DE " + parcelas.getContasReceber().getDescontoBoleto()

                                                                                              + "% PARA PAGAMENTO ANTERIOR A DATA DE VENCIMENTO \n");

                                               }

                               }

 

                               if (parcelas.getContasReceber().getDescontoPorDiaAntecipado().compareTo(BigDecimal.ZERO) == 1) {

                                               instrucoes.append("APLICAR DESCONTO DE R$ " + parcelas.getContasReceber().getDescontoPorDiaAntecipado()

                                                                               + " POR DIA ANTECIPADO \n");

                               }

 

                               // MULTA

                               if (parcelas.getContasReceber().getMultaBoleto().compareTo(BigDecimal.ZERO) == 1) {

                                               instrucoes.append("APLICAR MULTA DE " + parcelas.getContasReceber().getMultaBoleto() + "% PARA PAGAMENTO APÓS O VENCIMENTO \n");

                               }

 

                               // JUROS

                               if (parcelas.getContasReceber().getJurosBoleto().compareTo(BigDecimal.ZERO) == 1) {

                                               if (parcelas.getContasReceber().getTipoJurosSicredi().equals("A")) {

                                                               instrucoes.append(

                                                                                              "JUROS: VALOR P/ DIA DE ATRASO: R$" + parcelas.getContasReceber().getJurosBoleto() + "\n");

                                               } else {

                                                               instrucoes.append(

                                                                                              "JUROS: VALOR P/ DIA DE ATRASO: " + parcelas.getContasReceber().getJurosBoleto() + "% \n");

                                               }

                               }

 

                               if (parcelas.getContasReceber().getInstrucaoNegativacaoSicredi().equals("06")) {

                                               instrucoes.append("NEGATIVAÇÃO NO " + parcelas.getContasReceber().getDiasNegativacao()

                                                                               + "° DIA APÓS O VENCIMENTO \n");

                               }

 

                               if (parcelas.getContasReceber().getInstrucaoProtestoSicredi().equals("06")) {

                                               instrucoes.append(

                                                                               "PROTESTO NO " + parcelas.getContasReceber().getDiasProtesto() + "° DIA APÓS O VENCIMENTO \n");

                               }

 

                               String[] linhas = instrucoes.toString().split("\\r\\n|\\r|\\n", -1);

                               for (int i = 0; i < linhas.length; i++) {

 

                                               switch (i) {

                                               case 0: {

                                                               boleto.setInstrucao1(linhas[i]);

                                                               break;

                                               }

                                               case 1: {

                                                               boleto.setInstrucao2(linhas[i]);

                                                               break;

                                               }

                                               case 2: {

                                                               boleto.setInstrucao3(linhas[i]);

                                                               break;

                                               }

                                               case 3: {

                                                               boleto.setInstrucao4(linhas[i]);

                                                               break;

                                               }

                                               case 4: {

                                                               boleto.setInstrucao5(linhas[i]);

                                                               break;

                                               }

                                               default: {

                                                               System.out.println("Default");

                                               }

                                               }

 

                               }

 

                               /*

                               * O campo “agência/código beneficiário” deve ter o formato

                               * AAAA.PP.CCCCC onde: AAAA = Número da agência: CCCCC = Código do

                               * beneficiário Ex: 0165.02.00623

                               *

                                */

                               String agenciaCodigoDoCedenteParaExibicao = String.format("%s.%s.%s",

                                                               parcelas.getContasReceber().getContaBanco().getAgencia(),

                                                               parcelas.getContasReceber().getContaBanco().getPosto(),

                                                               parcelas.getContasReceber().getContaBanco().getNumeroConvenio());

 

                               boleto.addTextosExtras("txtFcAgenciaCodigoCedente", agenciaCodigoDoCedenteParaExibicao);

                               boleto.addTextosExtras("txtRsAgenciaCodigoCedente", agenciaCodigoDoCedenteParaExibicao);

 

                               String nossoNumeroParaExibicao = parcelas.getNossoNumero();

                               boleto.addTextosExtras("txtFcNossoNumero", nossoNumeroParaExibicao);

                               boleto.addTextosExtras("txtRsNossoNumero", nossoNumeroParaExibicao);

 

                               boleto.addTextosExtras("txtRsCodBanco", "748-X");

                               boleto.addTextosExtras("txtFcCodBanco", "748-X");

 

                               boleto.addTextosExtras("txtRsNumeroParcela", parcelas.getParcela());

                               return boleto;

 

                }

 

 

 

De: Philemon da Silva Souza
Enviado:sexta-feira, 8 de maio de 2020 10:51
Para: JRimum Community
Assunto: Re: Dificuldade na criação de boleto com template.

 

Caramba cara. Adoraria uma ajuda aqui sim!

 

Consegui gerar o arquivo PDF do título em questão. Mas tem um erro na minha Linha digitável:

 

No boleto que eu gerei a linha é: 

"74891.12032 84728.902218 03327.111070 8 82700000031058"

 

 

Mas, no boleto que eu tenho de exemplo (para o mesmo título), a linha digitável é:

"74891.12032 84728.902218 13327.111053 9 82700000031058"

 

 

Como você pode ver, a partir do 22º dígito, tem algumas diferenças. 

Pesquisei no manual fornecido pelo SICREDI e achei o seguinte:

 

--

--
Você recebeu esta mensagem porque está inscrito no Grupo "JRimum
Community" nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
jrimum-c...@googlegroups.com
ANTES DE POSTAR... leia:
https://groups.google.com/d/topic/jrimum-community/ULU8QHHgaBs/discussion
Para cancelar a sua inscrição neste grupo, envie um e-mail para
jrimum-communi...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com/group/jrimum-community?hl=pt-BR?hl=pt-BR

---
Você recebeu essa mensagem porque está inscrito no grupo "JRimum Community" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jrimum-communi...@googlegroups.com.

Roberto Ferreira Júnior

unread,
May 8, 2020, 11:13:35 AM5/8/20
to JRimum Community
Caro Philemon, tudo bem?

Não entendi muito bem sua questão mas vou tentar contribuir mesmo assim.

A experiência que eu tenho com essa biblioteca é que ao invés de você guardar o boleto em algum lugar para depois serví-lo, é melhor você gerá-lo em tempo de execução e serví-lo em buffer (streaming de bits). Com Java existem vários tutoriais na net ensinando como fazer. Porém,  se as regras de negócio exigem que tem que guardar o boleto em agum lugar, sugiro que não seja dentro da aplicação. Põe uma pasta fora do seu app. Você poderá, com isso, ter alguns problemas de permissão de pasta e também ficar difícil seguir nesse caminho. Quando encontro esse tipo de problema, ponho a pasta (dos boletos) dentro do diretório de deploy, visinha a aplicação, obviamente, com as devidas permissões de usuários.

Espero ter colaborado com seu problema. Abraço! 
Reply all
Reply to author
Forward
0 new messages