commit d6e3bc82caf903264c0deff0acdd78f295b555ea
Author: fabiorj
Date: Sat Dec 4 12:15:25 2021 -0300
commit inicial
diff --git a/jrimum-bopepo/.gitignore b/jrimum-bopepo/.gitignore
new file mode 100644
index 0000000..700e479
--- /dev/null
+++ b/jrimum-bopepo/.gitignore
@@ -0,0 +1,6 @@
+/bin
+/target
+.classpath
+.DS_Store
+.project
+.settings
\ No newline at end of file
diff --git a/jrimum-bopepo/CHANGELOG.md b/jrimum-bopepo/CHANGELOG.md
new file mode 100644
index 0000000..5220641
--- /dev/null
+++ b/jrimum-bopepo/CHANGELOG.md
@@ -0,0 +1,75 @@
+Bopepo Changelog
+====================================================
+
+0.2.3 (2014/02/01) main release GitHub
+----------------------------------------------------------------------
+
+**Improvement**
+
+ * #1: Mudar passagem de parâmetros bancários de string para enum
+ * #2: Colocar complemento do endereço do sacado como campo padrão no boleto
+ * #4: Novo Banco: BRB
+ * #5: Novo enum com todos os campos padrões do boleto
+ * #6: Atualizar templates dos boletos em função da nova nomenclatura BACEN
+ * #7: Substituir funções de texto do utilix por similar em texgit
+ * #8: Inserir meta-dados realcionados ao PDF
+ * #9: Campos formatados em função do padrão de cada Banco
+ * #11: Novo Banco: CECRED
+
+
+0.2.3-SNAPSHOT (2011-02-09) TracSVN
+----------------------------------------------------------------------
+
+**Fix**
+
+ * #25: Implementação BANCO SANTANDER S.A. - Correção do uso de dígitos verificadores.
+ * #13: Banco Real - Mudança do número do documento pelo nosso número
+
+**Improvement**
+
+ * #54: Implementação Campo Livre SICOB - CEF
+ * #58: Bancoob
+ * Novas formas de processamento em lote
+ * Novas formas para definição de template
+ * Opção de definição de compressão do PDF
+ * Classe para geração isolada de código de barras
+ * Classe para geração de pdfs estilo relatório
+
+
+0.3-Litio-GeracaoGuia-VersaoAvaliacao-2011-04-14 (2011/04/14) TracSVN
+----------------------------------------------------------------------
+
+ * Ajustes construtores de OrgaoRecebedor e Arrecadacao, que sofreram ajustes básicos nos parâmetros.
+ * Novo exemplo MinhaPrimeiraGuiaASerPagaEmVariosBancos.
+
+
+0.2.3-SNAPSHOT (2011-02-09) TracSVN
+----------------------------------------------------------------------
+
+**Improvement**
+
+ * Novo Banco: Banco do Nordeste
+ * Novo Boleto: Banco do Brasil convênio 7 dígitos nosso número 17 dígitos.
+
+
+0.3-Litio-GeracaoGuia-VersaoAvaliacao-2010-09-17 (2010/09/17) TracSVN
+----------------------------------------------------------------------
+
+0.3-Litio-GeracaoGuia-VersaoAvaliacao-2010-09-09 (2010/09/09) TracSVN
+----------------------------------------------------------------------
+
+0.3-Litio-GeracaoGuia-VersaoAvaliacao-2010-06-10 (2010/06/10) TracSVN
+----------------------------------------------------------------------
+
+0.2.2 (2009/10/18) main release TracSVN
+----------------------------------------------------------------------
+
+0.2.1-INC2X (2008/11/13) incubation TracSVN
+----------------------------------------------------------------------
+
+0.2.1-INC2 (2008/07/15) incubation TracSVN
+----------------------------------------------------------------------
+
+0.2.1-INC (2008/06/15) incubation TracSVN
+----------------------------------------------------------------------
+
\ No newline at end of file
diff --git a/jrimum-bopepo/LICENSE b/jrimum-bopepo/LICENSE
new file mode 100644
index 0000000..37ec93a
--- /dev/null
+++ b/jrimum-bopepo/LICENSE
@@ -0,0 +1,191 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright
+owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities
+that control, are controlled by, or are under common control with that entity.
+For the purposes of this definition, "control" means (i) the power, direct or
+indirect, to cause the direction or management of such entity, whether by
+contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and configuration
+files.
+
+"Object" form shall mean any form resulting from mechanical transformation or
+translation of a Source form, including but not limited to compiled object code,
+generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made
+available under the License, as indicated by a copyright notice that is included
+in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that
+is based on (or derived from) the Work and for which the editorial revisions,
+annotations, elaborations, or other modifications represent, as a whole, an
+original work of authorship. For the purposes of this License, Derivative Works
+shall not include works that remain separable from, or merely link (or bind by
+name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version
+of the Work and any modifications or additions to that Work or Derivative Works
+thereof, that is intentionally submitted to Licensor for inclusion in the Work
+by the copyright owner or by an individual or Legal Entity authorized to submit
+on behalf of the copyright owner. For the purposes of this definition,
+"submitted" means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems, and
+issue tracking systems that are managed by, or on behalf of, the Licensor for
+the purpose of discussing and improving the Work, but excluding communication
+that is conspicuously marked or otherwise designated in writing by the copyright
+owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
+of whom a Contribution has been received by Licensor and subsequently
+incorporated within the Work.
+
+2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.
+
+3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable (except as stated in this section) patent license to make, have
+made, use, offer to sell, sell, import, and otherwise transfer the Work, where
+such license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by combination
+of their Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or contributory
+patent infringement, then any patent licenses granted to You under this License
+for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof
+in any medium, with or without modifications, and in Source or Object form,
+provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of
+this License; and
+You must cause any modified files to carry prominent notices stating that You
+changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute,
+all copyright, patent, trademark, and attribution notices from the Source form
+of the Work, excluding those notices that do not pertain to any part of the
+Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any
+Derivative Works that You distribute must include a readable copy of the
+attribution notices contained within such NOTICE file, excluding those notices
+that do not pertain to any part of the Derivative Works, in at least one of the
+following places: within a NOTICE text file distributed as part of the
+Derivative Works; within the Source form or documentation, if provided along
+with the Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The contents of
+the NOTICE file are for informational purposes only and do not modify the
+License. You may add Your own attribution notices within Derivative Works that
+You distribute, alongside or as an addendum to the NOTICE text from the Work,
+provided that such additional attribution notices cannot be construed as
+modifying the License.
+You may add Your own copyright statement to Your modifications and may provide
+additional or different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works as a whole,
+provided Your use, reproduction, and distribution of the Work otherwise complies
+with the conditions stated in this License.
+
+5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted
+for inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the terms of
+any separate license agreement you may have executed with Licensor regarding
+such Contributions.
+
+6. Trademarks.
+
+This License does not grant permission to use the trade names, trademarks,
+service marks, or product names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor provides the
+Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
+including, without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
+solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise of
+permissions under this License.
+
+8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including negligence),
+contract, or otherwise, unless required by applicable law (such as deliberate
+and grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License or
+out of the use or inability to use the Work (including but not limited to
+damages for loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses), even if such Contributor has
+been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to
+offer, and charge a fee for, acceptance of support, warranty, indemnity, or
+other liability obligations and/or rights consistent with this License. However,
+in accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if You
+agree to indemnify, defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason of your
+accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included on
+the same "printed page" as the copyright notice for easier identification within
+third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/jrimum-bopepo/README.md b/jrimum-bopepo/README.md
new file mode 100644
index 0000000..c15fa6d
--- /dev/null
+++ b/jrimum-bopepo/README.md
@@ -0,0 +1,8 @@
+Bopepo
+======
+
+[](https://ci-jrimum.rhcloud.com)
+
+Biblioteca Java para geração de boletos bancários.
+
+ * http://jrimum.org/bopepo
diff --git a/jrimum-bopepo/pom.xml b/jrimum-bopepo/pom.xml
new file mode 100644
index 0000000..dc4282a
--- /dev/null
+++ b/jrimum-bopepo/pom.xml
@@ -0,0 +1,263 @@
+
+
+ 4.0.0
+ br.com.rjconsultores
+ jrimum-bopepo
+ jar
+ Projeto Bopepo
+ 1.0.0
+ Projeto open source de componentes de software para o domínio de negócios do Brasil.
+ http://www.jrimum.org/bopepo
+
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
+
+
+ Projeto JRimum
+ http://www.jrimum.org
+
+
+
+ http://github.com/jrimum/bopepo/issues
+ GitHub
+
+
+
+ http://github.com/jrimum/bopepo
+
+
+
+
+ Gilmar P. S. L.
+ gilmatryx@gmail.com
+
+
+ Misael Barreto
+ misaelbarreto@gmail.com
+
+
+ Rômulo Augusto
+ romulomail@gmail.com
+
+
+
+
+ UTF-8
+ UTF-8
+
+
+
+
+ disable-java8-doclint
+
+ [1.8,)
+
+
+ -Xdoclint:none
+
+
+
+
+
+
+
+
+ src/main/resources
+
+ **/*.odt
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.1
+
+ 1.5
+ 1.5
+
+
+
+ org.codehaus.mojo
+ animal-sniffer-maven-plugin
+ 1.6
+
+
+ org.codehaus.mojo.signature
+ java18
+ 1.0
+
+
+
+
+ animal-sniffer
+ compile
+
+ check
+
+
+
+
+
+ maven-assembly-plugin
+ 2.4
+
+
+ src/main/assembly/jrimum-bopepo-with-dependencies.xml
+ src/main/assembly/jrimum-bopepo-with-dependencies-src.xml
+ src/main/assembly/jrimum-bopepo-examples.xml
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.16
+
+ false
+
+ org/jrimum/bopepo/**/*
+
+
+ org/jrimum/bopepo/excludes/**/*
+ org/jrimum/bopepo/**/*$*
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 2.2.1
+
+
+ attach-sources
+ package
+
+ jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 2.9.1
+
+
+ attach-javadoc
+ package
+
+ jar
+
+
+
+
+ UTF-8
+ UTF-8
+ true
+ private
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ 2.8.1
+
+
+
+
+
+
+
+ br.com.rjconsultores
+ jrimum-domkee
+ 1.0.0
+
+
+ br.com.rjconsultores
+ jrimum-texgit
+ 1.0.0
+
+
+ com.lowagie
+ itext
+ 2.0.8
+
+
+ bouncycastle
+ bcmail-jdk14
+
+
+ bouncycastle
+ bcprov-jdk14
+
+
+ bouncycastle
+ bctsp-jdk14
+
+
+
+
+
+ com.itextpdf
+ itextpdf
+ 5.4.5
+ test
+
+
+ com.google.guava
+ guava-jdk5
+ 14.0.1
+ test
+
+
+ org.hamcrest
+ hamcrest-all
+ 1.3
+ test
+
+
+ org.mockito
+ mockito-all
+ 1.9.5
+ test
+
+
+ commons-io
+ commons-io
+ 2.4
+ test
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+
+
+
+ rj-releases
+ http://52.5.53.15:8081/nexus/content/repositories/releases/
+
+
+
\ No newline at end of file
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoCarne3PorPagina.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoCarne3PorPagina.java
new file mode 100644
index 0000000..f9976d3
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoCarne3PorPagina.java
@@ -0,0 +1,158 @@
+package org.jrimum.bopepo.exemplo;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.pdf.Files;
+import org.jrimum.bopepo.view.BoletoViewer;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.utilix.ClassLoaders;
+import org.jrimum.utilix.Exceptions;
+
+import com.lowagie.text.Document;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.pdf.PdfContentByte;
+import com.lowagie.text.pdf.PdfImportedPage;
+import com.lowagie.text.pdf.PdfReader;
+import com.lowagie.text.pdf.PdfWriter;
+
+/**
+ * Exemplo de boleto no estilo carnê com três boletos em uma página.
+ *
+ * @author Rômulo Augusto
+ */
+public class BoletoCarne3PorPagina {
+
+ public static void main(String[] args) throws DocumentException, IOException {
+
+ Boleto boletoBBNossoNumero10 = crieBoletoBBNossoNumero10();
+ Boleto boletoBradesco = crieBoletoBradesco();
+
+ List boletos = new ArrayList();
+ boletos.add(boletoBBNossoNumero10);
+ boletos.add(boletoBradesco);
+ boletos.add(boletoBBNossoNumero10);
+ boletos.add(boletoBradesco);
+ boletos.add(boletoBBNossoNumero10);
+ boletos.add(boletoBBNossoNumero10);
+ boletos.add(boletoBradesco);
+ boletos.add(boletoBBNossoNumero10);
+
+ //Informando o template personalizado:
+ File templatePersonalizado = new File(ClassLoaders.getResource("/templates/BoletoCarne3PorPagina.pdf").getFile());
+
+ File boletosPorPagina = groupInPages(boletos, "Carne3PorPagina.pdf", templatePersonalizado);
+
+ Exemplos.mostreBoletoNaTela(boletosPorPagina);
+ }
+
+ private static File groupInPages(List boletos, String filePath, File templatePersonalizado) {
+
+ File arq = null;
+ BoletoViewer boletoViewer = new BoletoViewer(boletos.get(0));
+ boletoViewer.setTemplate(templatePersonalizado);
+
+ List boletosEmBytes = new ArrayList(boletos.size());
+
+ for (Boleto bop : boletos) {
+ boletosEmBytes.add(boletoViewer.setBoleto(bop).getPdfAsByteArray());
+ }
+
+ try {
+
+ arq = Files.bytesToFile(filePath, mergeFilesInPages(boletosEmBytes));
+
+ } catch (Exception e) {
+ Exceptions.throwIllegalStateException("Erro durante geração do PDF! Causado por " + e.getLocalizedMessage(), e);
+ }
+
+ return arq;
+ }
+
+ private static Boleto crieBoletoBBNossoNumero10() {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+ contaBancaria.setBanco(BancosSuportados.BANCO_DO_BRASIL.create());
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(1234567));
+ contaBancaria.setCarteira(new Carteira(12));
+
+ titulo.setNossoNumero("1234567890");
+
+ Boleto boletoBBNossoNumero10 = Exemplos.crieBoleto(titulo);
+
+ return boletoBBNossoNumero10;
+ }
+
+ private static Boleto crieBoletoBradesco() {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+ contaBancaria.setBanco(BancosSuportados.BANCO_BRADESCO.create());
+ contaBancaria.setAgencia(new Agencia(1234));
+ contaBancaria.setCarteira(new Carteira(12));
+ titulo.setNossoNumero("01234567891");
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(1234567));
+
+ Boleto boletoBradesco = Exemplos.crieBoleto(titulo);
+
+ return boletoBradesco;
+ }
+
+ public static byte[] mergeFilesInPages(List pdfFilesAsByteArray) throws DocumentException, IOException {
+
+ Document document = new Document();
+ ByteArrayOutputStream byteOS = new ByteArrayOutputStream();
+
+ PdfWriter writer = PdfWriter.getInstance(document, byteOS);
+
+ document.open();
+
+ PdfContentByte cb = writer.getDirectContent();
+ float positionAnterior = 0;
+
+ for (byte[] in : pdfFilesAsByteArray) {
+
+ PdfReader reader = new PdfReader(in);
+
+ for (int i = 1; i <= reader.getNumberOfPages(); i++) {
+
+ float documentHeight = cb.getPdfDocument().getPageSize().getHeight();
+
+ //import the page from source pdf
+ PdfImportedPage page = writer.getImportedPage(reader, i);
+ float pagePosition = positionAnterior;
+
+ if ( (documentHeight - positionAnterior) <= page.getHeight()) {
+ document.newPage();
+ pagePosition = 0;
+ positionAnterior = 0;
+ }
+
+ //add the page to the destination pdf
+ cb.addTemplate(page, 0, pagePosition);
+
+ positionAnterior += page.getHeight();
+ }
+ }
+
+ byteOS.flush();
+ document.close();
+
+ byte[] arquivoEmBytes = byteOS.toByteArray();
+ byteOS.close();
+
+ return arquivoEmBytes;
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoComSacadorAvalista.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoComSacadorAvalista.java
new file mode 100644
index 0000000..463e7f6
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/BoletoComSacadorAvalista.java
@@ -0,0 +1,92 @@
+package org.jrimum.bopepo.exemplo;
+
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.domkee.comum.pessoa.endereco.CEP;
+import org.jrimum.domkee.comum.pessoa.endereco.Endereco;
+import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa;
+import org.jrimum.domkee.financeiro.banco.febraban.Cedente;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Sacado;
+import org.jrimum.domkee.financeiro.banco.febraban.SacadorAvalista;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ * Exemplo de código para geração de um boleto simples com Sacador Avalista.
+ *
+ *
+ * Baseado no {@linkplain org.jrimum.bopepo.exemplo.MeuPrimeiroBoleto}.
+ *
+ *
+ * @author Gilmar P.S.L
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class BoletoComSacadorAvalista extends MeuPrimeiroBoleto{
+
+ /**
+ * Executa o exemplo.
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+
+ new BoletoComSacadorAvalista().exemplo();
+ }
+
+ /**
+ * Cria um boleto com sacador avalista, em passos distintos, com os dados necessários para a visualização.
+ *
+ * @return boleto com dados
+ */
+ @Override
+ Boleto crieUmBoleto() {
+
+ /*
+ * PASSO 1: Faça o mesmo que se fez em MeuPrimeiroBoleto.
+ */
+ ContaBancaria contaBancaria = crieUmaContaBancaria();
+ Cedente cedente = crieUmCedente();
+ Sacado sacado = crieUmSacado();
+
+ /*
+ * PASSO 2: Informe os dados do Sacador Avalista.
+ */
+ SacadorAvalista sacadorAvalista = crieUmSacadorAvalista();
+
+ /*
+ * PASSO 3: Crie um novo título/cobrança e informe os dados.
+ */
+ Titulo titulo = crieOsDadosDoNovoTitulo(new Titulo(contaBancaria,sacado,cedente,sacadorAvalista));
+
+ /*
+ * PASSO 4: Crie o boleto e informe os dados necessários do mesmo jeito.
+ */
+ Boleto boleto = crieOsDadosDoNovoBoleto(new Boleto(titulo));
+
+ return boleto;
+ }
+
+ /**
+ * Cria uma instância de sacador avalista com os principais dados para o boleto.
+ *
+ * @return sacadorAvalista com os dados necssários
+ */
+ private final SacadorAvalista crieUmSacadorAvalista() {
+
+ SacadorAvalista sacadorAvalista = new SacadorAvalista("JRimum Enterprise", "00.000.000/0001-91");
+
+ // Informando o endereço do sacador avalista.
+ Endereco enderecoSacAval = new Endereco();
+ enderecoSacAval.setUF(UnidadeFederativa.DF);
+ enderecoSacAval.setLocalidade("Brasília");
+ enderecoSacAval.setCep(new CEP("70150-903"));
+ enderecoSacAval.setBairro("Grande Centro");
+ enderecoSacAval.setLogradouro("Rua Eternamente Principal");
+ enderecoSacAval.setNumero("001");
+ sacadorAvalista.addEndereco(enderecoSacAval);
+
+ return sacadorAvalista;
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/CampoLivreJRimumBank.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/CampoLivreJRimumBank.java
new file mode 100644
index 0000000..49a24e1
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/CampoLivreJRimumBank.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 01/11/2010 - 10:30:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 01/11/2010 - 10:30:00
+ *
+ */
+package org.jrimum.bopepo.exemplo;
+
+import static org.jrimum.texgit.type.component.Fillers.ZERO_LEFT;
+
+import org.jrimum.bopepo.campolivre.CampoLivre;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.FixedField;
+
+/**
+ *
+ * Campo Livre fictício para usar junto com o JRimumBank.
+ * Como todo campo livre, deve possuir o tamanho de 25 dígitos.
+ *
+ *
+ * O campo livre é, geralmente, formado através de dados do título. Assim, essa implementação
+ * recebe um título através de seu construtor.
+ *
+ * Segue abaixo o layout desse campo livre fictício:
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo
+ *
+ *
+ *
+ *
+ *
20-25
+ *
6
+ *
9 (6)
+ *
Código da conta (sem o dígito)
+ *
+ *
+ *
26-29
+ *
4
+ *
9 (4)
+ *
Código da agência (sem o dígito)
+ *
+ *
+ *
30-35
+ *
6
+ *
9 (6)
+ *
ZEROS
+ *
+ *
+ *
36-44
+ *
9
+ *
9 (9)
+ *
Nosso número (sem o dígito)
+ *
+ *
+ *
+ *
+ * @author Rômulo Augusto
+ * @author Misael Barreto
+ *
+ */
+public class CampoLivreJRimumBank implements CampoLivre {
+
+ private static final long serialVersionUID = 338556606717660573L;
+
+ private Titulo titulo;
+
+ public CampoLivreJRimumBank(Titulo titulo) {
+ this.titulo = titulo;
+ }
+
+
+ public void read(String g) {
+ //Sem leitura
+ }
+
+ public String write() {
+
+ ContaBancaria conta = titulo.getContaBancaria();
+
+ FixedField fieldConta = new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 6, ZERO_LEFT);
+ FixedField fieldAgencia = new FixedField(conta.getAgencia().getCodigo(), 4, ZERO_LEFT);
+ FixedField fieldZeros = new FixedField(0, 6, ZERO_LEFT);
+ FixedField fieldNossoNumero = new FixedField(titulo.getNossoNumero(), 9);
+
+ return fieldConta.write() + fieldAgencia.write() + fieldZeros.write() + fieldNossoNumero.write();
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/Exemplos.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/Exemplos.java
new file mode 100644
index 0000000..2ff9200
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/Exemplos.java
@@ -0,0 +1,365 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 18/05/2008 - 21:15:39
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 18/05/2008 - 21:15:39
+ *
+ */
+
+package org.jrimum.bopepo.exemplo;
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.view.BoletoViewer;
+import org.jrimum.domkee.comum.pessoa.endereco.Endereco;
+import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.Cedente;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Sacado;
+import org.jrimum.domkee.financeiro.banco.febraban.SacadorAvalista;
+import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo.Aceite;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ * Classe utilitária para criação de objetos necessários para geração dos
+ * boletos de exemplo.
+ *
+ * @author Gilmar P.S.L.
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class Exemplos {
+
+ /**
+ * Utility class pattern: classe não instanciável
+ *
+ * @throws AssertionError Caso haja alguma tentativa de utilização deste construtor.
+ */
+ private Exemplos() {
+ Exceptions.throwIllegalStateException("Instanciação não permitida!");
+ }
+
+ /**
+ *
+ * Devolve uma lista com mais de um boleto.
+ *
+ *
+ * @return List
+ *
+ * @since 0.2
+ */
+ public static List getVariosBoletos() {
+
+ List boletos = new ArrayList(5);
+
+ Titulo titulo;
+
+ final Date VENCIMENTO = new GregorianCalendar(2000, Calendar.JULY, 3).getTime();
+
+ final Date DATA_DO_DOCUMENTO = new GregorianCalendar(2000, Calendar.APRIL, 14).getTime();
+
+ Sacado sacado = crieSacado();
+
+ Cedente cedente = crieCedente();
+
+ ContaBancaria contaBancaria = new ContaBancaria(BancosSuportados.BANCO_DO_BRASIL.create());
+
+ contaBancaria.setAgencia(new Agencia(1234, "7"));
+ contaBancaria.setCarteira(new Carteira(5));
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(6789, "12"));
+
+ cedente.addContaBancaria(contaBancaria);
+
+ SacadorAvalista sacadorAvalista = crieSacadorAvalista();
+
+ // Fim Código em teste
+ titulo = new Titulo(contaBancaria,sacado, cedente, sacadorAvalista);
+ titulo.setNumeroDoDocumento("123456789");
+ titulo.setNossoNumero("1234567890");
+ titulo.setDigitoDoNossoNumero("5");
+ titulo.setValor(BigDecimal.valueOf(100.23));
+ titulo.setDataDoDocumento(DATA_DO_DOCUMENTO);
+ titulo.setDataDoVencimento(VENCIMENTO);
+ titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL);
+ titulo.setAceite(Aceite.A);
+
+ Boleto b1,b2,b3,b4,b5;
+ b1 = new Boleto(titulo);
+
+ b1.setLocalPagamento("Pagável preferencialmente na Rede X ou em qualquer Banco até o Vencimento.");
+ b1.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor cobrado é injusto e esperamos seu pagamento assim mesmo.");
+ b1.setInstrucao1("PARA PAGAMENTO 1 ");
+ b1.getTitulo().getSacado().setNome("Misael Martins Motriz");
+
+ b2 = new Boleto(titulo);
+
+ b2.setLocalPagamento(b1.getLocalPagamento());
+ b2.setInstrucaoAoSacado(b1.getInstrucaoAoSacado());
+ b2.setInstrucao1("PARA PAGAMENTO 2 ");
+ b2.getTitulo().getSacado().setNome("Samuca Meu Carro");
+
+ b3 = new Boleto(titulo);
+
+ b3.setLocalPagamento(b1.getLocalPagamento());
+ b3.setInstrucaoAoSacado(b1.getInstrucaoAoSacado());
+ b3.setInstrucao1("PARA PAGAMENTO 3 ");
+ b3.getTitulo().getSacado().setNome("Romulo O Namorador");
+
+ b4 = new Boleto(titulo);
+
+ b4.setLocalPagamento(b1.getLocalPagamento());
+ b4.setInstrucaoAoSacado(b1.getInstrucaoAoSacado());
+ b4.setInstrucao1("PARA PAGAMENTO 4 ");
+ b1.getTitulo().getSacado().setNome("Michelx E Seus Irmãos");
+
+ b5 = new Boleto(titulo);
+
+ b5.setLocalPagamento(b1.getLocalPagamento());
+ b5.setInstrucaoAoSacado(b1.getInstrucaoAoSacado());
+ b5.setInstrucao1("PARA PAGAMENTO 5 ");
+ b5.getTitulo().getSacado().setNome("É o doido o que sobrescreveu.");
+
+ boletos.add(b1);
+ boletos.add(b2);
+ boletos.add(b3);
+ boletos.add(b4);
+ boletos.add(b5);
+
+ return boletos;
+ }
+
+ /**
+ * Cria uma conta bancária com dados padrão. Esta contabancária não tem banco definido.
+ *
+ * @return
+ */
+ public static ContaBancaria crieContaBancaria() {
+
+ ContaBancaria contaBancaria = new ContaBancaria();
+
+ Agencia agencia = new Agencia(1234, "0");
+ contaBancaria.setAgencia(agencia);
+
+ NumeroDaConta numeroDaConta = new NumeroDaConta(123456, "0");
+ contaBancaria.setNumeroDaConta(numeroDaConta);
+
+ contaBancaria.setCarteira(new Carteira(1));
+
+ return contaBancaria;
+ }
+
+ /**
+ * Cria um cedente com dados padrão.
+ *
+ * @return
+ */
+ public static Cedente crieCedente() {
+
+ Cedente cedente = new Cedente("PROJETO JRimum", "00.000.208/0001-00");
+
+ cedente.addContaBancaria(crieContaBancaria());
+
+ return cedente;
+ }
+
+ /**
+ * Cria um Sacado com dados padrão.
+ *
+ * @return
+ */
+ public static Sacado crieSacado() {
+
+ Sacado sacado = new Sacado("JRimum Developer", "111.111.111-11");
+
+ Endereco endereco = new Endereco();
+ endereco.setUF(UnidadeFederativa.RN);
+ endereco.setLocalidade("Natal");
+ endereco.setCep("59064-120");
+ endereco.setBairro("Centro");
+ endereco.setLogradouro("Rua JRimum");
+ endereco.setNumero("2332");
+
+ sacado.addEndereco(endereco);
+
+ return sacado;
+ }
+
+ /**
+ * Cria um Sacador Avalista padrão.
+ *
+ * @return
+ */
+ public static SacadorAvalista crieSacadorAvalista() {
+
+ SacadorAvalista sacadorAvalista = new SacadorAvalista("JavaRN", "00.000.000/0001-91");
+
+ Endereco endereco = new Endereco();
+ endereco.setUF(UnidadeFederativa.PB);
+ endereco.setLocalidade("João Pessoa");
+ endereco.setCep("59064-120");
+ endereco.setBairro("Centro");
+ endereco.setLogradouro("Rua JRimum Paraiba");
+ endereco.setNumero("3223");
+
+ sacadorAvalista.addEndereco(endereco);
+
+ return sacadorAvalista;
+ }
+
+ /**
+ * Cria um título com dados padrão.
+ *
+ * @return
+ */
+ public static Titulo crieTitulo() {
+ return crieTitulo(crieCedente(), crieSacado(), crieSacadorAvalista());
+ }
+
+ /**
+ * Cria um título com dados padrão sem sacador avalista.
+ *
+ * @return
+ */
+ public static Titulo crieTituloSemSacadorAvalista() {
+ return crieTitulo(crieCedente(), crieSacado(), null);
+ }
+
+ /**
+ * Cria um título a partir de um cedente, um sacado e um sacador avalista.
+ *
+ * @param cedente
+ * @param sacado
+ * @param sacadorAvalista
+ * @return
+ */
+ public static Titulo crieTitulo(Cedente cedente, Sacado sacado, SacadorAvalista sacadorAvalista) {
+
+ ContaBancaria contaBancariaDoCedente = cedente.getContasBancarias().iterator().next();
+ Titulo titulo = null;
+
+ if (sacadorAvalista != null) {
+ titulo = new Titulo(contaBancariaDoCedente, sacado, cedente, sacadorAvalista);
+
+ } else {
+ titulo = new Titulo(contaBancariaDoCedente, sacado, cedente);
+ }
+
+ titulo.setNumeroDoDocumento("123465");
+ titulo.setNossoNumero("1");
+ titulo.setDigitoDoNossoNumero("0");
+ titulo.setValor(BigDecimal.TEN);
+ titulo.setDataDoDocumento(new Date());
+ titulo.setDataDoVencimento(new Date());
+ titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL);
+ titulo.setAceite(Aceite.A);
+ titulo.setDesconto(BigDecimal.ONE);
+
+ return titulo;
+ }
+
+ /**
+ * Cria um boleto a partir de um título. Para as informações extras, como instruções,
+ * é configurado um texto padrão.
+ *
+ * @param titulo
+ * @return
+ */
+ public static Boleto crieBoleto(Titulo titulo) {
+
+ Boleto boleto = new Boleto(titulo);
+
+ boleto.setLocalPagamento("Pagável preferencialmente na Rede X ou em qualquer Banco até o Vencimento.");
+
+ boleto.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor cobrado não é o esperado, aproveite o DESCONTÃO!");
+
+ boleto.setInstrucao1("PARA PAGAMENTO 1 até Hoje não cobrar nada!");
+ boleto.setInstrucao2("PARA PAGAMENTO 2 até Amanhã Não cobre!");
+ boleto.setInstrucao3("PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre.");
+ boleto.setInstrucao4("PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00");
+ boleto.setInstrucao5("PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00");
+ boleto.setInstrucao6("PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00");
+ boleto.setInstrucao7("PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!");
+ boleto.setInstrucao8("APÓS o Vencimento, Pagável Somente na Rede X.");
+
+ return boleto;
+ }
+
+ /**
+ * Gera o boleto.
+ *
+ * @param boleto
+ */
+ public static void execute(Boleto boleto) {
+ execute(boleto, null);
+ }
+
+ public static void executeComTemplate(Boleto boleto, File template) {
+ execute(boleto, template);
+ }
+
+ /**
+ * Abre o arquivo no aplicativo padrão do sistema.
+ *
+ * @param arquivoBoleto
+ */
+ public static void mostreBoletoNaTela(File arquivoBoleto) {
+
+ try {
+ // Descomente se estiver usando java 6 ou superior
+ // java.awt.Desktop.getDesktop().open(arquivoBoleto);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private static void execute(Boleto boleto, File template) {
+
+ BoletoViewer viewer = new BoletoViewer(boleto);
+
+ if (template != null) {
+ viewer.setTemplate(template);
+ }
+
+ File boletoPDF = viewer.getPdfAsFile("BOLETO_" + boleto.getClass().getSimpleName().toUpperCase() + ".PDF");
+
+ mostreBoletoNaTela(boletoPDF);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/JRimumBank.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/JRimumBank.java
new file mode 100644
index 0000000..b4c19b2
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/JRimumBank.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 01/11/2010 - 09:37:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 01/11/2010 - 09:37:00
+ *
+ */
+package org.jrimum.bopepo.exemplo;
+
+import javax.swing.ImageIcon;
+
+import org.jrimum.domkee.comum.pessoa.id.cprf.CNPJ;
+import org.jrimum.domkee.financeiro.banco.febraban.Banco;
+import org.jrimum.domkee.financeiro.banco.febraban.CodigoDeCompensacaoBACEN;
+import org.jrimum.utilix.ClassLoaders;
+
+/**
+ * Banco fictício usado para exemplos genéricos.
+ *
+ * @author Rômulo Augusto
+ * @author Misael Barreto
+ *
+ */
+public class JRimumBank extends Banco {
+
+ public JRimumBank() {
+ super(new CodigoDeCompensacaoBACEN("999"), "JRimum Bank", new CNPJ("02756617000167"),
+ "Banco Múltiplo", new ImageIcon(ClassLoaders.getResource("/img/999.png")).getImage());
+ }
+}
\ No newline at end of file
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoleto.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoleto.java
new file mode 100644
index 0000000..9e22580
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoleto.java
@@ -0,0 +1,270 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 01/11/2010 - 09:37:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 01/11/2010 - 09:37:00
+ *
+ */
+package org.jrimum.bopepo.exemplo;
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.view.BoletoViewer;
+import org.jrimum.domkee.comum.pessoa.endereco.CEP;
+import org.jrimum.domkee.comum.pessoa.endereco.Endereco;
+import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.Cedente;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Sacado;
+import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo.Aceite;
+
+/**
+ * Exemplo de código para geração de um boleto simples.
+ *
+ *
+ * Utiliza o Banco Bradesco como exemplo, já que possui um implementação simples.
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class MeuPrimeiroBoleto {
+
+ /**
+ * Executa o exemplo.
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+
+ new MeuPrimeiroBoleto().exemplo();
+ }
+
+ /**
+ * Um simples exemplo de como gerar um boleto.
+ */
+ final void exemplo() {
+
+ /*
+ * Para gerar um boleto é preciso dos dados do boleto e de um
+ * visualizador de boletos.
+ */
+
+ /*
+ * Primeiro crie os dados do boleto.
+ */
+ Boleto boleto = crieUmBoleto();
+
+ /*
+ * Em seguida, basta criar um visualizador para o boleto.
+ */
+ BoletoViewer boletoViewer = new BoletoViewer(boleto);
+
+ /*
+ * Depois, gere um arquivo, byte array ou stream. Nesse exemplo, um
+ * arquivo será salvo na mesma pasta do seu "projeto"
+ */
+
+ // Exemplos de uso:
+ // WINDOWS: boletoViewer.getAsPDF("C:/Temp/MeuBoleto.pdf");
+ // LINUX: boletoViewer.getAsPDF("/home/temp/MeuBoleto.pdf");
+ File arquivoPdf = boletoViewer.getPdfAsFile("MeuPrimeiroBoleto.pdf");
+
+ // Agora veja o arquivo gerado na tela.
+ mostreBoletoNaTela(arquivoPdf);
+
+ }
+
+ /**
+ * Cria um boleto, em passos distintos, com os dados necessários para a visualização.
+ *
+ * @return boleto com dados
+ */
+ Boleto crieUmBoleto() {
+
+ /*
+ * PASSO 1: Você precisa dos dados de uma conta bancária habilitada para
+ * emissão de boletos.
+ */
+ ContaBancaria contaBancaria = crieUmaContaBancaria();
+
+ /*
+ * PASSO 2: Informe os dados do cedente.
+ */
+ Cedente cedente = crieUmCedente();
+
+ /*
+ * PASSO 3: Informe os dados do Sacado.
+ */
+ Sacado sacado = crieUmSacado();
+
+ /*
+ * PASSO 4: Crie um novo título/cobrança e informe os dados.
+ */
+ Titulo titulo = crieOsDadosDoNovoTitulo(new Titulo(contaBancaria,sacado,cedente));
+
+ /*
+ * PASSO 5: Crie o boleto e informe os dados necessários.
+ */
+ Boleto boleto = crieOsDadosDoNovoBoleto(new Boleto(titulo));
+
+ return boleto;
+ }
+
+ /**
+ * Preenche os principais dados do boleto.
+ *
+ * @param boleto
+ * @return boleto com os dados necssários
+ */
+ final Boleto crieOsDadosDoNovoBoleto(Boleto boleto) {
+
+ boleto.setLocalPagamento("Pagável preferencialmente na Rede X ou em qualquer Banco até o Vencimento.");
+ boleto.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor cobrado não é o esperado, aproveite o DESCONTÃO!");
+ boleto.setInstrucao1("PARA PAGAMENTO 1 até Hoje não cobrar nada!");
+ boleto.setInstrucao2("PARA PAGAMENTO 2 até Amanhã Não cobre!");
+ boleto.setInstrucao3("PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre.");
+ boleto.setInstrucao4("PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00");
+ boleto.setInstrucao5("PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00");
+ boleto.setInstrucao6("PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00");
+ boleto.setInstrucao7("PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!");
+ boleto.setInstrucao8("APÓS o Vencimento, Pagável Somente na Rede X.");
+
+ return boleto;
+ }
+
+ /**
+ * Preenche os principais dados do título.
+ *
+ * @param titulo
+ *
+ * @return título com os dados necssários
+ */
+ final Titulo crieOsDadosDoNovoTitulo(Titulo titulo) {
+
+ /*
+ * DADOS BÁSICOS.
+ */
+
+ titulo.setNumeroDoDocumento("123456");
+ titulo.setNossoNumero("99345678912");
+ titulo.setDigitoDoNossoNumero("5");
+ titulo.setValor(BigDecimal.valueOf(0.23));
+
+ // Para informar a data de maneira simples você pode utilizar as
+ // classes utilitárias do JRimum. Abaixo temos alguns exemplos:
+ // (1) titulo.setDataDoVencimento( DateFormat.DDMMYYYY_B.parse("11/03/2011") );
+ // (2) titulo.setDataDoVencimento( Dates.parse("11/03/2011", "dd/MM/yyyy") );
+ titulo.setDataDoDocumento(new Date());
+ titulo.setDataDoVencimento(new Date());
+
+ titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL);
+ titulo.setAceite(Aceite.A);
+ titulo.setDesconto(new BigDecimal(0.05));
+ titulo.setDeducao(BigDecimal.ZERO);
+ titulo.setMora(BigDecimal.ZERO);
+ titulo.setAcrecimo(BigDecimal.ZERO);
+ titulo.setValorCobrado(BigDecimal.ZERO);
+
+ return titulo;
+ }
+
+ /**
+ * Cria uma instância de sacado com os principais dados para o boleto.
+ *
+ * @return sacado com os dados necssários
+ */
+ final Sacado crieUmSacado() {
+
+ Sacado sacado = new Sacado("Java Developer Pronto Para Férias", "222.222.222-22");
+
+ // Informando o endereço do sacado.
+ Endereco enderecoSac = new Endereco();
+ enderecoSac.setUF(UnidadeFederativa.RN);
+ enderecoSac.setLocalidade("Natal");
+ enderecoSac.setCep(new CEP("59064-120"));
+ enderecoSac.setBairro("Grande Centro");
+ enderecoSac.setLogradouro("Rua poeta dos programas");
+ enderecoSac.setNumero("1");
+ sacado.addEndereco(enderecoSac);
+
+ return sacado;
+ }
+
+ /**
+ * Cria uma instância de cedente com os principais dados para o boleto.
+ *
+ * @return cedente com os dados necssários
+ */
+ final Cedente crieUmCedente() {
+
+ return new Cedente("Projeto JRimum", "00.000.208/0001-00");
+ }
+
+ /**
+ * Cria uma instância de conta bancária com os principais dados para o
+ * boleto em questão (Banco Bradesco).
+ *
+ * @return conta com os dados necssários
+ */
+ final ContaBancaria crieUmaContaBancaria(){
+
+ ContaBancaria contaBancaria = new ContaBancaria(BancosSuportados.BANCO_BRADESCO.create());
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(123456, "0"));
+ contaBancaria.setCarteira(new Carteira(30));
+ contaBancaria.setAgencia(new Agencia(1234, "1"));
+
+ return contaBancaria;
+ }
+
+ /**
+ * Exibe o arquivo na tela.
+ *
+ * @param arquivoBoleto
+ */
+ final void mostreBoletoNaTela(File arquivoBoleto) {
+
+ try {
+ // Descomente se estiver usando java 6 ou superior
+ // java.awt.Desktop.getDesktop().open(arquivoBoleto);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoBancoNaoSuportado.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoBancoNaoSuportado.java
new file mode 100644
index 0000000..7dc4bcf
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoBancoNaoSuportado.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 01/11/2010 - 09:37:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 01/11/2010 - 09:37:00
+ *
+ */
+package org.jrimum.bopepo.exemplo;
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.campolivre.CampoLivre;
+import org.jrimum.bopepo.view.BoletoViewer;
+import org.jrimum.domkee.comum.pessoa.endereco.CEP;
+import org.jrimum.domkee.comum.pessoa.endereco.Endereco;
+import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa;
+import org.jrimum.domkee.financeiro.banco.Banco;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.Cedente;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Sacado;
+import org.jrimum.domkee.financeiro.banco.febraban.SacadorAvalista;
+import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo.Aceite;
+
+/**
+ *
+ * Exemplo de código para geração de um boleto simples.
+ *
+ *
+ * Utiliza o Banco Bradesco como exemplo, já que possui um implementação simples.
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class MeuPrimeiroBoletoBancoNaoSuportado {
+
+ public static void main(String[] args) {
+
+ /*
+ * INFORMANDO DADOS SOBRE O CEDENTE.
+ */
+ Cedente cedente = new Cedente("PROJETO JRimum", "00.000.208/0001-00");
+
+ /*
+ * INFORMANDO DADOS SOBRE O SACADO.
+ */
+ Sacado sacado = new Sacado("JavaDeveloper Pronto Para Férias", "222.222.222-22");
+
+ // Informando o endereço do sacado.
+ Endereco enderecoSac = new Endereco();
+ enderecoSac.setUF(UnidadeFederativa.RN);
+ enderecoSac.setLocalidade("Natal");
+ enderecoSac.setCep(new CEP("59064-120"));
+ enderecoSac.setBairro("Grande Centro");
+ enderecoSac.setLogradouro("Rua poeta dos programas");
+ enderecoSac.setNumero("1");
+ sacado.addEndereco(enderecoSac);
+
+ /*
+ * INFORMANDO DADOS SOBRE O SACADOR AVALISTA.
+ */
+ SacadorAvalista sacadorAvalista = new SacadorAvalista("JRimum Enterprise", "00.000.000/0001-91");
+
+ // Informando o endereço do sacador avalista.
+ Endereco enderecoSacAval = new Endereco();
+ enderecoSacAval.setUF(UnidadeFederativa.DF);
+ enderecoSacAval.setLocalidade("Brasília");
+ enderecoSacAval.setCep(new CEP("59000-000"));
+ enderecoSacAval.setBairro("Grande Centro");
+ enderecoSacAval.setLogradouro("Rua Eternamente Principal");
+ enderecoSacAval.setNumero("001");
+ sacadorAvalista.addEndereco(enderecoSacAval);
+
+ /*
+ * INFORMANDO OS DADOS SOBRE O TÍTULO.
+ */
+ // RECURSO PONTO DE EXTENSÃO:
+ // Informando um banco que AINDA não é suportado nativamente pelo componente.
+ Banco banco = new JRimumBank();
+
+
+
+ // Informando dados sobre a conta bancária do título.
+ ContaBancaria contaBancaria = new ContaBancaria(banco);
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(123456, "0"));
+ contaBancaria.setCarteira(new Carteira(30));
+ contaBancaria.setAgencia(new Agencia(1234, "1"));
+
+ Titulo titulo = new Titulo(contaBancaria, sacado, cedente, sacadorAvalista);
+ titulo.setNumeroDoDocumento("123456");
+ titulo.setNossoNumero("993456789");
+ titulo.setDigitoDoNossoNumero("5");
+ titulo.setValor(BigDecimal.valueOf(0.23));
+ titulo.setDataDoDocumento(new Date());
+ titulo.setDataDoVencimento(new Date());
+ titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL);
+ titulo.setAceite(Aceite.A);
+ titulo.setDesconto(new BigDecimal(0.05));
+ titulo.setDeducao(BigDecimal.ZERO);
+ titulo.setMora(BigDecimal.ZERO);
+ titulo.setAcrecimo(BigDecimal.ZERO);
+ titulo.setValorCobrado(BigDecimal.ZERO);
+
+
+
+
+
+ /*
+ * INFORMANDO OS DADOS SOBRE O BOLETO.
+ */
+
+ // RECURSO PONTO DE EXTENSÃO:
+ // Informando o campo livre do banco que AINDA não é suportado nativamente pelo componente.
+ CampoLivre campoLivre = new CampoLivreJRimumBank(titulo);
+
+ Boleto boleto = new Boleto(titulo, campoLivre);
+
+ boleto.setLocalPagamento("Pagável preferencialmente na Rede X ou em " +
+ "qualquer Banco até o Vencimento.");
+ boleto.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor " +
+ "cobrado não é o esperado, aproveite o DESCONTÃO!");
+ boleto.setInstrucao1("PARA PAGAMENTO 1 até Hoje não cobrar nada!");
+ boleto.setInstrucao2("PARA PAGAMENTO 2 até Amanhã Não cobre!");
+ boleto.setInstrucao3("PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre.");
+ boleto.setInstrucao4("PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00");
+ boleto.setInstrucao5("PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00");
+ boleto.setInstrucao6("PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00");
+ boleto.setInstrucao7("PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!");
+ boleto.setInstrucao8("APÓS o Vencimento, Pagável Somente na Rede X.");
+
+ /*
+ * GERANDO O BOLETO BANCÁRIO.
+ */
+ // Instanciando um objeto "BoletoViewer", classe responsável pela
+ // geração do boleto bancário.
+ BoletoViewer boletoViewer = new BoletoViewer(boleto);
+
+ // Gerando o arquivo. No caso o arquivo mencionado será salvo na mesma
+ // pasta do projeto. Outros exemplos:
+ // WINDOWS: boletoViewer.getAsPDF("C:/Temp/MeuBoleto.pdf");
+ // LINUX: boletoViewer.getAsPDF("/home/temp/MeuBoleto.pdf");
+ File arquivoPdf = boletoViewer.getPdfAsFile("MeuPrimeiroBoleto.pdf");
+
+ // Mostrando o boleto gerado na tela.
+ mostreBoletoNaTela(arquivoPdf);
+ }
+
+ /**
+ * Exibe o arquivo na tela.
+ *
+ * @param arquivoBoleto
+ */
+ private static void mostreBoletoNaTela(File arquivoBoleto) {
+
+ try {
+ // Descomente se estiver usando java 6 ou superior
+ // java.awt.Desktop.getDesktop().open(arquivoBoleto);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoPersonalizado.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoPersonalizado.java
new file mode 100644
index 0000000..8e0fc5f
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoletoPersonalizado.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 01/11/2010 - 09:37:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 01/11/2010 - 09:37:00
+ *
+ */
+package org.jrimum.bopepo.exemplo;
+
+import java.io.File;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.view.BoletoViewer;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.utilix.ClassLoaders;
+
+/**
+ *
+ * Exemplo de código para geração de um boleto simples usando um template personalizado.
+ *
+ *
+ * Utiliza a classe utilitária Exemplos para criar os objetos necessários para gerar o boleto.
+ *
+ *
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class MeuPrimeiroBoletoPersonalizado {
+
+ public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+ titulo.getContaBancaria().setBanco(BancosSuportados.BANCO_DO_BRASIL.create());
+ titulo.setNossoNumero("1234567890");
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ //Informando o template personalizado:
+ File templatePersonalizado = new File(ClassLoaders.getResource("/templates/BoletoTemplatePersonalizacaoSimples.pdf").getFile());
+ BoletoViewer boletoViewer = new BoletoViewer(boleto, templatePersonalizado);
+
+ File arquivoPdf = boletoViewer.getPdfAsFile("MeuBoletoPersonalizado.pdf");
+
+ Exemplos.mostreBoletoNaTela(arquivoPdf);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmUmArquivo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmUmArquivo.java
new file mode 100644
index 0000000..cd4c4e8
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmUmArquivo.java
@@ -0,0 +1,109 @@
+
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 18/05/2008 - 21:13:29
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 18/05/2008 - 21:13:29
+ *
+ */
+
+package org.jrimum.bopepo.exemplo;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.view.BoletoViewer;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Exemplo de código para geração de vários boletos em um único arquivo PDF.
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class VariosBoletosEmUmArquivo {
+
+
+ public static void main(String[] args) {
+
+ Boleto boletoBB = crieBoletoBB();
+ Boleto boletoBradesco = crieBoletoBradesco();
+
+ List boletos = new ArrayList();
+ boletos.add(boletoBB);
+ boletos.add(boletoBradesco);
+
+ File pdf = BoletoViewer.groupInOnePDF(boletos, "PDFComVariosBoletos.pdf");
+ Exemplos.mostreBoletoNaTela(pdf);
+ }
+
+ /**
+ * Cria um boleto do banco Bradesco.
+ * @return
+ */
+ private static Boleto crieBoletoBradesco() {
+
+ Titulo tituloBradesco = Exemplos.crieTitulo();
+ tituloBradesco.setNossoNumero("01234567891");
+
+ ContaBancaria contaBancariaBradesco = tituloBradesco.getContaBancaria();
+ contaBancariaBradesco.setBanco(BancosSuportados.BANCO_BRADESCO.create());
+ contaBancariaBradesco.setAgencia(new Agencia(1234));
+ contaBancariaBradesco.setCarteira(new Carteira(12));
+ contaBancariaBradesco.setNumeroDaConta(new NumeroDaConta(1234567));
+
+ return Exemplos.crieBoleto(tituloBradesco);
+ }
+
+ /**
+ * Cria um boleto do Banco do Brasil.
+ * @return
+ */
+ private static Boleto crieBoletoBB() {
+
+ Titulo tituloBB = Exemplos.crieTitulo();
+ tituloBB .setNossoNumero("1234567890");
+
+ ContaBancaria contaBancariaBB = tituloBB.getContaBancaria();
+ contaBancariaBB.setBanco(BancosSuportados.BANCO_DO_BRASIL.create());
+
+ return Exemplos.crieBoleto(tituloBB);
+ }
+
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmVariosArquivos.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmVariosArquivos.java
new file mode 100644
index 0000000..49c183f
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/VariosBoletosEmVariosArquivos.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 18/05/2008 - 21:13:29
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 18/05/2008 - 21:13:29
+ *
+ */
+
+package org.jrimum.bopepo.exemplo;
+
+import java.io.File;
+import java.util.List;
+
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.view.BoletoViewer;
+
+
+
+/**
+ *
+ *
+ * Exemplo de código para geração de vários boletos em um único arquivo PDF.
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+
+public class VariosBoletosEmVariosArquivos {
+
+
+ public static void main(String[] args) {
+
+ /*
+ * É bem simples, consiga os boletos
+ */
+
+ List boletos = Exemplos.getVariosBoletos();
+
+ /*
+ * Depois diga o nome do diretorio para onde os boletos serão gerados.
+ */
+
+ BoletoViewer.onePerPDF(boletos, new File("./"), "prefixo-boleto-", "-sufixo-DePagamento");
+
+
+ /*
+ * Pronto, agora vamos conferir um:
+ */
+ try{
+ // Descomente se estiver usando java 6 ou superior
+ //java.awt.Desktop.getDesktop().open(new File("prefixo-boleto-1-sufixo-DePagamento.pdf"));
+
+ }catch(Exception e){
+ throw new RuntimeException("Arquivo não gerado!",e);
+ }
+
+ /*
+ * É sério, é só isso mesmo!
+ * Se não acredita confira os vários arquivos que estão no diretório.
+ */
+
+ }
+
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/banrisul/NossoNumero.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/banrisul/NossoNumero.java
new file mode 100644
index 0000000..3ec8d8f
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/banrisul/NossoNumero.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright 2011 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 11/04/2011 - 23:20:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2011 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 11/04/2011 - 23:20:00
+ *
+ */
+
+package org.jrimum.bopepo.exemplo.banco.banrisul;
+
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.utilix.Objects;
+import org.jrimum.vallia.digitoverificador.Modulo;
+
+/**
+ * Classe responsável pela criação do Nosso Número referente ao Banco Banrisul.
+ *
+ * @author Gilmar P.S.L.
+ */
+public class NossoNumero {
+
+ private int numero;
+
+ private int dvMod10;
+ private int dvMod11;
+
+ /**
+ * Nosso número calculado.
+ */
+ private StringBuilder nossoNumero = new StringBuilder("");
+
+ /**
+ * Para uso interno.
+ */
+ private NossoNumero() {}
+
+ public static NossoNumero valueOf(int numero){
+
+ Objects.checkArgument(numero > 0, "Número [ "+numero+" ] inválido!");
+
+ NossoNumero nn = new NossoNumero();
+ nn.numero = numero;
+ nn.create();
+
+ return nn;
+ }
+
+ /**
+ * Responsável pela lógica de cálculo do dígito verificador informada pelo
+ * Bradesco.
+ *
+ * Para maiores esclarecimentos ver o manual do Bradesco.
+ *
+ */
+ private void create(){
+
+ nossoNumero.append(Fillers.ZERO_LEFT.fill(numero, 8));
+
+ calculeDvMod10();
+ calculeDvMod11();
+ }
+
+ private void calculeDvMod11() {
+
+ int somatorio = Modulo.calculeSomaSequencialMod11(nossoNumero.toString()+getDvMod10(),2,7);
+
+ int restoDivisao;
+
+ /*
+ * Caso o somatório obtido seja menor que 11, considerar como resto da divisão o próprio somatório.
+ */
+ if(somatorio < 11){
+ restoDivisao = somatorio;
+ }else{
+ restoDivisao = somatorio % 11;
+ }
+
+ int restoSubtracao = (11 - restoDivisao);
+
+ /*
+ * Caso o resto obtido no cálculo do módulo 11 seja 0, o segundo NC será
+ * igual ao próprio resto.
+ */
+ if(restoDivisao == 0){
+ this.dvMod11 = 0;
+ }else{
+
+ if(restoDivisao != 1){
+
+ this.dvMod11 = restoSubtracao;
+
+ }else{
+ /*
+ * Caso o resto obtido no cálculo do módulo 11 seja igual a 1,
+ * considera-se o DV inválido. Soma-se, então, "1" ao DV obtido
+ * do módulo "10" e refaz-se o cálculo do módulo “11” .
+ */
+ this.dvMod10++;
+
+ /*
+ * Se o dígito obtido pelo módulo “10” era igual a "9",
+ * considera-se então (9+1=10) DV inválido. Neste caso, o DV do
+ * módulo "10" automaticamente será igual a "0" e procede-se
+ * assim novo cálculo pelo módulo "11".
+ */
+ if(this.dvMod10 == 10){
+
+ dvMod10 = 0;
+ }
+
+ /*
+ * Novo cálculo
+ */
+ calculeDvMod11();
+ }
+ }
+ }
+
+ private void calculeDvMod10() {
+
+ int somatorio = Modulo.calculeSomaSequencialMod10(nossoNumero.toString(),1,2);
+
+ int restoDivisao;
+
+ /*
+ * Quando o somatório for menor que 10, o resto da divisão por 10 será o
+ * próprio somatório.
+ */
+ if(somatorio < 10){
+ restoDivisao = somatorio;
+ }else{
+ restoDivisao = somatorio % 10;
+ }
+
+ int restoSubtracao = (10 - restoDivisao);
+
+ if(restoDivisao == 0){
+ this.dvMod10 = 0;
+ }else{
+ this.dvMod10 = restoSubtracao;
+ }
+ }
+
+ /**
+ * Retorna o digito verificador calculado.
+ *
+ * @return String Digito Verificador de dois dígitos
+ */
+ public String getDv(){
+ return dvMod10+""+dvMod11;
+ }
+
+ /**
+ * @return the dvMod10
+ */
+ public int getDvMod10() {
+ return dvMod10;
+ }
+
+ /**
+ * @return the dvMod11
+ */
+ public int getDvMod11() {
+ return dvMod11;
+ }
+
+ /**
+ * String com o nosso número sem o digito verificador.
+ *
+ * @return nosso número
+ */
+ public String writeRaw(){
+ return Fillers.ZERO_LEFT.fill(numero, 8);
+ }
+
+ /**
+ * String com o nosso número com o digito verificador.
+ *
+ * @return nosso número
+ */
+ public String writeFull(){
+ return nossoNumero.toString();
+ }
+
+ /**
+ * String com o nosso número formatado com o digito verificador.
+ *
+ * @return nosso número
+ */
+ public String writeFormated(){
+ return Fillers.ZERO_LEFT.fill(numero, 8)+"."+getDv();
+ }
+
+ /**
+ * Escreve o nosso número formatado.
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return writeFormated();
+ }
+
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero10Exemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero10Exemplo.java
new file mode 100644
index 0000000..43ea2c5
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero10Exemplo.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 16/09/2009 - 00:44:51
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 16/09/2009 - 00:44:51
+ *
+ */
+package org.jrimum.bopepo.exemplo.banco.bb;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.exemplo.Exemplos;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Exemplo do boleto para o Banco do Brasil com Nosso Número 10
+ *
+ *
+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
+ * do Banco do Brasil com Nosso Número 10
+ *
+ *
+ * @author Rômulo Augusto
+ *
+ * @version 0.2
+ */
+public class BoletoBBNossoNumero10Exemplo {
+
+ public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ //Campos específicos para o Banco do Brasil com nosso número 10.
+ titulo.setNossoNumero("1234567890");
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+ contaBancaria.setBanco(BancosSuportados.BANCO_DO_BRASIL.create());
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ Exemplos.execute(boleto);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero11Exemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero11Exemplo.java
new file mode 100644
index 0000000..c9603c8
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero11Exemplo.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 16/09/2009 - 00:44:51
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 16/09/2009 - 00:44:51
+ *
+ */
+package org.jrimum.bopepo.exemplo.banco.bb;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.exemplo.Exemplos;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Exemplo do boleto para o Banco do Brasil com Nosso Número 11
+ *
+ *
+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
+ * do Banco do Brasil com Nosso Número 11
+ *
+ *
+ * @author Rômulo Augusto
+ *
+ * @version 0.2
+ */
+public class BoletoBBNossoNumero11Exemplo {
+
+ public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ //Campos específicos para o Banco do Brasil com nosso número 11.
+ titulo.setNossoNumero("12345678901");
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+ contaBancaria.setBanco(BancosSuportados.BANCO_DO_BRASIL.create());
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ Exemplos.execute(boleto);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio6Exemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio6Exemplo.java
new file mode 100644
index 0000000..f4b8b67
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio6Exemplo.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 16/09/2009 - 00:44:51
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 16/09/2009 - 00:44:51
+ *
+ */
+package org.jrimum.bopepo.exemplo.banco.bb;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.exemplo.Exemplos;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Exemplo do boleto para o Banco do Brasil com Nosso Número de 17 dígitos e Convênio de 6 posições.
+ *
+ *
+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
+ * do Banco do Brasil com Banco do Brasil com Nosso Número 17/Convênio 7;
+ *
+ *
+ * @author Gilmar P.S.L.
+ * @author Rômulo Augusto
+ *
+ * @version 0.2
+ */
+public class BoletoBBNossoNumero17Convenio6Exemplo {
+
+ public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ /*
+ * Campos específicos para o Banco do Brasil com Nosso Número 17 / Convênio 6.
+ */
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+
+ /*
+ * Banco do Brasil 001
+ */
+ contaBancaria.setBanco(BancosSuportados.BANCO_DO_BRASIL.create());
+
+ /*
+ * Conta/Convênio de 6 posições ou seja, até 999999
+ */
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(123456));
+
+ /*
+ * Nosso Número de 17 posições
+ */
+ titulo.setNossoNumero("12345678901234567");
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ Exemplos.execute(boleto);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio7Exemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio7Exemplo.java
new file mode 100644
index 0000000..416ea13
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/BoletoBBNossoNumero17Convenio7Exemplo.java
@@ -0,0 +1,61 @@
+package org.jrimum.bopepo.exemplo.banco.bb;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.exemplo.Exemplos;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Exemplo do boleto para o Banco do Brasil com Nosso Número de 17 dígitos e Convênio de 7 posições.
+ *
+ *
+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
+ * do Banco do Brasil com Nosso Número 17/Convênio 7;
+ *
+ *
+ * @author Gilmar P.S.L.
+ *
+ * @version 0.2
+ */
+public class BoletoBBNossoNumero17Convenio7Exemplo {
+
+
+public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ /*
+ * Campos específicos para o Banco do Brasil com Nosso Número 17 / Convênio 6.
+ */
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+
+ /*
+ * Banco do Brasil 001
+ */
+ contaBancaria.setBanco(BancosSuportados.BANCO_DO_BRASIL.create());
+
+ /*
+ * Conta/Convênio de 7 posições ou seja, acima de 1.000.000
+ */
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(1234567));
+
+ /*
+ * Nosso Número de 17 posições
+ */
+ titulo.setNossoNumero("12345678901234567");
+
+ /*
+ * Carteira com no máximo 2 dígitos
+ */
+ contaBancaria.setCarteira(new Carteira(23));
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ Exemplos.execute(boleto);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/package-info.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/package-info.java
new file mode 100644
index 0000000..2bfb6b7
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bb/package-info.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 02/11/2010 - 18:06:18
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2010 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 02/11/2010 - 18:06:18
+ *
+ */
+
+/**
+ * Exemplos de geração de boletos para o Banco do Brasil.
+ *
+ * @author Gilmar P.S.L
+ * @author Rômulo Augusto
+ */
+package org.jrimum.bopepo.exemplo.banco.bb;
\ No newline at end of file
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bnb/BoletoBancoDoNordesteDoBrasilExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bnb/BoletoBancoDoNordesteDoBrasilExemplo.java
new file mode 100644
index 0000000..ba66d6f
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bnb/BoletoBancoDoNordesteDoBrasilExemplo.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 16/12/2010 - 13:24:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2010 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Created at: 16/12/2010 - 13:24:00
+ *
+ */
+
+
+package org.jrimum.bopepo.exemplo.banco.bnb;
+
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.exemplo.Exemplos;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Exemplo do boleto para o Banco do Nordeste
+ *
+ *
+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
+ * do Banco do Nordeste do Brasil
+ *
+ *
+ * @author Gilmar P.S.L.
+ * @author Misael Barreto
+ * @author Paulo Porto
+ *
+ * @version 0.2
+ */
+public class BoletoBancoDoNordesteDoBrasilExemplo {
+
+ public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ /*
+ * Campos específicos para o Banco do Nordeste.
+ */
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+
+ /*
+ * Banco do Nordeste 004
+ */
+ contaBancaria.setBanco(BancosSuportados.BANCO_DO_NORDESTE_DO_BRASIL.create());
+
+ /*
+ * Agência com no máximo 4 dígitos
+ */
+ contaBancaria.setAgencia(new Agencia(100));
+
+ /*
+ * Carteira com no máximo 2 dígitos
+ */
+ contaBancaria.setCarteira(new Carteira(57));
+
+ /*
+ * Nosso Número com 7 dígitos
+ */
+ titulo.setNossoNumero("7654321");
+
+ /*
+ * Dígito do Nosso Número
+ */
+ titulo.setDigitoDoNossoNumero("0");
+
+ /*
+ * Número da conta com no máximo 7 dígitos e necessariamente com o dígito verificador
+ */
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(13677, "9"));
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ Exemplos.execute(boleto);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/BoletoBradescoExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/BoletoBradescoExemplo.java
new file mode 100644
index 0000000..907e05c
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/BoletoBradescoExemplo.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 16/09/2009 - 00:44:51
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 16/09/2009 - 00:44:51
+ *
+ */
+package org.jrimum.bopepo.exemplo.banco.bradesco;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.exemplo.Exemplos;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Exemplo do boleto para o Banco Bradesco
+ *
+ *
+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
+ * do Banco Bradesco
+ *
+ *
+ * @author Gilmar P.S.L.
+ * @author Rômulo Augusto
+ *
+ * @version 0.2
+ */
+public class BoletoBradescoExemplo {
+
+ public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ /*
+ * Campos específicos para o Banco Bradesco.
+ */
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+
+ /*
+ * Banco bradesco 237
+ */
+ contaBancaria.setBanco(BancosSuportados.BANCO_BRADESCO.create());
+
+ /*
+ * Agência com no máximo 4 dígitos
+ */
+ contaBancaria.setAgencia(new Agencia(1234));
+
+ /*
+ * Carteira com no máximo 2 dígitos
+ */
+ contaBancaria.setCarteira(new Carteira(12));
+
+ /*
+ * Nosso número com 11 dígitos
+ */
+ titulo.setNossoNumero("01234567891");
+
+ /*
+ * Número da conta com no máxiom 7 dígitos
+ */
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(1234567));
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ Exemplos.execute(boleto);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/NossoNumero.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/NossoNumero.java
new file mode 100644
index 0000000..96cf411
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/bradesco/NossoNumero.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2011 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 07/04/2011 - 10:57:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2011 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 07/04/2011 - 10:57:00
+ *
+ */
+
+package org.jrimum.bopepo.exemplo.banco.bradesco;
+
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.utilix.Objects;
+import org.jrimum.vallia.digitoverificador.Modulo;
+
+/**
+ * Classe responsável pela criação do Nosso Número referente ao Banco Bradesco.
+ *
+ * @author Gilmar P.S.L.
+ */
+public class NossoNumero {
+
+ private String carteira;
+
+ private long numero;
+
+ private String dv;
+
+ private StringBuilder nossoNumero = new StringBuilder("");
+
+ /**
+ * Para uso interno.
+ */
+ private NossoNumero() {}
+
+ public static NossoNumero valueOf(long numero, int carteira){
+
+ Objects.checkArgument(numero > 0, "Número [ "+numero+" ] inválido!");
+ Objects.checkArgument(carteira > 0, "Carteira [ "+carteira+" ] inválida!");
+ Objects.checkArgument(carteira <= 99, "Carteira [ "+carteira+" ] inválida! Carteira Bradesco deve ser um número entre 1 e 99");
+
+ NossoNumero nn = new NossoNumero();
+ nn.numero = numero;
+ nn.carteira = Fillers.ZERO_LEFT.fill(carteira, 2);
+ nn.create();
+
+ return nn;
+ }
+
+ /**
+ * Responsável pela lógica de cálculo do dígito verificador informada pelo
+ * Bradesco.
+ *
+ * Para maiores esclarecimentos ver o manual do Bradesco.
+ *
+ */
+ private void create(){
+
+ nossoNumero.append(Fillers.ZERO_LEFT.fill(numero, 11));
+
+ String formula = this.carteira+nossoNumero.toString();
+
+ int restoDivisao = Modulo.calculeMod11(formula,2,7);
+
+ int restoSubtracao = (11 - restoDivisao);
+
+ if(restoDivisao == 0){
+ dv = "0";
+ }else{
+ if(restoSubtracao == 10){
+ dv = "P";
+ }else{
+ dv = ""+restoSubtracao;
+ }
+ }
+ nossoNumero.append(dv);
+ }
+
+ /**
+ * Retorna o digito verificador calculado.
+ *
+ * @return String Digito Verificador
+ */
+ public String getDv(){
+ return dv;
+ }
+
+ /**
+ * String com o nosso número sem o digito verificador.
+ *
+ * @return nosso número
+ */
+ public String writeRaw(){
+ return Fillers.ZERO_LEFT.fill(numero, 11);
+ }
+
+ /**
+ * String com o nosso número com o digito verificador.
+ *
+ * @return nosso número
+ */
+ public String writeFull(){
+ return nossoNumero.toString();
+ }
+
+ /**
+ * String com o nosso número formatado com o digito verificador.
+ *
+ * @return nosso número
+ */
+ public String writeFormated(){
+ return Fillers.ZERO_LEFT.fill(numero, 11)+"-"+dv;
+ }
+
+ /**
+ * Escreve o nosso número formatado.
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return writeFormated();
+ }
+
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/brb/BoletoBancoDeBrasiliaExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/brb/BoletoBancoDeBrasiliaExemplo.java
new file mode 100644
index 0000000..0d94725
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/brb/BoletoBancoDeBrasiliaExemplo.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2014 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 01/02/2014 - 17:49:03
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2014 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 01/02/2014 - 17:49:03
+ *
+ */
+
+package org.jrimum.bopepo.exemplo.banco.brb;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.exemplo.Exemplos;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ * Exemplo do boleto para BRB - Banco de Brasília.
+
+ *
+ * Mostra um exemplo funcional que gera um boleto para a implementação padrão do BRB.
+ *
+ *
+ * @author Gilmar P.S.L.
+ *
+ * @version 0.2
+ */
+/**
+ * @author Gilmar P.S.L.
+ *
+ */
+public class BoletoBancoDeBrasiliaExemplo {
+
+ public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ /*
+ * Campos específicos para o Banco de Brasília.
+ */
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+
+ /*
+ * Banco 070
+ */
+ contaBancaria.setBanco(BancosSuportados.BANCO_DE_BRASILIA.create());
+
+ /*
+ * Código do agência com no máxiom 3 dígitos
+ */
+ contaBancaria.setAgencia(new Agencia(58));//058
+
+ /*
+ * Código do conta com no máxiom 7 dígitos
+ */
+ titulo.getContaBancaria().setNumeroDaConta(new NumeroDaConta(2006));//0002006
+
+ /*
+ * Carteira com no máximo 2 dígitos
+ */
+ contaBancaria.setCarteira(new Carteira(1,TipoDeCobranca.SEM_REGISTRO));
+
+ /*
+ * Nosso número com 6 dígitos
+ */
+ titulo.setNossoNumero("000001");
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ Exemplos.execute(boleto);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cecred/BoletoCecredExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cecred/BoletoCecredExemplo.java
new file mode 100644
index 0000000..fb9b67f
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cecred/BoletoCecredExemplo.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2014 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 21/01/2014 - 16:28:50
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2014 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 21/01/2014 - 16:28:50
+ *
+ */
+
+package org.jrimum.bopepo.exemplo.banco.cecred;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.exemplo.Exemplos;
+import org.jrimum.bopepo.parametro.ParametroCECRED;
+import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ * Exemplo do boleto para CECRED.
+ *
+ *
+ * Mostra um exemplo funcional que gera um boleto para a implementação padrão do
+ * CECRED.
+ *
+ *
+ * @author Gilmar P.S.L.
+ *
+ * @version 0.2
+ */
+public class BoletoCecredExemplo {
+
+ public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ /*
+ * Campos específicos para o CECRED.
+ */
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+
+ /*
+ * Banco 085
+ */
+ contaBancaria.setBanco(BancosSuportados.CECRED.create());
+
+ /*
+ * Número da conta com no máximo 8 dígitos
+ */
+ int conta = 12345;
+
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(conta));
+
+ /*
+ * Carteira com no máximo 2 dígitos
+ */
+ contaBancaria.setCarteira(new Carteira(12));
+
+ /*
+ * Númeero sequencial do boleto com no máximo 9 dígitos
+ */
+ String sequencial = "123456789";
+
+ /*
+ * Nosso número com exatamente 17 dígitos
+ * "numero_da_conta"[8] + "sequencial"[9]
+ */
+ titulo.setNossoNumero("000"+conta+sequencial);
+
+ /*
+ * Código do convênio com no máxiom 6 dígitos
+ */
+ titulo.setParametrosBancarios(new ParametrosBancariosMap(ParametroCECRED.CODIGO_DO_CONVENIO, 123));
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ Exemplos.execute(boleto);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cef/NossoNumeroCobrancaRapidaSICOB.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cef/NossoNumeroCobrancaRapidaSICOB.java
new file mode 100644
index 0000000..4e2e828
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/cef/NossoNumeroCobrancaRapidaSICOB.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2013 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 21/03/2013 - 11:25:33
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2013 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 21/03/2013 - 11:25:33
+ *
+ */
+package org.jrimum.bopepo.exemplo.banco.cef;
+
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.utilix.Objects;
+import org.jrimum.vallia.digitoverificador.Modulo;
+
+/**
+ * Nosso Número referente a COBRANÇA RÁPIDA – 11 POSIÇÕES da CAIXA ECONÔMICA
+ * FEDERAL (CEF)
+ *
+ *
+ *
Campo com 10 posições sempre iniciando com 9;
+ *
Utiliza 1 dígito verificador calculado através do módulo 11, com peso 2 a
+ * 9.
+ *
+ *
+ *
+ * 9NNNNNNNNN - D1
+ *
+ *
+ *
+ * @author Gilmar P.S.L.
+ */
+public class NossoNumeroCobrancaRapidaSICOB {
+
+ private long numero;
+
+ private String dv;
+
+ private StringBuilder nossoNumero = new StringBuilder("");
+
+ /**
+ * Para uso interno.
+ */
+ private NossoNumeroCobrancaRapidaSICOB() {}
+
+ public static NossoNumeroCobrancaRapidaSICOB valueOf(long numero){
+
+ Objects.checkArgument(numero > 0, "Número [ "+numero+" ] inválido!");
+
+ NossoNumeroCobrancaRapidaSICOB nn = new NossoNumeroCobrancaRapidaSICOB();
+ nn.numero = numero;
+ nn.create();
+
+ return nn;
+ }
+
+ /**
+ * Responsável pela lógica de cálculo do dígito verificador informada pelo
+ * Bradesco.
+ *
+ * Para maiores esclarecimentos ver o manual do Bradesco.
+ *
+ */
+ private void create(){
+
+ nossoNumero.append(9);
+ nossoNumero.append(Fillers.ZERO_LEFT.fill(numero, 9));
+
+ String formula = nossoNumero.toString();
+
+ int restoDivisao = Modulo.calculeMod11(formula,2,9);
+
+ int restoSubtracao = (11 - restoDivisao);
+
+ if(restoDivisao > 9){
+ dv = "0";
+ }else{
+ dv = ""+restoSubtracao;
+ }
+
+ nossoNumero.append(dv);
+ }
+
+ /**
+ * Retorna o digito verificador calculado.
+ *
+ * @return String Digito Verificador
+ */
+ public String getDv(){
+ return dv;
+ }
+
+ /**
+ * String com o nosso número sem o digito verificador.
+ *
+ * @return nosso número
+ */
+ public String writeRaw(){
+ return Fillers.ZERO_LEFT.fill(numero, 10);
+ }
+
+ /**
+ * String com o nosso número com o digito verificador.
+ *
+ * @return nosso número
+ */
+ public String writeFull(){
+ return nossoNumero.toString();
+ }
+
+ /**
+ * String com o nosso número formatado com o digito verificador.
+ *
+ * @return nosso número
+ */
+ public String writeFormated(){
+ return "9"+Fillers.ZERO_LEFT.fill(numero, 9)+"-"+dv;
+ }
+
+ /**
+ * Escreve o nosso número formatado.
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return writeFormated();
+ }
+}
\ No newline at end of file
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/package-info.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/package-info.java
new file mode 100644
index 0000000..e8b1384
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/package-info.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 14/08/2010 - 20:50:14
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2010 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 14/08/2010 - 20:50:14
+ *
+ */
+
+/**
+ * Criação de dados para os respectivos bancos na demonstração de geração de boletos.
+ *
+ * @author Gilmar P.S.L
+ */
+package org.jrimum.bopepo.exemplo.banco;
\ No newline at end of file
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/sicredi/BoletoSicrediExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/sicredi/BoletoSicrediExemplo.java
new file mode 100644
index 0000000..76a4267
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/banco/sicredi/BoletoSicrediExemplo.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 12/11/2010 - 12:47:22
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2010 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Created at: 12/11/2010 - 12:47:22
+ *
+ */
+
+package org.jrimum.bopepo.exemplo.banco.sicredi;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.exemplo.Exemplos;
+import org.jrimum.bopepo.parametro.ParametroBancoSicredi;
+import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Exemplo do boleto para o Banco Sicredi
+ *
+ *
+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
+ * do Banco Sicredi
+ *
+ *
+ * @author Gilmar P.S.L.
+ *
+ * @version 0.2
+ */
+public class BoletoSicrediExemplo {
+
+public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ /*
+ * Campos específicos para o Banco Sicredi.
+ */
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+
+ /*
+ * Banco Sicredi 748
+ */
+ contaBancaria.setBanco(BancosSuportados.BANCO_SICREDI.create());
+
+ contaBancaria.setAgencia(new Agencia(165));
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(623));
+ contaBancaria.setCarteira(new Carteira(1, TipoDeCobranca.SEM_REGISTRO));
+
+ titulo.setNossoNumero("07200003");
+ titulo.setDigitoDoNossoNumero("1");
+
+ titulo.setParametrosBancarios(new ParametrosBancariosMap(ParametroBancoSicredi.POSTO_DA_AGENCIA, 2));
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ Exemplos.execute(boleto);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/bancoob/BoletoBancoobCobrancaNaoRegistradaExemplo.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/bancoob/BoletoBancoobCobrancaNaoRegistradaExemplo.java
new file mode 100644
index 0000000..a3d9cb1
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/bancoob/BoletoBancoobCobrancaNaoRegistradaExemplo.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2011 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 17/02/2011 - 12:40:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2011 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 17/02/2011 - 12:40:00
+ */
+
+package org.jrimum.bopepo.exemplo.bancoob;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.exemplo.Exemplos;
+import org.jrimum.bopepo.parametro.ParametroBancoob;
+import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Exemplo do boleto para o Bancoob - Cobrança não registrada.
+ *
+ *
+ * Mostra um exemplo funcional que gera um boleto para a implementação de campo
+ * livre do Bancoob para cobrança não registrada.
+ *
+ *
+ * @author Gilmar P.S.L.
+ *
+ * @version 0.2
+ */
+public class BoletoBancoobCobrancaNaoRegistradaExemplo {
+
+ public static void main(String[] args) {
+
+ Titulo titulo = Exemplos.crieTitulo();
+
+ /*
+ * Campos específicos para o Bancoob.
+ */
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+
+ /*
+ * Banco Sicredi 756
+ */
+ contaBancaria.setBanco(BancosSuportados.BANCOOB.create());
+
+ contaBancaria.setAgencia(new Agencia(4340));
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(1));
+ contaBancaria.setCarteira(new Carteira(1));
+
+ titulo.setNossoNumero("11000001");
+ titulo.setParametrosBancarios(new ParametrosBancariosMap(ParametroBancoob.NUMERO_DA_PARCELA,Integer.valueOf(0)));
+
+ Boleto boleto = Exemplos.crieBoleto(titulo);
+
+ Exemplos.execute(boleto);
+ }
+}
diff --git a/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/package-info.java b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/package-info.java
new file mode 100644
index 0000000..4bbb396
--- /dev/null
+++ b/jrimum-bopepo/src/examples/java/org/jrimum/bopepo/exemplo/package-info.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 14/08/2010 - 20:50:14
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2010 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 14/08/2010 - 20:50:14
+ *
+ */
+
+/**
+ * Exemplos demosntrativos envolvendo a geração de boletos.
+ *
+ * @author Gilmar P.S.L
+ */
+package org.jrimum.bopepo.exemplo;
\ No newline at end of file
diff --git a/jrimum-bopepo/src/examples/resources/img/999.png b/jrimum-bopepo/src/examples/resources/img/999.png
new file mode 100644
index 0000000..bf0547d
Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/img/999.png differ
diff --git a/jrimum-bopepo/src/examples/resources/img/JRiboy.png b/jrimum-bopepo/src/examples/resources/img/JRiboy.png
new file mode 100644
index 0000000..0515612
Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/img/JRiboy.png differ
diff --git a/jrimum-bopepo/src/examples/resources/img/JRilogo.png b/jrimum-bopepo/src/examples/resources/img/JRilogo.png
new file mode 100644
index 0000000..d93b705
Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/img/JRilogo.png differ
diff --git a/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.odt b/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.odt
new file mode 100644
index 0000000..3f70fe1
Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.odt differ
diff --git a/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.pdf b/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.pdf
new file mode 100644
index 0000000..80a846c
Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/templates/BoletoCarne3PorPagina.pdf differ
diff --git a/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.odt b/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.odt
new file mode 100644
index 0000000..1578958
Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.odt differ
diff --git a/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.pdf b/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.pdf
new file mode 100644
index 0000000..3fa22b9
Binary files /dev/null and b/jrimum-bopepo/src/examples/resources/templates/BoletoTemplatePersonalizacaoSimples.pdf differ
diff --git a/jrimum-bopepo/src/main/assembly/jrimum-bopepo-examples.xml b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-examples.xml
new file mode 100644
index 0000000..07651a4
--- /dev/null
+++ b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-examples.xml
@@ -0,0 +1,27 @@
+
+ examples
+
+ zip
+
+
+
+ src/examples/java
+ true
+ /
+
+ **/*.java
+
+
+
+ src/examples/resources
+ true
+ /resources
+
+ **/**
+
+
+
+
\ No newline at end of file
diff --git a/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies-src.xml b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies-src.xml
new file mode 100644
index 0000000..6e8aebf
--- /dev/null
+++ b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies-src.xml
@@ -0,0 +1,60 @@
+
+ dep-sources
+
+ jar
+
+ false
+
+
+ /src/main/java
+ true
+ /
+
+ **/*.java
+
+
+
+ /src/main/resources
+ true
+ /
+
+ **/**
+
+
+
+ ../jrimum-texgit/src/main/java
+ true
+ /
+
+ **/*.java
+
+
+
+ ../jrimum-utilix/src/main/java
+ true
+ /
+
+ **/*.java
+
+
+
+ ../jrimum-vallia/src/main/java
+ true
+ /
+
+ **/*.java
+
+
+
+ ../jrimum-domkee/src/main/java
+ true
+ /
+
+ **/*.java
+
+
+
+
\ No newline at end of file
diff --git a/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies.xml b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies.xml
new file mode 100644
index 0000000..90b7a0e
--- /dev/null
+++ b/jrimum-bopepo/src/main/assembly/jrimum-bopepo-with-dependencies.xml
@@ -0,0 +1,22 @@
+
+ dep
+
+ jar
+
+ false
+
+
+ /
+ true
+ true
+
+ commons-lang:commons-lang
+ log4j:log4j
+ com.lowagie:itext
+
+
+
+
\ No newline at end of file
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BancosSuportados.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BancosSuportados.java
new file mode 100644
index 0000000..a11c843
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BancosSuportados.java
@@ -0,0 +1,473 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 19:08:39
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 19:08:39
+ *
+ */
+
+package org.jrimum.bopepo;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jrimum.domkee.comum.pessoa.id.cprf.CNPJ;
+import org.jrimum.domkee.financeiro.banco.febraban.Banco;
+import org.jrimum.domkee.financeiro.banco.febraban.CodigoDeCompensacaoBACEN;
+
+/**
+ *
+ * Enumeração dos bancos segundo o supervisão da BACEN em
+ * funcionamento no país e que possuem pelo menos uma implementação de
+ * ICampoLivre.
+ *
+ *
+ *
+ * A partir de um EnumBanco específico, como o
+ * BANCO_DO_BRASIL, você pode solicitar um nova instância de um
+ * banco representado por IBanco ou utilizar as costantes
+ * enumeradas e não enumeradas como melhor for o caso.
+ *
+ *
+ *
EXEMPLOS:
+ *
+ *
+ * Para uma nova instância do Banco do Brasil faça:
+ *
+ *
+ * IBanco bancoDoBrasil = EnumBancos.BANCO_DO_BRASIL.newInstance();
+ *
+ *
+ *
+ *
+ * Para utilizar somento o código de compensação:
+ *
+ *
+ * EnumBancos.BANCO_DO_BRASIL.getCodigoDeCompensacao();
+ *
+ *
+ *
+ *
+ * Para saber se um banco é suportado pelo componete, veja a lista antes
+ * (LinkParaLista) ou faça:
+ *
+ *
+ * EnumBancos.isSuportado(banco.getCodigoDeCompensacao)
+ *
+ *
+ *
+ * @author Gilmar P.S.L.
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ * @author Samuel Valério
+ * @author Lukas
+ * Antunes - Colaborador com o banco Intermedium (077)
+ * @author Fernando Dias -
+ * Colaborador com o banco Rural (453)
+ * @author Paulo Porto -
+ * Colaborador com o Banco do Nordeste do Brasil (004).
+ * @author Fabiano Carrijo -
+ * Colaborador com o Banco Citibank (756).
+ * @author Douglas Ramiro -
+ * Colaborador com o Banco de Brasília (070).
+ *
+ * @see org.jrimum.bopepo.campolivre.CampoLivre
+ * @see org.jrimum.domkee.financeiro.banco.Banco
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public enum BancosSuportados{
+
+ /*
+ * <=====================================================================>
+ * Observe que toda a enumeração segue a ORDEM dos códigos de compensação.
+ * Caso queira modificar alguma coisa, leve sempre em consideração essa
+ * ORDEM.
+ * <=====================================================================>
+ */
+
+ /**
+ * Tipo enumerado que representa o Banco do Brasil, código
+ * de compensação 001site.
+ *
+ * @since 0.2
+ */
+ BANCO_DO_BRASIL("001", "00000000000191", "BANCO DO BRASIL S.A.", "Banco do Brasil - Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Banco do Nordeste do Brasil, código
+ * de compensação 004 (site).
+ *
+ * @since 0.2-Helio
+ */
+ BANCO_DO_NORDESTE_DO_BRASIL("004","07237373000120", "BANCO DO NORDESTE DO BRASIL S.A.","Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Banestes, Banco do Estado do Espírito Santo,
+ * código de compensação 021
+ *
+ * site.
+ *
+ * @since 0.2
+ */
+ BANCO_DO_ESTADO_DO_ESPIRITO_SANTO("021", "28127603000178", "BANCO DO ESTADO DO ESPIRITO SANTO S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Santander Banco Santander
+ * (Brasil) S. A., código de compensação 033
+ * site.
+ *
+ * @since 0.2
+ */
+ BANCO_SANTANDER("033", "90400888000142", "BANCO SANTANDER (BRASIL) S. A.", "Banco Mútiplo"),
+
+ /**
+ * Tipo enumerado que representa o Banrisul, Banco do Estado do Rio Grande do Sul,
+ * código de compensação 041
+ * site.
+ *
+ * @since 0.2
+ */
+ BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL("041", "92702067000196", "BANCO DO ESTADO DO RIO GRANDE DO SUL S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Banco BRB - Banco de Brasília,
+ * código de compensação 070site.
+ *
+ * @since 0.2
+ */
+ BANCO_DE_BRASILIA("070","00000208000100","BRB- Banco de Brasília S.A.","Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o BANISA, Banco Intermedium,
+ * código de compensação 077
+ * site.
+ *
+ * @since 0.2
+ */
+ BANCO_INTEMEDIUM("077", "00416968000101", "BANCO INTERMEDIUM S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o CECRED, Cooperativa Central de Crédito Urbano,
+ * código de compensação 085
+ * site.
+ *
+ * @since 0.2
+ */
+ CECRED("085", "05.463.212/0001-29", "COOPERATIVA CENTRAL DE CRÉDITO URBANO - CECRED", "Cooperativa de Crédito"),
+
+ /**
+ * Tipo enumerado que representa o Banco Caixa Econômica Federal,
+ * código de compensação 104site.
+ *
+ * @since 0.2
+ */
+ CAIXA_ECONOMICA_FEDERAL("104", "00360305000104", "CAIXA ECONOMICA FEDERAL", "Caixa Econômica Federal"),
+
+ /**
+ * Tipo enumerado que representa o Banco Bradesco, código
+ * de compensação 237site.
+ *
+ * @since 0.2
+ */
+ BANCO_BRADESCO("237", "60746948000112", "BANCO BRADESCO S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Banco Itaú, código de
+ * compensação 341site.
+ *
+ * @since 0.2
+ */
+ BANCO_ITAU("341", "60701190000104", "BANCO ITAÚ S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Banco ABN AMRO Real
+ * (http://www.bancoreal.com.br),
+ * código de compensação 356.
+ *
+ * Obs: Os bancos Sudameris e Bandepe
+ * foram incorporados ao Banco Real, portanto para gerar boletos bancários
+ * dos bancos citados utilize este tipo enumerado.
+ *
+ * @since 0.2
+ */
+ BANCO_ABN_AMRO_REAL("356", "33066408000115", "BANCO ABN AMRO REAL S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Banco Mercantil do Brasil
+ * (http://www.mercantildobrasil.com.br),
+ * código de compensação 389.
+ * @since 0.2
+ */
+ MERCANTIL_DO_BRASIL("389", "17184037000110", "BANCO MERCANTIL DO BRASIL S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o HSBC, código de
+ * compensação 399site.
+ *
+ * @since 0.2
+ */
+ HSBC("399", "01701201000189", "HSBC BANK BRASIL S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Unibanco, código de
+ * compensação 409site.
+ *
+ * @since 0.2
+ */
+ UNIBANCO("409", "33700394000140", "UNIBANCO-UNIAO DE BANCOS BRASILEIROS S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Unibanco, código de
+ * compensação 422site.
+ *
+ * @since 0.2
+ */
+ BANCO_SAFRA("422", "58160789000128", "BANCO SAFRA S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Citibank, código de
+ * compensação 756site.
+ *
+ * @since 0.2
+ */
+ CITIBANK("745", "33479023000180", "BANCO CITIBANK S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Banco Sicredi, código de
+ * compensação 748site.
+ *
+ * @since 0.2
+ */
+ BANCO_SICREDI("748", "01181521000155", "BANCO COOPERATIVO SICREDI S.A.", "Banco Mútiplo Cooperativo"),
+
+ /**
+ * Tipo enumerado que representa o Banco Rural, código de
+ * compensação 453site.
+ *
+ * @since 0.2
+ */
+ BANCO_RURAL("453", "58160789000128", "BANCO RURAL S.A.", "Banco Múltiplo"),
+
+ /**
+ * Tipo enumerado que representa o Bancoob, código de
+ * compensação 756site.
+ *
+ * @since 0.2
+ */
+ BANCOOB("756", "02038232000164", "BANCO COOPERATIVO DO BRASIL S.A. - BANCOOB", "Banco Comercial Cooperativo");
+
+ /**
+ * Singleton Map para pesquisa por bancos suportados no
+ * componente.
+ *
+ * @since 0.2
+ */
+ public static final Map suportados = new HashMap(
+ BancosSuportados.values().length);
+
+ static {
+
+ suportados.put(BANCO_DO_BRASIL.codigoDeCompensacaoBACEN, BANCO_DO_BRASIL);
+ suportados.put(BANCO_DO_NORDESTE_DO_BRASIL.codigoDeCompensacaoBACEN, BANCO_DO_NORDESTE_DO_BRASIL);
+ suportados.put(CAIXA_ECONOMICA_FEDERAL.codigoDeCompensacaoBACEN, CAIXA_ECONOMICA_FEDERAL);
+ suportados.put(BANCO_BRADESCO.codigoDeCompensacaoBACEN, BANCO_BRADESCO);
+ suportados.put(BANCO_ABN_AMRO_REAL.codigoDeCompensacaoBACEN, BANCO_ABN_AMRO_REAL);
+ suportados.put(UNIBANCO.codigoDeCompensacaoBACEN, UNIBANCO);
+ suportados.put(HSBC.codigoDeCompensacaoBACEN, HSBC);
+ suportados.put(BANCO_ITAU.codigoDeCompensacaoBACEN, BANCO_ITAU);
+ suportados.put(BANCO_SAFRA.codigoDeCompensacaoBACEN, BANCO_SAFRA);
+ suportados.put(BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL.codigoDeCompensacaoBACEN, BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL);
+ suportados.put(MERCANTIL_DO_BRASIL.codigoDeCompensacaoBACEN, MERCANTIL_DO_BRASIL);
+ suportados.put(BANCO_DO_ESTADO_DO_ESPIRITO_SANTO.codigoDeCompensacaoBACEN, BANCO_DO_ESTADO_DO_ESPIRITO_SANTO);
+ suportados.put(BANCO_RURAL.codigoDeCompensacaoBACEN, BANCO_RURAL);
+ suportados.put(BANCO_SANTANDER.codigoDeCompensacaoBACEN, BANCO_SANTANDER);
+ suportados.put(BANCO_INTEMEDIUM.codigoDeCompensacaoBACEN, BANCO_INTEMEDIUM);
+ suportados.put(BANCO_SICREDI.codigoDeCompensacaoBACEN, BANCO_SICREDI);
+ suportados.put(BANCOOB.codigoDeCompensacaoBACEN, BANCOOB);
+ suportados.put(CITIBANK.codigoDeCompensacaoBACEN, CITIBANK);
+ suportados.put(BANCO_DE_BRASILIA.codigoDeCompensacaoBACEN, BANCO_DE_BRASILIA);
+ suportados.put(CECRED.codigoDeCompensacaoBACEN, CECRED);
+ }
+
+ /**
+ * Códigos de instituições bancárias na compensação - COMPE BACEN.
+ *
+ * @since 0.2
+ */
+ private String codigoDeCompensacaoBACEN;
+
+ /**
+ * CNPJ registrado na BACEN.
+ *
+ * @since 0.2
+ */
+ private String cNPJ;
+
+ /**
+ * Nome da instituição registrado na BACEN.
+ *
+ * @since 0.2
+ */
+ private String instituicao;
+
+ /**
+ * Segmento bancário da instituição registrado na BACEN.
+ *
+ * @since 0.2
+ */
+ private String segmento;
+
+ /**
+ *
+ * Construtor naturalmente private responsável por criar uma
+ * única instância para cada banco.
+ *
+ * Verifica se exite suporte (implementação) de "Campos Livres" para o banco
+ * representado pelo codigoDeCompensacao.
+ *
+ *
+ * @param codigoDeCompensacao
+ * @return verdadeiro se existe implementação para o banco em questão.
+ *
+ * @since 0.2
+ */
+ public static boolean isSuportado(String codigoDeCompensacao) {
+ return suportados.containsKey(codigoDeCompensacao);
+ }
+
+ /**
+ *
+ * Cria uma instância para o banco representado pelo tipo enumerado.
+ *
+ *
+ * Cada instância retornada por este método contém:
+ *
+ *
Código de componsação
+ *
Nome da instituição
+ *
CNPJ da instituição
+ *
Segmento da instituição bancária
+ *
+ *
+ *
+ * @return Uma instância do respectivo banco.
+ *
+ * @see org.jrimum.domkee.financeiro.banco.febraban.Banco#Banco(CodigoDeCompensacaoBACEN, String, CNPJ, String)
+ * @see Bancos supervisionados
+ * pela BACEN
+ *
+ * @since 0.2
+ */
+ public Banco create() {
+ return new Banco(new CodigoDeCompensacaoBACEN(this.codigoDeCompensacaoBACEN), this.instituicao, new CNPJ(
+ this.cNPJ), this.segmento);
+ }
+
+ /**
+ * @return the codigoDeCompensacaoBACEN
+ *
+ * @since 0.2
+ */
+ public String getCodigoDeCompensacao() {
+ return codigoDeCompensacaoBACEN;
+ }
+
+ /**
+ * @return the cNPJ
+ *
+ * @since 0.2
+ */
+ public String getCNPJ() {
+ return cNPJ;
+ }
+
+ /**
+ * @return the instituicao
+ *
+ * @since 0.2
+ */
+ public String getInstituicao() {
+ return instituicao;
+ }
+
+ /**
+ * @return the segmento
+ *
+ * @since 0.2
+ */
+ public String getSegmento() {
+ return segmento;
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/Boleto.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/Boleto.java
new file mode 100644
index 0000000..045e17c
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/Boleto.java
@@ -0,0 +1,572 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:04:06
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:04:06
+ *
+ */
+
+package org.jrimum.bopepo;
+
+import static org.jrimum.utilix.Objects.isNotNull;
+import static org.jrimum.utilix.Objects.isNull;
+import static org.jrimum.utilix.text.DateFormat.DDMMYYYY_B;
+
+import java.awt.Image;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.jrimum.bopepo.campolivre.CampoLivre;
+import org.jrimum.bopepo.campolivre.CampoLivreFactory;
+import org.jrimum.bopepo.campolivre.NotSupportedBancoException;
+import org.jrimum.bopepo.campolivre.NotSupportedCampoLivreException;
+import org.jrimum.bopepo.view.BoletoCampo;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.utilix.Exceptions;
+import org.jrimum.utilix.Objects;
+
+/**
+ *
+ * É a representação do documento Boleto que por sua vez, representa títulos
+ * em cobrança.
+ *
+ *
+ *
+ * A classe encapsula os atributos integrantes e as funcionalidades inerentes
+ * à construção de tal documento.
+ *
+ * Map com nome do campo e imagem para este campo.
+ *
+ */
+ private Map imagensExtras;
+
+ /**
+ * Apenas cria um instâcia do boleto com os dados nulos.
+ */
+ public Boleto() {
+ super();
+ }
+
+ /**
+ * Cria um boleto pronto para ser gerado.
+ *
+ * @param titulo
+ * @throws NotSupportedBancoException
+ * @throws NotSupportedCampoLivreException
+ */
+ public Boleto(Titulo titulo)throws IllegalArgumentException, NotSupportedBancoException, NotSupportedCampoLivreException{
+
+ if(log.isTraceEnabled())
+ log.trace("Instanciando boleto");
+
+ if(log.isDebugEnabled())
+ log.debug("titulo instance : "+titulo);
+
+ if(isNotNull(titulo)){
+
+ this.setTitulo(titulo);
+ this.setCampoLivre(CampoLivreFactory.create(titulo));
+ this.load();
+
+ if(log.isDebugEnabled()){
+ log.debug("boleto instance : " + this);
+ }
+
+ }else {
+
+ if(log.isDebugEnabled()){
+ log.debug("Título Nulo - Valor Não Permitido!");
+ }
+
+ Exceptions.throwIllegalArgumentException("Título nulo!");
+ }
+
+ if(log.isDebugEnabled() || log.isTraceEnabled()){
+ log.trace("Boleto Instanciado : "+this);
+ }
+
+ }
+
+ /**
+ * @param titulo
+ * @param campoLivre
+ */
+ public Boleto(Titulo titulo, CampoLivre campoLivre) {
+ super();
+
+ if(log.isTraceEnabled())
+ log.trace("Instanciando boleto");
+
+ if(log.isDebugEnabled())
+ log.debug("titulo instance : "+titulo);
+
+ if(log.isDebugEnabled())
+ log.debug("campoLivre instance : "+campoLivre);
+
+ if(isNotNull(titulo)){
+
+ this.setTitulo(titulo);
+ this.setCampoLivre(campoLivre);
+ this.load();
+
+ if(log.isDebugEnabled())
+ log.debug("boleto instance : "+this);
+
+ }else {
+ IllegalArgumentException e = new IllegalArgumentException("Título nulo!");
+ log.error("Valor Não Permitido!",e);
+ throw e;
+ }
+
+ if(log.isDebugEnabled() || log.isTraceEnabled()){
+
+ log.trace("Boleto Instanciado : "+this);
+ }
+
+ }
+
+ private void load(){
+
+ codigoDeBarras = new CodigoDeBarras(titulo, campoLivre);
+ linhaDigitavel = new LinhaDigitavel(codigoDeBarras);
+ dataDeProcessamento = new Date();
+
+ if(log.isInfoEnabled()){
+
+ log.info("Data de Processamento do Boleto : "+DDMMYYYY_B.format(dataDeProcessamento));
+ }
+ }
+
+ /**
+ * @return O campoLivre da isntância.
+ */
+ public CampoLivre getCampoLivre() {
+
+ return campoLivre;
+ }
+
+ /**
+ * @param campoLivre the campoLivre to set
+ */
+ private void setCampoLivre(CampoLivre campoLivre) {
+
+ Objects.checkNotNull(campoLivre);
+
+ int length = campoLivre.write().length();
+
+ if (length == CampoLivre.STRING_LENGTH) {
+ this.campoLivre = campoLivre;
+
+ } else {
+
+ if (length > CampoLivre.STRING_LENGTH) {
+ Exceptions.throwIllegalArgumentException("O tamanho da String [" + length + "] é maior que o especificado [" + CampoLivre.STRING_LENGTH + "]!");
+
+ } else {
+ Exceptions.throwIllegalArgumentException("O tamanho da String [" + length + "] é menor que o especificado [" + CampoLivre.STRING_LENGTH + "]!");
+ }
+ }
+ }
+
+ /**
+ * @return the titulo
+ */
+ public Titulo getTitulo() {
+ return titulo;
+ }
+
+ /**
+ * @param titulo the titulo to set
+ */
+ public void setTitulo(Titulo titulo) {
+ this.titulo = titulo;
+ }
+
+ /**
+ * @see #getDataDeProcessamento()
+ *
+ * @return the dataDeProcessamento
+ */
+ public Date getDataDeProcessamento() {
+ return dataDeProcessamento;
+ }
+
+ /**
+ *
+ * Data de emissão do boleto de cobrança.
+ *
+ *
+ * @param dataDeProcessamento the dataDeProcessamento to set
+ */
+ public void setDataDeProcessamento(Date dataDeProcessamento) {
+ this.dataDeProcessamento = dataDeProcessamento;
+ }
+
+ /**
+ * @return the codigoDeBarras
+ */
+ public CodigoDeBarras getCodigoDeBarras() {
+ return codigoDeBarras;
+ }
+
+ /**
+ * @param codigoDeBarras the codigoDeBarras to set
+ */
+ public void setCodigoDeBarras(CodigoDeBarras codigoDeBarras) {
+ this.codigoDeBarras = codigoDeBarras;
+ }
+
+ /**
+ * @return the linhaDigitavel
+ */
+ public LinhaDigitavel getLinhaDigitavel() {
+ return linhaDigitavel;
+ }
+
+ /**
+ * @param linhaDigitavel the linhaDigitavel to set
+ */
+ public void setLinhaDigitavel(LinhaDigitavel linhaDigitavel) {
+ this.linhaDigitavel = linhaDigitavel;
+ }
+
+ /**
+ * @see #setLocalPagamento(String)
+ *
+ * @return String local de pagamento
+ */
+ public String getLocalPagamento() {
+ return localPagamento;
+ }
+
+ /**
+ *
+ * Possíveis locais para pagamento.
+ *
+ *
+ * Exemplo: Pagável preferencialmente na Rede X ou em qualquer Banco até
+ * o Vencimento.
+ *
+ *
+ * @param localPagamento1 the localPagamento1 to set
+ */
+ public void setLocalPagamento(String localPagamento1) {
+ this.localPagamento = localPagamento1;
+ }
+
+ /**
+ * @see #setInstrucaoAoSacado(String)
+ *
+ * @return the instrucaoAoSacado
+ */
+ public String getInstrucaoAoSacado() {
+ return instrucaoAoSacado;
+ }
+
+ /**
+ *
+ * Instrução adicional ao sacado, para visualizar o conceito de negócio de sacado consultar o
+ * glossário.
+ *
+ *
+ * @param insturcaoAoSacado the insturcaoAoSacado to set
+ */
+ public void setInstrucaoAoSacado(String insturcaoAoSacado) {
+ this.instrucaoAoSacado = insturcaoAoSacado;
+ }
+
+ /**
+ * @return the instrucao1
+ */
+ public String getInstrucao1() {
+ return instrucao1;
+ }
+
+ /**
+ * @param instrucao1 the instrucao1 to set
+ */
+ public void setInstrucao1(String instrucao1) {
+ this.instrucao1 = instrucao1;
+ }
+
+ /**
+ * @return the instrucao2
+ */
+ public String getInstrucao2() {
+ return instrucao2;
+ }
+
+ /**
+ * @param instrucao2 the instrucao2 to set
+ */
+ public void setInstrucao2(String instrucao2) {
+ this.instrucao2 = instrucao2;
+ }
+
+ /**
+ * @return the instrucao3
+ */
+ public String getInstrucao3() {
+ return instrucao3;
+ }
+
+ /**
+ * @param instrucao3 the instrucao3 to set
+ */
+ public void setInstrucao3(String instrucao3) {
+ this.instrucao3 = instrucao3;
+ }
+
+ /**
+ * @return the instrucao4
+ */
+ public String getInstrucao4() {
+ return instrucao4;
+ }
+
+ /**
+ * @param instrucao4 the instrucao4 to set
+ */
+ public void setInstrucao4(String instrucao4) {
+ this.instrucao4 = instrucao4;
+ }
+
+ /**
+ * @return the instrucao5
+ */
+ public String getInstrucao5() {
+ return instrucao5;
+ }
+
+ /**
+ * @param instrucao5 the instrucao5 to set
+ */
+ public void setInstrucao5(String instrucao5) {
+ this.instrucao5 = instrucao5;
+ }
+
+ /**
+ * @return the instrucao6
+ */
+ public String getInstrucao6() {
+ return instrucao6;
+ }
+
+ /**
+ * @param instrucao6 the instrucao6 to set
+ */
+ public void setInstrucao6(String instrucao6) {
+ this.instrucao6 = instrucao6;
+ }
+
+ /**
+ * @return the instrucao7
+ */
+ public String getInstrucao7() {
+ return instrucao7;
+ }
+
+ /**
+ * @param instrucao7 the instrucao7 to set
+ */
+ public void setInstrucao7(String instrucao7) {
+ this.instrucao7 = instrucao7;
+ }
+
+ /**
+ * @return the instrucao8
+ */
+ public String getInstrucao8() {
+ return instrucao8;
+ }
+
+ /**
+ * @param instrucao8 the instrucao8 to set
+ */
+ public void setInstrucao8(String instrucao8) {
+ this.instrucao8 = instrucao8;
+ }
+
+ /**
+ * Sobrescreve um campo padrão do boleto.
+ *
+ * @param campo
+ * Nome do campo no template
+ * @param conteudo
+ * Texto a ser adicionado ao campo no template
+ */
+ public void sobrescrevaCampo(BoletoCampo campo, String conteudo){
+ addTextosExtras(campo.name(), conteudo);
+ }
+
+
+ /**
+ * @return Todas os campos de texto usados como extra ou sobrescrita no
+ * template.
+ */
+ public Map getTextosExtras() {
+
+ return this.textosExtras;
+ }
+
+
+ /**
+ * Substitui todos os campos extra da instância caso exista.
+ *
+ * @param textosExtras
+ * Campos atribuídos
+ */
+ public void setTextosExtras(Map textosExtras) {
+
+ this.textosExtras = textosExtras;
+ }
+
+ /**
+ * Adiciona um campo de texto no boleto caso o campo informado tenha o mesmo
+ * nome no template da instância.
+ *
+ * @param campo
+ * Nome do campo no template
+ * @param conteudo
+ * Texto a ser adicionado ao campo no template
+ */
+ public void addTextosExtras(String campo, String conteudo) {
+
+ if(isNull(getTextosExtras())) {
+ setTextosExtras(new HashMap());
+ }
+
+ getTextosExtras().put(campo, conteudo);
+ }
+
+ /**
+ * @return Todas os campos de imagem usados como extra ou sobrescrita no
+ * template.
+ */
+ public Map getImagensExtras() {
+ return this.imagensExtras;
+ }
+
+ /**
+ * Substitui todos os campos extra da instância caso exista.
+ *
+ * @param imagensExtras
+ * Campos atribuídos
+ */
+ public void setImagensExtras(Map imagensExtras) {
+ this.imagensExtras = imagensExtras;
+ }
+
+ /**
+ * Adiciona um campo de imagem no boleto caso o campo informado tenha o
+ * mesmo nome no template da instância.
+ *
+ * @param campo
+ * Nome do campo no template
+ * @param conteudo
+ * Imagem a ser adicionada ao campo no template
+ */
+ public void addImagensExtras(String campo, Image conteudo) {
+
+ if(isNull(getImagensExtras())) {
+ setImagensExtras(new HashMap());
+ }
+
+ getImagensExtras().put(campo, conteudo);
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toString(this);
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoException.java
new file mode 100644
index 0000000..89d5912
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoException.java
@@ -0,0 +1,89 @@
+
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 21/04/2008 - 23:35:28
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 21/04/2008 - 23:35:28
+ *
+ */
+
+package org.jrimum.bopepo;
+
+/**
+ *
+ *
+ * Qualquer exceção gerada durante a geração de um Boleto gera uma BoletoExceptiton. Centraliza e localiza os problemas relativos a geração de um boleto.
+ *
+ *
+ *
+ * @author Gilmar P.S.L.
+ *
+ * @see org.jrimum.bopepo.BoletoException
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+
+public class BoletoException extends RuntimeException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3874521668322644183L;
+
+ /**
+ *
+ */
+ public BoletoException() {
+
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public BoletoException(String message, Throwable cause) {
+ super(message, cause);
+
+ }
+
+ /**
+ * @param message
+ */
+ public BoletoException(String message) {
+ super(message);
+
+ }
+
+ /**
+ * @param cause
+ */
+ public BoletoException(Throwable cause) {
+ super(cause);
+
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoUtil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoUtil.java
new file mode 100644
index 0000000..51d9b12
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/BoletoUtil.java
@@ -0,0 +1,893 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 27/01/2010 - 00:53:43
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2010 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 27/01/2010 - 00:53:43
+ *
+ */
+
+
+package org.jrimum.bopepo;
+
+import static org.apache.commons.lang.StringUtils.EMPTY;
+import static org.apache.commons.lang.StringUtils.isBlank;
+import static org.apache.commons.lang.StringUtils.isNotBlank;
+import static org.apache.commons.lang.StringUtils.trim;
+import static org.jrimum.utilix.Objects.checkNotNull;
+import static org.jrimum.utilix.text.Strings.WHITE_SPACE;
+
+import org.jrimum.utilix.Exceptions;
+import org.jrimum.vallia.digitoverificador.BoletoLinhaDigitavelDV;
+
+/**
+ *
+ * Utilitário para recuperar informações de strings de códigos de barras e
+ * linhas digitáveis de boletos.
+ *
+ *
+ * @author Gilmar P.S.L.
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public final class BoletoUtil {
+
+ /*
+ * Regras REGEX.
+ */
+ private static final String CODIGO_DE_BARRAS_REGEX = "\\d{44}";
+ private static final String LINHA_DIGITAVEL_NUMERICA_REGEX = "\\d{47}";
+ private static final String LINHA_DIGITAVEL_FORMATADA_REGEX = "\\d{5}\\.\\d{5} \\d{5}\\.\\d{6} \\d{5}\\.\\d{6} \\d{1} \\d{14}";
+ /*
+ * Mensagens.
+ */
+ private static final String MSG_CODIGO_DE_BARRAS = "Código de barras inválido!";
+ private static final String MSG_LINHA_INVALIDA = "Linha digitável inválida!";
+ private static final String MSG_STR_VAZIA = "String vazia [ \"%s\" ] tamanho [ %d ].";
+ private static final String MSG_NAO_FORMATADA = "String formatada [ \"%s\" ] de tamanho [ %d ] está fora do padrão [ \"ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd\" ] tamanho = 54.";
+ private static final String MSG_STR_NUMERICA = "String numérica [ \"%s\" ] de tamanho [ %d ] está fora do padrão [ \"ddddddddddddddddddddddddddddddddddddddddddddddd\" ] tamanho = 47.";
+
+ /**
+ * Utility class pattern: classe não instanciável
+ *
+ * @throws AssertionError
+ * caso haja alguma tentativa de utilização deste construtor.
+ */
+ private BoletoUtil(){
+
+ Exceptions.throwIllegalStateException("Instanciação não permitida!");
+ }
+
+ /**
+ *
+ * Retorna o campo livre de uma dada linha digitável.
+ *
+ *
+ * @see #checkFormatoLinhaDigitavelFormatada(String)
+ *
+ * @param linhaDigitavel
+ * string no formato FEBRABAN
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws LinhaDigitavelException
+ * quando a string não está no formato válido
+ */
+ public static String getCampoLivreDaLinhaDigitavelFormatada(
+ String linhaDigitavel) throws
+ IllegalArgumentException, LinhaDigitavelException {
+
+ checkFormatoLinhaDigitavelFormatada(linhaDigitavel);
+
+ final String linhaNumerica = linhaDigitavelFormatadaEmNumerica(linhaDigitavel);
+
+ return new StringBuilder().append(linhaNumerica.substring(4, 9))
+ .append(linhaNumerica.substring(10, 20)).append(
+ linhaNumerica.substring(21, 31)).toString();
+ }
+
+ /**
+ *
+ * Retorna o valor do título de uma dada linha digitável.
+ *
+ *
+ * @see #checkFormatoLinhaDigitavelFormatada(String)
+ *
+ * @param linhaDigitavel
+ * string no formato FEBRABAN
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws LinhaDigitavelException
+ * quando a string não está no formato válido
+ */
+ public static String getValorDoTituloDaLinhaDigitavelFormatada(
+ String linhaDigitavel) throws
+ IllegalArgumentException, LinhaDigitavelException {
+
+ checkFormatoLinhaDigitavelFormatada(linhaDigitavel);
+
+ return linhaDigitavelFormatadaEmNumerica(linhaDigitavel).substring(37,
+ 47);
+ }
+
+ /**
+ *
+ * Retorna o fator de vencimento de uma dada linha digitável.
+ *
+ *
+ * @see #checkFormatoLinhaDigitavelFormatada(String)
+ *
+ * @param linhaDigitavel
+ * string no formato FEBRABAN
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws LinhaDigitavelException
+ * quando a string não está no formato válido
+ */
+ public static String getFatorDeVencimentoDaLinhaDigitavelFormatada(
+ String linhaDigitavel) throws
+ IllegalArgumentException, LinhaDigitavelException {
+
+ checkFormatoLinhaDigitavelFormatada(linhaDigitavel);
+
+ return linhaDigitavelFormatadaEmNumerica(linhaDigitavel).substring(33,
+ 37);
+ }
+
+ /**
+ *
+ * Retorna o dígito verificador geral de uma dada linha digitável.
+ *
+ *
+ * @see #checkFormatoLinhaDigitavelFormatada(String)
+ *
+ * @param linhaDigitavel
+ * string no formato FEBRABAN
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws LinhaDigitavelException
+ * quando a string não está no formato válido
+ */
+ public static String getDigitoVerificadorGeralDaLinhaDigitavelFormatada(
+ String linhaDigitavel) throws
+ IllegalArgumentException, LinhaDigitavelException {
+
+ checkFormatoLinhaDigitavelFormatada(linhaDigitavel);
+
+ return linhaDigitavelFormatadaEmNumerica(linhaDigitavel).substring(32,
+ 33);
+ }
+
+ /**
+ *
+ * Retorna o código da moeda de uma dada linha digitável.
+ *
+ *
+ * @see #checkFormatoLinhaDigitavelFormatada(String)
+ *
+ * @param linhaDigitavel
+ * string no formato FEBRABAN
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws LinhaDigitavelException
+ * quando a string não está no formato válido
+ */
+ public static String getCodigoDaMoedaDaLinhaDigitavelFormatada(
+ String linhaDigitavel) throws
+ IllegalArgumentException, LinhaDigitavelException {
+
+ checkFormatoLinhaDigitavelFormatada(linhaDigitavel);
+
+ return linhaDigitavelFormatadaEmNumerica(linhaDigitavel)
+ .substring(3, 4);
+ }
+
+ /**
+ *
+ * Retorna o código do banco de uma dada linha digitável.
+ *
+ *
+ * @see #checkFormatoLinhaDigitavelFormatada(String)
+ *
+ * @param linhaDigitavel
+ * string no formato FEBRABAN
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws LinhaDigitavelException
+ * quando a string não está no formato válido
+ */
+ public static String getCodigoDoBancoDaLinhaDigitavelFormatada(
+ String linhaDigitavel) throws
+ IllegalArgumentException, LinhaDigitavelException {
+
+ checkFormatoLinhaDigitavelFormatada(linhaDigitavel);
+
+ return linhaDigitavelFormatadaEmNumerica(linhaDigitavel)
+ .substring(0, 3);
+ }
+
+ /**
+ *
+ * Retorna o campo livre de um dado código de barras.
+ *
+ *
+ * @see #checkFormatoCodigoDeBarras(String)
+ *
+ * @param codigoDeBarras
+ * string contendo somente números
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws CodigoDeBarrasException
+ * quando a string não está no formato válido
+ */
+ public static String getCampoLivreDoCodigoDeBarras(
+ String codigoDeBarras) throws
+ IllegalArgumentException, CodigoDeBarrasException {
+
+ checkFormatoCodigoDeBarras(codigoDeBarras);
+
+ return trim(codigoDeBarras).substring(19, 44);
+ }
+
+ /**
+ *
+ * Retorna o valor do título de um dado código de barras.
+ *
+ *
+ * @see #checkFormatoCodigoDeBarras(String)
+ *
+ * @param codigoDeBarras
+ * string contendo somente números
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws CodigoDeBarrasException
+ * quando a string não está no formato válido
+ */
+ public static String getValorDoTituloDoCodigoDeBarras(
+ String codigoDeBarras) throws
+ IllegalArgumentException, CodigoDeBarrasException {
+
+ checkFormatoCodigoDeBarras(codigoDeBarras);
+
+ return trim(codigoDeBarras).substring(9, 19);
+ }
+
+ /**
+ *
+ * Retorna o fator de vencimento de um dado código de barras.
+ *
+ *
+ * @see #checkFormatoCodigoDeBarras(String)
+ *
+ * @param codigoDeBarras
+ * string contendo somente números
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws CodigoDeBarrasException
+ * quando a string não está no formato válido
+ */
+ public static String getFatorDeVencimentoDoCodigoDeBarras(
+ String codigoDeBarras) throws
+ IllegalArgumentException, CodigoDeBarrasException {
+
+ checkFormatoCodigoDeBarras(codigoDeBarras);
+
+ return trim(codigoDeBarras).substring(5, 9);
+ }
+
+ /**
+ *
+ * Retorna o dígito verificador de um dado código de barras.
+ *
+ *
+ * @see #checkFormatoCodigoDeBarras(String)
+ *
+ * @param codigoDeBarras
+ * string contendo somente números
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws CodigoDeBarrasException
+ * quando a string não está no formato válido
+ */
+ public static String getDigitoVerificadorGeralDoCodigoDeBarras(
+ String codigoDeBarras) throws
+ IllegalArgumentException, CodigoDeBarrasException {
+
+ checkFormatoCodigoDeBarras(codigoDeBarras);
+
+ return trim(codigoDeBarras).substring(4, 5);
+ }
+
+ /**
+ *
+ * Retorna o código da moeda de um dado código de barras.
+ *
+ *
+ * @see #checkFormatoCodigoDeBarras(String)
+ *
+ * @param codigoDeBarras
+ * string contendo somente números
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws CodigoDeBarrasException
+ * quando a string não está no formato válido
+ */
+ public static String getCodigoDaMoedaDoCodigoDeBarras(
+ String codigoDeBarras) throws
+ IllegalArgumentException, CodigoDeBarrasException {
+
+ checkFormatoCodigoDeBarras(codigoDeBarras);
+
+ return trim(codigoDeBarras).substring(3, 4);
+ }
+
+ /**
+ *
+ * Retorna o código do banco de um dado código de barras.
+ *
+ *
+ * @see #checkFormatoCodigoDeBarras(String)
+ *
+ * @param codigoDeBarras
+ * string contendo somente números
+ * @return código do banco em string
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws CodigoDeBarrasException
+ * quando a string não está no formato válido
+ */
+ public static String getCodigoDoBancoDoCodigoDeBarras(
+ String codigoDeBarras) throws
+ IllegalArgumentException, CodigoDeBarrasException {
+
+ checkFormatoCodigoDeBarras(codigoDeBarras);
+
+ return trim(codigoDeBarras).substring(0, 3);
+ }
+
+ /**
+ *
+ * Transforma um código de barras em uma linha digitável no formato
+ * FEBRABAN.
+ *
Caso a string seja nula, lança uma IllegalArgumentException;
+ *
+ *
Caso seja vazia, lança uma IllegalArgumentException;
+ *
Caso não esteja no formato especificado, lança uma
+ * LinhaDigitavelException.
+ *
+ *
+ *
+ * @see #checkExistsLinhaDigitavel(String)
+ *
+ * @param codigoDeBarras
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ * @throws CodigoDeBarrasException
+ * quando a string não está no formato válido
+ */
+ public static void checkFormatoCodigoDeBarras(String codigoDeBarras)
+ throws IllegalArgumentException,
+ CodigoDeBarrasException {
+
+ checkExistsCodigoDeBarras(codigoDeBarras);
+
+ if (!isCodigoDeBarrasValido(codigoDeBarras)) {
+ throw new CodigoDeBarrasException(
+ MSG_CODIGO_DE_BARRAS
+ + " "
+ + String.format(MSG_STR_NUMERICA, codigoDeBarras,
+ codigoDeBarras.length())
+ + " O código de barras deve conter apenas 44 dígitos númericos [0-9]!");
+ }
+
+ }
+
+ /**
+ *
+ * Verifica se a linha digitável não é nula e não é
+ * vazia. Caso nula lança uma IllegalArgumentException,
+ * caso vazia lança uma IllegalArgumentException.
+ *
+ *
+ * Considera-se vazia se linhaDigitavel.trim().length() == 0.
+ *
+ *
+ * @param linhaDigitavel
+ *
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ */
+ public static void checkExistsLinhaDigitavel(String linhaDigitavel)
+ throws IllegalArgumentException {
+
+ checkNotNull(linhaDigitavel, MSG_LINHA_INVALIDA);
+
+ if (isBlank(linhaDigitavel)) {
+ Exceptions.throwIllegalArgumentException(MSG_LINHA_INVALIDA
+ + " "
+ + String.format(MSG_STR_VAZIA, linhaDigitavel,
+ linhaDigitavel.length()));
+ }
+ }
+
+ /**
+ *
+ * Verifica se código de barras não é nulo e não é
+ * vazio. Caso nula lança uma IllegalArgumentException,
+ * caso vazia lança uma IllegalArgumentException.
+ *
+ *
+ * Considera-se vazia se linhaDigitavel.trim().length() == 0.
+ *
+ *
+ * @param codigoDeBarras
+ * @throws IllegalArgumentException
+ * quando a string é nula ou quando a string é vazia
+ */
+ public static void checkExistsCodigoDeBarras(String codigoDeBarras)
+ throws IllegalArgumentException {
+
+ checkNotNull(codigoDeBarras, MSG_LINHA_INVALIDA);
+
+ if (isBlank(codigoDeBarras)) {
+ Exceptions.throwIllegalArgumentException(MSG_CODIGO_DE_BARRAS
+ + " "
+ + String.format(MSG_STR_VAZIA, codigoDeBarras,
+ codigoDeBarras.length()));
+ }
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarras.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarras.java
new file mode 100644
index 0000000..d5b26ca
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarras.java
@@ -0,0 +1,359 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:04:23
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:04:23
+ *
+ */
+
+
+package org.jrimum.bopepo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.jrimum.bopepo.campolivre.CampoLivre;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.BlockOfFields;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Objects;
+import org.jrimum.utilix.text.DecimalFormat;
+import org.jrimum.vallia.digitoverificador.BoletoCodigoDeBarrasDV;
+
+
+/**
+ *
+ * É um número único para cada Boleto composto dos seguintes campos:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo
+ *
+ *
+ *
+ *
+ *
01-03
+ *
3
+ *
9(3)
+ *
Identificação do banco
+ *
+ *
+ *
04-04
+ *
1
+ *
9
+ *
Código moeda (9-Real)
+ *
+ *
+ *
05-05
+ *
1
+ *
9
+ *
Dígito verificador do composição de barras (DV)
+ *
+ *
+ *
06-09
+ *
4
+ *
9(4)
+ *
Posições 06 a 09 – fator de vencimento
+ *
+ *
+ *
10-19
+ *
10
+ *
9(08)v99
+ *
Posições 10 a 19 – valor nominal do título
+ *
+ *
+ *
20-44
+ *
25
+ *
9(25)
+ *
FixedField livre – utilizado de acordo com a especificação interna do banco
+ * emissor
+ *
+ *
+ *
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ * @author Nordeste Fomento Mercantil
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class CodigoDeBarras extends BlockOfFields{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 748913164143978133L;
+
+ private static Logger log = Logger.getLogger(CodigoDeBarras.class);
+
+ /**
+ *
+ */
+ private static final Integer FIELDS_LENGTH = 6;
+
+ /**
+ *
+ */
+ private static final Integer STRING_LENGTH = 44;
+
+ /**
+ * Código do Banco.
+ */
+ private FixedField codigoDoBanco;
+
+ /**
+ * Código da moeda usada no boleto.
+ */
+ private FixedField codigoDaMoeda;
+
+ /**
+ * Mecanismo de autenticação usado no composição de barras.
+ *
+ * @see org.jrimum.vallia.digitoverificador.BoletoCodigoDeBarrasDV
+ */
+ private FixedField digitoVerificadorGeral;
+
+ /**
+ * Representa a quantidade de dias decorridos da data base à data de
+ * vencimento do título.
+ *
+ * @see FatorDeVencimento#toFator(Date)
+ */
+ private FixedField fatorDeVencimento;
+
+ /**
+ * Valor do título.
+ */
+ private FixedField valorNominalDoTitulo;
+
+ /**
+ * @see org.jrimum.bopepo.campolivre.CampoLivre
+ */
+ private FixedField campoLivre;
+
+ /**
+ *
+ * Cria um Código de Barras a partir do título e campo livre passados.
+ *
+ *
+ * @param titulo
+ * @param campoLivre
+ *
+ * @see CampoLivre
+ */
+ CodigoDeBarras(Titulo titulo, CampoLivre campoLivre) {
+ super();
+ setLength(STRING_LENGTH);
+ setSize(FIELDS_LENGTH);
+
+ if(log.isTraceEnabled())
+ log.trace("Instanciando o CodigoDeBarras");
+
+ if(log.isDebugEnabled()){
+ log.debug("titulo instance : "+titulo);
+ log.debug("campoLivre instance : "+campoLivre);
+ }
+
+ codigoDoBanco = new FixedField("0", 3, Fillers.ZERO_LEFT);
+ codigoDaMoeda = new FixedField(0, 1, Fillers.ZERO_LEFT);
+ digitoVerificadorGeral = new FixedField(0, 1, Fillers.ZERO_LEFT);
+ fatorDeVencimento = new FixedField(0, 4, Fillers.ZERO_LEFT);
+ valorNominalDoTitulo = new FixedField(new BigDecimal(0), 10,DecimalFormat.NUMBER_DD_BR.copy(),Fillers.ZERO_LEFT);
+ this.campoLivre = new FixedField(StringUtils.EMPTY, 25);
+
+ add(codigoDoBanco);
+ add(codigoDaMoeda);
+ add(digitoVerificadorGeral);
+ add(fatorDeVencimento);
+ add(valorNominalDoTitulo);
+ add(this.campoLivre);
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+ this.codigoDoBanco.setValue(contaBancaria.getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado());
+ this.codigoDaMoeda.setValue(titulo.getTipoDeMoeda().getCodigo());
+ this.calculateAndSetFatorDeVencimento(titulo.getDataDoVencimento());
+ this.valorNominalDoTitulo.setValue(titulo.getValor());
+ this.campoLivre.setValue(campoLivre.write());
+ this.calculateAndSetDigitoVerificadorGeral();
+
+ if(log.isDebugEnabled() || log.isTraceEnabled())
+ log.debug("codigoDeBarra instanciado : "+this);
+ }
+
+ private void calculateAndSetDigitoVerificadorGeral() {
+
+ if (log.isTraceEnabled())
+ log.trace("Calculando Digito Verificador Geral");
+
+ // Instanciando o objeto irá calcular o dígito verificador do boleto.
+ BoletoCodigoDeBarrasDV calculadorDV = new BoletoCodigoDeBarrasDV();
+
+ // Preparando o conjunto de informações que será a base para o cálculo
+ // do dígito verificador, conforme normas da FEBRABAN.
+ StringBuilder toCalculateDV = new StringBuilder(codigoDoBanco.write())
+ .append(codigoDaMoeda.write())
+ .append(fatorDeVencimento.write())
+ .append(valorNominalDoTitulo.write())
+ .append(campoLivre.write());
+
+ // Realizando o cálculo dígito verificador e em seguida armazenando
+ // a informação no campo "digitoVerificadorGeral".
+ digitoVerificadorGeral.setValue(
+ calculadorDV.calcule(toCalculateDV.toString())
+ );
+
+ if (log.isDebugEnabled())
+ log.debug("Digito Verificador Geral calculado : "
+ + digitoVerificadorGeral.getValue());
+ }
+
+ /**
+ *
+ * Representa a quantidade de dias decorridos da data base à data de
+ * vencimento do título.
+ *
+ *
+ * É o resultado da subtração entre a data do vencimento do título e a DATA
+ * BASE, fixada em 07.10.1997 (03.07.2000 retrocedidos 1000 dias do in�cio
+ * do processo).
+ *
+ *
+ * Os bloquetos de cobrança emitidos a partir de primeiro de setembro de
+ * 2000 devem conter essas características, para que quando forem capturados
+ * pela rede bancária, os sistemas façam a operação inversa, ou seja,
+ * adicionar à data base o fator de vencimento capturado, obtendo, dessa
+ * forma, a data do vencimento do bloqueto.
+ *
+ *
+ * @param vencimento
+ */
+ private void calculateAndSetFatorDeVencimento(Date vencimento) {
+
+ fatorDeVencimento.setValue(
+ FatorDeVencimento.toFator(vencimento));
+ }
+
+ /**
+ * @return the codigoDoBanco
+ */
+ FixedField getCodigoDoBanco() {
+ return codigoDoBanco;
+ }
+
+ /**
+ * @param codigoDoBanco the codigoDoBanco to set
+ */
+ void setCodigoDoBanco(FixedField codigoDoBanco) {
+ this.codigoDoBanco = codigoDoBanco;
+ }
+
+ /**
+ * @return the codigoDaMoeda
+ */
+ FixedField getCodigoDaMoeda() {
+ return codigoDaMoeda;
+ }
+
+ /**
+ * @param codigoDaMoeda the codigoDaMoeda to set
+ */
+ void setCodigoDaMoeda(FixedField codigoDaMoeda) {
+ this.codigoDaMoeda = codigoDaMoeda;
+ }
+
+ /**
+ * @return the digitoVerificadorGeral
+ */
+ FixedField getDigitoVerificadorGeral() {
+ return digitoVerificadorGeral;
+ }
+
+ /**
+ * @param digitoVerificadorGeral the digitoVerificadorGeral to set
+ */
+ void setDigitoVerificadorGeral(FixedField digitoVerificadorGeral) {
+ this.digitoVerificadorGeral = digitoVerificadorGeral;
+ }
+
+ /**
+ * @return the fatorDeVencimento
+ */
+ FixedField getFatorDeVencimento() {
+ return fatorDeVencimento;
+ }
+
+ /**
+ * @param fatorDeVencimento the fatorDeVencimento to set
+ */
+ void setFatorDeVencimento(FixedField fatorDeVencimento) {
+ this.fatorDeVencimento = fatorDeVencimento;
+ }
+
+ /**
+ * @return the valorNominalDoTitulo
+ */
+ FixedField getValorNominalDoTitulo() {
+ return valorNominalDoTitulo;
+ }
+
+ /**
+ * @param valorNominalDoTitulo the valorNominalDoTitulo to set
+ */
+ void setValorNominalDoTitulo(FixedField valorNominalDoTitulo) {
+ this.valorNominalDoTitulo = valorNominalDoTitulo;
+ }
+
+ /**
+ * @return the campoLivre
+ */
+ FixedField getCampoLivre() {
+ return campoLivre;
+ }
+
+ /**
+ * @param campoLivre the campoLivre to set
+ */
+ void setCampoLivre(FixedField campoLivre) {
+ this.campoLivre = campoLivre;
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toString(this);
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarrasException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarrasException.java
new file mode 100644
index 0000000..7c3549e
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/CodigoDeBarrasException.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 21/04/2008 - 23:38:24
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 21/04/2008 - 23:38:24
+ *
+ */
+
+package org.jrimum.bopepo;
+
+
+
+/**
+ *
+ *
+ * Qualquer exceção gerada durante a geração do Código de Barras gera uma CodigoDeBarrasException. Centraliza e localiza os problemas relativos a geração de um código de barras.
+ *
+ *
+ *
+ * @author Gilmar P.S.L.
+ *
+ * @see org.jrimum.bopepo.CodigoDeBarras
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+
+public class CodigoDeBarrasException extends RuntimeException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -3577770829101964833L;
+
+ /**
+ *
+ */
+ public CodigoDeBarrasException() {
+
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public CodigoDeBarrasException(String message, Throwable cause) {
+ super(message, cause);
+
+ }
+
+ /**
+ * @param message
+ */
+ public CodigoDeBarrasException(String message) {
+ super(message);
+
+ }
+
+ /**
+ * @param cause
+ */
+ public CodigoDeBarrasException(Throwable cause) {
+ super(cause);
+
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/FatorDeVencimento.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/FatorDeVencimento.java
new file mode 100644
index 0000000..fc6c905
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/FatorDeVencimento.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:17:40
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:17:40
+ *
+ */
+
+package org.jrimum.bopepo;
+
+import static java.lang.String.format;
+import static org.jrimum.utilix.Objects.isNull;
+import static org.jrimum.utilix.text.DateFormat.DDMMYYYY_B;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+import org.apache.commons.lang.time.DateUtils;
+import org.jrimum.utilix.Dates;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ * Serviços utilitários do universo bancário, como por exemplo calcular o fator
+ * de vencimento de boletos.
+ *
+ * Data base para o cálculo do fator de vencimento fixada em 07/10/1997 pela
+ * FEBRABAN.
+ *
+ */
+ private static final Calendar BASE_DO_FATOR_DE_VENCIMENTO = new GregorianCalendar(1997, Calendar.OCTOBER, 7);
+
+ /**
+ *
+ * Data base para o cálculo do fator de vencimento fixada em 07/10/1997 pela
+ * FEBRABAN.
+ *
+ */
+ private static final Date DATA_BASE_DO_FATOR_DE_VENCIMENTO = BASE_DO_FATOR_DE_VENCIMENTO.getTime();
+
+ /**
+ *
+ * Data máxima alcançada pelo fator de vencimento com base fixada em
+ * 07/10/1997.
+ *
+ */
+ private static final Date DATA_LIMITE_DO_FATOR_DE_VENCIMENTO = new GregorianCalendar(2025, Calendar.FEBRUARY, 21).getTime();
+
+ /**
+ *
+ * Calcula o fator de vencimento a partir da subtração entre a DATA DE
+ * VENCIMENTO de um título e a DATA BASE fixada em 07/10/1997.
+ *
+ *
+ *
+ * O fator de vencimento nada mais é que um referencial numérico de 4
+ * dígitos que representa a quantidade de dias decorridos desde a data base
+ * (07/10/1997) até a data de vencimento do título. Ou seja, a diferença em
+ * dias entre duas datas.
+ *
+ *
+ *
+ * Exemplos:
+ *
+ *
07/10/1997 (Fator = 0);
03/07/2000
+ * (Fator = 1000);
05/07/2000 (Fator = 1002);
01/05/2002
+ * (Fator = 1667);
21/02/2025 (Fator = 9999).
+ *
+ *
+ * Funcionamento:
+ *
+ *
+ *
Caso a data de vencimento seja anterior a data
+ * base (Teoricamente fator negativo), uma exceção do tipo
+ * IllegalArgumentException será lançada.
A data limite para o
+ * cálculo do fator de vencimento é 21/02/2025 (Fator de vencimento = 9999).
+ * Caso a data de vencimento seja posterior a data limite, uma exceção do
+ * tipo IllegalArgumentException será lançada.
+ *
+ *
+ * ATENÇÃO, esse cálculo se refere a títulos em cobrança,
+ * ou melhor: BOLETOS. Desta forma, lembramos que a DATA BASE é uma norma da
+ * FEBRABAN. Essa norma diz que todos os boletos emitidos a partir de 1º de
+ * setembro de 2000 (primeiro dia útil = 03/07/2000 - SEGUNDA) devem seguir
+ * esta regra de cálculo para compor a informação de vencimento no código de
+ * barras. Portanto, boletos no padrão FEBRABAN quando capturados por
+ * sistemas da rede bancária permitem que se possa realizar a operação
+ * inversa, ou seja, adicionar à data base o fator de vencimento capturado.
+ * Obtendo então a data de vencimento deste boleto.
+ *
+ * @param data
+ * data de vencimento de um título
+ * @return fator de vencimento calculado
+ * @throws IllegalArgumentException
+ *
+ * @since 0.2
+ */
+ public static int toFator(Date data) throws IllegalArgumentException {
+
+ if (isNull(data)) {
+
+ return (Integer) Exceptions.throwIllegalArgumentException("Impossível realizar o cálculo do fator de vencimento de uma data nula!");
+
+ } else {
+
+ Date dataTruncada = DateUtils.truncate(data, Calendar.DATE);
+
+ checkIntervalo(dataTruncada);
+
+ return (int) Dates.calculeDiferencaEmDias(DATA_BASE_DO_FATOR_DE_VENCIMENTO, dataTruncada);
+ }
+ }
+
+ /**
+ *
+ * Transforma um fator de vencimento em um objeto data da forma inversa
+ * descrita em {@linkplain #toFator(Date)}.
+ *
+ *
+ * @param fator
+ * - Número entre o intervalo (incluíndo) 0 e 9999
+ * @return Data do vencimento
+ * @throws IllegalArgumentException
+ * Caso o {@code fator} < 0 ou {@code fator} > 9999
+ */
+ public static Date toDate(int fator) throws IllegalArgumentException {
+
+ checkIntervalo(fator);
+
+ Calendar date = (Calendar) BASE_DO_FATOR_DE_VENCIMENTO.clone();
+
+ date.add(Calendar.DAY_OF_YEAR, fator);
+
+ return DateUtils.truncate(date.getTime(), Calendar.DATE);
+ }
+
+ /**
+ *
+ * Lança exceção caso a {@code dataVencimentoTruncada} esteja fora do
+ * intervalo entre a {@linkplain #DATA_BASE_DO_FATOR_DE_VENCIMENTO} e a
+ * {@linkplain #DATA_LIMITE_DO_FATOR_DE_VENCIMENTO}.
+ *
+ *
+ * @param dataVencimentoTruncada
+ * data de vencimento truncada com {@code
+ * DateUtils.truncate(date, Calendar.DATE)}
+ * @throws IllegalArgumentException
+ * Caso a data esteja {@code dataVencimentoTruncada} esteja fora
+ * do intervalo entre a
+ * {@linkplain #DATA_BASE_DO_FATOR_DE_VENCIMENTO} e a
+ * {@linkplain #DATA_LIMITE_DO_FATOR_DE_VENCIMENTO}
+ */
+ private static void checkIntervalo(Date dataVencimentoTruncada) throws IllegalArgumentException {
+
+ if(dataVencimentoTruncada.before(DATA_BASE_DO_FATOR_DE_VENCIMENTO)
+ || dataVencimentoTruncada.after(DATA_LIMITE_DO_FATOR_DE_VENCIMENTO)) {
+
+ Exceptions.throwIllegalArgumentException(
+ format("Para o cálculo do fator de vencimento se faz necessário informar uma data entre %s e %s.",
+ DDMMYYYY_B.format(DATA_BASE_DO_FATOR_DE_VENCIMENTO), DDMMYYYY_B.format(DATA_LIMITE_DO_FATOR_DE_VENCIMENTO)));
+
+ }
+ }
+
+ /**
+ *
Lança exceção caso o {@code fator} estja fora do intervalo.
+ *
+ * @param fatorDeVencimento - Número entre o intervalo (incluíndo) 0 e 9999
+ * @throws IllegalArgumentException Caso o {@code fator} < 0 ou {@code fator} > 9999
+ */
+ private static void checkIntervalo(int fatorDeVencimento) throws IllegalArgumentException {
+
+ if (fatorDeVencimento < 0 || fatorDeVencimento > 9999) {
+
+ Exceptions.throwIllegalArgumentException(
+ "Impossível transformar em data um fator menor que zero! O fator de vencimento deve ser um número entre 0 e 9999.");
+ }
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavel.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavel.java
new file mode 100644
index 0000000..15448c3
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavel.java
@@ -0,0 +1,538 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:04:37
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:04:37
+ *
+ */
+
+
+package org.jrimum.bopepo;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.jrimum.texgit.type.component.BlockOfFields;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Objects;
+import org.jrimum.utilix.text.Strings;
+import org.jrimum.vallia.digitoverificador.BoletoLinhaDigitavelDV;
+
+
+/**
+ *
+ * Representa a linha digitável do boleto, embora a linha digitável contenha a
+ * mesma informação do código de barras, essa informação é disposta de uma forma
+ * diferente e são acrescentados 3 dígitos verificadores.
+ *
+ * Modelo:
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Conteúdo
+ *
+ *
+ *
+ *
01-03
+ *
3
+ *
Identificação do banco
+ *
+ *
+ *
04-04
+ *
1
+ *
Código de moeda (9 – Real)
+ *
+ *
+ *
05-09
+ *
5
+ *
Cinco primeiras 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
+ *
Posições 34 a 37 – fator de vencimento (posições 6 a 9 do código debarras)
+ *
+ *
+ *
37-47
+ *
10
+ *
Posições 38 a 47 – valor nominal do título(posições 10 a 19 do código de barras)
+ *
+ *
+ *
+ *
+ *
+ *
+ * Observações:
+ *
+ *
+ *
+ *
+ *
Em cada um dos três primeiros campos, após a 5a posição, deve ser
+ * inserido um ponto “.”, a fim de facilitar a visualização, para a digitação,
+ * quando necessário;
+ *
Quinto campo:
+ *
+ *
+ *
preenchimento com zeros entre o fator de vencimento e o valor até
+ * completar 14 posições;
+ *
a existência de “0000” no campo “fator de vencimento” da linha digitável
+ * do bloqueto de cobrança é indicativo de que o código de barras não contém
+ * fator de vencimento. Nesse caso, o banco acolhedor/recebedor estará isento
+ * das responsabilidades pelo recebimento após o vencimento, que impede de
+ * identificar automaticamente se o bloqueto está ou não vencido;
+ *
quando se tratar de bloquetos sem discriminação do valor no código de
+ * barras, a representação deverá ser com zeros;
+ *
não deverá conter separação por pontos, vírgulas ou espaços;
+ *
+ *
+ *
+ *
Os dígitos verificadores referentes aos 1º, 2º e 3º campos não são
+ * representados no código de barras;
+ *
Os dados da linha digitável não se apresentam na mesma ordem do código
+ * de barras.
+ *
+ * Aplicação do seguinte requisito da FEBRABAN:
+ * Em cada um dos três primeiros campos, após a quinta (5) posição, deve ser
+ * inserido um ponto “.”, a fim de facilitar a visualização, para a
+ * digitação, quando necessário.
+ *
+ *
+ *
+ *
+ * @see org.jrimum.texgit.type.component.BlockOfFields#write()
+ */
+ @Override
+ public String write(){
+
+ StringBuilder lineOfFields = new StringBuilder(StringUtils.EMPTY);
+
+ for(FixedField> field : this){
+ lineOfFields.append(field.write());
+ }
+
+ lineOfFields.insert(5, ".");
+
+ return lineOfFields.toString();
+ }
+
+ }
+
+ /**
+ * Componhe o campo 1 da linha digitável com os seguintes dados:
+ *
+ *
Identificação do banco
+ *
Código de moeda (9 – Real)
+ *
Cinco primeiras posições do campo livre (posições 20 a 24 do código
+ * de barras)
+ *
Dígito verificador do primeiro campo
+ *
+ *
+ * @param titulo
+ * @param codigoDeBarra
+ * @param calculadorDV
+ */
+ private class InnerCampo1 extends InnerCampoFormatado{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2948116051922000890L;
+
+ /**
+ * @param fieldsLength
+ * @param stringLength
+ */
+ private InnerCampo1(Integer fieldsLength, Integer stringLength) {
+ super(fieldsLength, stringLength);
+ }
+
+ /**
+ * @param codigoDeBarras
+ */
+ private void load(CodigoDeBarras codigoDeBarras){
+
+ if(log.isTraceEnabled())
+ log.trace("Compondo campo 1 da Linha Digitável");
+
+ add(new FixedField(codigoDeBarras.write().substring(0, 3),3));
+ add(new FixedField(codigoDeBarras.write().substring(3, 4),1));
+ add(new FixedField(codigoDeBarras.write().substring(19, 24),5));
+ add(new FixedField(calculadorDV.calcule(get(0).write() + get(1).write() + get(2).write()),1));
+
+ if(log.isDebugEnabled())
+ log.debug("Digito verificador do Field 1 da Linha Digitável : "+get(3).getValue());
+
+
+ if(log.isDebugEnabled() || log.isTraceEnabled())
+ log.debug("Field 1 da Linha Digitável composto : "+write());
+ }
+
+ }
+
+ /**
+ * Componhe o campo 2 da linha digitável com os seguintes dados:
+ *
+ *
6ª a 15ª posições do campo livre (posições 25 a 34 do código de
+ * barras)
+ *
Dígito verificador do segundo campo
+ *
+ *
+ * @param codigoDeBarra
+ * @param calculadorDV
+ */
+ private class InnerCampo2 extends InnerCampoFormatado{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2201847536243988819L;
+
+ /**
+ * @param fieldsLength
+ * @param stringLength
+ */
+ private InnerCampo2(Integer fieldsLength, Integer stringLength) {
+ super(fieldsLength, stringLength);
+ }
+
+
+ /**
+ * @param codigoDeBarras
+ */
+ private void load(CodigoDeBarras codigoDeBarras){
+
+ if(log.isTraceEnabled())
+ log.trace("Compondo campo 2 da Linha Digitável");
+
+ add(new FixedField(codigoDeBarras.write().substring(24, 34),10));
+ add(new FixedField(calculadorDV.calcule(get(0).write()),1));
+
+ if(log.isDebugEnabled())
+ log.debug("Digito verificador do campo 2 da Linha Digitável : "+get(1).getValue());
+
+ if(log.isDebugEnabled() || log.isTraceEnabled())
+ log.debug("InnerCampo 2 da Linha Digitável composto : "+write());
+ }
+
+ }
+
+ /**
+ * Componhe o campo 3 da linha digitável com os seguintes dados:
+ *
+ *
16ª a 25ª posições do campo livre (posições 35 a 44 do código de
+ * barras)
+ *
Dígito verificador do terceiro campo
+ *
+ *
+ * @param codigoDeBarra
+ * @param calculadorDV
+ */
+ private class InnerCampo3 extends InnerCampoFormatado{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4248472044788156665L;
+
+ /**
+ * @param fieldsLength
+ * @param stringLength
+ */
+ private InnerCampo3(Integer fieldsLength, Integer stringLength) {
+ super(fieldsLength, stringLength);
+ }
+
+ /**
+ * @param codigoDeBarras
+ */
+ private void load(CodigoDeBarras codigoDeBarras){
+
+ if(log.isTraceEnabled())
+ log.trace("Compondo campo 3 da Linha Digitável");
+
+ add(new FixedField(codigoDeBarras.write().substring(34, 44),10));
+ add(new FixedField(calculadorDV.calcule(get(0).write()),1));
+
+ if(log.isDebugEnabled())
+ log.debug("Digito verificador do campo 3 da Linha Digitável : "+get(1).getValue());
+
+ if(log.isDebugEnabled() || log.isTraceEnabled())
+ log.debug("InnerCampo 3 da Linha Digitável composto : "+write());
+
+ }
+
+ }
+
+ /**
+ * Componhe o campo 5 da linha digitável com os seguintes dados:
+ *
+ *
Posições 34 a 37 – fator de vencimento (posições 6 a 9 do código de
+ * barras)
+ *
Posições 38 a 47 – valor nominal do título(posições 10 a 19 do
+ * código de barras)
+ *
+ *
+ * @param codigoDeBarra
+ */
+ private class InnerCampo5 extends InnerCampo{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8040082112684009827L;
+
+ /**
+ * @param fieldsLength
+ * @param stringLength
+ */
+ private InnerCampo5(Integer fieldsLength, Integer stringLength) {
+ super(fieldsLength, stringLength);
+ }
+
+ /**
+ * @param codigoDeBarras
+ */
+ private void load(CodigoDeBarras codigoDeBarras){
+
+ if(log.isTraceEnabled())
+ log.trace("Compondo campo 5 da Linha Digitável");
+
+ add(new FixedField(codigoDeBarras.write().substring(5, 9),4));
+ add(new FixedField(codigoDeBarras.write().substring(9, 19),10));
+
+ if(log.isDebugEnabled() || log.isTraceEnabled())
+ log.debug("InnerCampo 5 da Linha Digitável composto : "+write());
+
+ }
+
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toString(this);
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavelException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavelException.java
new file mode 100644
index 0000000..a72e4e2
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/LinhaDigitavelException.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 21/04/2008 - 23:39:43
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 21/04/2008 - 23:39:43
+ *
+ */
+
+package org.jrimum.bopepo;
+
+
+
+/**
+ *
+ *
+ * Qualquer exceção gerada durante a geração da Linha Digitável gera uma LinhaDigitavelException. Centraliza e localiza os problemas relativos a geração de uma linha digitável.
+ *
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @see org.jrimum.bopepo.LinhaDigitavel
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class LinhaDigitavelException extends RuntimeException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8206303471509231915L;
+
+ /**
+ *
+ */
+ public LinhaDigitavelException() {
+
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public LinhaDigitavelException(String message, Throwable cause) {
+ super(message, cause);
+
+ }
+
+ /**
+ * @param message
+ */
+ public LinhaDigitavelException(String message) {
+ super(message);
+
+ }
+
+ /**
+ * @param cause
+ */
+ public LinhaDigitavelException(Throwable cause) {
+ super(cause);
+
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/MeuPrimeiroBoleto.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/MeuPrimeiroBoleto.java
new file mode 100644
index 0000000..196db93
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/MeuPrimeiroBoleto.java
@@ -0,0 +1,278 @@
+package org.jrimum.bopepo;
+
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 01/11/2010 - 09:37:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 01/11/2010 - 09:37:00
+ *
+ */
+
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.bopepo.Boleto;
+import org.jrimum.bopepo.view.BoletoViewer;
+import org.jrimum.domkee.comum.pessoa.endereco.CEP;
+import org.jrimum.domkee.comum.pessoa.endereco.Endereco;
+import org.jrimum.domkee.comum.pessoa.endereco.UnidadeFederativa;
+import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
+import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
+import org.jrimum.domkee.financeiro.banco.febraban.Cedente;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
+import org.jrimum.domkee.financeiro.banco.febraban.Sacado;
+import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca;
+import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo.Aceite;
+
+/**
+ * Exemplo de código para geração de um boleto simples.
+ *
+ *
+ * Utiliza o Banco Bradesco como exemplo, já que possui um implementação simples.
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class MeuPrimeiroBoleto {
+
+ /**
+ * Executa o exemplo.
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+
+ new MeuPrimeiroBoleto().exemplo();
+ }
+
+ /**
+ * Um simples exemplo de como gerar um boleto.
+ */
+ final void exemplo() {
+
+ /*
+ * Para gerar um boleto é preciso dos dados do boleto e de um
+ * visualizador de boletos.
+ */
+
+ /*
+ * Primeiro crie os dados do boleto.
+ */
+ Boleto boleto = crieUmBoleto();
+
+ /*
+ * Em seguida, basta criar um visualizador para o boleto.
+ */
+ BoletoViewer boletoViewer = new BoletoViewer(boleto);
+
+ /*
+ * Depois, gere um arquivo, byte array ou stream. Nesse exemplo, um
+ * arquivo será salvo na mesma pasta do seu "projeto"
+ */
+
+ // Exemplos de uso:
+ // WINDOWS: boletoViewer.getAsPDF("C:/Temp/MeuBoleto.pdf");
+ // LINUX: boletoViewer.getAsPDF("/home/temp/MeuBoleto.pdf");
+ File arquivoPdf = boletoViewer.getPdfAsFile("MeuPrimeiroBoleto.pdf");
+
+ // Agora veja o arquivo gerado na tela.
+ mostreBoletoNaTela(arquivoPdf);
+
+ }
+
+ /**
+ * Cria um boleto, em passos distintos, com os dados necessários para a visualização.
+ *
+ * @return boleto com dados
+ */
+ Boleto crieUmBoleto() {
+
+ /*
+ * PASSO 1: Você precisa dos dados de uma conta bancária habilitada para
+ * emissão de boletos.
+ */
+ ContaBancaria contaBancaria = crieUmaContaBancaria();
+
+ /*
+ * PASSO 2: Informe os dados do cedente.
+ */
+ Cedente cedente = crieUmCedente();
+
+ /*
+ * PASSO 3: Informe os dados do Sacado.
+ */
+ Sacado sacado = crieUmSacado();
+
+ /*
+ * PASSO 4: Crie um novo título/cobrança e informe os dados.
+ */
+ Titulo titulo = crieOsDadosDoNovoTitulo(new Titulo(contaBancaria,sacado,cedente));
+
+ /*
+ * PASSO 5: Crie o boleto e informe os dados necessários.
+ */
+ Boleto boleto = crieOsDadosDoNovoBoleto(new Boleto(titulo));
+
+ return boleto;
+ }
+
+ /**
+ * Preenche os principais dados do boleto.
+ *
+ * @param boleto
+ * @return boleto com os dados necssários
+ */
+ final Boleto crieOsDadosDoNovoBoleto(Boleto boleto) {
+
+// boleto.setLocalPagamento("Pagável preferencialmente na Rede X ou em qualquer Banco até o Vencimento.");
+// boleto.setInstrucaoAoSacado("Senhor sacado, sabemos sim que o valor cobrado não é o esperado, aproveite o DESCONTÃO!");
+// boleto.setInstrucao1("PARA PAGAMENTO 1 até Hoje não cobrar nada!");
+// boleto.setInstrucao2("PARA PAGAMENTO 2 até Amanhã Não cobre!");
+// boleto.setInstrucao3("PARA PAGAMENTO 3 até Depois de amanhã, OK, não cobre.");
+// boleto.setInstrucao4("PARA PAGAMENTO 4 até 04/xx/xxxx de 4 dias atrás COBRAR O VALOR DE: R$ 01,00");
+// boleto.setInstrucao5("PARA PAGAMENTO 5 até 05/xx/xxxx COBRAR O VALOR DE: R$ 02,00");
+// boleto.setInstrucao6("PARA PAGAMENTO 6 até 06/xx/xxxx COBRAR O VALOR DE: R$ 03,00");
+// boleto.setInstrucao7("PARA PAGAMENTO 7 até xx/xx/xxxx COBRAR O VALOR QUE VOCÊ QUISER!");
+// boleto.setInstrucao8("APÓS o Vencimento, Pagável Somente na Rede X.");
+
+ return boleto;
+ }
+
+ /**
+ * Preenche os principais dados do título.
+ *
+ * @param titulo
+ *
+ * @return título com os dados necssários
+ */
+ final Titulo crieOsDadosDoNovoTitulo(Titulo titulo) {
+
+ /*
+ * DADOS BÁSICOS.
+ */
+
+ titulo.setNumeroDoDocumento("05160935000159");
+ titulo.setNossoNumero("0543129");
+ titulo.setDigitoDoNossoNumero("8");
+ titulo.setValor(BigDecimal.valueOf(822.59));
+
+ // Para informar a data de maneira simples você pode utilizar as
+ // classes utilitárias do JRimum. Abaixo temos alguns exemplos:
+ // (1) titulo.setDataDoVencimento( DateFormat.DDMMYYYY_B.parse("11/03/2011") );
+ // (2) titulo.setDataDoVencimento( Dates.parse("11/03/2011", "dd/MM/yyyy") );
+ titulo.setDataDoDocumento(new Date());
+
+ Date d = new Date();
+ d.setDate(07);
+ d.setMonth(12-1);
+ titulo.setDataDoVencimento(d);
+
+ titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL);
+ titulo.setAceite(Aceite.N);
+ titulo.setDesconto(new BigDecimal(223.64));
+ titulo.setDeducao(BigDecimal.ZERO);
+ titulo.setMora(BigDecimal.ZERO);
+ titulo.setAcrecimo(BigDecimal.ZERO);
+ titulo.setValorCobrado(BigDecimal.ZERO);
+
+ return titulo;
+ }
+
+ /**
+ * Cria uma instância de sacado com os principais dados para o boleto.
+ *
+ * @return sacado com os dados necssários
+ */
+ final Sacado crieUmSacado() {
+
+ Sacado sacado = new Sacado("BREDA TRANSPORTE E SERVIÇOS S.A", "05160935000159");
+
+// // Informando o endereço do sacado.
+// Endereco enderecoSac = new Endereco();
+// enderecoSac.setUF(UnidadeFederativa.RN);
+// enderecoSac.setLocalidade("Natal");
+// enderecoSac.setCep(new CEP("59064-120"));
+// enderecoSac.setBairro("Grande Centro");
+// enderecoSac.setLogradouro("Rua poeta dos programas");
+// enderecoSac.setNumero("1");
+// sacado.addEndereco(enderecoSac);
+//
+ return sacado;
+ }
+
+ /**
+ * Cria uma instância de cedente com os principais dados para o boleto.
+ *
+ * @return cedente com os dados necssários
+ */
+ final Cedente crieUmCedente() {
+
+ return new Cedente("BREDA TRANSPORTE E SERVIÇOS S.A.", "05160935000159");
+ }
+
+ /**
+ * Cria uma instância de conta bancária com os principais dados para o
+ * boleto em questão (Banco Bradesco).
+ *
+ * @return conta com os dados necssários
+ */
+ final ContaBancaria crieUmaContaBancaria(){
+
+ ContaBancaria contaBancaria = new ContaBancaria(BancosSuportados.BANCO_SANTANDER.create());
+ contaBancaria.setNumeroDaConta(new NumeroDaConta(1152386));
+ contaBancaria.setAgencia(new Agencia(227, "1"));
+ contaBancaria.setCarteira(new Carteira(101, TipoDeCobranca.SEM_REGISTRO));
+
+
+ return contaBancaria;
+ }
+
+ /**
+ * Exibe o arquivo na tela.
+ *
+ * @param arquivoBoleto
+ */
+ final void mostreBoletoNaTela(File arquivoBoleto) {
+
+ try {
+ // Descomente se estiver usando java 6 ou superior
+ java.awt.Desktop.getDesktop().open(arquivoBoleto);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoCitibank.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoCitibank.java
new file mode 100644
index 0000000..409f651
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoCitibank.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2011 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 17/02/2011 - 12:40:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2011 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO EST��, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação especÃfica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 17/02/2011 - 12:40:00
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ * Interface comum para todos os campos livres do CITIBANK
+ *
+ * @author Fabiano Carrijo Justino
+ * @since 0.2
+ * @version 0.2
+ */
+abstract class AbstractCLBancoCitibank extends AbstractCampoLivre {
+
+ /**
+ * {@code serialVersionUID = 6080749970883991308L}
+ */
+ private static final long serialVersionUID = 6080749970883991308L;
+
+ /**
+ *
+ * Cria um campo livre com um determinado número de campos
+ *
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength
+ * - Número de campos
+ */
+ protected AbstractCLBancoCitibank(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ /**
+ * @param titulo
+ * @return um CampoLivre
+ *
+ */
+ protected static CampoLivre create(Titulo titulo)
+ throws NotSupportedCampoLivreException {
+ checkNossoNumero(titulo);
+ checkNumeroDaContaNotNull(titulo);
+ checkCodigoDoNumeroDaConta(titulo);
+ checkNossoNumero(titulo);
+ checkNumeroDaContaNotNull(titulo);
+ checkCodigoDoNumeroDaConta(titulo);
+ switch(titulo.getNossoNumero().length())
+ {
+ case 11:
+ return new CLBancoCitiBankNN11(titulo);
+ }
+ throw new NotSupportedCampoLivreException("Campo livre diponivel somente para titulos com nosso nmero composto por 10 posicoes(convenio com 7), 11 posicoes ou 17 posicoes(convenio com 6).");
+ }
+
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDeBrasilia.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDeBrasilia.java
new file mode 100644
index 0000000..4806c15
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDeBrasilia.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2013 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 24/08/2013 - 19:54:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2013 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 24/08/2013 - 19:54:00
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do BRB - Banco de Brasília que
+ * venham a existir.
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Douglas Ramiro
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public abstract class AbstractCLBancoDeBrasilia extends AbstractCampoLivre {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3200353843356508888L;
+
+ protected AbstractCLBancoDeBrasilia(Integer fieldsLength) {
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo){
+ return new CLBancoDeBrasilia().build(titulo);
+ }
+}
\ No newline at end of file
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDoBrasil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDoBrasil.java
new file mode 100644
index 0000000..bcba1b7
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoDoBrasil.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:07:47
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:07:47
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco do Brasil que venham a existir.
+ *
Cria um campo livre com um determinado número de campos
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength - Número de campos
+ *
+ * @since 0.2
+ */
+ protected AbstractCLBancoDoNordesteDoBrasil(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ /**
+ * @param titulo
+ * @return um CampoLivre
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCLBancoDoNordesteDoBrasil#create(Titulo)
+ */
+ protected static CampoLivre create(Titulo titulo){
+ return new CLBancoDoNordesteDoBrasil().build(titulo);
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoIntermedium.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoIntermedium.java
new file mode 100644
index 0000000..9b1d1c7
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoIntermedium.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 11/08/2010 - 10:23:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 11/08/2010 - 10:23:00
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco Intermedium que venham a
+ * existir.
+ *
Cria um campo livre com um determinado número de campos
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength - Número de campos
+ */
+ protected AbstractCLBancoIntermedium(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo){
+
+ return new CLBancoIntermedium(titulo);
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoReal.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoReal.java
new file mode 100644
index 0000000..16dabb2
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoReal.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:08:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:08:00
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco Real que venham a existir.
+ *
+ * Interface comum para todos os campos livres do Banco Santander que venham a
+ * existir.
+ *
+ *
+ * @author Fernando Dias -
+ * Colaborador com o campo livre {@code CLBancoRuralCobrancaRegistrada}
+ * @author Gilmar P.S.L
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+abstract class AbstractCLBancoRural extends AbstractCampoLivre {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -602454445158254612L;
+
+ /**
+ *
Cria um campo livre com um determinado número de campos
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength - Número de campos
+ */
+ protected AbstractCLBancoRural(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo) {
+
+ checkCarteiraNotNull(titulo);
+ checkRegistroDaCarteiraNotNull(titulo);
+
+ switch(titulo.getContaBancaria().getCarteira().getTipoCobranca()){
+ case SEM_REGISTRO:
+ return campoSemRegistro(titulo);
+ case COM_REGISTRO:
+ return new CLBancoRuralCobrancaRegistrada(titulo);
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Determina e cria um campo livre de cobrança não registrada.
+ *
+ * @param titulo
+ * - título com as informações para geração do campo livre
+ * @return campo livre ou null
+ */
+ private static CampoLivre campoSemRegistro(Titulo titulo) {
+
+ checkNossoNumero(titulo);
+
+ switch(titulo.getNossoNumero().length()){
+ case NN10:
+ return new CLBancoRuralCobrancaNaoRegistradaSeguradora(titulo);
+ case NN15:
+ return new CLBancoRuralCobrancaNaoRegistrada(titulo);
+ default:
+ throw new NotSupportedCampoLivreException(
+ "Combrança sem registro com campo livre diponível somente para títulos com nosso número"
+ + " composto por 10 posições(apólice de seguro com I.O.S.) e 15 posições(padrão)."
+ );
+ }
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoSafra.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoSafra.java
new file mode 100644
index 0000000..7d71c33
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoSafra.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 21/04/2008 - 20:27:04
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 21/04/2008 - 20:27:04
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import static java.lang.String.format;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco Safra que venham a
+ * existir.
+ *
+ *
+ * @author Gilmar P.S.L
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+abstract class AbstractCLBancoSafra extends AbstractCampoLivre {
+
+ /**
+ * {@code serialVersionUID = -555393808447532987L}
+ */
+ private static final long serialVersionUID = -555393808447532987L;
+
+ /**
+ * Códigos do "Tipo de Cobrança" utilizados nos boletos do Banco Safra.
+ *
+ * @author Gilmar P.S.L.
+ */
+ protected enum TipoDeCobranca {
+
+ /**
+ * 1 = Bloqueto Emitido pelo Banco.
+ */
+ BOLETO_EMITIDO_PELO_BANCO,
+ /**
+ * 2 = Eletrônica Emitido pelo Cliente.
+ */
+ DIRETA_BOLETO_EMITIDO_PELO_CLIENTE,
+ /**
+ * 4 = Express Emitido pelo Cliente.
+ */
+ EXPRESS_BOLETO_EMITIDO_PELO_CLIENTE;
+
+ public int codigo() {
+ switch (this) {
+ case BOLETO_EMITIDO_PELO_BANCO:
+ return 1;
+ case DIRETA_BOLETO_EMITIDO_PELO_CLIENTE:
+ return 2;
+ case EXPRESS_BOLETO_EMITIDO_PELO_CLIENTE:
+ return 4;
+ default:
+ return (Integer) Exceptions.throwIllegalStateException(format(
+ "Tipo \"%s\" sem código atribuído!", this));
+ }
+ }
+ }
+
+ /**
+ * Tamanho do campo Constante = 1, chamado de "SISTEMA", definido pelo Banco
+ * Safra nos dois campos livres: {@link CLBancoSafraCobrancaNaoRegistrada} e
+ * {@link CLBancoSafraCobrancaRegistrada}.
+ */
+ private static final Integer CONSTANT_LENGTH_SISTEMA = Integer.valueOf(1);
+
+ /**
+ * Valor do campo Constante = 7, chamado de "SISTEMA", definido pelo Banco
+ * Safra nos dois campos livres: {@link CLBancoSafraCobrancaNaoRegistrada} e
+ * {@link CLBancoSafraCobrancaRegistrada}.
+ */
+ private static final Integer CONSTANT_VALUE_SISTEMA = Integer.valueOf(7);
+
+ /**
+ * Constante em forma de campo {@link AbstractCLBancoSafra#CONSTANT_VALUE_SISTEMA} e {@link AbstractCLBancoSafra#CONSTANT_LENGTH_SISTEMA}.
+ */
+ protected static final FixedField SISTEMA_CONSTANT_FIELD = new FixedField(CONSTANT_VALUE_SISTEMA, CONSTANT_LENGTH_SISTEMA);
+
+ /**
+ * Tamanho do campo = 1, chamado de "TIPO DE COBRANÇA", definido pelo Banco
+ * Safra nos dois campos livres: {@link CLBancoSafraCobrancaNaoRegistrada} e
+ * {@link CLBancoSafraCobrancaRegistrada}.
+ */
+ protected static final Integer TIPO_COBRANCA_FIELD_LENGTH = Integer.valueOf(1);
+
+ /**
+ *
+ * Cria um campo livre com um determinado número de campos
+ *
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength
+ * - Número de campos
+ */
+ protected AbstractCLBancoSafra(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo)
+ throws NotSupportedCampoLivreException {
+
+ checkCarteiraNotNull(titulo);
+ checkRegistroDaCarteiraNotNull(titulo);
+
+ switch (titulo.getContaBancaria().getCarteira().getTipoCobranca()) {
+ case COM_REGISTRO:
+ return new CLBancoSafraCobrancaRegistrada().build(titulo);
+ case SEM_REGISTRO:
+ return new CLBancoSafraCobrancaNaoRegistrada().build(titulo);
+ default:
+ throw new NotSupportedCampoLivreException(
+ "Campo livre diponível somente para títulos com carteiras com tipo de cobrança "
+ + "COM_REGISTRO ou SEM_REGISTRO.");
+ }
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoob.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoob.java
new file mode 100644
index 0000000..aa15830
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBancoob.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2011 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 17/02/2011 - 12:40:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2011 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 17/02/2011 - 12:40:00
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Bancoob (BANCO COOPERATIVO DO
+ * BRASIL S.A.) que venham a existir.
+ *
+ * Cria um campo livre com um determinado número de campos
+ *
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength
+ * - Número de campos
+ */
+ protected AbstractCLBancoob(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ /**
+ * @param titulo
+ * @return um CampoLivre
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCLBancoDoNordesteDoBrasil#create(Titulo)
+ */
+ protected static CampoLivre create(Titulo titulo) {
+
+ return new CLBancoobCobrancaNaoRegistrada().build(titulo);
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanestes.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanestes.java
new file mode 100644
index 0000000..5bb0283
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanestes.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: Dec 13, 2008 - 11:00:04 AM
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: Dec 13, 2008 - 11:00:04 AM
+ *
+ */
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco Banestes que venham a
+ * existir.
+ *
Cria um campo livre com um determinado número de campos
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength - Número de campos
+ */
+ protected AbstractCLBanestes(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException {
+
+ return new CLBanestes(titulo);
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanrisul.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanrisul.java
new file mode 100644
index 0000000..2e99d84
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBanrisul.java
@@ -0,0 +1,245 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 02/08/2008 - 12:06:09
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 02/08/2008 - 12:06:09
+ *
+ */
+package org.jrimum.bopepo.campolivre;
+
+import org.apache.commons.lang.StringUtils;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.FixedField;
+import org.jrimum.vallia.digitoverificador.Modulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco Banrisul que venham a
+ * existir.
+ *
Cria um campo livre com um determinado número de campos
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength - Número de campos
+ */
+ protected AbstractCLBanrisul(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException {
+
+ checkCarteiraNotNull(titulo);
+ checkRegistroDaCarteiraNotNull(titulo);
+
+ switch (titulo.getContaBancaria().getCarteira().getTipoCobranca()) {
+
+ case COM_REGISTRO:
+ return new CLBanrisulCobrancaRegistrada(titulo);
+ case SEM_REGISTRO:
+ return new CLBanrisulCobrancaNaoRegistrada(titulo);
+ default:
+ throw new NotSupportedCampoLivreException("Campo livre diponível apenas para carteiras com ou sem cobrança.");
+ }
+ }
+
+ /**
+ *
+ * Calcula o duplo dígito referente às posições 20 a 42 (módulos 10 e 11).
+ *
+ *
+ *
+ * @param seisPrimeirosCamposConcatenados
+ * @return duplo dígito
+ *
+ * @since 0.2
+ */
+ protected String calculaDuploDigito(String seisPrimeirosCamposConcatenados) {
+ // calcula soma do módulo 10 a partir dos seis primeiros campos concatenados
+ final int somaMod10 = Modulo.calculeSomaSequencialMod10(seisPrimeirosCamposConcatenados, 1, 2);
+
+ // calcula resto do módulo 10 a partir do resultado da soma
+ final byte restoMod10 = calculeRestoMod10(somaMod10);
+
+ // calcula primeiro DV a partir do resto módulo 10
+ byte primeiroDV = calculePrimeiroDV(restoMod10);
+
+
+ // calcula soma do módulo 10 a partir dos seis primeiros campos concatenados
+ // incluindo o primeiro dígito
+ int somaMod11 = Modulo.calculeSomaSequencialMod11(seisPrimeirosCamposConcatenados + primeiroDV, 2, 7);
+
+ // calcula o resto do módulo 11 a partir do resultado da soma
+ byte restoMod11 = calculeRestoMod11(somaMod11);
+
+ // se o resto do módulo 11 for 1 então o primeiro dígito é inválido
+ // deve ser feito o recálculo até que o resto não seja 1
+ while (restoMod11 == 1) {
+
+ // encontra um valor válido para o primeiro DV
+ primeiroDV = encontreValorValidoParaPrimeiroDV(primeiroDV);
+
+ // calcula a soma do módulo 11 agora com um valor
+ // válido para o DV
+ somaMod11 = Modulo.calculeSomaSequencialMod11(seisPrimeirosCamposConcatenados + primeiroDV, 2, 7);
+
+ // calcula o resto do módulo 11 a partir do resultado da soma
+ restoMod11 = calculeRestoMod11(somaMod11);
+ }
+
+ // calcula o segundo DV a partir do resto módulo 11
+ final byte segundoDV = calculeSegundoDV(restoMod11);
+
+ // concatena o primeiro DV com o segundo DV para
+ // formar o duplo dígito
+ return String.valueOf(primeiroDV) + String.valueOf(segundoDV);
+ }
+
+ /**
+ *
+ *
+ * @param somaMod11
+ * @return restro do módulo 11
+ *
+ * @since 0.2
+ */
+ private byte calculeRestoMod11(int somaMod11) {
+ final byte restoMod11;
+ if (somaMod11 < 11)
+ restoMod11 = (byte) somaMod11;
+ else
+ restoMod11 = (byte) (somaMod11 % 11);
+ return restoMod11;
+ }
+
+ protected String concateneOsCamposExistentesAteOMomento() {
+
+ final StringBuilder camposExistentesAteOMomentoConcatenados = new StringBuilder(StringUtils.EMPTY);
+
+ for (FixedField> field : this) {
+ camposExistentesAteOMomentoConcatenados.append(field.write());
+ }
+
+ return camposExistentesAteOMomentoConcatenados.toString();
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBradesco.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBradesco.java
new file mode 100644
index 0000000..c1b7eeb
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLBradesco.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:08:12
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:08:12
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco Bradesco que venham a
+ * existir.
+ *
Cria um campo livre com um determinado número de campos
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength - Número de campos
+ *
+ * @since 0.2
+ */
+ protected AbstractCLBradesco(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo){
+
+ return new CLBradesco().build(titulo);
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCaixaEconomicaFederal.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCaixaEconomicaFederal.java
new file mode 100644
index 0000000..ac70f37
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCaixaEconomicaFederal.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:08:25
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:08:25
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import static java.lang.String.format;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco Caixa Econômica Federal
+ * que venham a existir.
+ *
Cria um campo livre com um determinado número de campos
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength - Número de campos
+ */
+ protected AbstractCLCaixaEconomicaFederal(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException{
+
+ checkNossoNumero(titulo);
+
+ switch(titulo.getNossoNumero().length()){
+ case NN10:
+ return new CLCaixaEconomicaFederalSICOBNossoNumero10(titulo);
+ case NN14:
+ return new CLCaixaEconomicaFederalSICOBNossoNumero14().build(titulo);
+ case NN15:
+ return new CLCaixaEconomicaFederalSIGCB(titulo);
+ case NN17:
+ return new CLCaixaEconomicaFederalSINCO(titulo);
+ default:
+ throw new NotSupportedCampoLivreException(
+ format("Campo Livre não suportado para o Nosso Número [%s] de tamanho [%s]."
+ + " Apenas títulos com Nosso Número de tamanho [%s] são suportados (SICOB, SIGCB e SINCO respectivamente)."
+ ,titulo.getNossoNumero(), titulo.getNossoNumero().length()
+ ,NN10 + "," + NN14 + ","+ NN15 + "," + NN17)
+ );
+ }
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCecred.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCecred.java
new file mode 100644
index 0000000..b397068
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLCecred.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2014 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 21/01/2014 - 13:31:39
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2014 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 21/01/2014 - 13:31:39
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do CECRED - Cooperativa Central de Crédito Urbano que
+ * venham a existir.
+ *
+ *
+ * @author Gilmar P.S.L
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public abstract class AbstractCLCecred extends AbstractCampoLivre {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -5579081722726761569L;
+
+ protected AbstractCLCecred(Integer fieldsLength) {
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo){
+ return new CLCecred().build(titulo);
+ }
+
+}
\ No newline at end of file
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLHSBC.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLHSBC.java
new file mode 100644
index 0000000..e9aa532
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLHSBC.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:08:12
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:08:12
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco HSBC que venham a
+ * existir.
+ *
Cria um campo livre com um determinado número de campos
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength - Número de campos
+ */
+ protected AbstractCLHSBC(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo) {
+
+ checkCarteiraNotNull(titulo);
+ checkRegistroDaCarteiraNotNull(titulo);
+
+ switch(titulo.getContaBancaria().getCarteira().getTipoCobranca()){
+ case SEM_REGISTRO:
+ return new CLHSBCCobrancaNaoRegistrada(titulo);
+ case COM_REGISTRO:
+ return new CLHSBCCobrancaRegistrada(titulo);
+ default:
+ return null;
+ }
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLItau.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLItau.java
new file mode 100644
index 0000000..25b72e6
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLItau.java
@@ -0,0 +1,138 @@
+
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 16/04/2008 - 23:08:17
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 16/04/2008 - 23:08:17
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+import static org.jrimum.vallia.digitoverificador.Modulo.MOD10;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.vallia.digitoverificador.Modulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco Itaú que venham a
+ * existir.
+ *
+ * Carteiras especiais sem registro na qual são utilizadas 15 posições numéricas
+ * para identificação do título liquidado (8 do Nosso Número e 7 do Seu Número).
+ *
Cria um campo livre com um determinado número de campos
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength - Número de campos
+ */
+ protected AbstractCLItau(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo){
+
+ checkCarteiraNotNull(titulo);
+ checkCodigoDaCarteira(titulo);
+
+ /*
+ * Se a carteira for especial, a forma de construir o campo livre será diferente.
+ */
+ if(CARTEIRAS_ESPECIAIS.contains(titulo.getContaBancaria().getCarteira().getCodigo())) {
+
+ return new CLItauComCarteirasEspeciais(titulo);
+
+ }else {
+
+ return new CLItauPadrao(titulo);
+ }
+ }
+
+ /**
+ *
+ * Método auxiliar para calcular o dígito verificador dos campos 31 e 41.
+ * O dígito é calculado com base em um campo fornecido pelos métodos que o chamam
+ * (calculeDigitoDaPosicao31 e calculeDigitoDaPosicao41)
+ *
+ *
+ * O cálculo é feito através do módulo 10.
+ *
+ *
+ * @param campo
+ * @return Dígito verificador do campo fornecido.
+ *
+ * @since
+ */
+ protected Integer calculeDigitoVerificador(String campo) {
+
+ int restoDivisao = Modulo.calculeMod10(campo, 1, 2);
+ int digito = MOD10 - restoDivisao;
+
+ if(digito > 9) {
+ digito = 0;
+ }
+
+ return new Integer(digito);
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLMercantilDoBrasil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLMercantilDoBrasil.java
new file mode 100644
index 0000000..852f343
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLMercantilDoBrasil.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 25/09/2008 - 21:20:19
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 25/09/2008 - 21:20:19
+ *
+ */
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco Mercantil do Brasil que
+ * venham a existir.
+ *
Cria um campo livre com um determinado número de campos
+ *
+ * @see AbstractCampoLivre
+ *
+ * @param fieldsLength - Número de campos
+ */
+ protected AbstractCLSantander(Integer fieldsLength) {
+
+ super(fieldsLength);
+ }
+
+ protected static CampoLivre create(Titulo titulo) {
+
+ return new CLBancoSantander(titulo);
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLSicredi.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLSicredi.java
new file mode 100644
index 0000000..9f8111c
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCLSicredi.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:07:11
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:07:11
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ *
+ * Interface comum para todos os campos livres do Banco Sicredi que venham a
+ * existir.
+ *
+ * Calcula o dígito verificador para
+ * referência do cliente (cobrança sem registro) e base para
+ * cálculo do super dígito do nosso numero (cobrança com registro).
+ *
+ *
+ * @param numero
+ * @return String dígito
+ *
+ * @since 0.2
+ */
+ String calculeDigitoEmModulo11(String numero) {
+
+ String dv = "";
+
+ int soma = Modulo.calculeSomaSequencialMod11(numero, 2, 9);
+
+ soma *= 10;
+
+ final int resto = soma % 11;
+
+ if (resto == 10 || resto == 0)
+ dv = "0";
+ else
+ dv = "" + resto;
+
+ return dv;
+
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCampoLivre.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCampoLivre.java
new file mode 100644
index 0000000..7434008
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/AbstractCampoLivre.java
@@ -0,0 +1,787 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:07:11
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:07:11
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import static java.lang.String.format;
+import static java.math.BigDecimal.ZERO;
+import static org.jrimum.domkee.financeiro.banco.febraban.Banco.isCodigoDeCompensacaoOK;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.domkee.financeiro.banco.ParametroBancario;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.FixedField;
+import org.jrimum.texgit.type.component.BlockOfFields;
+import org.jrimum.utilix.Objects;
+import org.jrimum.utilix.text.Strings;
+
+/**
+ *
+ * Esta classe é responsável por determinar a interface campo livre e também
+ * determinar qual implementação de campo livre se aplica a um determinado
+ * título.
+ *
+ *
+ *
+ * Uma outra forma de analisar esta classe é sob o prisma de uma Abstract
+ * Factory.
+ *
+ *
+ *
+ *
+ *
Field Livre:
+ *
É um espaço reservado no código de barras e a sua implementação varia de
+ * banco para banco.
+ *
+ *
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ * @author Lukas
+ * Antunes - Colaborador com o banco Intermedium (077)
+ * @author Fernando Dias -
+ * Colaborador com o banco Rural (453)
+ * @author Paulo Porto -
+ * Colaborador com o Banco do Nordeste do Brasil (004).
+ * @author Fabiano Carrijo -
+ * Colaborador com o Banco Citibank (756).
+ * @author Douglas Ramiro -
+ * Colaborador com o Banco de Brasília (070).
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+abstract class AbstractCampoLivre extends BlockOfFields implements CampoLivre {
+
+ /**
+ * {@code serialVersionUID = 4605730904122445595L}
+ */
+ private static final long serialVersionUID = 4605730904122445595L;
+
+ /**
+ * Looger.
+ */
+ private static Logger log = Logger.getLogger(Objects.class);
+
+ /**
+ * Nosso número com 7 posições.
+ */
+ static final int NN7 = 7;
+
+ /**
+ * Nosso número com 8 posições.
+ */
+ static final int NN8 = 8;
+
+ /**
+ * Nosso número com 9 posições.
+ */
+ static final int NN9 = 9;
+
+ /**
+ * Nosso número com 10 posições.
+ */
+ static final int NN10 = 10;
+
+ /**
+ * Nosso número com 11 posições.
+ */
+ static final int NN11 = 11;
+
+ /**
+ * Nosso número com 14 posições.
+ */
+ static final int NN14 = 14;
+
+ /**
+ * Nosso número com 15 posições.
+ */
+ static final int NN15 = 15;
+
+ /**
+ * Nosso número com 17 posições.
+ */
+ static final int NN17 = 17;
+
+ /**
+ * Subclasses não precisam definir o tamanho.
+ */
+ @SuppressWarnings("unused")
+ private AbstractCampoLivre(Integer fieldsLength, Integer stringLength) {
+ super(null,null);
+ }
+
+ /**
+ * Cria um campo livre com um determinado número de campos
+ *
+ * @param fieldsLength
+ * - Número de campos
+ */
+ protected AbstractCampoLivre(Integer fieldsLength) {
+ super();
+ setLength(CampoLivre.STRING_LENGTH);
+ setSize(fieldsLength);
+ }
+
+ /**
+ * Cria um campo livre a partir dos dados contidos no título fornecido.
+ *
+ * @param titulo
+ * com todos os dados para a geração do campo livre
+ * @return instância de campo livre ou nulo.
+ * @throws NotSupportedBancoException
+ * Caso o banco informado na conta bancária não tenha nenhuma
+ * implementação de campo livre.
+ * @throws NotSupportedCampoLivreException
+ * Caso exista implementações de campo livre para o banco
+ * informa na conta bancária, mas nenhuma dessas implementações
+ * foram adequadas para os dados do título.
+ * @throws CampoLivreException
+ * Caso ocorra algum problema na geração do campo livre.
+ */
+ protected static CampoLivre create(Titulo titulo) throws NotSupportedBancoException,
+ NotSupportedCampoLivreException, CampoLivreException {
+
+ if (log.isTraceEnabled()){
+
+ log.trace("Instanciando Campo livre");
+ }
+ if (log.isDebugEnabled()){
+
+ log.debug("titulo instance : " + titulo);
+ }
+
+ try{
+
+ checkTituloNotNull(titulo);
+ checkContaBancariaNotNull(titulo);
+ checkBancoNotNull(titulo);
+
+ if (log.isDebugEnabled()){
+
+ log.debug(format("Campo Livre do Banco: %s", titulo.getContaBancaria().getBanco().getNome()));
+ }
+
+ if (BancosSuportados.isSuportado(titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado())) {
+
+ final BancosSuportados banco = BancosSuportados.suportados.get( titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado());
+
+ switch (banco) {
+
+ case BANCO_BRADESCO: return AbstractCLBradesco.create(titulo);
+ case BANCO_DO_BRASIL: return AbstractCLBancoDoBrasil.create(titulo);
+ case BANCO_DO_NORDESTE_DO_BRASIL: return AbstractCLBancoDoNordesteDoBrasil.create(titulo);
+ case BANCO_ABN_AMRO_REAL: return AbstractCLBancoReal.create(titulo);
+ case CAIXA_ECONOMICA_FEDERAL: return AbstractCLCaixaEconomicaFederal.create(titulo);
+ case HSBC: return AbstractCLHSBC.create(titulo);
+ case UNIBANCO: return AbstractCLUnibanco.create(titulo);
+ case BANCO_ITAU: return AbstractCLItau.create(titulo);
+ case BANCO_SAFRA: return AbstractCLBancoSafra.create(titulo);
+ case BANCO_DO_ESTADO_DO_RIO_GRANDE_DO_SUL: return AbstractCLBanrisul.create(titulo);
+ case MERCANTIL_DO_BRASIL: return AbstractCLMercantilDoBrasil.create(titulo);
+ case BANCO_DO_ESTADO_DO_ESPIRITO_SANTO: return AbstractCLBanestes.create(titulo);
+ case BANCO_RURAL: return AbstractCLBancoRural.create(titulo);
+ case BANCO_SANTANDER: return AbstractCLSantander.create(titulo);
+ case BANCO_INTEMEDIUM: return AbstractCLBancoIntermedium.create(titulo);
+ case BANCO_SICREDI: return AbstractCLSicredi.create(titulo);
+ case BANCOOB: return AbstractCLBancoob.create(titulo);
+ case CITIBANK: return AbstractCLBancoCitibank.create(titulo);
+ case BANCO_DE_BRASILIA: return AbstractCLBancoDeBrasilia.create(titulo);
+ case CECRED: return AbstractCLCecred.create(titulo);
+
+ default:
+ /*
+ * Se chegar neste ponto e nenhum campo livre foi definido, então é
+ * sinal de que existe implementações de campo livre para o banco em
+ * questão, só que nenhuma destas implementações serviu e a classe
+ * abstrata responsável por fornecer o campo livre não gerou a
+ * exceção NotSupportedCampoLivreException. Trata-se de uma mensagem
+ * genérica que será utilizada somente em último caso.
+ */
+ throw new NotSupportedCampoLivreException(
+ "Não há implementações de campo livre para o banco "
+ + titulo.getContaBancaria().getBanco()
+ .getCodigoDeCompensacaoBACEN().getCodigoFormatado()
+ + " compatíveis com as "
+ + "caracteríticas do título informado.");
+ }
+ } else {
+
+ /*
+ * Se chegar até este ponto, é sinal de que para o banco em
+ * questão, apesar de estar definido no EnumBancos, não há
+ * implementações de campo livre, logo considera-se o banco com
+ * não suportado.
+ */
+ throw new NotSupportedBancoException();
+ }
+ } catch(CampoLivreException e) {
+ /*
+ * Caso seja uma exceção esperada.
+ */
+ throw e;
+
+ } catch(Exception e) {
+ /*
+ * Encapsula-se qualquer outra exceção.
+ */
+ throw new CampoLivreException(e);
+ }
+ }
+
+ /**
+ *
+ * Constrói um campo livre após executar os métodos
+ * {@link AbstractCampoLivre#checkValues(Titulo)} e {@link AbstractCampoLivre#addFields(Titulo)}, retornando em
+ * seguida esta instância pronta para escrita.
+ *
+ * Usado pelo método {@link AbstractCampoLivre#build(Titulo)} para verificar a consistência do
+ * campo livre. Se algum inconsistência for verificada, este método deverá
+ * lança-la.
+ *
+ * Gera o campo livre a parir dos campos armazenados sem verificar se está
+ * compatível com número de fields declarado pelo campo livre. Isso implica
+ * que a string retornada poderá ser menor do que 25 caracteres.
+ *
+ *
+ * @return string a partir dos campos contidos até o momento.
+ *
+ * @since 0.2
+ */
+ protected final String writeFields() {
+
+ StringBuilder campoLivreAtual = new StringBuilder();
+
+ for(FixedField> f : this){
+ campoLivreAtual.append(f.write());
+ }
+
+ return campoLivreAtual.toString();
+ }
+
+ /*
+ * Validações inicias.
+ */
+
+ /**
+ *
+ * Verifica se o título não é nulo, senão lança uma {@code
+ * IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ private static void checkTituloNotNull(Titulo titulo){
+
+ Objects.checkNotNull(titulo, "Título não pode ser nulo!");
+ }
+
+ /**
+ *
+ * Verifica se a conta bancária do título não é nula, senão lança uma
+ * {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ private static void checkContaBancariaNotNull(Titulo titulo) {
+
+ Objects.checkNotNull(titulo.getContaBancaria(), "Conta bancária do título não pode ser nula!");
+ }
+
+ /**
+ *
+ * Verifica se o banco da conta bancária do título não é nulo, senão lança
+ * uma {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ private static void checkBancoNotNull(Titulo titulo) {
+
+ Objects.checkNotNull(titulo.getContaBancaria().getBanco(), "Banco da conta bancária do título não pode ser nulo!");
+
+ boolean expression = isCodigoDeCompensacaoOK(titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado());
+
+ Objects.checkArgument(expression, format("Código de compensação [%s] inválido!", titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigoFormatado()));
+ }
+
+ /*
+ * Validações para subclasses.
+ */
+
+ /**
+ *
+ * Verifica se a carteira da conta bancária do título não é nula, senão
+ * lança uma {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkCarteiraNotNull(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getContaBancaria().getCarteira(), "Carteira da conta bancária do título não pode ser nula!");
+ }
+
+ /**
+ *
+ * Verifica se o tipo da carteira da conta bancária do título não é nulo,
+ * senão lança uma {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkRegistroDaCarteiraNotNull(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getContaBancaria().getCarteira().getTipoCobranca(), "Tipo de cobrança (COM ou SEM registro) da carteira não pode ser nulo!");
+ }
+
+ /**
+ *
+ * Verifica se o código da carteira da conta bancária do título não é nulo e
+ * se é um número > 0, caso contrário lança uma {@code
+ * IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkCodigoDaCarteira(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getContaBancaria().getCarteira().getCodigo(), "Código da carteira não pode ser nulo!");
+
+ boolean expression = titulo.getContaBancaria().getCarteira().getCodigo() > 0;
+
+ Objects.checkArgument(expression, format("Código da carteira deve ser um número inteiro natural positivo e não [%s].",titulo.getContaBancaria().getCarteira().getCodigo()));
+ }
+
+ /**
+ *
+ * Verifica se o código da carteira da conta bancária do título é um número
+ * menor que ou igual ao limite informado, caso contrário lança uma {@code
+ * IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ * @param limite - Limite máximo permitido
+ *
+ * @since 0.2
+ */
+ protected final static void checkCodigoDaCarteiraMenorOuIgualQue(Titulo titulo, int limite){
+
+ boolean expression = titulo.getContaBancaria().getCarteira().getCodigo() <= limite;
+
+ Objects.checkArgument(expression,format("Código [%s] da carteira deve ser um número menor que ou igual a [%s].", titulo.getContaBancaria().getCarteira().getCodigo(), limite));
+ }
+
+ /**
+ *
+ * Verifica se a agência da conta bancária do título não é nula, senão lança
+ * uma {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkAgenciaNotNull(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getContaBancaria().getAgencia(), "Agência bancária do título não pode ser nula!");
+ }
+
+ /**
+ *
+ * Verifica se o código do número da agência bancária não é nulo e se é
+ * um número > 0, caso contrário lança uma {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkCodigoDaAgencia(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getContaBancaria().getAgencia().getCodigo(), "Código da agência bancária não pode ser nulo!");
+
+ boolean expression = titulo.getContaBancaria().getAgencia().getCodigo() > 0;
+
+ Objects.checkArgument(expression, format("Código da agência bancária deve ser um número inteiro natural positivo e não [%s].",titulo.getContaBancaria().getAgencia().getCodigo()));
+ }
+
+ /**
+ *
+ * Verifica se o código do número da agência da conta bancária do título é
+ * um número menor que ou igual ao limite informado, caso contrário lança uma {@code
+ * IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ * @param limite
+ * - Limite máximo permitido
+ *
+ * @since 0.2
+ */
+ protected final static void checkCodigoDaAgenciaMenorOuIgualQue(Titulo titulo, int limite){
+
+ boolean expression = titulo.getContaBancaria().getAgencia().getCodigo() <= limite;
+
+ Objects.checkArgument(expression , format("Código [%s] da agência deve ser um número menor que ou igual a [%s].", titulo.getContaBancaria().getAgencia().getCodigo(), limite));
+ }
+
+ /**
+ *
+ * Verifica se o dígito verificador da agência da conta bancária não é nulo,
+ * não é vazio e se é numérico, caso contrário lança uma {@code
+ * IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkDigitoDoCodigoDaAgencia(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getContaBancaria().getAgencia().getDigitoVerificador(), "Dígito verificador da agência bancária não pode ser nulo!");
+ Strings.checkNotBlank(titulo.getContaBancaria().getAgencia().getDigitoVerificador(), format("Dígito verificador [\"%s\"] da agência bancária não pode ser vazio!",titulo.getContaBancaria().getAgencia().getDigitoVerificador()));
+ Strings.checkNotNumeric(titulo.getContaBancaria().getAgencia().getDigitoVerificador(), format("Nesse contexto o dígito verificador [\"%s\"] da agência bancária deve ser numérico!", titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta()));
+ }
+
+ /**
+ *
+ * Verifica se o número da conta da conta bancária do título não é nulo,
+ * senão lança uma {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkNumeroDaContaNotNull(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getContaBancaria().getNumeroDaConta(), "Número da conta bancária do título não pode ser nulo!");
+ }
+
+ /**
+ *
+ * Verifica se o código do do número da conta bancária não é nulo e se é um
+ * número > 0, caso contrário lança uma {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkCodigoDoNumeroDaConta(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), "Código do número da conta bancária não pode ser nulo!");
+
+ boolean expression = titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta() > 0;
+
+ Objects.checkArgument(expression, format("Código do número da conta bancária deve ser um número inteiro natural positivo e não [%s].", titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta()));
+ }
+
+ /**
+ *
+ * Verifica se o código do número da conta bancária do título é um número
+ * menor que ou igual ao limite informado, caso contrário lança uma {@code
+ * IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ * @param limite - Limite máximo permitido
+ *
+ * @since 0.2
+ */
+ protected final static void checkCodigoDoNumeroDaContaMenorOuIgualQue(Titulo titulo, int limite){
+
+ boolean expression = titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta() <= limite;
+
+ Objects.checkArgument(expression, format("Código [%s] do número da conta deve ser um número menor que ou igual a [%s].", titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), limite));
+ }
+
+ /**
+ *
+ * Verifica se o dígito verificador do número da conta bancária não é nulo,
+ * não é vazio e se é numérico, caso contrário lança uma {@code
+ * IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkDigitoDoCodigoDoNumeroDaConta(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), "Dígito verificador do número da conta bancária não pode ser nulo!");
+ Strings.checkNotBlank(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), format("Dígito verificador [\"%s\"] do número da conta bancária não pode ser vazio!", titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta()));
+ Strings.checkNotNumeric(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), format("Nesse contexto o dígito verificador [\"%s\"] do número da conta deve ser numérico!", titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta()));
+ }
+
+ /**
+ *
+ * Verifica se onosso número do título não é nulo, não é vazio e se é
+ * numérico, caso contrário lança uma {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkNossoNumero(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getNossoNumero(), "Nosso número do título não pode ser nulo!");
+ Strings.checkNotBlank(titulo.getNossoNumero(), format("Nosso número [\"%s\"] do título não pode ser vazio!", titulo.getNossoNumero()));
+ Strings.checkNotNumeric(titulo.getNossoNumero(), format("Nosso número [\"%s\"] do título deve conter somente dígitos numéricos!", titulo.getNossoNumero()));
+ }
+
+ /**
+ *
+ * Verifica se o nosso número do título tem o tamanho determinado, caso
+ * contrário lança uma {@code IllegalArgumentException} com a mensagem
+ * "Tamanho do nosso número [%s] diferente do esperado [%s]!".
+ *
+ *
+ * @param titulo
+ * @param length
+ * - Tamanho que deve ser
+ *
+ * @since 0.2
+ */
+ protected final static void checkTamanhoDoNossoNumero(Titulo titulo, int length) {
+
+ checkTamanhoNossoNumero(titulo, length, format(
+ "Tamanho [%s] do nosso número [\"%s\"] diferente do esperado [%s]!",
+ StringUtils.length(titulo.getNossoNumero()), titulo.getNossoNumero(), length));
+ }
+
+ /**
+ *
+ * Verifica se o nosso número do título tem o tamanho determinado, caso
+ * contrário lança uma {@code IllegalArgumentException} com a mensagem
+ * determinada.
+ *
+ *
+ * @param titulo
+ * @param length
+ * - Tamanho que deve ser
+ * @param msg
+ * - Mensagem para erro
+ *
+ * @since 0.2
+ */
+ protected final static void checkTamanhoNossoNumero(Titulo titulo, int length, String msg){
+
+ Objects.checkArgument(titulo.getNossoNumero().length() == length, msg);
+ }
+
+ /**
+ *
+ * Verifica se o dígito verificador do nosso número do título não é nulo,
+ * não é vazio e se é numérico (natural positivo), caso contrário lança uma
+ * {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkDigitoDoNossoNumero(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getDigitoDoNossoNumero(), "Dígito verificador do nosso número do título não pode ser nulo!");
+ Strings.checkNotBlank(titulo.getDigitoDoNossoNumero(), format("Dígito verificador [\"%s\"] do nosso número do título não pode ser vazio!", titulo.getDigitoDoNossoNumero()));
+ Strings.checkNotNumeric(titulo.getDigitoDoNossoNumero(), format("Nesse contexto o dígito verificador [\"%s\"] do nosso número deve ser um número inteiro positivo!", titulo.getDigitoDoNossoNumero()));
+ }
+
+ /**
+ *
+ * Verifica se o dígito do nosso número do título tem o tamanho determinado, caso
+ * contrário lança uma {@code IllegalArgumentException} com a mensagem
+ * "Tamanho [%s] do dígito do nosso número [\"%s\"] diferente do esperado [%s]!".
+ *
+ *
+ * @param titulo
+ * @param length
+ * - Tamanho que deve ser
+ *
+ * @since 0.2
+ */
+ protected final static void checkTamanhoDigitoDoNossoNumero(Titulo titulo, int length) {
+
+ checkTamanhoDigitoDoNossoNumero(titulo, length, format(
+ "Tamanho [%s] do dígito do nosso número [\"%s\"] diferente do esperado [%s]!",
+ StringUtils.length(titulo.getDigitoDoNossoNumero()), titulo.getDigitoDoNossoNumero(), length));
+ }
+
+ /**
+ *
+ * Verifica se o dígito do nosso número do título tem o tamanho determinado, caso
+ * contrário lança uma {@code IllegalArgumentException} com a mensagem
+ * determinada.
+ *
+ *
+ * @param titulo
+ * @param length
+ * - Tamanho que deve ser
+ * @param msg
+ * - Mensagem para erro
+ *
+ * @since 0.2
+ */
+ protected final static void checkTamanhoDigitoDoNossoNumero(Titulo titulo, int length, String msg){
+
+ Objects.checkArgument(titulo.getDigitoDoNossoNumero().length() == length, msg);
+ }
+
+ /**
+ *
+ * Verifica se o valor do título não é nulo e é positivo, caso contrário lança uma
+ * {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ protected final static void checkValor(Titulo titulo){
+
+ Objects.checkNotNull(titulo.getValor(), "Valor do título não pode ser nulo!");
+ Objects.checkArgument(titulo.getValor().compareTo(ZERO) >= 0, format("O valor do título deve ser um número positivo ou zero e não [%s].",titulo.getValor()));
+ }
+
+ /**
+ *
+ * Verifica se o título contém {@code ParametrosBancariosMap} e se este
+ * contém um valor não é nulo do parâmetro determinado, caso contrário lança
+ * uma {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ * @param param
+ * Parâmetro a ser validado
+ *
+ * @since 0.2
+ */
+ protected final static void checkParametroBancario(Titulo titulo, ParametroBancario> param){
+
+ Objects.checkNotNull(titulo.getParametrosBancarios(), format("O parâmetro bancário [\"%s\"] é necessário! [titulo.getParametrosBancarios() == null]",param));
+ Objects.checkArgument(titulo.getParametrosBancarios().contemComNome(param),format("Parâmetro bancário [\"%s\"] não encontrado!",param));
+ Objects.checkNotNull(titulo.getParametrosBancarios().getValor(param), format("Parâmetro bancário [\"%s\"] não contém valor!", param));
+ }
+
+ /**
+ *
+ * Verifica se o título com o parâmetro informado é um número inteiro menor
+ * que ou igual ao limite informado, caso contrário lança uma
+ * {@code IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ * @param param
+ * Parâmetro a ser validado
+ * @param limite
+ * Limite máximo permitido
+ *
+ * @since 0.2
+ */
+ protected final static void checkParametroBancarioMenorOuIgualQue(Titulo titulo, ParametroBancario> param, int limite){
+
+ checkParametroBancario(titulo, param);
+
+ int valor = titulo.getParametrosBancarios().getValor(param).intValue();
+
+ boolean expression = valor <= limite;
+
+ Objects.checkArgument(expression, format("Parâmetro [%s] com valor [%s] deve ser um número menor que ou igual a [%s].", param, valor, limite));
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+
+ return Objects.toString(this);
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoCitiBankNN11.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoCitiBankNN11.java
new file mode 100644
index 0000000..c77ac82
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoCitiBankNN11.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:08:37
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO EST��, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação especÃfica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:08:37
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+
+/**
+ * Interface comum para todos os campos livres do CITIBANK
+ *
+ * @author Fabiano Carrijo Justino
+ * @since 0.2
+ * @version 0.2
+ */
+
+class CLBancoCitiBankNN11 extends AbstractCLBancoDoBrasil {
+ private static final long serialVersionUID = -7675528811239346517L;
+ private static final Integer FIELDS_LENGTH = Integer.valueOf(6);
+
+ //TODO OBTER DADOS ATRAVÉS DE OBJETOS DO BOPEPO
+ CLBancoCitiBankNN11(Titulo titulo)
+ {
+ super(FIELDS_LENGTH);
+ ContaBancaria conta = titulo.getContaBancaria();
+ String nossoNumero = titulo.getNossoNumero();
+// add(new Field(conta.getProduto().getCodigo(), Integer.valueOf(1), Fillers.ZERO_LEFT));
+// add(new Field(conta.getPortifolio().getCodigo(), Integer.valueOf(3), Fillers.ZERO_LEFT));
+// add(new Field(conta.getCosmos().getCodigo(), Integer.valueOf(1), Fillers.ZERO_LEFT));
+// add(new Field(conta.getCosmosConta().getCodigo(), Integer.valueOf(8), Fillers.ZERO_LEFT));
+// add(new Field(nossoNumero, Integer.valueOf(11), Fillers.ZERO_LEFT));
+// add(new Field(conta.getProduto().getCodigo(), Integer.valueOf(1), Fillers.ZERO_LEFT));
+ }
+
+ protected void addFields(Titulo titulo)
+ {
+
+// throw new UnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ protected void checkValues(Titulo titulo)
+ {
+ throw new UnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDeBrasilia.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDeBrasilia.java
new file mode 100644
index 0000000..8bacbe9
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDeBrasilia.java
@@ -0,0 +1,359 @@
+/*
+ * Copyright 2013 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 24/08/2013 - 19:54:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2013 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 24/08/2013 - 19:54:00
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import static java.lang.String.format;
+import static org.jrimum.bopepo.parametro.ParametroBancoDeBrasilia.CHAVE_ASBACE_DIGITO1;
+import static org.jrimum.bopepo.parametro.ParametroBancoDeBrasilia.CHAVE_ASBACE_DIGITO2;
+
+import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Objects;
+import org.jrimum.vallia.digitoverificador.Modulo;
+
+/**
+ *
+ * O campo livre do BRB - Banco de Brasília deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-22
+ *
3
+ *
9(3)
+ *
fixo "000" ZEROS
+ *
ZEROS
+ *
+ *
+ *
23-25
+ *
3
+ *
9(3)
+ *
Agência Cedente (Sem o dígito verificador, completar com zeros a esquerda quando necessário)
+ *
Código da Agência (sem dígito)
+ *
+ *
+ *
26-32
+ *
7
+ *
9(7)
+ *
Conta do Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)
+ *
Conta do Cedente (sem dígito)
+ *
+ *
+ *
33-33
+ *
1
+ *
9
+ *
Carteira | Modalidade/ Categoria
+ *
Categoria - referente ao tipo de cobrança 1-sem registro impressão local, 2-com registro impressão local
+ *
+ *
+ *
34-39
+ *
6
+ *
9(6)
+ *
Número do Nosso Número(Sem o digito verificador)
+ *
Número sequencial
+ *
+ *
+ *
40-42
+ *
3
+ *
9(3)
+ *
Código BACEN(Sem o digito verificador)
+ *
Código do Banco- 070 - BRB
+ *
+ *
+ *
43-43
+ *
1
+ *
9
+ *
Dígito verificador 1 da CHAVE ASBACE
+ *
DV1
+ *
+ *
+ *
44-44
+ *
1
+ *
9
+ *
Dígito verificador 2 da CHAVE ASBACE
+ *
DV2
+ *
+ *
+ *
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Douglas Ramiro
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+/**
+ * @author gleitao
+ *
+ */
+public class CLBancoDeBrasilia extends AbstractCLBancoDeBrasilia{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6099168685425835517L;
+
+ /**
+ * Número de campos = 8.
+ */
+ private static final Integer FIELDS_LENGTH = Integer.valueOf(8);
+
+ /**
+ * Tamanho do primeiro campo "Campo Zerado [000]" = 3.
+ */
+ private static final Integer CAMPO_ZERADO_LENGTH = Integer.valueOf(3);
+
+ /**
+ * Valor do campo "Campo Zerado" = "000".
+ */
+ private static final String CAMPO_ZERADO_VALUE = "000";
+
+ /**
+ * Tamanho do campo Agência = 3.
+ */
+ private static final Integer AGENCIA_LENGTH = Integer.valueOf(3);
+
+ /**
+ * Tamanho do campo Conta = 7.
+ */
+ private static final Integer CONTA_LENGTH = Integer.valueOf(7);
+
+ /**
+ * Tamanho do campo Nosso Número = 6.
+ */
+ private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(6);
+
+ /**
+ * Tamanho do campo Carteira = 1.
+ */
+ private static final Integer CARTEIRA_LENGTH = Integer.valueOf(1);
+
+ /**
+ * Tamanho do campo do dígito da chave ASBACE = 1.
+ */
+ private static final Integer DIGITO_CHAVE_ASBACE_LENGTH = Integer.valueOf(1);
+
+ /**
+ * Tamanho do campo Banco = 3.
+ */
+ private static final Integer BANCO_LENGTH = Integer.valueOf(3);
+
+ /**
+ * Tipo de cobrança: 1-Sem registro impressão local (mesmo que carteira, modalidade ou categoria).
+ */
+ private static final Integer CARTEIRA_SEM_REGISTRO = Integer.valueOf(1);;
+
+ /**
+ * Tipo de cobrança: 2-Com registro impressão local (mesmo que carteira, modalidade ou categoria).
+ */
+ private static final Integer CARTEIRA_COM_REGISTRO = Integer.valueOf(2);
+
+ /**
+ * Dígito verificador calculado em função da CHAVE ASBACE e necessário para o cálculo do {@link #digitoVerificador2DaChaveASBACE}.
+ */
+ private Integer digitoVerificador1DaChaveASBACE;
+
+ /**
+ * Dígito verificador calculado em função da CHAVE ASBACE + {@link #digitoVerificador1DaChaveASBACE}.
+ */
+ private Integer digitoVerificador2DaChaveASBACE;
+
+ /**
+ *
+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
+ *
+ * Verifica se o código da carteira da conta bancária do título não é nulo e
+ * se é um número > 0, caso contrário lança uma {@code
+ * IllegalArgumentException}.
+ *
+ *
+ * @param titulo
+ *
+ * @since 0.2
+ */
+ private void checkCarteiraComOuSemRegistro(Titulo titulo) {
+
+ Integer codigoCarteira = titulo.getContaBancaria().getCarteira().getCodigo();
+
+ final boolean carteiraValida = codigoCarteira.equals(CARTEIRA_SEM_REGISTRO) || codigoCarteira.equals(CARTEIRA_COM_REGISTRO);
+
+ Objects.checkArgument(carteiraValida, format("Código da carteira deve ser \"1-Sem registro impressão local\" ou \"2-Com registro impressão local\" e não [%s].", titulo.getContaBancaria().getCarteira().getCodigo()));
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN10.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN10.java
new file mode 100644
index 0000000..c310318
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN10.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:08:37
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:08:37
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+
+/**
+ *
+ * O campo livre do Banco do Brasil com o nosso número de 10 dígitos deve seguir
+ * esta forma:
+ *
+ *
+ * Dado um título, cria um campo livre para o padrão do Banco do Brasil
+ * que tenha o nosso número de tamanho 10.
+ *
+ * @param titulo título com as informações para geração do campo livre
+ */
+ CLBancoDoBrasilNN10(Titulo titulo) {
+ super(FIELDS_LENGTH);
+
+ ContaBancaria conta = titulo.getContaBancaria();
+
+ String nossoNumero = titulo.getNossoNumero();
+
+ this.add(new FixedField("", 6, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(nossoNumero, 10, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(conta.getCarteira().getCodigo(), 2, Fillers.ZERO_LEFT));
+
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN11.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN11.java
new file mode 100644
index 0000000..9eb75c1
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN11.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:08:50
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:08:50
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ * O campo livre do Banco do Brasil com o nosso número de 11 dígitos deve seguir
+ * esta forma:
+ *
+ *
+ * Dado um título, cria um campo livre para o padrão do Banco do Brasil
+ * que tenha o nosso número de tamanho 11.
+ *
+ * @param titulo título com as informações para geração do campo livre
+ */
+ CLBancoDoBrasilNN11(Titulo titulo) {
+
+ super(FIELDS_LENGTH);
+
+ ContaBancaria conta = titulo.getContaBancaria();
+ String nossoNumero = titulo.getNossoNumero();
+
+ this.add(new FixedField(nossoNumero, 11, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(conta.getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
+ this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 8, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(conta.getCarteira().getCodigo(), 2, Fillers.ZERO_LEFT));
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio6.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio6.java
new file mode 100644
index 0000000..d5b210b
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio6.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:09:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:09:00
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ * O campo livre do Banco do Brasil com o nosso número de 17 dígitos e convênio
+ * de 7 posições deve seguir esta forma:
+ *
+ *
+ * Dado um título, cria um campo livre para o padrão do Banco do Brasil
+ * que tenha o nosso número de tamanho 17.
+ *
+ * @param titulo título com as informações para geração do campo livre
+ */
+ CLBancoDoBrasilNN17Convenio6(Titulo titulo) {
+ super(FIELDS_LENGTH);
+
+ ContaBancaria conta = titulo.getContaBancaria();
+ String nossoNumero = titulo.getNossoNumero();
+
+ this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(nossoNumero, 17, Fillers.ZERO_LEFT));
+ this.add(new FixedField(SERVICO, 2));
+
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio7.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio7.java
new file mode 100644
index 0000000..05dddbb
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoBrasilNN17Convenio7.java
@@ -0,0 +1,91 @@
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+
+/**
+ *
+ * O campo livre do Banco do Brasil com o nosso número de 17 dígitos e convênio
+ * de 7 posições deve seguir esta forma:
+ *
+
+ *
+ *
+ *
+ * @author Gilmar P.S.L
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLBancoDoBrasilNN17Convenio7 extends AbstractCLBancoDoBrasil {
+
+ /**
+ * {@code serialVersionUID = 2347714390743602306L}
+ */
+ private static final long serialVersionUID = 2347714390743602306L;
+
+ /**
+ * Número de campos = 3.
+ */
+ protected static final Integer FIELDS_LENGTH = Integer.valueOf(3);
+
+ /**
+ * Tamanho do campo Constante = 6.
+ */
+ protected static final Integer CONSTANT_LENGTH = Integer.valueOf(6);
+
+ /**
+ * Valor do campo Constante = 0.
+ */
+ protected static final Integer CONSTANT_VALUE = Integer.valueOf(0);
+
+ /**
+ * Constante em forma de campo {@link #CONSTANT_VALUE} e
+ * {@link #CONSTANT_LENGTH}, valor escrito: "000000".
+ */
+ private static final FixedField CONSTANT_FIELD = new FixedField(CONSTANT_VALUE, CONSTANT_LENGTH, Fillers.ZERO_LEFT);
+
+ /**
+ * Tamanho do campo Nosso Número = 17.
+ */
+ protected static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(17);
+
+ /**
+ * Tamanho do campo Carteira = 2.
+ */
+ protected static final Integer CARTEIRA_LENGTH = Integer.valueOf(2);
+
+ /**
+ *
+ * Cria um campo livre instanciando o número de fields ({@code
+ * FIELDS_LENGTH}) deste campo.
+ *
+ *
+ * @since 0.2
+ */
+ protected CLBancoDoBrasilNN17Convenio7() {
+
+ super(FIELDS_LENGTH);
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+
+ checkNossoNumero(titulo);
+ checkTamanhoDoNossoNumero(titulo, NN17);
+ checkCarteiraNotNull(titulo);
+ checkCodigoDaCarteira(titulo);
+ checkCodigoDaCarteiraMenorOuIgualQue(titulo, 99);
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+
+ this.add(CONSTANT_FIELD);
+ this.add(new FixedField(titulo.getNossoNumero(),NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT));
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoNordesteDoBrasil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoNordesteDoBrasil.java
new file mode 100644
index 0000000..17edfad
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoDoNordesteDoBrasil.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 16/12/2010 - 13:24:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2010 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Created at: 16/12/2010 - 13:24:00
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+
+/**
+ *
+ * O campo livre do Banco do Nordeste deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-23
+ *
4
+ *
9(4)
+ *
Agência Cedente (sem o digito verificador, completar com zeros à esquerda quando necessário)
+ *
Código da Agência (sem dígito)
+ *
+ *
+ *
24-30
+ *
7
+ *
9(7)
+ *
Conta do Cedente (sem o dígito verificador, completar com zeros à esquerda quando necessário)
+ *
Conta do Cedente (sem dígito)
+ *
+ *
+ *
31-31
+ *
1
+ *
9(1)
+ *
Dígito da Conta do Cedente
+ *
Dígito da Conta do Cedente
+ *
+ *
+ *
32-38
+ *
7
+ *
9(7)
+ *
Nosso Número (sem o dígito verificador, completar com zeros à esquerda quando necessário)
+ *
Nosso Número (No. Bancário) (sem dígito)
+ *
+ *
+ *
39-39
+ *
1
+ *
9(1)
+ *
Dígito do Nosso Número
+ *
Dígito do Nosso Número (No. Bancário)
+ *
+ *
+ *
40-41
+ *
2
+ *
9(2)
+ *
Carteira (utilizar o código da carteira)
+ *
Carteira (Tipo de Operação)
+ *
+ *
+ *
42-44
+ *
3
+ *
9(3)
+ *
Preenchar campo com ZEROS.
+ *
Campo zerado
+ *
+ *
+ *
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
+ *
+ * @author Gilmar P.S.L.
+ * @author Misael Barreto
+ * @author Paulo Porto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLBancoDoNordesteDoBrasil extends AbstractCLBancoDoNordesteDoBrasil {
+
+ /**
+ * {@code serialVersionUID = 5203223333877548162L}
+ */
+ private static final long serialVersionUID = 5203223333877548162L;
+
+ /**
+ * Número de campos = 7.
+ */
+ private static final Integer FIELDS_LENGTH = Integer.valueOf(7);
+
+ /**
+ * Tamanho do campo Agência = 4.
+ */
+ private static final Integer AGENCIA_LENGTH = Integer.valueOf(4);
+
+ /**
+ * Tamanho do campo Conta = 7.
+ */
+ private static final Integer CONTA_LENGTH = Integer.valueOf(7);
+
+ /**
+ * Tamanho do campo Dígito da Conta = 1.
+ */
+ private static final Integer DIGITO_CONTA_LENGTH = Integer.valueOf(1);
+
+
+ /**
+ * Tamanho do campo Nosso Número = 7.
+ */
+ private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(7);
+
+ /**
+ * Tamanho do campo Dígito do Nosso Número = 1.
+ */
+ private static final Integer DIGITO_NOSSO_NUMERO_LENGTH = Integer.valueOf(1);
+
+ /**
+ * Tamanho do campo Carteira = 2.
+ */
+ private static final Integer CARTEIRA_LENGTH = Integer.valueOf(2);
+
+
+ /**
+ * Tamanho do campo "Campo Zerado" = 3.
+ */
+ private static final Integer CAMPO_ZERADO_LENGTH = Integer.valueOf(3);
+
+ /**
+ * Valor do campo "Campo Zerado" = 0.
+ */
+ protected static final Integer CAMPO_ZERADO_VALUE = Integer.valueOf(0);
+
+ /**
+ *
+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
+ *
+ *
+ * @since 0.2
+ */
+ protected CLBancoDoNordesteDoBrasil() {
+ super(FIELDS_LENGTH);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo)
+ */
+ @Override
+ protected void checkValues(Titulo titulo){
+
+ checkAgenciaNotNull(titulo);
+ checkCodigoDaAgencia(titulo);
+ checkCodigoDaAgenciaMenorOuIgualQue(titulo, 9999);
+ checkNumeroDaContaNotNull(titulo);
+ checkCodigoDoNumeroDaConta(titulo);
+ checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 9999999);
+ checkDigitoDoCodigoDoNumeroDaConta(titulo);
+ checkNossoNumero(titulo);
+ checkDigitoDoNossoNumero(titulo);
+ checkCarteiraNotNull(titulo);
+ checkCodigoDaCarteira(titulo);
+ checkCodigoDaCarteiraMenorOuIgualQue(titulo, 99);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo)
+ */
+ @Override
+ protected void addFields(Titulo titulo) {
+
+ this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), DIGITO_CONTA_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getDigitoDoNossoNumero(), DIGITO_NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(CAMPO_ZERADO_VALUE, CAMPO_ZERADO_LENGTH, Fillers.ZERO_LEFT));
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoIntermedium.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoIntermedium.java
new file mode 100644
index 0000000..2f0bd39
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoIntermedium.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 11/08/2010 - 10:23:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 11/08/2010 - 10:23:00
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+
+/**
+ * O campo livre do Banco Intermedium deve seguir esta forma:
+ *
+ *
+ * Dado um título, cria um campo livre para banco Intermedium (077).
+ *
+ *
+ * @param titulo - título com as informações para geração do campo livre
+ */
+ CLBancoIntermedium(Titulo titulo) {
+
+ super(FIELDS_LENGTH);
+
+ this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
+ this.add(new FixedField(CONSTANTE_70, 2));
+ this.add(new FixedField(titulo.getNossoNumero(), 11, Fillers.ZERO_LEFT));
+ this.add(new FixedField( titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT));
+ this.add(new FixedField( titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), 1, Fillers.ZERO_LEFT));
+ this.add(new FixedField(CONSTANTE_0, 1));
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoReal.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoReal.java
new file mode 100644
index 0000000..deecadc
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoReal.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:09:11
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:09:11
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+import org.jrimum.utilix.text.Strings;
+import org.jrimum.vallia.digitoverificador.Modulo;
+import org.jrimum.vallia.digitoverificador.TipoDeModulo;
+
+/**
+ *
*** COBRANÇA SEM REGISTRO ***
+ * O campo livre do Banco Real deve seguir esta forma:
+ *
+ *
+ * Dado um título, cria um campo livre para o padrão do Banco Real.
+ *
+ * @param titulo título com as informações para geração do campo livre
+ */
+ CLBancoReal(Titulo titulo) {
+
+ super(FIELDS_LENGTH);
+
+ this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
+ this.add(new FixedField(calculeDigitoDaPosicao31(titulo.getNossoNumero(), titulo.getContaBancaria().getAgencia().getCodigo(), titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta()), 1, Fillers.ZERO_LEFT));
+ this.add(new FixedField(Strings.eliminateSymbols(titulo.getNossoNumero()), 13, Fillers.ZERO_LEFT));
+ }
+
+ /**
+ *
+ * Calcula o Dígito da posição 31 deste campo livre (CLBancoReal).
+ *
+ *
+ *
+ * No cálculo do dígito da posição 31 são considerados, para a obtenção do
+ * dígito, os dados {[NOSSO NÚMERO],[AGÊNCIA],[CONTA]} calculado pelos
+ * critérios do Módulo 10.
+ *
+ * O campo livre do Banco Rural, para cobrança não registrada, deve seguir esta
+ * forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-20
+ *
1
+ *
9(1)
+ *
Tipo de Cobrança - 9
+ *
Tipo de Cobrança - 9
+ *
+ *
+ *
21-23
+ *
3
+ *
9(3)
+ *
Código da Agência
+ *
Agência Cedente
+ *
+ *
+ *
24-26
+ *
3
+ *
9(3)
+ *
Código Reduzido do Cliente
+ *
O código reduzido deverá ser
+ * solicitado ao gerente da agência.
+ *
+ *
+ *
27-41
+ *
15
+ *
9(15)
+ *
Seu número
+ *
Nosso número
+ *
+ *
+ *
42-44
+ *
3
+ *
9(3)
+ *
Constante "000"
+ *
Zeros
+ *
+ *
+ *
+ *
+ * @author Gilmar P.S.L.
+ */
+class CLBancoRuralCobrancaNaoRegistrada extends AbstractCLBancoRural{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -837754906530330855L;
+
+ /**
+ * Número de campos.
+ */
+ private static final Integer FIELDS_LENGTH = Integer.valueOf(5);
+
+ /**
+ * Tipo de Cobrança = 9.
+ */
+ private static final Integer TIPO_COBRANCA = Integer.valueOf(9);
+
+ /**
+ * Constante
+ */
+ private static final String ZEROS = "000";
+
+ /**
+ *
+ * Dado um título, cria um campo livre para cobrança não registrada do Banco
+ * Rural.
+ *
+ *
+ * @param titulo
+ * - Título com as informações para geração do campo livre
+ */
+ CLBancoRuralCobrancaNaoRegistrada(Titulo titulo) {
+
+ super(FIELDS_LENGTH);
+
+ this.add( new FixedField( TIPO_COBRANCA , 1 ) );
+ this.add( new FixedField( titulo.getContaBancaria().getAgencia().getCodigo(), 3 , Fillers.ZERO_LEFT ) );
+ this.add( new FixedField(titulo.getParametrosBancarios().getValor(CODIGO_REDUZIDO), 3, Fillers.ZERO_LEFT ) );
+ this.add( new FixedField( titulo.getNossoNumero(), 15 , Fillers.ZERO_LEFT ) );
+ this.add( new FixedField( ZEROS, 3));
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaNaoRegistradaSeguradora.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaNaoRegistradaSeguradora.java
new file mode 100644
index 0000000..18fb120
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaNaoRegistradaSeguradora.java
@@ -0,0 +1,127 @@
+package org.jrimum.bopepo.campolivre;
+
+import static org.jrimum.bopepo.parametro.ParametroBancoRural.CODIGO_REDUZIDO;
+import static org.jrimum.bopepo.parametro.ParametroBancoRural.VALOR_IOS;
+
+import java.math.BigDecimal;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+import org.jrimum.utilix.text.DecimalFormat;
+
+/**
+ *
+ * O campo livre do Banco Rural, para cobrança sem registro (apólice de seguro
+ * com I.O.S.), deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-20
+ *
1
+ *
9(1)
+ *
Tipo de Cobrança - 4
+ *
Tipo de Cobrança - 4
+ *
+ *
+ *
21-23
+ *
3
+ *
9(3)
+ *
Código da Agência
+ *
Agência Cedente
+ *
+ *
+ *
24-26
+ *
3
+ *
9(3)
+ *
Código Reduzido do Cliente
+ *
O código reduzido deverá ser
+ * solicitado ao gerente da agência.
+ *
+ *
+ *
27-36
+ *
10
+ *
9(10)
+ *
Seu número
+ *
Nosso número
+ *
+ *
+ *
37-37
+ *
1
+ *
9(1)
+ *
Dígito seu Número
+ *
Dígito nosso número
+ *
+ *
+ *
42-44
+ *
3
+ *
9(3)
+ *
Valor I.O.S. 05 (cinco) inteiros,
+ * 02 (duas) decimais
+ *
Valor do imposto
+ *
+ *
+ *
+ *
+ * @author Gilmar P.S.L.
+ */
+class CLBancoRuralCobrancaNaoRegistradaSeguradora extends AbstractCLBancoRural{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2427800425370567806L;
+
+ /**
+ * Número de campos.
+ */
+ private static final Integer FIELDS_LENGTH = Integer.valueOf(6);
+
+ /**
+ * Tipo de Cobrança = 4.
+ */
+ private static final Integer TIPO_COBRANCA = Integer.valueOf(4);
+
+ /**
+ *
+ * Dado um título, cria um campo livre para cobrança sem registro – apólice de seguro com I.O.S..
+ *
+ *
+ * @param titulo
+ * - título com as informações para geração do campo livre
+ */
+ CLBancoRuralCobrancaNaoRegistradaSeguradora(Titulo titulo) {
+
+ super(FIELDS_LENGTH);
+
+ this.add( new FixedField( TIPO_COBRANCA , 1 ) );
+ this.add( new FixedField( titulo.getContaBancaria().getAgencia().getCodigo(), 3 , Fillers.ZERO_LEFT ) );
+ this.add( new FixedField(titulo.getParametrosBancarios().getValor(CODIGO_REDUZIDO), 3, Fillers.ZERO_LEFT ) );
+ this.add( new FixedField( titulo.getNossoNumero(), 10 , Fillers.ZERO_LEFT ) );
+ this.add( new FixedField( titulo.getDigitoDoNossoNumero(), 1 , Fillers.ZERO_LEFT ) );
+ this.add( new FixedField(titulo.getParametrosBancarios().getValor(VALOR_IOS), 7, DecimalFormat.NUMBER_DD_BR.copy(), Fillers.ZERO_LEFT));
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaRegistrada.java
new file mode 100644
index 0000000..47d2dae
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoRuralCobrancaRegistrada.java
@@ -0,0 +1,131 @@
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ * O campo livre do Banco Rural, para cobrança registrada, deve seguir esta
+ * forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-20
+ *
1
+ *
9(1)
+ *
Tipo de Cobrança - 0
+ *
Tipo de Cobrança - 0
+ *
+ *
+ *
21-23
+ *
3
+ *
9(3)
+ *
Código da Agência
+ *
Agência Cedente
+ *
+ *
+ *
24-32
+ *
9
+ *
9(9)
+ *
Conta Corrente
+ *
Conta do Cedente
+ *
+ *
+ *
33-33
+ *
1
+ *
9(1)
+ *
Dígito da Conta Corrente
+ *
Dígito da Conta do Cedente
+ *
+ *
+ *
34-40
+ *
7
+ *
9(7)
+ *
Nosso Número
+ *
Nosso Número
+ *
+ *
+ *
41-41
+ *
1
+ *
9(1)
+ *
Dígito do Nosso Número
+ *
Dígito do Nosso Número
+ *
+ *
+ *
42-44
+ *
3
+ *
9(3)
+ *
Constante "000"
+ *
Zeros
+ *
+ *
+ *
+ *
+ * @author Fernando Dias
+ * @author Gilmar P.S.L.
+ */
+class CLBancoRuralCobrancaRegistrada extends AbstractCLBancoRural{
+
+ private static final long serialVersionUID = -5166628254198207874L;
+
+ /**
+ * Número de campos.
+ */
+ private static final Integer FIELDS_LENGTH = Integer.valueOf(7);
+
+ /**
+ * Tipo de Cobrança = 0.
+ */
+ private static final Integer TIPO_COBRANCA = Integer.valueOf(0);
+
+ /**
+ * Constante
+ */
+ private static final String ZEROS = "000";
+
+ /**
+ *
+ * Dado um título, cria um campo livre para cobrança registrada do Banco
+ * Rural.
+ *
+ *
+ * @param titulo
+ * - título com as informações para geração do campo livre
+ */
+ CLBancoRuralCobrancaRegistrada(Titulo titulo) {
+
+ super(FIELDS_LENGTH);
+
+ this.add( new FixedField( TIPO_COBRANCA , 1 ) );
+ this.add( new FixedField( titulo.getContaBancaria().getAgencia().getCodigo(), 3 , Fillers.ZERO_LEFT ) );
+ this.add( new FixedField( titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 9, Fillers.ZERO_LEFT ) );
+ this.add( new FixedField( titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), 1 ) );
+ this.add( new FixedField( titulo.getNossoNumero(), 7 , Fillers.ZERO_LEFT ) );
+ this.add( new FixedField( titulo.getDigitoDoNossoNumero(), 1 ) );
+ this.add( new FixedField( ZEROS, 3));
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaNaoRegistrada.java
new file mode 100644
index 0000000..9059be0
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaNaoRegistrada.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 21/04/2008 - 21:54:06
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 21/04/2008 - 21:54:06
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+
+/**
+ *
+ * O campo livre do Bradesco deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-20
+ *
1
+ *
9(1)
+ *
Sistema = constante 7
+ *
Valor fixo 7
+ *
+ *
+ *
21-26
+ *
6
+ *
9(6)
+ *
Fixo atribuído pelo banco (*)
+ * Identificação numérica com cinco números + um dígito verificador
+ *
Número da conta + DV
+ *
+ *
+ *
27-43
+ *
17
+ *
9(17)
+ *
Livre do cliente - Variável
+ * conforme necessidade do cliente
+ *
Nosso Número (sem dígito)
+ *
+ *
+ *
44-44
+ *
1
+ *
9
+ *
Tipo cobrança = constante 4 -
+ * Express Emitido pelo Cliente
+ *
Valor fixo 4
+ *
+ *
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLBancoSafraCobrancaNaoRegistrada extends AbstractCLBancoSafra {
+
+ /**
+ * {@code serialVersionUID = -6573340701469029151L}
+ */
+ private static final long serialVersionUID = -6573340701469029151L;
+
+ /**
+ * Tamanho do número de campos = 5.
+ */
+ protected static final Integer FIELDS_LENGTH = Integer.valueOf(5);
+
+ /**
+ * Tamanho do campo Conta = 5.
+ */
+ private static final Integer CONTA_LENGTH = Integer.valueOf(5);
+
+ /**
+ * Tamanho do campo Dígito da Conta = 1.
+ */
+ private static final Integer CONTA_DIGITO_LENGTH = Integer.valueOf(1);
+
+ /**
+ * Tamanho do campo Nosso Número = 17.
+ */
+ private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(17);
+
+ /**
+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}
+ * ) deste campo.
+ *
+ * @since 0.2
+ */
+ protected CLBancoSafraCobrancaNaoRegistrada() {
+
+ super(FIELDS_LENGTH);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo)
+ */
+ @Override
+ protected void checkValues(Titulo titulo) {
+
+ checkNumeroDaContaNotNull(titulo);
+ checkCodigoDoNumeroDaConta(titulo);
+ checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 999999);
+ checkDigitoDoCodigoDoNumeroDaConta(titulo);
+ checkNossoNumero(titulo);
+ checkTamanhoDoNossoNumero(titulo, NN17);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo)
+ */
+ @Override
+ protected void addFields(Titulo titulo) {
+
+ this.add(SISTEMA_CONSTANT_FIELD);
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), CONTA_DIGITO_LENGTH));
+ this.add(new FixedField(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH));
+ this.add(new FixedField(TipoDeCobranca.EXPRESS_BOLETO_EMITIDO_PELO_CLIENTE.codigo(), TIPO_COBRANCA_FIELD_LENGTH));
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaRegistrada.java
new file mode 100644
index 0000000..5289c09
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoSafraCobrancaRegistrada.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 21/04/2008 - 20:31:39
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 21/04/2008 - 20:31:39
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+
+/**
+ *
+ * O campo livre do Bradesco deve seguir esta forma:
+ *
+ *
+ * @author Gilmar P.S.L.
+ * @author Misael Barreto
+ * @author Dani Schinniger
+ */
+class CLBancoSantander extends AbstractCLSantander implements CampoLivre {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -412221524249334574L;
+
+ /**
+ *
+ */
+ private static final Integer FIELDS_LENGTH = 5;
+
+ /**
+ * Constante informada no manual.
+ */
+ private static final Integer CONSTANTE = Integer.valueOf(9);
+
+ /**
+ * 101- Cobrança Simples Rápida COM Registro
+ */
+ private static final int CARTEIRA_RAPIDA_COM_REGISTRO = 101;
+
+ /**
+ * 201- Penhor Rápida com Registro
+ */
+ private static final int CARTEIRA_RAPIDA_SEM_REGISTRO = 201;
+
+ /**
+ * 102- Cobrança simples – SEM Registro
+ */
+ private static final int CARTEIRA_SIMPLES_SEM_REGISTRO = 102;
+
+ /**
+ * 104- Cobrança Simples Eletrônica - COM Registro
+ */
+ private static final int COBRANCA_SIMPLES_ELETRONICA_COM_REGISTRO = 104;
+
+ CLBancoSantander(Titulo titulo) {
+ super(FIELDS_LENGTH);
+
+ ContaBancaria conta = titulo.getContaBancaria();
+ StringBuilder nossoNumero = new StringBuilder(titulo.getNossoNumero());
+ nossoNumero.append(titulo.getDigitoDoNossoNumero());
+
+ this.add(new FixedField(CONSTANTE, 1));
+ this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
+// this.add(new FixedField(conta.getNumeroDaConta().getDigitoDaConta(), 1));
+
+ this.add(new FixedField(nossoNumero.toString(), 13, Fillers.ZERO_LEFT));
+
+ // IOF – Seguradoras
+
+ if (titulo.hasParametrosBancarios()
+ && Objects.isNotNull(titulo.getParametrosBancarios().getValor(
+ IOF_SEGURADORA))) {
+
+ this.add(new FixedField(titulo
+ .getParametrosBancarios().getValor(IOF_SEGURADORA), 1));
+
+ } else {
+
+ this.add(new FixedField(0, 1));
+ }
+
+ // Tipo de Modalidade Carteira
+
+ switch (conta.getCarteira().getCodigo()) {
+
+ case CARTEIRA_RAPIDA_COM_REGISTRO:
+ case CARTEIRA_RAPIDA_SEM_REGISTRO:
+ case CARTEIRA_SIMPLES_SEM_REGISTRO:
+ case COBRANCA_SIMPLES_ELETRONICA_COM_REGISTRO:
+
+ this.add(new FixedField(conta.getCarteira().getCodigo(), 3,
+ Fillers.ZERO_LEFT));
+
+ break;
+
+ default:
+
+ Exceptions.throwIllegalArgumentException(String.format(
+ "CARTEIRA [%s] NÃO SUPORTADA!", conta.getCarteira()
+ .getCodigo()));
+ }
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoobCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoobCobrancaNaoRegistrada.java
new file mode 100644
index 0000000..062dc35
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBancoobCobrancaNaoRegistrada.java
@@ -0,0 +1,238 @@
+/*
+ * Copyright 2011 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 17/02/2011 - 12:40:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2011 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 17/02/2011 - 12:40:00
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import static org.jrimum.bopepo.parametro.ParametroBancoob.MODALIDADE_DE_COBRANCA;
+import static org.jrimum.bopepo.parametro.ParametroBancoob.NUMERO_DA_PARCELA;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+
+/**
+ *
+ * O campo livre do bradesco deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-20
+ *
1
+ *
9(1)
+ *
Carteira
+ *
Carteira
+ *
+ *
+ *
21-24
+ *
4
+ *
9(4)
+ *
Agência Cedente (Cooperativa) (sem o dígito
+ * verificador, completar com zeros a esquerda quando necessário)
+ *
Código da Agência (sem dígito)
+ *
+ *
+ *
25-26
+ *
2
+ *
9(2)
+ *
Modalidade
+ *
Modalidade
+ *
+ *
+ *
27-33
+ *
7
+ *
9(7)
+ *
Código do Cliente (sem o dígito
+ * verificador, completar com zeros a esquerda quando necessário)
+ *
Conta do Beneficiário (sem dígito)
+ *
+ *
+ *
34-40
+ *
7
+ *
9(7)
+ *
Número do título(sem o dígito
+ * verificador, completar com zeros a esquerda quando necessário)
+ *
Nosso Número (sem dígito)
+ *
+ *
+ *
41-41
+ *
1
+ *
9(1)
+ *
Dígito verificador do Nosso Número
+ *
Dígito verificador do Nosso Número
+ *
+ *
+ *
42-44
+ *
3
+ *
9(3)
+ *
Número da Parcela (completar com zeros a esquerda quando necessário)
+ *
Número da Parcela
+ *
+ *
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class CLBancoobCobrancaNaoRegistrada extends AbstractCLBancoob{
+
+ /**
+ * {@code serialVersionUID = 2864939240695151533L}
+ */
+ private static final long serialVersionUID = 2864939240695151533L;
+
+ /**
+ * Número de campos = 6.
+ */
+ protected static final Integer FIELDS_LENGTH = 8;
+
+ /**
+ * Tamanho do campo Carteira = 1.
+ */
+ protected static final Integer CARTEIRA_LENGTH = Integer.valueOf(1);
+
+ /**
+ * Tamanho do campo Agência = 4.
+ */
+ protected static final Integer AGENCIA_LENGTH = Integer.valueOf(4);
+
+ /**
+ * Tamanho do campo código da modalidade de cobrança = 2.
+ */
+ protected static final Integer MODALIDADE_DE_COBRANCA_LENGTH = Integer.valueOf(2);
+
+ /**
+ * Valor do código da modalidade de cobrança (01) = SIMPLES.
+ */
+ protected static final Integer COBRANCA_SIMPLES = Integer.valueOf(1);
+
+ /**
+ * Tamanho do campo Nosso Número = 7.
+ */
+ private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(7);
+
+ /**
+ * Tamanho do campo Dígito Verificador do Nosso Número = 1.
+ */
+ private static final Integer DV_NOSSO_NUMERO_LENGTH = Integer.valueOf(1);
+
+ /**
+ * Tamanho do campo Conta = 6.
+ */
+ private static final Integer CONTA_LENGTH = Integer.valueOf(6);
+
+ /**
+ * Tamanho do campo Dígito da conta = 1
+ */
+ private static final Integer DV_CONTA_LENGTH = 1;
+
+ /**
+ * Valor do número de parcelas = 1.
+ */
+ private static final Integer UMA_PARCELA = Integer.valueOf(1);
+
+ /**
+ * Tamanho do campo Conta = 3.
+ */
+ private static final Integer NUMERO_DA_PARCELA_LENGTH = 3;
+
+ /**
+ *
+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
+ *
+ *
+ * @since 0.2
+ */
+ protected CLBancoobCobrancaNaoRegistrada() {
+ super(FIELDS_LENGTH);
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+
+ checkCarteiraNotNull(titulo);
+ checkCodigoDaCarteira(titulo);
+ checkCodigoDaCarteiraMenorOuIgualQue(titulo, 9);
+ checkAgenciaNotNull(titulo);
+ checkCodigoDaAgencia(titulo);
+ checkCodigoDaAgenciaMenorOuIgualQue(titulo, 9999);
+ checkNossoNumero(titulo);
+ checkTamanhoDoNossoNumero(titulo, NN7);
+ checkDigitoDoNossoNumero(titulo);
+ checkTamanhoDigitoDoNossoNumero(titulo, DV_NOSSO_NUMERO_LENGTH);
+ checkNumeroDaContaNotNull(titulo);
+ checkCodigoDoNumeroDaConta(titulo);
+ checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 9999999);
+ checkDigitoDoCodigoDoNumeroDaConta(titulo);
+ checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 999999);
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+
+ Integer codigoDaModalidadeDeCobranca = COBRANCA_SIMPLES;
+ Integer numeroDaParcela = UMA_PARCELA;
+
+ if (titulo.hasParametrosBancarios()) {
+
+ if (titulo.getParametrosBancarios().contemComNome(MODALIDADE_DE_COBRANCA)) {
+ checkParametroBancario(titulo, MODALIDADE_DE_COBRANCA);
+ codigoDaModalidadeDeCobranca = titulo.getParametrosBancarios().getValor(MODALIDADE_DE_COBRANCA);
+ }
+
+ if (titulo.getParametrosBancarios().contemComNome(NUMERO_DA_PARCELA)) {
+ checkParametroBancario(titulo, NUMERO_DA_PARCELA);
+ numeroDaParcela = titulo.getParametrosBancarios().getValor(NUMERO_DA_PARCELA);
+ }
+ }
+
+ this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(codigoDaModalidadeDeCobranca, MODALIDADE_DE_COBRANCA_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), DV_CONTA_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getNossoNumero(),NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getDigitoDoNossoNumero(),DV_NOSSO_NUMERO_LENGTH));
+ this.add(new FixedField(numeroDaParcela, NUMERO_DA_PARCELA_LENGTH, Fillers.ZERO_LEFT));
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanestes.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanestes.java
new file mode 100644
index 0000000..397381a
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanestes.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: Dec 13, 2008 - 10:40:38 AM
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: Dec 13, 2008 - 10:40:38 AM
+ *
+ */
+package org.jrimum.bopepo.campolivre;
+
+import static org.jrimum.utilix.Objects.exists;
+
+import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+import org.jrimum.vallia.digitoverificador.Modulo;
+import org.jrimum.vallia.digitoverificador.TipoDeModulo;
+
+/**
+ *
+ *
+ * Representação do campo livre usado para boletos com carteiras (cobrança)
+ * sem registro, caucionadas e com registro. O tipo de cobrança de carteira caucionada
+ * se enquadra no conceito de cobrança registrada, sendo diferenciada pelo código
+ * da carteira.
+ *
+ *
+ *
+ * Layout:
+ *
+ *
+ * Cobrança Normal - CAMPO LIVRE - Chave ASBACE
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Campo Livre No Código De
+ * Barras (20 a 44)
+ *
+ *
20 a 27
+ *
Nosso Número (sem os dois dígitos)
+ *
+ *
+ *
+ *
28 a 38
+ *
Conta Corrente
+ *
+ *
+ *
39 a 39
+ *
+ *
Produto = 2-Sem registro; 3-Caucionada; 4,5,6 e 7-Cobrança com registro
+ *
+ *
+ *
+ *
40 a 42
+ *
Constante = "021" Código do BANESTES
+ *
+ *
+ *
+ *
43 a 44
+ *
Duplo Dígito referente às posições 20 a 42
+ *
+ *
+ *
+ *
+ *
+ * @author Gilmar P.S.L.
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ * @author Samuel Valério Valerio
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLBanestes extends AbstractCLBanestes {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 476678476727564241L;
+
+ private static final Integer FIELDS_LENGTH = 5;
+
+ public CLBanestes(Titulo titulo) {
+
+ super(FIELDS_LENGTH);
+
+ this.add(new FixedField(Integer.valueOf(titulo.getNossoNumero()), 8, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 11, Fillers.ZERO_LEFT));
+
+ final Integer codigoDaCarteiraDeCobranca = titulo.getContaBancaria().getCarteira().getCodigo();
+
+ if (exists(codigoDaCarteiraDeCobranca)) {
+ this.add(new FixedField(codigoDaCarteiraDeCobranca, 1));
+
+ } else {
+
+ final TipoDeCobranca tipoDeCobranca = titulo.getContaBancaria().getCarteira().getTipoCobranca();
+
+ if (tipoDeCobranca == null) {
+ throw new CampoLivreException("Tipo de cobrança da carteira não foi especificado!");
+ }
+
+ switch (tipoDeCobranca) {
+
+ case SEM_REGISTRO:
+ this.add(new FixedField(2, 1));
+ break;
+
+ case COM_REGISTRO:
+ if (codigoDaCarteiraDeCobranca >= 3 && codigoDaCarteiraDeCobranca <= 7) {
+
+ this.add(new FixedField(codigoDaCarteiraDeCobranca, 1));
+ break;
+
+ } else {
+ throw new CampoLivreException("Código da carteira de cobrança com registro deve ser" +
+ " especificado com 3,4,5,6 ou 7. Valor atual = [" + codigoDaCarteiraDeCobranca + "]");
+ }
+ default:
+ throw new CampoLivreException("Tipo de cobrança [" + tipoDeCobranca + "] não é suportado!");
+
+ }
+ }
+ this.add(new FixedField(titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigo().byteValue(), 3, Fillers.ZERO_LEFT));
+ this.add(new FixedField(calculaDuploDV(), 2, Fillers.ZERO_LEFT));
+ }
+
+ /**
+ * Calcula duplo dígito verificador da posição 0 à 23 do campo livre (Chave ASBACE)..
+ *
+ * @return Duplo dígito verificador.
+ *
+ */
+ private byte calculaDuploDV() {
+ final byte duploDV;
+
+ String fields = writeFields();
+
+ byte primeiroDV = calculaPrimeiroDV(fields);
+
+ final byte segundoDV;
+
+ // resto proveniente do módulo 11 com pesos de 2 a 7
+ int restoDoModulo11 = new Modulo(TipoDeModulo.MODULO11, 7, 2).calcule(fields + primeiroDV);
+
+ if (restoDoModulo11 == 0) {
+ segundoDV = 0;
+ } else if (restoDoModulo11 == 1) {
+ if (primeiroDV == 9) {
+ primeiroDV = 0;
+ } else {
+ primeiroDV++;
+ }
+ segundoDV = (byte) new Modulo(TipoDeModulo.MODULO11, 7, 2).calcule(fields + primeiroDV);
+ } else {
+ segundoDV = (byte) (11 - restoDoModulo11);
+ }
+
+ duploDV = Byte.parseByte(String.valueOf(primeiroDV) + String.valueOf(segundoDV));
+
+ return duploDV;
+ }
+
+ /**
+ * Calcula o primeiro dígito verificador.
+ *
+ * @param fields
+ *
+ * @return O primeiro dígito verificador dos dois existentes na chave ASBACE (Campo livre).
+ */
+ private byte calculaPrimeiroDV(String fields) {
+ final byte primeiroDV;
+
+ // resto proveniente do módulo 10
+ byte restoDoModulo10 = (byte) new Modulo(TipoDeModulo.MODULO10).calcule(fields);
+
+ // se não houver resto, primeiroDV = 0
+ // caso contrário, primeiroDV = 10 - resto
+ primeiroDV = (byte) ((restoDoModulo10 == 0) ? 0 : 10 - restoDoModulo10);
+ return primeiroDV;
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaNaoRegistrada.java
new file mode 100644
index 0000000..698c028
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaNaoRegistrada.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 19/07/2008 - 11:15:33
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 19/07/2008 - 11:15:33
+ *
+ */
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ * O campo livre do Barisul para cobrança não registrada (Cobrança Direta
+ * "sem registro" - Sistema BDL/Carteira de Letras) deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-20
+ *
1
+ *
9(1)
+ *
Tipo de Cobrança: constante = 2
+ *
+ *
"2" Cobrança Direta, Fichário
+ * emitido pelo CLIENTE.
+ *
+ *
+ *
21-21
+ *
1
+ *
9(1)
+ *
Constante "1"
+ *
Constante "1"
+ *
+ *
+ *
22-25
+ *
4
+ *
9(4)
+ *
Código da Agência sem digito
+ * verificador
+ *
Código da Agência, com quatro
+ * dígitos, sem o Número de Controle.
+ *
+ *
+ *
26-32
+ *
7
+ *
9(7)
+ *
Código do Cedente sem dígito
+ * verificador
+ *
Código do Cedente sem Número de
+ * Controle.
+ *
+ *
+ *
33-40
+ *
8
+ *
9(8)
+ *
Seu número sem dígito verificador
+ *
+ *
Nosso Número sem Número de
+ * Controle
+ *
+ *
+ *
41-42
+ *
2
+ *
9(2)
+ *
Constante "40"
+ *
Constante "40"
+ *
+ *
+ *
43-44
+ *
2
+ *
9(2)
+ *
Dois dígitos verificadores
+ * calculados com os campos anteriores pelos (módulos 10 e 11)
+ *
Duplo Dígito referente às
+ * posições 20 a 42 (módulos 10 e 11)
+ *
+ *
+ *
+ *
+ * @author Gilmar P.S.L.
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ * @author Samuel Valério Valerio
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLBanrisulCobrancaNaoRegistrada extends AbstractCLBanrisul {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6078207986734440842L;
+
+ private static final Integer FIELDS_LENGTH = 7;
+
+ CLBanrisulCobrancaNaoRegistrada(Titulo titulo) {
+ super(FIELDS_LENGTH);
+
+ this.add(new FixedField(2, 1));
+ this.add(new FixedField("1", 1));
+ this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
+ this.add(new FixedField(Integer.valueOf(titulo.getNossoNumero()), 8, Fillers.ZERO_LEFT));
+ this.add(new FixedField("40", 2));
+
+ this.add(new FixedField(calculaDuploDigito(concateneOsCamposExistentesAteOMomento()), 2));
+
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaRegistrada.java
new file mode 100644
index 0000000..2150f9d
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBanrisulCobrancaRegistrada.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 02/08/2008 - 13:39:46
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 02/08/2008 - 13:39:46
+ *
+ */
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ * Representação do campo livre usado para boletos com carteiras (
+ * cobrança) com registro.
+ *
+ *
+ *
+ * O campo livre do Barisul para cobrança registrada (Cobrança Normal
+ * "com registro" - Sistema BDL/Carteira de Letras) deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-20
+ *
1
+ *
9(1)
+ *
Tipo de Cobrança: constante = 1
+ *
+ *
"1" Cobrança Normal, Fichário
+ * emitido pelo BANRISUL
+ *
+ *
+ *
21-21
+ *
1
+ *
9(1)
+ *
Constante "1"
+ *
Constante "1"
+ *
+ *
+ *
22-25
+ *
4
+ *
9(4)
+ *
Código da Agência sem digito
+ * verificador
+ *
Código da Agência, com quatro
+ * dígitos, sem o Número de Controle.
+ *
+ *
+ *
26-32
+ *
7
+ *
9(7)
+ *
Código do Cedente sem dígito
+ * verificador
+ *
Código do Cedente sem Número de
+ * Controle.
+ *
+ *
+ *
33-40
+ *
8
+ *
9(8)
+ *
Seu número sem dígito verificador
+ *
+ *
Nosso Número sem Número de
+ * Controle
+ *
+ *
+ *
41-42
+ *
2
+ *
9(2)
+ *
Constante "40"
+ *
Constante "40"
+ *
+ *
+ *
43-44
+ *
2
+ *
9(2)
+ *
Dois dígitos verificadores
+ * calculados com os campos anteriores pelos (módulos 10 e 11)
+ *
Duplo Dígito referente às
+ * posições 20 a 42 (módulos 10 e 11)
+ *
+ *
+ *
+ *
+ * @author Gilmar P.S.L.
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ * @author Samuel Valério Valerio
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLBanrisulCobrancaRegistrada extends AbstractCLBanrisul {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1577477244182494602L;
+
+ private static final Integer FIELDS_LENGTH = 7;
+
+ CLBanrisulCobrancaRegistrada(Titulo titulo) {
+ super(FIELDS_LENGTH);
+
+ this.add(new FixedField(1, 1));
+ this.add(new FixedField("1", 1));
+ this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
+ this.add(new FixedField(Integer.valueOf(titulo.getNossoNumero()),8, Fillers.ZERO_LEFT));
+ this.add(new FixedField("40", 2));
+ this.add(new FixedField(calculaDuploDigito(concateneOsCamposExistentesAteOMomento()),2));
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBradesco.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBradesco.java
new file mode 100644
index 0000000..7965e07
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLBradesco.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:09:27
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:09:27
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+
+/**
+ *
+ * O campo livre do Bradesco deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-23
+ *
4
+ *
9(4)
+ *
Agência Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)
+ *
Código da Agência (sem dígito)
+ *
+ *
+ *
24-25
+ *
2
+ *
9(2)
+ *
Código da Carteira
+ *
Código da Carteira
+ *
+ *
+ *
26-36
+ *
11
+ *
9(11)
+ *
Número do Nosso Número(Sem o digito verificador)
+ *
Nosso Número (sem dígito)
+ *
+ *
+ *
37-43
+ *
7
+ *
9(7)
+ *
Conta do Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)
+ * Verifica se o nosso número do título começa com 3 (identificador da
+ * Carteira Simples), 9 (identificador da Carteira Rápida) ou 80, 81 ou 82
+ * (que são identificadores da Carteira Sem Registro); Caso contrário gera
+ * uma {@code IllegalArgumentException}.
+ *
+ *
+ *
+ * Padrões aceitos de 10 dígitos:
+ *
+ *
3NNNNNNNNN (a ser validado com os colegas da Neogrid)
+ *
9NNNNNNNNN
+ *
80NNNNNNNN
+ *
81NNNNNNNN
+ *
82NNNNNNNN
+ *
+ *
+ *
+ * @param nn
+ * - Nosso Número
+ */
+ private void checkPadraoNossoNumero(String nn){
+ if(!nn.startsWith("3") && !nn.startsWith("9") && !nn.startsWith("80") && !nn.startsWith("81") && !nn.startsWith("82")){
+ Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB o nosso número [%s] deve começar com 3 que é o identificador da \"carteira siples\" [3NNNNNNNNN] ou 9 que é o identificador da \"carteira rápida\" [9NNNNNNNNN] ou 80, 81 e 82 para \"carteira sem registro\" [82NNNNNNNN]!", nn));
+ }
+ }
+
+ /**
+ *
+ * Verifica se o nosso número informado tem o padrão esperado de acordo com
+ * o código da carteira informada.
+ *
+ *
+ * Obs: Como não há uma garantia documental de que todo nosso número que
+ * começa com "3" pertencerá somente a carteira 11, então o mais
+ * coerente é não amarrar o início do nosso número a determinada carteira,
+ * mas sim o contrário, ou seja, amarrar que toda carteira 11 tem de ter o
+ * nosso número iniciando com 3". O mesmo raciocíno serve para as outras
+ * carteiras.
+ *
+ *
+ * @param nossoNumero
+ * - Nosso Número
+ * @param codigoDaCarteira
+ * - Código da carteira
+ */
+ private void checkPadraoNossoNumeroPorCodigoDaCarteira(String nossoNumero, Integer codigoDaCarteira){
+ switch (codigoDaCarteira) {
+ case 11:
+ if(!nossoNumero.startsWith("3")){
+ Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB, carteira 11 (cobrança simples), o nosso número [%s] deve começar com 3!", nossoNumero));
+ }
+ break;
+
+ case 12:
+ if(!nossoNumero.startsWith("9")){
+ Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB, carteira 12 (cobrança rápida), o nosso número [%s] deve começar com 9!", nossoNumero));
+ }
+ break;
+
+ case 14:
+ if(!nossoNumero.startsWith("80") && !nossoNumero.startsWith("81") && !nossoNumero.startsWith("82")){
+ Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB, carteira 14 (cobrança sem registro), o nosso número [%s] deve começar com 80, 81 ou 82!", nossoNumero));
+ }
+ break;
+ }
+ }
+
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSICOBNossoNumero14.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSICOBNossoNumero14.java
new file mode 100644
index 0000000..b949bac
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSICOBNossoNumero14.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2011 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 14/04/2011 - 20:16:07
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2011 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 14/04/2011 - 20:16:07
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import static java.lang.String.format;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Objects;
+
+/**
+ *
+ * O campo livre da Caixa para Cobrança Sem Registro SICOB - Nosso Número 16
+ * posições, deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-24
+ *
5
+ *
9(5)
+ *
Código do Cliente(sem dígito
+ * verificador)
+ *
Código do Cliente Cedente
+ * fornecido pela CAIXA
+ *
+ *
+ *
25-28
+ *
4
+ *
9(4)
+ *
Código da Agência(sem dígito
+ * verificador)
+ *
CNPJ da Agência da Conta do
+ * Cliente Cedente
+ *
+ *
+ *
29-29
+ *
1
+ *
9(1)
+ *
Código da Carteira = 8
+ *
Código da Carteira = 8
+ *
+ *
+ *
30-30
+ *
1
+ *
9(1)
+ *
Constante = 7
+ *
Constante = 7
+ *
+ *
+ *
31-44
+ *
14
+ *
9(14)
+ *
Nosso Número(sem dígito
+ * verificador)
+ *
Nosso Número do Cliente com 14
+ * posições
+ *
+ *
+ *
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
+ *
+ * @author Gilmar P.S.L
+ *
+ * @since 0.2
+ *
+ * @version 0.2.3
+ */
+class CLCaixaEconomicaFederalSICOBNossoNumero14 extends AbstractCLCaixaEconomicaFederal {
+
+ /**
+ * {@code serialVersionUID = 4219053358562778591L}
+ */
+ private static final long serialVersionUID = 4219053358562778591L;
+
+ /**
+ * Número de campos = 5.
+ */
+ private static final Integer FIELDS_LENGTH = Integer.valueOf(5);
+
+ /**
+ * Tamanho do campo Conta = 5.
+ */
+ private static final Integer CONTA_LENGTH = Integer.valueOf(5);
+
+ /**
+ * Tamanho do campo Agência = 4.
+ */
+ private static final Integer AGENCIA_LENGTH = Integer.valueOf(4);
+
+ /**
+ * Tamanho do campo Nosso Número = 14.
+ */
+ protected static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(14);
+
+ /**
+ * Constante "7".
+ */
+ private static final FixedField CONSTANT_FIELD = new FixedField(7, 1);
+
+ /**
+ * Valor constante do campo "Carteira" = 8 - Carteira Sem Registro Eletrônica.
+ */
+ private static final Integer CARTEIRA_SEM_REGISTRO = Integer.valueOf(8);
+
+ /**
+ * Código da carteira: sempre 8.
+ */
+ private static final FixedField CARTEIRA_FIELD = new FixedField(CARTEIRA_SEM_REGISTRO, 1);
+
+ /**
+ *
+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
+ *
+ * Motivo extraído do manual do banco:
+ *
+ * Carteira Sem Registro Eletrônica com Nosso Número de 16 posições,
+ * sendo que 14 destas posições são para livre uso pelo Cedente. Apenas
+ * Clientes Cedentes com Código do Cedente na operação 870 podem operar com
+ * a Cobrança Sem Registro com 16 posições de Nosso Número.
+ *
+ *
+ * @param titulo
+ */
+ private void checkCarteiraSemRegistro(Titulo titulo) {
+
+ Objects.checkArgument(
+ titulo.getContaBancaria().getCarteira().getCodigo().equals(CARTEIRA_SEM_REGISTRO),
+ format("Apenas a carteira de código [8] \"Carteira Sem Registro Eletrônica\" é permitida e não o código [%s]!", titulo.getContaBancaria().getCarteira().getCodigo())
+ );
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSIGCB.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSIGCB.java
new file mode 100644
index 0000000..1377e69
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSIGCB.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 28/07/2010 - 21:05:00
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 28/07/2010 - 21:05:00
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+import static org.jrimum.vallia.digitoverificador.Modulo.MOD11;
+
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+import org.jrimum.vallia.digitoverificador.Modulo;
+
+/**
+ *
+ * O campo livre para o modelo SIGCB segue esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Conteúdo
+ *
+ *
+ *
+ *
01-05
+ *
6
+ *
Código do Cedente
+ *
+ *
+ *
06
+ *
1
+ *
Dígito Verificador do Código do Cedente
+ *
+ *
+ *
07-09
+ *
3
+ *
Nosso Número – Seqüência 1
+ *
+ *
+ *
10
+ *
1
+ *
Constante 1
+ *
+ *
+ *
11-13
+ *
3
+ *
Nosso Número – Seqüência 2
+ *
+ *
+ *
14
+ *
1
+ *
Constante 2
+ *
+ *
+ *
15-23
+ *
9
+ *
Nosso Número – Seqüência 3
+ *
+ *
+ *
24
+ *
1
+ *
Dígito Verificador do Campo Livre
+ *
+ *
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Rogério Kleinkauf
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLCaixaEconomicaFederalSIGCB extends AbstractCLCaixaEconomicaFederal {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7642075752245778160L;
+
+ /**
+ *
+ */
+ private static final Integer FIELDS_LENGTH = 8;
+
+ /**
+ * Modalidade de cobrança.
+ */
+ private static final int COBRANCA_REGISTRADA = 1;
+
+ /**
+ * Modalidade de cobrança.
+ */
+ private static final int COBRANCA_NAO_REGISTRADA = 2;
+
+ /**
+ * Constante que indica emissão de boleto pelo cedente.
+ */
+ private static final int EMISSAO_CEDENTE = 4;
+
+ /**
+ *
+ * Dado um título, cria um campo livre para o padrão do Banco Caixa
+ * Econômica Federal que tenha o serviço SIGCB.
+ *
+ *
+ * @param titulo
+ * - Título com as informações para geração do campo livre.
+ */
+ CLCaixaEconomicaFederalSIGCB(Titulo titulo) {
+
+ super(FIELDS_LENGTH);
+
+ ContaBancaria conta = titulo.getContaBancaria();
+ String nossoNumero = titulo.getNossoNumero();
+
+ Integer dVCodigoDoCedente = calculeDigitoVerificador(conta.getNumeroDaConta().getCodigoDaConta().toString());
+
+ this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT));
+ this.add(new FixedField(dVCodigoDoCedente, 1));
+ this.add(new FixedField(nossoNumero.substring(0, 3), 3));
+
+ if(conta.getCarteira().isComRegistro()){
+
+ this.add(new FixedField(COBRANCA_REGISTRADA, 1));
+
+ }else{
+
+ this.add(new FixedField(COBRANCA_NAO_REGISTRADA, 1));
+ }
+
+ this.add(new FixedField(nossoNumero.substring(3, 6), 3));
+ this.add(new FixedField(EMISSAO_CEDENTE, 1));
+ this.add(new FixedField(nossoNumero.substring(6, 15), 9));
+
+ this.add(new FixedField(calculeDigitoVerificador(gereCampoLivre()), 1));
+ }
+
+ /**
+ * Gera o número que serve para calcular o digito verificador do campoLivre, que é todo o campo livre menos o dígito verificador.
+
+ *
+ * Os campos utilizados são:
+ *
+ *
Código do Cedente: 06 posições
+ *
Dígito Verificador do Código do Cedente: 01 posição
+ *
Nosso Número – Seqüência 1: 03 posições
+ *
Constante 1: 01 posição
+ *
Nosso Número – Seqüência 2: 03 posições
+ *
Constante 2: 01 posição
+ *
Nosso Número – Seqüência 3: 09 posições
+ *
+ *
+ *
+ * @return String com campos, exceto o dígito verificador.
+ *
+ * @since 0.2
+ */
+ private String gereCampoLivre() {
+
+ return writeFields();
+ }
+
+ /**
+ * Este dígito é calculado através do Módulo 11 com os pesos 2 e 9.
+ *
+ * @param numeroParaCalculo
+ * @return digito
+ *
+ * @since 0.2
+ */
+ private int calculeDigitoVerificador(String numeroParaCalculo) {
+
+ int soma = Modulo.calculeSomaSequencialMod11(numeroParaCalculo.toString(), 2, 9);
+
+ int dvCampoLivre;
+
+ if (soma < MOD11) {
+
+ dvCampoLivre = MOD11 - soma;
+
+ } else {
+
+ int restoDiv11 = soma % MOD11;
+
+ int subResto = MOD11 - restoDiv11;
+
+ if (subResto > 9) {
+
+ dvCampoLivre = 0;
+
+ } else {
+
+ dvCampoLivre = subResto;
+ }
+ }
+
+ return dvCampoLivre;
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
\ No newline at end of file
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSINCO.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSINCO.java
new file mode 100644
index 0000000..540ef4b
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCaixaEconomicaFederalSINCO.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:09:45
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:09:45
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ * O campo livre para o modelo SINCO segue esta forma:
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Conteúdo
+ *
+ *
+ *
+ *
+ *
01
+ *
1
+ *
Número "1" (valor fixo)
+ *
+ *
+ *
02-07
+ *
6
+ *
Código do cliente CEDENTE (fornecido pela CAIXA)
+ *
+ *
+ *
08
+ *
1
+ *
Número "9" (valor fixo)
+ *
+ *
+ *
09-25
+ *
17
+ *
Posições livres do "nosso número"
+ *
+ *
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ * @author Nordeste Fomento Mercantil
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLCaixaEconomicaFederalSINCO extends AbstractCLCaixaEconomicaFederal {
+
+ private static final long serialVersionUID = -7642075752245778160L;
+
+ /**
+ * Quantidade de campos. Tamanho da lista de campos.
+ */
+ private static final Integer FIELDS_LENGTH = 4;
+
+ /**
+ *
+ * Dado um título, cria um campo livre para o padrão do Banco Caixa Econômica
+ * Federal que tenha o serviço SINCO.
+ *
+ * @param titulo Título com as informações para geração do campo livre.
+ */
+ CLCaixaEconomicaFederalSINCO(Titulo titulo) {
+ super(FIELDS_LENGTH);
+
+ ContaBancaria conta = titulo.getContaBancaria();
+
+ String nossoNumero = titulo.getNossoNumero();
+
+ this.add(new FixedField(1, 1));
+
+ this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(9, 1));
+ this.add(new FixedField(nossoNumero, 17));
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCecred.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCecred.java
new file mode 100644
index 0000000..78ba94a
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLCecred.java
@@ -0,0 +1,97 @@
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.bopepo.parametro.ParametroCECRED;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+
+/**
+ *
+ * O campo livre do CECRED - Cooperativa Central de Crédito Urbano deve seguir esta forma:
+ *
+ *
+ * TODO tabela com campos
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Douglas Ramiro
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class CLCecred extends AbstractCLBancoDeBrasilia{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 7075964070090557563L;
+
+ /**
+ * Número de campos = 3.
+ */
+ private static final Integer FIELDS_LENGTH = Integer.valueOf(3);
+
+ /**
+ * Tamanho do campo Convênio = 6.
+ */
+ private static final Integer CONVENIO_LENGTH = Integer.valueOf(6);
+
+ /**
+ * Tamanho do campo Nosso Número = 17.
+ */
+ private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(17);
+
+ /**
+ * Tamanho do campo Carteira = 2.
+ */
+ private static final Integer CARTEIRA_LENGTH = Integer.valueOf(2);
+
+ /**
+ *
+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
+ *
+ *
+ * @since 0.2
+ */
+ protected CLCecred() {
+ super(FIELDS_LENGTH);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo)
+ *
+ * @since 0.2
+ */
+ @Override
+ protected void checkValues(Titulo titulo) {
+
+ checkParametroBancario(titulo, ParametroCECRED.CODIGO_DO_CONVENIO);
+ checkParametroBancarioMenorOuIgualQue(titulo, ParametroCECRED.CODIGO_DO_CONVENIO, 999999);
+ checkNossoNumero(titulo);
+ checkTamanhoDoNossoNumero(titulo, 17);
+ checkCarteiraNotNull(titulo);
+ checkCodigoDaCarteira(titulo);
+ checkCodigoDaCarteiraMenorOuIgualQue(titulo, 99);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo)
+ *
+ * @since 0.2
+ */
+ @Override
+ protected void addFields(Titulo titulo) {
+
+ this.add(new FixedField(titulo.getParametrosBancarios().getValor(ParametroCECRED.CODIGO_DO_CONVENIO), CONVENIO_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT));
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaNaoRegistrada.java
new file mode 100644
index 0000000..672b904
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaNaoRegistrada.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:09:27
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:09:27
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import static org.jrimum.bopepo.parametro.ParametroHSBC.IDENTIFICADOR_CNR;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import org.jrimum.domkee.financeiro.banco.ParametrosBancariosMap;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+import org.jrimum.utilix.Objects;
+
+/**
+ *
+ * O campo livre do HSBC, para cobrança não registrada(CNR), deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
+ *
20-26
+ *
7
+ *
9(7)
+ *
Conta do cedente (sem dígito)
+ *
Código do cedente
+ *
+ *
+ *
+ *
27-39
+ *
13
+ *
9(13)
+ *
Nosso número (sem dígito)
+ *
+ * Número bancário - Código do documento, sem os dígitos
+ * verificadores e tipo identificador.
+ *
+ * Dado um título, cria um campo livre para o padrão do Banco HSBC que tenha
+ * o tipo de cobrança não registrada.
+ *
+ *
+ * @param titulo
+ * título com as informações para geração do campo livre
+ */
+ CLHSBCCobrancaNaoRegistrada(Titulo titulo) {
+
+ super(FIELDS_LENGTH);
+
+ checkExistsParametrosBancarios(titulo);
+ checkExistsParametroTipoIdentificadorCNR(titulo
+ .getParametrosBancarios());
+
+ Integer tipoIdentificadorCNR = titulo
+ .getParametrosBancarios().getValor(IDENTIFICADOR_CNR);
+
+ ContaBancaria conta = titulo.getContaBancaria();
+ String nossoNumero = titulo.getNossoNumero();
+
+ // Conta do cedente (sem dígito)
+ this.add(new FixedField(
+ conta.getNumeroDaConta().getCodigoDaConta(), 7,
+ Fillers.ZERO_LEFT));
+
+ // Nosso número (sem dígito)
+ this.add(new FixedField(nossoNumero, 13, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(getDataVencimentoFormatoJuliano(
+ tipoIdentificadorCNR, titulo.getDataDoVencimento()), 4,
+ Fillers.ZERO_LEFT));
+
+ // 2 FIXO (Código do Aplicativo CNR - Cob. Não Registrada)
+ this.add(new FixedField(2, 1));
+
+ }
+
+ private String getDataVencimentoFormatoJuliano(Integer tipoIdentificadorCNR, Date vencimento) {
+
+ final int SEM_VENCIMENTO = 5;
+ final int COM_VENCIMENTO = 4;
+
+ switch (tipoIdentificadorCNR) {
+
+ case SEM_VENCIMENTO:
+
+ return "0000";
+
+ case COM_VENCIMENTO:
+
+ return getVencimentoFormatoJuliano(vencimento);
+
+ default:
+ return Exceptions.throwIllegalStateException("Tipo de identificador CNR desconhecido!");
+ }
+ }
+
+ private String getVencimentoFormatoJuliano(Date vencimento) {
+
+ Calendar c = Calendar.getInstance();
+ c.setTime(vencimento);
+
+ return new StringBuilder(String.valueOf(c.get(Calendar.DAY_OF_YEAR)))
+ .append(String.valueOf(c.get(Calendar.YEAR) % 10))
+ .toString();
+ }
+
+ private void checkExistsParametrosBancarios(Titulo titulo) {
+
+ if (Objects.isNull(titulo.getParametrosBancarios())
+ && titulo.getParametrosBancarios().isVazio()) {
+
+ throw new CampoLivreException(
+ "Parâmetros bancários nulos em \"Titulo.parametrosBancarios\". O parâmetro bancário de nome e tipo [ IDENTIFICADOR_CNR ] deve ser fornecido para este caso.");
+
+ }
+ }
+
+ private void checkExistsParametroTipoIdentificadorCNR(ParametrosBancariosMap parametros) {
+
+ Integer tipoIdentificadorCNR = parametros
+ .getValor(IDENTIFICADOR_CNR);
+
+ if (Objects.isNull(tipoIdentificadorCNR)) {
+
+ throw new CampoLivreException(
+ "Parâmetro bancário [ IDENTIFICADOR_CNR ] não encontrado em \"Titulo.parametrosBancarios\". O nome do parâmetro deve ser IDENTIFICADOR_CNR.");
+ }
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaRegistrada.java
new file mode 100644
index 0000000..6220e35
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLHSBCCobrancaRegistrada.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 14/08/2010 - 22:33:26
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 14/08/2010 - 22:33:26
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ * O campo livre do HSBC, para cobrança registrada(CSB), deve seguir esta forma:
+ *
+ * Dado um título, cria um campo livre para cobrança registrada do banco HSBC.
+ *
+ *
+ * @param titulo - título com as informações para geração do campo livre
+ */
+ CLHSBCCobrancaRegistrada(Titulo titulo) {
+
+ super(FIELDS_LENGTH);
+
+ this.add(new FixedField(titulo.getNossoNumero(), 10, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getDigitoDoNossoNumero(), 1));
+ this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
+ this.add(new FixedField(CODIGO_DA_CARTEIRA, 2));
+ this.add(new FixedField(CODIGO_DO_APLICATIVO, 1));
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauComCarteirasEspeciais.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauComCarteirasEspeciais.java
new file mode 100644
index 0000000..66ad1f0
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauComCarteirasEspeciais.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 16/04/2008 - 23:09:08
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 16/04/2008 - 23:09:08
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ * Campo livre padrão do Banco Itaú
+ *
+ *
+ * Constrói o campo livre no caso especial, ou seja, quando a carteira for:
+ * 106, 107, 122, 142, 143, 195, 196 ou 198.
+ *
+ *
+ *
+ *
Layout do Banco Itaú para o campo livre ESPECIAL
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo
+ *
+ *
+ *
+ *
+ *
20 a 22
+ *
3
+ *
9(03)
+ *
Carteira
+ *
+ *
+ *
23 a 30
+ *
8
+ *
9(08)
+ *
Nosso número
+ *
+ *
+ *
31 a 37
+ *
7
+ *
9(07)
+ *
Seu Número (Número do Documento)
+ *
+ *
+ *
38 a 42
+ *
5
+ *
9(05)
+ *
Código do Cliente (fornecido pelo Banco)
+ *
+ *
+ *
43 a 43
+ *
1
+ *
9(01)
+ *
DAC dos campos acima (posições 20 a 42 veja anexo 3)
+ *
+ *
+ *
+ *
44 a 44
+ *
1
+ *
9(01)
+ *
Zero
+ *
+ *
+ *
+ *
+ *
+ *
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLItauComCarteirasEspeciais extends AbstractCLItau {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1532454262023154419L;
+
+ /**
+ * Tamanho do campo livre para carteiras especiais.
+ */
+ private static final Integer FIELDS_LENGTH = 6;
+
+ /**
+ * Dado um título, cria o campo livre do Banco Itaú para carteiras
+ * especiais.
+ *
+ * @param titulo
+ * título com as informações para geração do campo livre
+ */
+ public CLItauComCarteirasEspeciais(Titulo titulo) {
+ super(FIELDS_LENGTH);
+
+ ContaBancaria conta = titulo.getContaBancaria();
+
+ this.add(new FixedField(conta.getCarteira().getCodigo(), 3, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getNossoNumero(), 8, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getNumeroDoDocumento(), 7, Fillers.ZERO_LEFT));
+
+ //Aqui é o código do cedente, simbolizado pelo código da conta bancária.
+ this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 5, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(calculeDigitoDoCampoLivreEspecial(
+ conta.getCarteira().getCodigo(),
+ titulo.getNossoNumero(),
+ titulo.getNumeroDoDocumento(),
+ conta.getNumeroDaConta().getCodigoDaConta()), 1));
+ this.add(new FixedField(0, 1));
+ }
+
+ /**
+ * Calcula o dígito verificador para o campo livre especial a partir do
+ * código da carteira, do nosso número, do número do documento e do código
+ * da conta.
+ *
+ * @param codigoDaCarteira
+ * @param nossoNumero
+ * @param numeroDoDocumento
+ * @param codigoDaConta
+ * @return Integer digito
+ *
+ * @since 0.2
+ */
+ private Integer calculeDigitoDoCampoLivreEspecial(Integer codigoDaCarteira,
+ String nossoNumero, String numeroDoDocumento, Integer codigoDaConta) {
+
+ StringBuilder campo = new StringBuilder();
+
+ campo.append(Fillers.ZERO_LEFT.fill(codigoDaCarteira.intValue(), 3));
+ campo.append(Fillers.ZERO_LEFT.fill(nossoNumero, 8));
+ campo.append(Fillers.ZERO_LEFT.fill(numeroDoDocumento, 7));
+ campo.append(Fillers.ZERO_LEFT.fill(codigoDaConta, 5));
+
+ return calculeDigitoVerificador(campo.toString());
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauPadrao.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauPadrao.java
new file mode 100644
index 0000000..03ef346
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLItauPadrao.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 16/04/2008 - 23:09:08
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 16/04/2008 - 23:09:08
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import java.util.Arrays;
+
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ *
+ *
+ * Campo livre padrão do Banco Itaú
+ *
+ *
+ *
+ *
Layout do Banco Itaú para o campo livre PADRÃO
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo
+ *
+ *
+ *
+ *
+ *
20 a 22
+ *
3
+ *
9(03)
+ *
Carteira
+ *
+ *
+ *
23 a 30
+ *
8
+ *
9(08)
+ *
Nosso número
+ *
+ *
+ *
31 a 31
+ *
1
+ *
9(01)
+ *
DAC [Agência /Conta/Carteira/Nosso Número]
+ *
+ *
+ *
32 a 35
+ *
4
+ *
9(04)
+ *
N.º da Agência cedente
+ *
+ *
+ *
36 a 40
+ *
5
+ *
9(05)
+ *
N.º da Conta Corrente
+ *
+ *
+ *
41 a 41
+ *
1
+ *
9(01)
+ *
DAC [Agência/Conta Corrente]
+ *
+ *
+ *
42 a 44
+ *
3
+ *
9(03)
+ *
Zeros
+ *
+ *
+ *
+ *
+ *
+ * @author Rômulo Augusto
+ * @author Misael Barreto
+ * @author Fernando Martin
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLItauPadrao extends AbstractCLItau {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1544486299245786533L;
+
+ /**
+ * Tamanho deste campo. Em outras palavras, é a quantidade de partes que
+ * compõem este campo livre.
+ */
+ private static final Integer FIELDS_LENGTH = 7;
+
+ /**
+ *
+ * Dado um título, cria o campo livre padrão do Banco Itaú.
+ *
+ * @param titulo título com as informações para geração do campo livre
+ */
+ public CLItauPadrao(Titulo titulo) {
+ super(FIELDS_LENGTH);
+
+ ContaBancaria conta = titulo.getContaBancaria();
+
+ this.add(new FixedField(conta.getCarteira().getCodigo(), 3, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getNossoNumero(), 8, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(calculeDigitoDaPosicao31(
+ conta.getAgencia().getCodigo(),
+ conta.getNumeroDaConta().getCodigoDaConta(),
+ conta.getCarteira().getCodigo(),
+ titulo.getNossoNumero()), 1));
+
+ this.add(new FixedField(conta.getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
+ this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 5, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(calculeDigitoDaPosicao41(
+ conta.getAgencia().getCodigo(),
+ conta.getNumeroDaConta().getCodigoDaConta()), 1));
+
+ this.add(new FixedField("000", 3));
+ }
+
+ /**
+ *
+ * Calcula o dígito verificador do campo 31 a partir do código da agência,
+ * do código da conta, do código da carteira e do nosso número.
+ *
+ *
+ * À exceção, estão as carteiras escriturais 104, 105, 112, 113, 114, 147,
+ * 166 e 212 e na modalidade direta as carteiras 126, 131, 146, 150
+ * e 168, cuja obtenção está baseada apenas nos dados "CARTEIRA/NOSSO NÚMERO"
+ * da operação. Fonte:
+ * Manual ITAÚ, mais especificamente nas páginas 19 e 30.
+ *
+ *
+ *
+ * @param codigoDaAgencia
+ * @param codigoDaConta
+ * @param codigoDaCarteira
+ * @param nossoNumero
+ * @return Integer dígito
+ *
+ * @since 0.2
+ */
+ private Integer calculeDigitoDaPosicao31(Integer codigoDaAgencia,
+ Integer codigoDaConta, Integer codigoDaCarteira, String nossoNumero) {
+
+ // Carteiras "exceção".
+ Integer[] carteirasEscriturais = {104, 105, 112, 113, 114, 147, 166, 212};
+ Integer[] carteirasModalidadeDireta = {126, 131, 146, 150, 168};
+
+ StringBuilder campo = new StringBuilder();
+ campo.append(Fillers.ZERO_LEFT.fill(codigoDaCarteira.intValue(), 3));
+ campo.append(Fillers.ZERO_LEFT.fill(nossoNumero, 8));
+
+ /*
+ * Se a carteira em questão não estiver nas lista de exceções então
+ * acrescenta-se a agência e a conta para compor a base para o cálculo
+ * do DAC.
+ */
+ if (Arrays.binarySearch(carteirasModalidadeDireta, codigoDaCarteira) < 0
+ && Arrays.binarySearch(carteirasEscriturais, codigoDaCarteira) < 0) {
+
+ campo.insert(0, Fillers.ZERO_LEFT.fill(codigoDaConta.intValue(), 5));
+ campo.insert(0, Fillers.ZERO_LEFT.fill(codigoDaAgencia.intValue(), 4));
+ }
+
+ return calculeDigitoVerificador(campo.toString());
+ }
+
+ /**
+ *
+ * Calcula o dígito verificador do campo 41 a partir do código da agência e
+ * do código da conta.
+ *
+ *
+ * O cálculo é feito da seguinte forma:
+ *
+ *
+ * Multiplica-se cada algarismo do campo pela sequência de multiplicadores
+ * 2, 1, 2, 1, 2, 1..., posicionados da direita para a esquerda;
+ *
+ *
+ * Some individualmente, os algarismos dos resultados dos produtos, obtendo-se o total (N);
+ *
+ *
+ * Divida o total encontrado (N) por 10, e determine o resto da divisão como MOD 10 (N);
+ *
+ *
+ * Encontre o DAC através da seguinte expressão: DAC = 10 – Mod 10 (N)
+ *
+ * OBS.: Se o resultado da etapa d for 10, considere o DAC = 0.
+ *
+ *
+ *
+ *
+ *
+ * @param codigoDaAgencia
+ * @param codigoDaConta
+ * @return Integer digito
+ *
+ * @since 0.2
+ */
+ private Integer calculeDigitoDaPosicao41(Integer codigoDaAgencia,
+ Integer codigoDaConta) {
+
+ StringBuilder campo = new StringBuilder();
+ campo.append(Fillers.ZERO_LEFT.fill(codigoDaAgencia.intValue(), 4));
+ campo.append(Fillers.ZERO_LEFT.fill(codigoDaConta.intValue(), 5));
+
+ return calculeDigitoVerificador(campo.toString());
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
+
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLMercantilDoBrasil.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLMercantilDoBrasil.java
new file mode 100644
index 0000000..7965d6e
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLMercantilDoBrasil.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 25/09/2008 - 21:23:20
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 25/09/2008 - 21:23:20
+ *
+ */
+package org.jrimum.bopepo.campolivre;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+
+/**
+ *
+ *
+ * Campo Livre para o Banco Mercantil do Brasil. Segue o seguinte formato:
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo
+ *
+ *
+ *
20-23
+ *
4
+ *
9
+ *
Agência do Cedente(sem dígito)
+ *
+ *
+ *
24-34
+ *
11
+ *
9
+ *
Nosso Número (com dígito)
+ *
+ *
+ *
35-43
+ *
9
+ *
9
+ *
Código do Cedente (Contrato de Cobrança)
+ *
+ *
+ *
44-44
+ *
1
+ *
9
+ *
Indicador de desconto: =2 sem desconto =0 com desconto
+ * Dado um título, cria um campo livre para o padrão do Banco Mercantil do Brasil.
+ *
+ * @param titulo título com as informações para geração do campo livre
+ */
+ CLMercantilDoBrasil(Titulo titulo) {
+ super(FIELDS_LENGTH);
+
+ ContaBancaria contaBancaria = titulo.getContaBancaria();
+
+// int digitoDoNossoNumero = calculeDigitoVerificadorDoNossoNumero(contaBancaria.getAgencia().getCodigoDaAgencia(), nossoNumero);
+
+ //TODO Verificar de onde virá esta informação: apenas verificar se o título tem ou não valor de desconto.
+ int desconto;
+ if(titulo.getDesconto() == null || titulo.getDesconto().equals(BigDecimal.ZERO.setScale(2, RoundingMode.DOWN))) {
+ desconto = 2;
+
+ } else {
+ desconto = 0;
+ }
+
+ this.add(new FixedField(contaBancaria.getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(titulo.getNossoNumero() + titulo.getDigitoDoNossoNumero(), 11, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(contaBancaria.getNumeroDaConta().getCodigoDaConta(), 9, Fillers.ZERO_LEFT));
+
+ this.add(new FixedField(desconto, 1));
+ }
+
+// /**
+// *
+// *
+// * Calcula o dígito verificador do Nosso Número.
+// *
+// *
+// * É calculado através do módulo 11 a partir do código da agência e do Nosso Número.
+// *
+// *
+// * @param agencia Código da agência
+// * @param nossoNumero Nosso Número
+// * @return digito verificador
+// *
+// * @since 0.2
+// */
+// private int calculeDigitoVerificadorDoNossoNumero(Integer agencia, String nossoNumero) {
+//
+// Modulo modulo = new Modulo(EnumModulo.MODULO11);
+// int resto = modulo.calcule(Fillers.ZERO_LEFT.fill(agencia, 4) + nossoNumero);
+//
+// int digito = modulo.valor() - resto;
+//
+// return digito;
+// }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLSicredi.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLSicredi.java
new file mode 100644
index 0000000..7622b9e
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLSicredi.java
@@ -0,0 +1,276 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 15/01/2010 - 20:40:59
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2010 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 15/01/2010 - 20:40:59
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import static java.lang.String.format;
+import static java.math.BigDecimal.ZERO;
+import static org.jrimum.bopepo.parametro.ParametroBancoSicredi.POSTO_DA_AGENCIA;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Objects;
+import org.jrimum.vallia.digitoverificador.Modulo;
+import org.jrimum.vallia.digitoverificador.TipoDeModulo;
+
+/**
+ *
+ * O campo livre do banco Sicredi deve seguir esta forma:
+ *
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Tamanho
+ *
Picture
+ *
Conteúdo (terminologia padrão)
+ *
Conteúdo (terminologia do banco)
+ *
+ *
+ *
+ *
20-20
+ *
1
+ *
tipo de cobrança: "1" ou "3"
+ *
Código numérico correspondente ao tipo de cobrança: "1"- Com Registro ou "3"- Sem Registro
+ *
+ *
+ *
21-21
+ *
1
+ *
Constante correspondente ao tipo de carteira: "1"- carteira simples. Embora no código fonte do manual mencione outras duas possibilidades "2"-Caucionada ou "3"-Descontada.
+ *
Código númerico correspondente ao tipo de carteira: "1" - carteira simples
+ *
+ *
+ *
22-29
+ *
8
+ *
Nosso Número (8)
+ *
Nosso Número
+ *
+ *
+ *
30-30
+ *
1
+ *
DV do Nosso Número (1)
+ *
Dígito Verificador do Nosso Número
+ *
+ *
+ *
31-34
+ *
4
+ *
Cooperativa de crédito / agência cedente
+ *
Cooperativa de crédito / agência cedente
+ *
+ *
+ *
35-36
+ *
2
+ *
Unidade de atendimento / posto da agênica cedente
+ *
Unidade de atendimento / posto da agênica cedente
+ *
+ *
+ *
37-41
+ *
5
+ *
Código do Cedente
+ *
Código do Cedente
+ *
+ *
+ *
42-42
+ *
1
+ *
Filler: 1 (um) quando o campo "valor do documento" diferente de 0 (zero), caso contrário zero.
+ *
1 (um) quando o campo "valor do documento" diferente de 0 (zero), caso contrário zero.
+ *
+ *
+ *
43-43
+ *
1
+ *
Constante "0"- Zero
+ *
Zero Fixo
+ *
+ *
+ *
44-44
+ *
1
+ *
Dígito verificador do campo livre calculado por módulo 11 com aproveitamento total (resto igual a (0) zero ou (1) um o Dígito será (0) zero)
+ *
Dígito verificador do campo livre calculado por módulo 11 com aproveitamento total (resto igual a (0) zero ou (1) um o Dígito será (0) zero)
+ *
+ *
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
+ *
+ * @author Gilmar P.S.L
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+class CLSicredi extends AbstractCLSicredi {
+
+ /**
+ * {@code serialVersionUID = 7697120719706717353L}
+ */
+ private static final long serialVersionUID = 7697120719706717353L;
+
+ /**
+ * Número de campos = 10.
+ */
+ private static final Integer FIELDS_LENGTH = 10;
+
+ /**
+ * Código númerico correspondente ao tipo de cobrança: "1" - Com Registro.
+ */
+ private static final String COBRANCA_COM_REGISTRO = "1";
+
+ /**
+ * Código númerico correspondente ao tipo de cobrança: "3" - Sem Registro.
+ */
+ private static final String COBRANCA_SEM_REGISTRO = "3";
+
+ /**
+ * Valor constante do campo "Tipo da Carteira": "1" - carteira simples.
+ */
+ private static final Integer CARTEIRA_SIMPLES_VALUE = Integer.valueOf(1);
+
+ /**
+ * Segunda posição do campo livre.
+ */
+ private static final FixedField FIELD_CARTEIRA = new FixedField(CARTEIRA_SIMPLES_VALUE, 1);
+
+ /**
+ * Instância de módulo 11 para cálculo do DV do campo livre.
+ */
+ private static final Modulo modulo11 = new Modulo(TipoDeModulo.MODULO11);
+
+ /**
+ * Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
+ *
+ * @since 0.2
+ */
+ protected CLSicredi() {
+
+ super(FIELDS_LENGTH);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#checkValues(org.jrimum.domkee.financeiro.banco.febraban.Titulo)
+ */
+ @Override
+ protected void checkValues(Titulo titulo){
+
+ checkCarteiraNotNull(titulo);
+ checkCodigoDaCarteira(titulo);
+ checkCarteiraSimples(titulo);
+ checkRegistroDaCarteiraNotNull(titulo);
+ checkNossoNumero(titulo);
+ checkTamanhoDoNossoNumero(titulo, NN8);
+ checkDigitoDoNossoNumero(titulo);
+ checkTamanhoDigitoDoNossoNumero(titulo, 1);
+ checkCodigoDaAgencia(titulo);
+ checkCodigoDaAgenciaMenorOuIgualQue(titulo, 99999);
+ checkParametroBancario(titulo, POSTO_DA_AGENCIA);
+ checkNumeroDaContaNotNull(titulo);
+ checkCodigoDoNumeroDaConta(titulo);
+ checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 99999);
+ checkValor(titulo);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jrimum.bopepo.campolivre.AbstractCampoLivre#addFields(org.jrimum.domkee.financeiro.banco.febraban.Titulo)
+ */
+ @Override
+ protected void addFields(Titulo titulo) {
+
+ if(titulo.getContaBancaria().getCarteira().isComRegistro()){
+
+ this.add(new FixedField(COBRANCA_COM_REGISTRO, 1));
+
+ }else{
+
+ this.add(new FixedField(COBRANCA_SEM_REGISTRO, 1));
+ }
+
+ this.add(FIELD_CARTEIRA);
+ this.add(new FixedField(titulo.getNossoNumero(), 8, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getDigitoDoNossoNumero(), 1, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getParametrosBancarios().getValor(POSTO_DA_AGENCIA), 2, Fillers.ZERO_LEFT));
+ this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 5, Fillers.ZERO_LEFT));
+
+ if (titulo.getValor().compareTo(ZERO) == 1) {
+
+ this.add(new FixedField("1", 1));
+
+ } else {
+
+ this.add(new FixedField("0", 1));
+ }
+
+ this.add(new FixedField("0", 1));
+ this.add(new FixedField(calculeDigitoVerificador(), 1));
+ }
+
+ /**
+ * Verifica se o código da carteira da conta bancária do título é igual 1
+ * (carteira simples), caso contrário lança uma {@code
+ * IllegalArgumentException}.
+ *
+ * @param titulo
+ */
+ private void checkCarteiraSimples(Titulo titulo) {
+
+ Objects.checkArgument(
+ titulo.getContaBancaria().getCarteira().getCodigo().equals(CARTEIRA_SIMPLES_VALUE),
+ format("Apenas a carteira de código [1] \"carteira simples\" é permitida e não o código [%s]!", titulo.getContaBancaria().getCarteira().getCodigo())
+ );
+ }
+
+ /**
+ * Calcula o dígito verificador deste campo livre (posição 25 do campo livre
+ * 44 do código de barras) com módulo 11 a partir das 24 posições deste
+ * campo livre.
+ *
+ * @return dígito verificador
+ *
+ * @since 0.2
+ */
+ private Integer calculeDigitoVerificador() {
+
+ final int resto = modulo11.calcule(writeFields());
+
+ if (resto == 0 || resto == 1) {
+
+ return Integer.valueOf(0);
+
+ } else{
+
+ return Integer.valueOf(modulo11.valor() - resto);
+ }
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLUnibancoCobrancaNaoRegistrada.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLUnibancoCobrancaNaoRegistrada.java
new file mode 100644
index 0000000..c4d1c08
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CLUnibancoCobrancaNaoRegistrada.java
@@ -0,0 +1,161 @@
+package org.jrimum.bopepo.campolivre;
+
+import org.apache.commons.lang.StringUtils;
+import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Exceptions;
+import org.jrimum.utilix.Objects;
+import org.jrimum.utilix.text.Strings;
+
+/**
+ *
+ *
+ * Representação do campo livre usado para boletos com carteiras (cobrança)
+ * sem registro.
+ *
+ *
+ *
+ * Layout:
+ *
+ *
+ * Cobrança Especial (sem registro)
+ *
+ *
+ *
+ *
+ *
Posição
+ *
Campo Livre No Código De
+ * Barras (20 a 44)
+ *
+ *
20
+ *
+ *
Código da transação = 5
+ *
+ *
+ *
21 a 26
+ *
Número do Cliente (Espécie de conta)
+ *
+ *
+ *
27
+ *
Dígito Verificador do Número do Cliente
+ *
+ *
+ *
28 a 29
+ *
zeros
+ *
+ *
+ *
30 a 43
+ *
Referência do Cliente (Nosso Número Gerado Pelo
+ * Cliente)
+ * Dado um título, cria um campo livre para o padrão do Banco Unibanco
+ * que tenha o tipo de cobrança registrada.
+ *
+ * @param titulo título com as informações para geração do campo livre
+ */
+ CLUnibancoCobrancaRegistrada(Titulo titulo) {
+ super(FIELDS_LENGTH);
+
+ ContaBancaria conta = titulo.getContaBancaria();
+
+ Objects.checkNotNull(conta,"Conta Bancária NULA!");
+ Objects.checkNotNull(titulo.getDataDoVencimento(), "Data de vencimento do título NULA!");
+ Objects.checkNotNull(conta.getAgencia().getCodigo(), "Número da Agência Bancária NULO!");
+ Objects.checkNotNull(conta.getAgencia().getDigitoVerificador(),"Dígito da Agência Bancária NULO!");
+ Objects.checkNotNull(titulo.getNossoNumero(),"Nosso Número NULO!");
+
+ this.add(new FixedField(CODIGO_TRANSACAO, 2));
+ this.add(new FixedField(titulo.getDataDoVencimento(), 6, YYMMDD.copy()));
+
+ if(conta.getAgencia().getCodigo() > 0){
+
+ this.add(new FixedField(conta.getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
+
+ }else{
+
+ throw new CampoLivreException(new IllegalArgumentException("Agência bancária com valor inválido, a agência deve ser um número inteiro positivo, e não: "+conta.getNumeroDaConta().getCodigoDaConta()));
+ }
+
+
+ if (StringUtils.isNumeric(conta.getAgencia().getDigitoVerificador())) {
+
+ Integer digitoDaAgencia = Integer.valueOf(conta.getAgencia().getDigitoVerificador());
+
+ if(digitoDaAgencia>=0){
+
+ this.add(new FixedField(Integer.valueOf(digitoDaAgencia), 1));
+ }else{
+
+ throw new CampoLivreException(new IllegalArgumentException("O dígito da agência deve ser um número interio não-negativo, e não: ["+conta.getAgencia().getDigitoVerificador()+"]"));
+ }
+ }else{
+
+ throw new CampoLivreException(new IllegalArgumentException("O dígito da agência deve ser numérico, e não: ["+conta.getAgencia().getDigitoVerificador()+"]"));
+ }
+
+ if(StringUtils.isNumeric(titulo.getNossoNumero())){
+
+ if(Long.valueOf(Strings.removeStartWithZeros(titulo.getNossoNumero()))>0){
+
+ this.add(new FixedField(titulo.getNossoNumero(), 11,Fillers.ZERO_LEFT));
+ }else{
+
+ throw new CampoLivreException(new IllegalArgumentException("O campo (nosso número) do título deve ser um número natural positivo, e não: ["+titulo.getNossoNumero()+"]"));
+ }
+ }else{
+
+ throw new CampoLivreException(new IllegalArgumentException("O campo (nosso número) do título deve ser numérico, e não: ["+titulo.getNossoNumero()+"]"));
+ }
+
+ this.add(new FixedField(calculeSuperDigito(titulo.getNossoNumero()), 1));
+ }
+
+ /**
+ *
+ * Calcula o Super Dígito do Nosso Número.
+ *
+ *
+ *
+ * Super dígito do “Nosso Número” [calculado com o MÓDULO 11 (de 2 a 9)]
+ * obtido utilizando-se os algarismos do “Nosso Número” acrescido do número
+ * 1 à esquerda = [1/NNNNNNNNNNN] e multiplicando-se a sequência obetem-se a
+ * soma dos produtos. Em seguida multiplicando-se novamente a soma por 10 e
+ * depois realizando-se o módulo 11.
+ *
+ *
+ *
+ * @param nossoNumero
+ *
+ * @return Dígito verficador calculado
+ *
+ * @see #calculeDigitoEmModulo11(String)
+ * @see org.jrimum.vallia.digitoverificador.Modulo
+ *
+ * @since 0.2
+ */
+ private String calculeSuperDigito(String nossoNumero) {
+
+ return calculeDigitoEmModulo11("1" + nossoNumero);
+ }
+
+ @Override
+ protected void addFields(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+
+ @Override
+ protected void checkValues(Titulo titulo) {
+ // TODO IMPLEMENTAR
+ Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
+ }
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivre.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivre.java
new file mode 100644
index 0000000..53f6b34
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivre.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:10:11
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:10:11
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+import org.jrimum.texgit.TextStream;
+
+
+/**
+ *
+ * Essa é uma Interace com um propósito de marcar e agrupar tipos campo livre.
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @see AbstractCampoLivre
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public interface CampoLivre extends TextStream{
+
+ /**
+ * Tamanho do Campo Livre, igual para qualquer que seja o banco.
+ */
+ Integer STRING_LENGTH = 25;
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreException.java
new file mode 100644
index 0000000..6dc6b9d
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreException.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Created at: 21/04/2008 - 21:14:40
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode
+ * usar esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob esta
+ * LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam
+ * expressas ou tácitas. Veja a LICENÇA para a redação específica a reger permissões
+ * e limitações sob esta LICENÇA.
+ *
+ * Criado em: 21/04/2008 - 21:14:40
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+/**
+ *
+ * Qualquer exceção gerada durante a geração de um campo livre gera uma CampoLivreException. Centraliza e localiza os problemas relativos a geração de um campo livre.
+ *
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @see org.jrimum.bopepo.campolivre.CampoLivre
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class CampoLivreException extends RuntimeException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 893327780214327141L;
+
+ /**
+ *
+ */
+ public CampoLivreException() {
+ super();
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public CampoLivreException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * @param message
+ */
+ public CampoLivreException(String message) {
+ super(message);
+ }
+
+ /**
+ * @param cause
+ */
+ public CampoLivreException(Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreFactory.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreFactory.java
new file mode 100644
index 0000000..53b77f1
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/CampoLivreFactory.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:09:58
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:09:58
+ *
+ */
+
+package org.jrimum.bopepo.campolivre;
+
+import static org.apache.commons.lang.StringUtils.EMPTY;
+import static org.apache.commons.lang.StringUtils.containsAny;
+import static org.apache.commons.lang.StringUtils.isNumeric;
+import static org.apache.commons.lang.StringUtils.strip;
+
+import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
+import org.jrimum.texgit.type.component.Fillers;
+import org.jrimum.texgit.type.component.FixedField;
+import org.jrimum.utilix.Objects;
+import org.jrimum.utilix.text.Strings;
+
+
+/**
+ *
+ * Esta classe tem como finalidade encapsular toda a lógica de criação de um
+ * campo livre e de fornecer para o pacote
+ * org.jrimum.bopepo.campolivre
+ * um único ponto de acesso ao mesmo.
+ *
+ * Devolve um CampoLivre de acordo com o Banco contido na conta bancária do título.
+ *
+ *
+ * Caso exista implementação para o banco o retorno terá uma referência não nula.
+ *
+ *
+ * @param titulo
+ *
+ * @return Uma referência para um CampoLivre.
+ * @throws NotSupportedBancoException
+ * @throws NotSupportedCampoLivreException
+ */
+ public static CampoLivre create(Titulo titulo) throws NotSupportedBancoException, NotSupportedCampoLivreException {
+
+ return AbstractCampoLivre.create(titulo);
+ }
+
+ /**
+ * Devolve um CampoLivre a partir de uma String.
+ *
+ * @param strCampoLivre
+ *
+ * @return Referência para uma instância anônima de CampoLivre.
+ *
+ * @throws NullPointerException
+ * @throws IllegalArgumentException
+ */
+ public static CampoLivre create(String strCampoLivre) {
+ Objects.checkNotNull(strCampoLivre);
+
+ strCampoLivre = strip(strCampoLivre);
+
+ Strings.checkNotBlank(strCampoLivre, "O Campo Livre não deve ser vazio!");
+
+ Objects.checkArgument(strCampoLivre.length() == CampoLivre.STRING_LENGTH, "O tamanho do Campo Livre [ " + strCampoLivre + " ] deve ser igual a 25 e não ["+strCampoLivre.length()+"]!");
+ Objects.checkArgument(!containsAny(strCampoLivre, " "), "O Campo Livre [ " + strCampoLivre + " ] não deve conter espaços em branco!");
+ Objects.checkArgument(isNumeric(strCampoLivre),"O Campo Livre [ " + strCampoLivre + " ] deve ser uma String numérica!");
+
+ return valueOf(strCampoLivre);
+ }
+
+ private static CampoLivre valueOf(String strCampoLivre) {
+ CampoLivre campoLivre = new CampoLivre() {
+ private static final long serialVersionUID = -7592488081807235080L;
+
+ FixedField campo = new FixedField(EMPTY,
+ STRING_LENGTH, Fillers.ZERO_LEFT);
+
+ public void read(String str) {
+ campo.read(str);
+ }
+
+ public String write() {
+ return campo.write();
+ }
+ };
+ campoLivre.read(strCampoLivre);
+ return campoLivre;
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return Objects.toString(this);
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedBancoException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedBancoException.java
new file mode 100644
index 0000000..456a0fa
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedBancoException.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:10:19
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:10:19
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+
+/**
+ *
+ * Exceção indicadora de não existência de um referido banco ou problemas com dados de um banco.
+ *
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class NotSupportedBancoException extends CampoLivreException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private static String msg = "Banco não suportado por não haver " +
+ "implementações de Campo Livre para " +
+ "o mesmo.";
+
+
+ /**
+ *
+ */
+ public NotSupportedBancoException() {
+ super(msg);
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ @SuppressWarnings("unused")
+ private NotSupportedBancoException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * @param message
+ */
+ @SuppressWarnings("unused")
+ private NotSupportedBancoException(String message) {
+ super(message);
+ }
+
+ /**
+ * @param cause
+ */
+ @SuppressWarnings("unused")
+ private NotSupportedBancoException(Throwable cause) {
+ super(msg, cause);
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedCampoLivreException.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedCampoLivreException.java
new file mode 100644
index 0000000..61dc5b4
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/NotSupportedCampoLivreException.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2008 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 30/03/2008 - 18:10:27
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2008 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 30/03/2008 - 18:10:27
+ *
+ */
+
+
+package org.jrimum.bopepo.campolivre;
+
+
+/**
+ *
+ *
+ * Exceção indicadora de não existência de um campolivre para os dados correntes de um boleto.
+ *
+ *
+ * @author Gilmar P.S.L
+ * @author Misael Barreto
+ * @author Rômulo Augusto
+ *
+ * @since 0.2
+ *
+ * @version 0.2
+ */
+public class NotSupportedCampoLivreException extends CampoLivreException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ public NotSupportedCampoLivreException() {
+ super();
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public NotSupportedCampoLivreException(String message, Throwable cause) {
+ super(message, cause);
+
+ }
+
+ /**
+ * @param message
+ */
+ public NotSupportedCampoLivreException(String message) {
+ super(message);
+
+ }
+
+ /**
+ * @param cause
+ */
+ public NotSupportedCampoLivreException(Throwable cause) {
+ super(cause);
+
+ }
+
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/package-info.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/package-info.java
new file mode 100644
index 0000000..2dfc108
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/campolivre/package-info.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 14/08/2010 - 20:50:14
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2010 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 14/08/2010 - 20:50:14
+ *
+ */
+
+/**
+ * Fábricas de campos livres para os bancos suportados.
+ *
+ * @author Gilmar P.S.L
+ */
+package org.jrimum.bopepo.campolivre;
\ No newline at end of file
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/package-info.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/package-info.java
new file mode 100644
index 0000000..f53fae0
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/package-info.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2010 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 14/08/2010 - 20:50:14
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2010 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 14/08/2010 - 20:50:14
+ *
+ */
+
+/**
+ * Classes e utilitários responsáveis pela geração de boletos e derivados como:
+ * {@link org.jrimum.bopepo.Boleto}, {@link org.jrimum.bopepo.BancosSuportados}, {@link org.jrimum.bopepo.CodigoDeBarras}, {@link org.jrimum.bopepo.LinhaDigitavel}, {@link org.jrimum.bopepo.BoletoUtil}, etc.
+ *
+ * @author Gilmar P.S.L
+ */
+package org.jrimum.bopepo;
\ No newline at end of file
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoDeBrasilia.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoDeBrasilia.java
new file mode 100644
index 0000000..929e813
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoDeBrasilia.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2013 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 25/09/2013 - 12:11:51
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2013 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 25/09/2013 - 12:11:51
+ *
+ */
+
+package org.jrimum.bopepo.parametro;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.domkee.financeiro.banco.ParametroBancario;
+
+
+/**
+ * Parâmetros bancários específicos para o
+ * {@link BancosSuportados#BANCO_DE_BRASILIA}.
+ *
+ * @author Gilmar P.S.L.
+ *
+ * @version 0.2.3
+ *
+ * @since 0.2
+ */
+public enum ParametroBancoDeBrasilia implements
+ ParametroBancario {
+ CHAVE_ASBACE_DIGITO1, CHAVE_ASBACE_DIGITO2;
+}
diff --git a/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoRural.java b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoRural.java
new file mode 100644
index 0000000..9228a35
--- /dev/null
+++ b/jrimum-bopepo/src/main/java/org/jrimum/bopepo/parametro/ParametroBancoRural.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2013 JRimum Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the specific
+ * language governing permissions and limitations under the License.
+ *
+ * Created at: 25/09/2013 - 12:11:51
+ *
+ * ================================================================================
+ *
+ * Direitos autorais 2013 JRimum Project
+ *
+ * Licenciado sob a Licença Apache, Versão 2.0 ("LICENÇA"); você não pode usar
+ * esse arquivo exceto em conformidade com a esta LICENÇA. Você pode obter uma
+ * cópia desta LICENÇA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
+ * haja exigência legal ou acordo por escrito, a distribuição de software sob
+ * esta LICENÇA se dará “COMO ESTÁ”, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER
+ * TIPO, sejam expressas ou tácitas. Veja a LICENÇA para a redação específica a
+ * reger permissões e limitações sob esta LICENÇA.
+ *
+ * Criado em: 25/09/2013 - 12:11:51
+ *
+ */
+
+
+package org.jrimum.bopepo.parametro;
+
+import org.jrimum.bopepo.BancosSuportados;
+import org.jrimum.domkee.financeiro.banco.ParametroBancario;
+
+
+/**
+ * Parâmetros bancários específicos para o
+ * {@link BancosSuportados#BANCO_RURAL}.
+ *
+ * @author