Re: Tutorial para Geração de Boletos Bancoob / Sicoob

5604 views
Skip to first unread message

Gilmar P.S.L.

unread,
Jan 22, 2014, 9:47:17 PM1/22/14
to JRimum Community
Olá Giorgio,

Em linhas gerais, o que acontece é que os bancos não usam a mesma nomenclatura, por exemplo, a Modalidade como vc viu, apenas lendo o manual não tem como saber se o número da modalidade é uma informação complementar da carteira ou não, ou se é o próprio número da carteira ou se é outra coisa.

Mas vamos lá, vou tentar colocar aqui o que foi entendido até o momento em que essas classes foram criadas.

Uma ContaBancária pode ter uma modalidade que pode ser, por exemplo:

1- Conta salário
2- Conta comum
3- Conta ouro ...

Tudo depende dos nomes e codigos que cada banco dá.

O mesmo acontece com a carteira, a carteira representa uma modalidade de serviço de cobrança adicionado a uma conta bancária. Assim como a conta, em alguns banco, como o banco do brasil a carteira tem um código, uma descrição uma variação etc. Tipo,

* Carteira 1, modalidade 2 (Caucionada)
* Carteira 23, modalidade 1 (Descontada)
* ..

Não é fácil trabalhar com tantos layouts, com definições diferentes, e essa confusão sem fim que esses documentos possuem, quem pode nos ajudar nisso é cada um na hora de homologar o banco em que se está trabalhando, esse é o momento de capturar as definições desses termos. Como vc notou, você teve que ligar para agência para esclarecer a situação, mas na hora de implementar os casos de boletos, os desenvolvedores do jrimum, na maioria das vezes só conta com o layout, as informações que estão ali e nada mais.

Bem, muito bom vc está ajudando a gente nisso, ficamos muito felizes com o feedback. Vou tentar responder cada problema que vc citou.

Problema 1

Se vc puder confirmar com o banco por que existe essa modalidade ou se eles querem dizer que na verdade a modalidade é a própria carteira, não tem problema, nós podemos atualizar a implementação para a carteira receber esse número, mas se no futuro eles adicionarem outra modalidade aí não vai funcionar.

O que vamos fazer é adicionar Modalidade também a carteira para esse tipo de caso.

Problema 2

Esse é um problema conhecido, já temos uma issue criada para implementar essa classe código do convênio. Esse problema tem razões históricas, pois no início todos os bancos usavam apenas o número da conta.

Problema 3

Esse foi um problema da descrição no manual técnico, pois lá consta apenas que o número do boleto deve ter 8 dígitos. Mas olhando o manual de como os nosso número é composto é que dá para entender. Bom isso também podemos atualizar a implementação.

Problema 4

Nas próximas versões também vamos implementar classes que implementam essa lógica do nosso número para facilitar ainda mais.

Problema 5

Também estamos com planos para fazer a formatação dos campos em função de cada banco, esse possibilidade já sairá nessa versão.

Por fim, mais uma vez estamos muito contentes com seu feedback e contamos com vc para testar a atualização da implementação do Bancoob.

Quaisquer mais observações, manda ver!
 



2014/1/22 Giorgio Torres <torres....@gmail.com>
Caros, bom dia.

Finalizei a homologação dos boletos gerados pela biblioteca Bopepo da JRimum (daqui pra frente chamarei apenas de api) no Sicoob.

Segue abaixo uns workarounds que tive que fazer para sair de acordo com a especificação.
Em anexo segue os documentos de layout para elaboração de boleto e arquivos remessa/retorno do banco Sicoob.

Vamos lá.

Problema 1) O primeiro problema que tive foi com relação à modalidade da carteira que aparecia na linha digitável.
Não sou especialista no assunto, mas pelo que li na internet, a modalidade
da carteira deveria estar relacionada ao tipo de cobrança: Cobrança sem registro: Modalidade 2;
Cobrança com registro: Modalidade 1. <Quem souber mais sobre o assunto favor comentar sobre isso>
No entanto essa ligação não acontece na api. Mesmo "setando" a modalidade da conta corrente diretamente
 
ContaBancaria conta = new ContaBancaria(BancosSuportados.BANCOOB.create()); 
conta.setModalidade(new Modalidade("2"));
 
