Desenvolvimento de componente para geração de boletos bancários personalizável e extensível Aluno: Misael Barreto de Queiroz Orientadora: Cláudia Ribeiro BOPEPO CEFET-RN Departamento Acadêmico de Informática Tecnologia em Desenvolvimento de Software Sumário Motivação Boleto bancário O componente BOPEPO Trabalhos futuros Bibliografia Agradecimentos Motivação Poucas soluções disponíveis Gratuita em JAVA apenas uma - JBoleto. JBoleto - Expectativas não atendidas, devido a(o): Documentação escassa; Design de classes não flexível, impedindo reusabilidade; Não possibilidade de personalizar o layout do boleto; Não possibilidade de estender a funcionalidade do componente. Motivação O que é personalizar layout? É adaptar o conteúdo do boleto às necessidades do seu emissor; Com Bopepo, o usuário a “mão-livre” pode: Definir imagens; Definir texto; Alterar a disposição das informações; Adicionar novas informações, sejam elas estáticas ou dinâmicas. Motivação O que é estender a funcionalidade? É o recurso que permite ao usuário utilizar o componente mesmo nos casos em que o banco e/ou campo livre de determinado banco não sejam suportados; Bastante útil considerando que o universo de bancos e suas regras para confecção de boletos é bastante vasto e crescente. Boleto bancário Trata-se de um documento que representa um título de cobrança. Título de cobrança pode ser do tipo: duplicata, nota promissória, recibo, bilhete, nota de seguro ente outros. Sua confecção deve seguir as instruções impostas pela FEBRABAN. Boleto bancário Basicamente, para que possam ser realizadas cobranças através de boletos três elementos são necessários: Banco: responsável pela cobrança; Cedente: emissor da cobrança(boleto), ou seja, aquele que irá receber a quantia cobrada; Sacado: aquele que paga o boleto; Boleto bancário O boleto é dividido em duas partes: Recibo do sacado Ficha de compensação Boleto bancário (Recibo do sacado) É o comprovante de pagamento; O layout é de responsabilidade do cedente, contudo alguns campos são obrigatórios: Nome do cedente; Agência / Código do cedente; Valor do título; Vencimento; Nosso número; Nome do sacado. Os campos obrigatórios também devem constar na ficha de compensação. Boleto bancário (Ficha de compensação) Parte do boleto que fica em poder do banco quando o boleto é pago, para que seja encaminhada para a compensação bancária. Dimensões pré-definidas pela FEBRABAN; Subdividida em 3 partes: Parte superior; Quadro de Impressão; Parte inferior; Boleto bancário (Ficha de compensação) Parte superior Quadro de Impressão: Deve conter diversos campos, tendo como campos de preenchimento obrigatório: Nome do banco ou logotipo; Código de compensação do banco e o seu dígito verificador; Linha digitável. Local de pagamento; Data de vencimento; Cedente (nome); Agência / Código do cedente; Data do processamento; Nosso número; Valor do documento; Sacado (nome e endereço completo). Parte inferior Código de barras; Campo destinado à autenticação mecânica. Boleto bancário (Código de barras) Tipo: O código de barras deve ser do tipo "2 de 5" intercalado, que significa que 5 barras definem 1 caractere, sendo que duas delas são barras largas. O termo "intercalado" significa que os espaços entre as barras também têm significado, de maneira análoga às barras. A distância mínima entre a margem inferior e o centro do código de barras deve ser de 12mm. Dimensões: O código de barras deve ter altura de 13mm. De acordo com o padrão “2 de 5” o código de barras deve apresentar a largura de 103mm, pois essa é a dimensão que os equipamentos dos bancos estão calibrados para efetuar a leitura. Zona de silêncio: É o espaço entre a margem esquerda do boleto e o início da impressão do código de barras, que deve ser de 5mm. O código de barras é composto, no seu lado esquerdo, por “barras de start”, que indicam para o sistema que ali se inicia a leitura e, no seu final, por “barras de stop”, indicando o final da leitura. Boleto bancário (Código de barras) Composição Posição Tamanho 01-03 3 Identificação do banco 04-04 1 Código da moeda (9-Real) 05-05 1 Dígito verificador do código de barras(DV) 06-09 4 Fator de vencimento 10-19 10 Valor nominal do título 25 Campo livre Utilizado de acordo com a especificação interna do banco emissor. 20-44 Conteúdo Boleto bancário (Código de barras) Composição Campo livre Contém informações sobre o cedente, para que a instituição financeira possa transferir para ele, de forma correta o valor pago pelo sacado. Sua composição varia de banco para banco, logo se faz necessário entrar em contato com cada banco para obter os manuais de instrução. Boleto bancário (Código de barras) Composição Campo livre (exemplo) Posição Tamanho Conteúdo 20-23 4 Código da agência (sem dígito) 24-25 2 Código da carteira 26-36 11 Nosso número (sem dígito) 37-43 7 Conta do cedente (sem dígito) 44-44 1 Zero fixo Boleto bancário (Linha digitável) Representa o mesmo conteúdo do código de barras, dispostos em outra ordem e acrescidos de dígitos verificadores; Deve ser utilizada quando da impossibilidade da captura do código de barras. Boleto bancário (Linha digitável) Composição Campo Posição Tamanho Conteúdo 01-03 3 Identificação do banco (posições 1 a 3 do código de barras) 04-04 1 Código de moeda (9 - Real) (posição 4 do código de barras) 05-09 5 1ª a 5ª posições do campo livre (posições 20 a 24 do código de barras) 10-10 1 Dígito verificador do primeiro campo 11-20 10 6ª a 15ª posições do campo livre (posições 25 a 34 do código de barras) 21-21 1 Dígito verificador do segundo campo 22-31 10 16ª a 25ª posições do campo livre (posições 35 a 44 do código de barras) 32-32 1 Dígito verificador do terceiro campo 33-33 1 Dígito verificador geral (posição 5 do código de barras) 34-37 4 Fator de vencimento (posições 6 a 9 do código de barras) 38-47 10 Valor nominal do título(posições 10 a 19 do código de barras) 1º 2º 3º 4º 5º O componente BOPEPO (O que é?) Biblioteca Java, livre e de código-aberto; Gera boletos bancários, tornando transparente para o usuário toda a complexidade exigida para isso, como por exemplo a geração do código de barras, linha digitável, entre outros aspectos, de acordo com as especificações definidas pela FEBRABAN (Federação Brasileira de Bancos). O componente BOPEPO (O que é?) Permite ao usuário personalizar o layout do boleto bancário, a mão livre. Definir imagens; Definir texto; Alterar a disposição das informações; Adicionar novas informações, sejam elas estáticas ou dinâmicas. O componente BOPEPO (O que é?) Permite ao usuário estender a funcionalidade do componente. Fornecer informações sobre bancos ainda não suportados; Fornecer informações sobre a composição de campos livre ainda não suportados. O componente BOPEPO (Requisitos) Gerar boletos; O componente BOPEPO (Requisitos) Gerar boletos personalizados. O componente BOPEPO (Requisitos) Gerar boletos para banco e/ou campo livre não suportado. O componente BOPEPO (Como gerar boletos?) Para gerar um boleto se faz necessário informar: O cedente, não esquecendo de informar a sua conta bancária. O sacado. O sacador avalista (opcional). Dados gerais do título como data de vencimento, valor, nosso número. Dados gerais do boleto, como local de pagamento e instruções. Vamos gerar um boleto? O componente BOPEPO (Como gerar boletos personalizados?) Entendendo o mecanismo; Personalizando um template de boleto; Gerando um boleto personalizado. O componente BOPEPO (Como gerar boletos personalizados?) Entendendo o mecanismo. O componente BOPEPO (Como gerar boletos personalizados?) Personalizando um boleto. O componente BOPEPO (Como estender a funcionalidade?) Vamos gerar um boleto personalizado? O componente BOPEPO (Como estender a funcionalidade?) Suportar novo banco; Suportar novo campo livre. O componente BOPEPO (Como estender a funcionalidade?) Suportar novo banco - O usuário terá que fornecer ao componente uma implementação que siga a interface IBanco. Opções: Instanciar um objeto Banco e configurá-lo; Criar uma classe que herda da classe Banco; Criar uma classe que implementa a interface IBanco. Obs: Se o banco não é suportado, então obrigatoriamente uma implementação de campo livre deverá ser realizada. O componente BOPEPO (Como estender a funcionalidade?) Suportar novo banco O componente BOPEPO (Como estender a funcionalidade?) Suportar novo campo livre - O usuário terá de fornecer ao componente uma implementalçao da interface ICampoLivre, e implementar obrigatoriamente o método write(). Esse método write() tem como objetivo retornar uma texto de vinte e cinco caracteres, que nada mais é do que o campo livre, parte integrante do código de barras e a linha digitável do boleto. O componente BOPEPO (Como estender a funcionalidade?) Suportar novo campo livre – Banco “X’ Posição Tamanho Conteúdo 20-26 7 Código da conta do cedente (sem dígito) 27-39 13 Nosso numero (sem dígito) 40-43 4 Código da agencia do cedente (sem dígito) 44-44 0 Zero Fixo O componente BOPEPO (Como estender a funcionalidade?) Suportar novo campo livre – Banco “X’ O componente BOPEPO (Como estender a funcionalidade?) Vamos a prática? O componente BOPEPO (Integrando a uma aplicação) Independente de arquitetura, seja ela N-Camadas (como JEE), Monolítica, Plugins etc; GUI pode ser tanto Web ou Desktop; Tecnologia PDF – Única dependência até o momento. O componente BOPEPO (Sobre o componente) Gratuito e de código-aberto. Disponível no site do Projeto JRimum Estão disponíveis tutoriais, vídeos-tutoriais e toda uma gama de informações com o objetivo de ensinar o usuário a: Utilizar o componente; Contribuir com o projeto de várias formas, dentre elas tornando-se um desenvolvedor. O componente BOPEPO (Sobre o Projeto JRimum) O Projeto JRimum é fruto da iniciativa conjunta entre o Grupo JRimum e a empresa Nordeste Fomento Mercantil; Tem por objetivo a criação de componentes reutilizáveis Java com foco no domínio de negócios do Brasil; Bopepo é um sub-projeto e o primeiro componente disponibilizado; O grupo JRimum é composto atualmente pelo seus fundadores, Gilmar P. S. Leitão, Misael Barreto e Rômulo Augusto, e também por novos adeptos, como por exemplo Samuel Valério e Michel Medeiros, ambos analistas de sistema do TJ-RN O componente BOPEPO (Sobre o Projeto JRimum) A Nordeste Fomento Mercantil é uma empresa que presta serviços relacionados a cessão de crédito para pequenas e médias empresas da economia potiguar. A empresa apóia o projeto e emite seus boletos bancários utilizando o componente Bopepo. Trabalhos futuros Refatoração e inserção de padrões de projeto; Implementar novas formas de visualização do boleto bancário, como por exemplo, nos formatos XML, HTML, JPG e PNG; Entrada de dados via XML, CVS entre outros, para gerar o boleto; Ferramenta para montar o layout; Implementar Java Internacionalização, para as mensagens de erro; Desenvolver um mecanismo XML através do qual aplicações escritas em diferentes linguagens possam utilizar o componente Bopepo para gerar boletos bancários, visando desta forma interoperabilidade; Bibliografia FEDERAÇÃO BRASILEIRA DE BANCOS. Manual técnico operacional: bloquetos de cobrança. [S.l. : s.n.], [199?]. GUERREIRO, Marcelo. BrOffice substitui bem o Office, da Microsoft. São Paulo: O Estado de São Paulo, 2008. Disponível em: <http://www.link.estadao.com.br/index.cfm?id_conteudo=13996> Acesso em: 25 jun. 2008. LOWAGIE, B.; SOARES, P. iText homepage: project description. Disponível em: <http://www.lowagie.com/iText/> Acesso em: 25 jun. 2008. LOZANO, F. Frameworks de logging: primeiros passos com Commons Logging e Log4j. Java Mazagine, Rio de Janeiro, ano 4, n. 35, p.24-35, 2006. OLIVEIRA, E. C. M. Log4J: framework open source java de logging. [S.l. : s.n.], 2005. Disponível em: <http://www.linhadecodigo.com.br/Artigo.aspx?id=824> Acesso em: 25 jun. 2008. SZYPERSKI, Clemens. Component software: beyond object-oriented programming. [S.l]: Addison-Wesley, 1998. Agradecimentos Ao Senhor Jesus, por tudo o que ele tem oferecido em minha vida. À minha família, por todo o apoio dado durante a minha vida. As empresas nas quais trabalhei (UNP, TCU, Infothec e Activesoft). E empresa Nordeste Fomento Mercantil, por todo o suporte dado ao desenvolvimento deste projeto. Aos meus companheiros do Projeto JRimum. Aos meus colegas do IF-RN, por todos os momentos que passamos juntos, pela troca de conhecimentos e experiências. A instituição IF-RN e aos seus professores, pelo ensino, aprendizado e pelo amadurecimento que obtive durante a minha estadia no curso. À minha orientadora Cláudia e aos professores Minora e Valentim. Agradecimentos FIM