não afeta a saída na linha digitável do boleto. Ou seja, o trecho acima não faz nada além de gastar memória.
Na verdade, acho que a equipe da JRimum poderia dar uma olhada nos dados da classe Carteira. Tenho um leve
pressentimento de que há dados redundantes ou desnecessários. 
 

Solução:
Procurando aqui na comunidade encontrei a solução no seguinte post: https://groups.google.com/d/msg/jrimum-community/l2hdl62nMMs/HZ5EVw-Xp2kJ
Depois de criado o título bancário para a conta bancária previamente instanciada, é necessário sobrescrever a informação da modalidade através dos
parâmetros bancários: Segue o código abaixo:

titulo.setParametrosBancarios(new ParametrosBancariosMap("ModalidadeDeCobranca", 2));

Isso foi suficiente para resolver o problema da modalidade errada que aparecia na linha digitável.


Problema 2) Uma das coisas que a api nos confunde é com relação à criação do objeto ContaBancaria, onde temos que especificar, dentre outras coisas, o número da conta do cedente.
Na api existe o método "ContaBancaria::setNumeroDaConta", onde, intuitivamente, coloquei o número da conta bancária.
Na verdade, para o banco Sicoob, temos que colocar nesse método o Código do Cedente. Esse código não é o número da conta bancária, mas sim um outro número
que o banco disponibiliza para identificação do cliente (cedente).

Solução:
Ligar no banco (agência) e pedir o CÓDIGO do cliente (falar o nome do cliente ou o número da conta corrente).
Esse código é parecido com o número da conta: existe o número e um DV.
Por causa de um outro problema que tive, colocar o código inteiro INCLUSIVE com o DV. Mais pra frente falarei o porquê. 

 
Problema 3) Geração do Nosso Número:
O Sicoob deixa um espaço de 7 dígitos para o nosso número e 1 dígito para o DV do nosso número.
Na classe Titulo da api, tem método para setar o nosso número e outro para setar o DV. Intuitivamente
coloquei o nosso número de 7 dígitos no método setNossoNumero e o DV no método setDigitoDoNossoNumero.
Porém o método setNossoNumero da api espera um código de 8 dígitos e lança uma excessão caso é passado alguma
String de tamanho diferente (tanto maior que 8 quanto menor que 8).

Solução:
No método setNossoNumero colocar o nosso número gerado pelo seu sistema com 7 dígitos (para o Sicoob) e concatenar o dv junto ao número.
Acabei deixando o DV setado também no método setDigitoNossoNumero, porém não sei se ele é usado internamente na geração do boleto.
Código: 

// nossoNumero.length() == 7
// nossoNumeroDV.length() == 1
titulo.setNossoNumero(nossoNumero+nossoNumeroDV);
titulo.setDigitoDoNossoNumero(nossoNumeroDV);


Problema 4) Problema na construção do DV do Nosso Número.

A construção do nosso número com o DV do sicoob utiliza o código da agência, o código do cliente, o dígito do código
do cliente e o nosso número gerado pelo sistema com 7 dígitos (colocar 0 zero à esquerda caso o número seja menor).

Solução: Lembrar que o código do cliente no objeto Cedente já está com o DV.


Problema 5) O último problema é corrigir no boleto gerado (impresso em pdf) o resultado dos workarounds feitos anteriormente.
Depois de alterar o código do cedente, o DV vai aparecer duas vezes nos campos do boleto gerado. O nosso número
também irá sair com o DV duplicado.


boleto.addTextosExtras("txtRsNossoNumero", nossoNumero+"-"+nossoNumeroDV);
boleto.addTextosExtras("txtFcNossoNumero", nossoNumero+"-"+nossoNumeroDV);
boleto.addTextosExtras("txtRsAgenciaCodigoCedente", numAgencia + "-" + dvAgencia + " / " + codigoCedente + "-" + dvCodigoCedente);
boleto.addTextosExtras("txtFcAgenciaCodigoCedente", numAgencia + "-" + dvAgencia + " / " + codigoCedente + "-" + dvCodigoCedente);


Por fim, gostaria de parabenizar à toda equipe da JRimum. Apesar desses problemas, a api funciona muito bem. Acredito que
esses problemas acabam acontecendo por causa da lógica de negócio de cada banco, e como a api é bastante abrangente
acaba sendo nosso trabalho adequá-la ao uso.

Qualquer dúvida estarei visitando constantemente a comunidade.

Abraço a todos. 

--
--
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ê está recebendo esta mensagem porque se inscreveu no grupo "JRimum Community" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para jrimum-communi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Giorgio Torres

unread,
Feb 28, 2014, 9:51:21 AM2/28/14
to jrimum-c...@googlegroups.com
Olá Gilmar,

Fico feliz em estar contribuindo para um projeto tão bom! :)

Com relação ao problema 1, o que me explicaram no banco foi:

A modalidade é com relação ao modo como o boleto foi emitido. Se foi emitido pelo banco, já é um boleto registrado em tal banco. Porém se foi um boleto emitido por terceiros, é um boleto não registrado
no banco, mas que será devidamente identificado quando o arquivo de remessa chegar para eles.

Na api de vocês, o trecho

ContaBancaria conta = new ContaBancaria(BancosSuportados.BANCOOB.create()); 
conta.setModalidade(new Modalidade("2"));

não reflete em mudança alguma no boleto emitido. Pelo que parece, a sua biblioteca não está utilizando o valor guardado no atributo 'modalidade' da classe ContaBancária (se isso for um java bean).
Para que a modalidade seja de fato alterada, eu tenho que forçar o setModalidade com o trecho 

titulo.setParametrosBancarios(new ParametrosBancariosMap("ModalidadeDeCobranca", 2));

apenas deste modo a modalidade aparece corretamente no boleto.

Espero que eu tenha clareado o que disse no problema 1. hehehhe

Abraço.

Filipe Luchini

unread,
Mar 31, 2014, 10:12:25 PM3/31/14
to jrimum-c...@googlegroups.com
    Oi Giorgio.
    Para o problema número 4, vc pode postar o código que vc utilizou para gerar o DV do Nosso Número ?

    Desde já agradeço a atenção!
    Abraço!
Message has been deleted

Osmar Carneiro Nepomuceno Júnior

unread,
Apr 1, 2014, 3:02:03 PM4/1/14
to jrimum-c...@googlegroups.com
public static int calculeDVModulo11(String numero) {
int dv = 0;
int[] values = new int[numero.length()];
for (int i = 0; i < numero.length(); i++) {
values[i] = Integer.parseInt(numero.charAt(i) + "");
}
int soma = 0;
int vetpos = numero.length() - 1;
while (vetpos >= 0) {
for (int i = 2; i < 10; i++) {
soma += values[vetpos] * i;
vetpos--;
if (vetpos < 0)
break;
}
}

if (soma < 11) {
dv = soma - 11;
} else {
int resto = soma % 11;
dv = 11 - resto;
}

if (dv > 9)
dv = 0;

return dv;
}


Você recebeu essa mensagem porque está inscrito no grupo quot;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 mais opções, acesse https://groups.google.com/d/optout.



--
Osmar Carneiro Nepomuceno Júnior
Analista de Sistemas - Tecnotins

Filipe Luchini

unread,
Apr 1, 2014, 3:36:00 PM4/1/14
to jrimum-c...@googlegroups.com
    Vlw fera!
    Obrigado mesmo pela ajuda =D

Junior Tada

unread,
Nov 4, 2014, 12:35:01 PM11/4/14
to jrimum-c...@googlegroups.com
Boa tarde, alguém sabe como ficou essa questão do calculo do DV do Nosso Numero para a geração de boletos para o Sicoob?
Encontrei no site do Sicoob esta documentação mas não tem data, como está atualmente?

Eduardo Tomasi Margoto

unread,
Dec 19, 2014, 8:41:19 AM12/19/14
to jrimum-c...@googlegroups.com
Giogio Torres,

Quando tento forçar a aplicação da modalidade, diz que não é possível converter uma String para classe ParametroBancario.


titulo.setParametrosBancarios(new ParametrosBancariosMap("ModalidadeDeCobranca", 2));

Alguém teve esse problema ou sabe como resolver??

Eduardo Tomasi Margoto

unread,
Dec 19, 2014, 9:15:15 AM12/19/14
to jrimum-c...@googlegroups.com
Encontrei a resposta, de tanto quebrar a cabeça.. kkkk

titulo.getParametrosBancarios().adicione(ParametroBancoob.MODALIDADE_DE_COBRANCA, 2);
titulo.getParametrosBancarios().adicione(ParametroBancoob.NUMERO_DA_PARCELA, 001);


Esses trechos resolveram o meu problema..
Message has been deleted

Alaor Junior Ferreira

unread,
Jun 8, 2018, 12:55:21 PM6/8/18
to JRimum Community
Boa Tarde, 

Estamos homologando o boleto SICOOB, mas estamos com o problema na linha digitável, 
veja diferenças-->
o instrução é para gerar com 0(zero) a esquerda o bopepo gera sem o 0(zero) a esquerda

alguem pode me ajudar nessa questão ? 

Att.: AJ

Angelica Zordan

unread,
Jun 8, 2018, 2:30:36 PM6/8/18
to jrimum-c...@googlegroups.com
Boa tarde Alaor, 

Aparentemente a sua linha digitável está com uma numeração para o código do beneficiário ou numero da conta diferente do que o banco espera, como a numeração está diferente, invalida a linha digitável daquele ponto para frente. Verifique para alterar anumeração conforme o esperado, e provavelmente vai ficar correto.. Pelo que já recebi destas planilhas, tem um campo informativo para visualizar qual é o código do beneficiário e numero da conta corretos.

Espero que isso lhe auxilie!

Angelica Zordan
Prof. Esp. Engenharia de Software e Gestão de Projetos de Software

--
--
Você recebeu esta mensagem porque está inscrito no Grupo "JRimum
Community" nos Grupos do Google.
Para postar neste grupo, envie um e-mail para

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

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-community+unsubscribe@googlegroups.com.

Alaor Junior Ferreira

unread,
Jun 8, 2018, 2:39:13 PM6/8/18
to JRimum Community
Problema resolvido ,  estava informando o cedente com digito , removido o digito deu certo..

Att.: AJ

Cristiano Borges

unread,
Feb 19, 2019, 9:04:20 AM2/19/19
to JRimum Community
Bom dia,

ContaBancaria conta = new ContaBancaria(BancosSuportados.BANCOOB.create()); 
conta.setModalidade(new Modalidade("2"));
Na minha rotina não está aceitando BANCOOB, preciso atualizar algo?

Cristiano Borges

unread,
Feb 19, 2019, 9:23:57 AM2/19/19
to JRimum Community
Giorgio,
O meu não está aceitando a linha: ContaBancaria conta = new ContaBancaria(BancosSuportados.BANCOOB.create()); 

Preciso fazer para o Sicoob.

Matheus Marttins

unread,
Feb 19, 2019, 10:12:54 AM2/19/19
to jrimum-c...@googlegroups.com
Sera que você está com todas as libs importadas ?

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.

Cristiano Borges

unread,
Feb 19, 2019, 11:19:23 AM2/19/19
to jrimum-c...@googlegroups.com
Sabe aonde consigo baixar todas libs?

Atenciosamente,

Cristiano Monteiro Borges

+55 48 3527.0143  -  48 9.9159.5961 - whatsapp

Matheus Marttins

unread,
Feb 19, 2019, 11:37:40 AM2/19/19
to jrimum-c...@googlegroups.com
Eu lembro que foi difícil achar todas as libs, mais elas estão dentro do site deles

Cristiano Borges

unread,
Feb 19, 2019, 1:27:46 PM2/19/19
to jrimum-c...@googlegroups.com
Boa Tarde,
Revirei aquela site todo e não encontrei.
Parece que esconderam, kk


Atenciosamente,

Cristiano Monteiro Borges

+55 48 3527.0143  -  48 9.9159.5961 - whatsapp

Rômulo Augusto

unread,
Feb 19, 2019, 1:35:19 PM2/19/19
to jrimum-c...@googlegroups.com
Cristiano, seguem os links:

Tutoriais (incluindo a geração do PDF): http://jrimum.org/bopepo/wiki/Componente/Documentacao/Tutoriais

-------------------------------------------------------------------
Rômulo Augusto

Reply all
Reply to author
Forward
0 new messages