commit inicial

master
fabiorj 2021-12-04 12:15:25 -03:00
commit d6e3bc82ca
269 changed files with 32775 additions and 0 deletions

6
jrimum-bopepo/.gitignore vendored 100644
View File

@ -0,0 +1,6 @@
/bin
/target
.classpath
.DS_Store
.project
.settings

View File

@ -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
----------------------------------------------------------------------

View File

@ -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.

View File

@ -0,0 +1,8 @@
Bopepo
======
[![Build Status](https://ci-jrimum.rhcloud.com/buildStatus/icon?job=Bopepo)](https://ci-jrimum.rhcloud.com)
Biblioteca Java para geração de boletos bancários.
* http://jrimum.org/bopepo

View File

@ -0,0 +1,263 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.rjconsultores</groupId>
<artifactId>jrimum-bopepo</artifactId>
<packaging>jar</packaging>
<name>Projeto Bopepo</name>
<version>1.0.0</version>
<description>Projeto open source de componentes de software para o domínio de negócios do Brasil.</description>
<url>http://www.jrimum.org/bopepo</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<organization>
<name>Projeto JRimum</name>
<url>http://www.jrimum.org</url>
</organization>
<issueManagement>
<url>http://github.com/jrimum/bopepo/issues</url>
<system>GitHub</system>
</issueManagement>
<scm>
<url>http://github.com/jrimum/bopepo</url>
</scm>
<developers>
<developer>
<name>Gilmar P. S. L.</name>
<email>gilmatryx@gmail.com</email>
</developer>
<developer>
<name>Misael Barreto</name>
<email>misaelbarreto@gmail.com</email>
</developer>
<developer>
<name>Rômulo Augusto</name>
<email>romulomail@gmail.com</email>
</developer>
</developers>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<profiles>
<profile>
<id>disable-java8-doclint</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<additionalparam>-Xdoclint:none</additionalparam>
</properties>
</profile>
</profiles>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.odt</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<signature>
<groupId>org.codehaus.mojo.signature</groupId>
<artifactId>java18</artifactId>
<version>1.0</version>
</signature>
</configuration>
<executions>
<execution>
<id>animal-sniffer</id>
<phase>compile</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/jrimum-bopepo-with-dependencies.xml</descriptor>
<descriptor>src/main/assembly/jrimum-bopepo-with-dependencies-src.xml</descriptor>
<descriptor>src/main/assembly/jrimum-bopepo-examples.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<skipTests>false</skipTests>
<includes>
<include>org/jrimum/bopepo/**/*</include>
</includes>
<excludes>
<exclude>org/jrimum/bopepo/excludes/**/*</exclude>
<exclude>org/jrimum/bopepo/**/*$*</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadoc</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<charset>UTF-8</charset>
<docencoding>UTF-8</docencoding>
<docfilessubdirs>true</docfilessubdirs>
<show>private</show>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>br.com.rjconsultores</groupId>
<artifactId>jrimum-domkee</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>br.com.rjconsultores</groupId>
<artifactId>jrimum-texgit</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.0.8</version>
<exclusions>
<exclusion>
<groupId>bouncycastle</groupId>
<artifactId>bcmail-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>bouncycastle</groupId>
<artifactId>bcprov-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>bouncycastle</groupId>
<artifactId>bctsp-jdk14</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Test -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava-jdk5</artifactId>
<version>14.0.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<distributionManagement>
<repository>
<id>rj-releases</id>
<url>http://52.5.53.15:8081/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>
</project>

View File

@ -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<Boleto> boletos = new ArrayList<Boleto>();
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<Boleto> boletos, String filePath, File templatePersonalizado) {
File arq = null;
BoletoViewer boletoViewer = new BoletoViewer(boletos.get(0));
boletoViewer.setTemplate(templatePersonalizado);
List<byte[]> boletosEmBytes = new ArrayList<byte[]>(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<byte[]> 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;
}
}

View File

@ -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.
*
* <p>
* Baseado no {@linkplain org.jrimum.bopepo.exemplo.MeuPrimeiroBoleto}.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
*
* @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;
}
}

View File

@ -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;
/**
* <p>
* Campo Livre fictício para usar junto com o <code>JRimumBank</code>.
* Como todo campo livre, deve possuir o tamanho de 25 dígitos.
* </p>
* <p>
* 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.
* </p>
* Segue abaixo o layout desse campo livre fictício:
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" width="60%">
* <thead>
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo</th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td>20-25</td>
* <td>6</td>
* <td>9 (6)</td>
* <td>Código da conta (sem o dígito)</td>
* </tr>
* <tr>
* <td>26-29</td>
* <td>4</td>
* <td>9 (4)</td>
* <td>Código da agência (sem o dígito)</td>
* </tr>
* <tr>
* <td>30-35</td>
* <td>6</td>
* <td>9 (6)</td>
* <td>ZEROS</td>
* </tr>
* <tr>
* <td>36-44</td>
* <td>9</td>
* <td>9 (9)</td>
* <td>Nosso número (sem o dígito)</td>
* </tr>
* </tbody>
* </table>
*
* @author Rômulo Augusto
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
*
*/
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<Integer> fieldConta = new FixedField<Integer>(conta.getNumeroDaConta().getCodigoDaConta(), 6, ZERO_LEFT);
FixedField<Integer> fieldAgencia = new FixedField<Integer>(conta.getAgencia().getCodigo(), 4, ZERO_LEFT);
FixedField<Integer> fieldZeros = new FixedField<Integer>(0, 6, ZERO_LEFT);
FixedField<String> fieldNossoNumero = new FixedField<String>(titulo.getNossoNumero(), 9);
return fieldConta.write() + fieldAgencia.write() + fieldZeros.write() + fieldNossoNumero.write();
}
}

View File

@ -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 <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @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!");
}
/**
* <p>
* Devolve uma lista com mais de um boleto.
* </p>
*
* @return List<Boleto>
*
* @since 0.2
*/
public static List<Boleto> getVariosBoletos() {
List<Boleto> boletos = new ArrayList<Boleto>(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);
}
}

View File

@ -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 <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
*
*/
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());
}
}

View File

@ -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.
*
* <p>
* Utiliza o Banco Bradesco como exemplo, já que possui um implementação simples.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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();
}
}
}

View File

@ -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;
/**
* <p>
* Exemplo de código para geração de um boleto simples.
* </p>
* <p>
* Utiliza o Banco Bradesco como exemplo, já que possui um implementação simples.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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();
}
}
}

View File

@ -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;
/**
* <p>
* Exemplo de código para geração de um boleto simples usando um template personalizado.
* </p>
* <p>
* Utiliza a classe utilitária <code>Exemplos</code> para criar os objetos necessários para gerar o boleto.
* </p>
*
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Exemplo de código para geração de vários boletos em um único arquivo PDF.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @since 0.2
*
* @version 0.2
*/
public class VariosBoletosEmUmArquivo {
public static void main(String[] args) {
Boleto boletoBB = crieBoletoBB();
Boleto boletoBradesco = crieBoletoBradesco();
List<Boleto> boletos = new ArrayList<Boleto>();
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);
}
}

View File

@ -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;
/**
*
* <p>
* Exemplo de código para geração de vários boletos em um único arquivo PDF.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @since 0.2
*
* @version 0.2
*/
public class VariosBoletosEmVariosArquivos {
public static void main(String[] args) {
/*
* É bem simples, consiga os boletos
*/
List<Boleto> 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.
*/
}
}

View File

@ -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 <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*/
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.
* <p>
* Para maiores esclarecimentos ver o manual do Bradesco.
* </p>
*/
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();
}
}

View File

@ -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;
/**
* <p>
* Exemplo do boleto para o Banco do Brasil com Nosso Número 10
* </p>
* <p>
* Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
* do Banco do Brasil com Nosso Número 10
* </p>
*
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Exemplo do boleto para o Banco do Brasil com Nosso Número 11
* </p>
* <p>
* Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
* do Banco do Brasil com Nosso Número 11
* </p>
*
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Exemplo do boleto para o Banco do Brasil com Nosso Número de 17 dígitos e Convênio de 6 posições.
* </p>
* <p>
* 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;
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Exemplo do boleto para o Banco do Brasil com Nosso Número de 17 dígitos e Convênio de 7 posições.
* </p>
* <p>
* 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;
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*
* @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);
}
}

View File

@ -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 <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*/
package org.jrimum.bopepo.exemplo.banco.bb;

View File

@ -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;
/**
* <p>
* Exemplo do boleto para o Banco do Nordeste
* </p>
* <p>
* Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
* do Banco do Nordeste do Brasil
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:pporto@gmail.com">Paulo Porto</a>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Exemplo do boleto para o Banco Bradesco
* </p>
* <p>
* Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
* do Banco Bradesco
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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);
}
}

View File

@ -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 <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*/
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.
* <p>
* Para maiores esclarecimentos ver o manual do Bradesco.
* </p>
*/
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();
}
}

View File

@ -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.
* <p>
* Mostra um exemplo funcional que gera um boleto para a implementação padrão do BRB.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*
* @version 0.2
*/
/**
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*
*/
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);
}
}

View File

@ -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.
*
* <p>
* Mostra um exemplo funcional que gera um boleto para a implementação padrão do
* CECRED.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*
* @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);
}
}

View File

@ -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)
*
* <ul>
* <li>Campo com 10 posições sempre iniciando com 9;</li>
* <li>Utiliza 1 dígito verificador calculado através do módulo 11, com peso 2 a
* 9.</li>
* </ul>
*
* <p>
* <b>9NNNNNNNNN - D1</b>
* </p>
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*/
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.
* <p>
* Para maiores esclarecimentos ver o manual do Bradesco.
* </p>
*/
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();
}
}

View File

@ -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 <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
*/
package org.jrimum.bopepo.exemplo.banco;

View File

@ -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;
/**
* <p>
* Exemplo do boleto para o Banco Sicredi
* </p>
* <p>
* Mostra um exemplo funcional que gera um boleto para a implementação de campo livre
* do Banco Sicredi
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Exemplo do boleto para o Bancoob - Cobrança não registrada.
* </p>
* <p>
* Mostra um exemplo funcional que gera um boleto para a implementação de campo
* livre do Bancoob para cobrança não registrada.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*
* @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);
}
}

View File

@ -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 <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
*/
package org.jrimum.bopepo.exemplo;

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View File

@ -0,0 +1,27 @@
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>examples</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/examples/java</directory>
<useDefaultExcludes>true</useDefaultExcludes>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet>
<directory>src/examples/resources</directory>
<useDefaultExcludes>true</useDefaultExcludes>
<outputDirectory>/resources</outputDirectory>
<includes>
<include>**/**</include>
</includes>
</fileSet>
</fileSets>
</assembly>

View File

@ -0,0 +1,60 @@
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>dep-sources</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>/src/main/java</directory>
<useDefaultExcludes>true</useDefaultExcludes>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet>
<directory>/src/main/resources</directory>
<useDefaultExcludes>true</useDefaultExcludes>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/**</include>
</includes>
</fileSet>
<fileSet>
<directory>../jrimum-texgit/src/main/java</directory>
<useDefaultExcludes>true</useDefaultExcludes>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet>
<directory>../jrimum-utilix/src/main/java</directory>
<useDefaultExcludes>true</useDefaultExcludes>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet>
<directory>../jrimum-vallia/src/main/java</directory>
<useDefaultExcludes>true</useDefaultExcludes>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet>
<directory>../jrimum-domkee/src/main/java</directory>
<useDefaultExcludes>true</useDefaultExcludes>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
</assembly>

View File

@ -0,0 +1,22 @@
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>dep</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<excludes>
<exclude>commons-lang:commons-lang</exclude>
<exclude>log4j:log4j</exclude>
<exclude>com.lowagie:itext</exclude>
</excludes>
</dependencySet>
</dependencySets>
</assembly>

View File

@ -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;
/**
* <p>
* Enumeração dos bancos segundo o <a href="http://www.bcb.gov.br>Banco Central
* do Brasil</a> que são suportados por este componente na tarefa de geração de
* boletos.
* </p>
*
* <p>
* Aqui se encontram todos os bancos sob a <a
* href="http://www.bcb.gov.br/?RELINST">supervisão da BACEN</a> em
* funcionamento no país e que possuem pelo menos uma implementação de
* <code>ICampoLivre</code>.
* </p>
*
* <p>
* A partir de um <code>EnumBanco</code> específico, como o
* <code>BANCO_DO_BRASIL</code>, você pode solicitar um nova instância de um
* banco representado por <code>IBanco</code> ou utilizar as costantes
* enumeradas e não enumeradas como melhor for o caso.
* </p>
*
* <h5>EXEMPLOS:</h5>
*
* <p>
* Para uma nova instância do Banco do Brasil faça: <br />
* <br />
* <code>
* IBanco bancoDoBrasil = EnumBancos.BANCO_DO_BRASIL.newInstance();
* </code>
* </p>
*
* <p>
* Para utilizar somento o código de compensação: <br />
* <br />
* <code>
* EnumBancos.BANCO_DO_BRASIL.getCodigoDeCompensacao();
* </code>
* </p>
*
* <p>
* Para saber se um banco é suportado pelo componete, veja a lista antes
* (LinkParaLista) ou faça: <br />
* <br />
* <code>
* EnumBancos.isSuportado(banco.getCodigoDeCompensacao)
* </code>
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="mailto:samuelvalerio@gmail.com">Samuel Valério</a>
* @author <a href="mailto:lukas.antunes@virtualsistemas.com.br">Lukas
* Antunes</a> - Colaborador com o banco Intermedium (077)
* @author <a href="mailto:fernandobgi@gmail.com">Fernando Dias</a> -
* Colaborador com o banco Rural (453)
* @author <a href="mailto:pporto@gmail.com">Paulo Porto</a> -
* Colaborador com o Banco do Nordeste do Brasil (004).
* @author <a href="mailto:fabianojustino@gmail.com">Fabiano Carrijo</a> -
* Colaborador com o Banco Citibank (756).
* @author <a href="mailto:contato@douglasramiro.com.br">Douglas Ramiro</a> -
* 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 <strong>Banco do Brasil</strong>, código
* de compensação <strong><tt>001</tt></strong> <a
* href="http://www.bb.com.br">site</a>.
*
* @since 0.2
*/
BANCO_DO_BRASIL("001", "00000000000191", "BANCO DO BRASIL S.A.", "Banco do Brasil - Banco Múltiplo"),
/**
* Tipo enumerado que representa o <strong>Banco do Nordeste do Brasil</strong>, código
* de compensação <strong><tt>004</tt></strong> (<a href="http://www.bnb.gov.br">site</a>).
*
* @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, <strong>Banco do Estado do Espírito Santo</strong>,
* código de compensação <strong><tt>021</tt></strong>
* <a href="http://www.banestes.com.br">
* site</a>.
*
* @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 <strong>Banco Santander
* (Brasil) S. A.</strong>, código de compensação <strong><tt>033</tt>
* </strong> <a href="http://www.santander.com.br"> site</a>.
*
* @since 0.2
*/
BANCO_SANTANDER("033", "90400888000142", "BANCO SANTANDER (BRASIL) S. A.", "Banco Mútiplo"),
/**
* Tipo enumerado que representa o Banrisul, Banco <strong>do Estado do Rio Grande do Sul</strong>,
* código de compensação <strong><tt>041</tt></strong> <a href="http://www.banrisul.com.br/">
* site</a>.
*
* @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 <strong>BRB - Banco de Brasília</strong>,
* código de compensação <strong><tt>070</tt></strong> <a
* href="http://www.brb.com.br">site</a>.
*
* @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 <strong>Intermedium</strong>,
* código de compensação <strong><tt>077</tt></strong> <a href="http://www.bancointermedium.com.br/">
* site</a>.
*
* @since 0.2
*/
BANCO_INTEMEDIUM("077", "00416968000101", "BANCO INTERMEDIUM S.A.", "Banco Múltiplo"),
/**
* Tipo enumerado que representa o CECRED, <strong>Cooperativa Central de Crédito Urbano</strong>,
* código de compensação <strong><tt>085</tt></strong> <a href="http://www.cecred.coop.br/">
* site</a>.
*
* @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 <strong>Caixa Econômica Federal</strong>,
* código de compensação <strong><tt>104</tt></strong> <a
* href="http://www.caixa.gov.br">site</a>.
*
* @since 0.2
*/
CAIXA_ECONOMICA_FEDERAL("104", "00360305000104", "CAIXA ECONOMICA FEDERAL", "Caixa Econômica Federal"),
/**
* Tipo enumerado que representa o Banco <strong>Bradesco</strong>, código
* de compensação <strong><tt>237</tt></strong> <a
* href="http://www.bradesco.com.br">site</a>.
*
* @since 0.2
*/
BANCO_BRADESCO("237", "60746948000112", "BANCO BRADESCO S.A.", "Banco Múltiplo"),
/**
* Tipo enumerado que representa o <strong>Banco Itaú</strong>, código de
* compensação <strong><tt>341</tt></strong> <a
* href="http://www. .com.br">site</a>.
*
* @since 0.2
*/
BANCO_ITAU("341", "60701190000104", "BANCO ITAÚ S.A.", "Banco Múltiplo"),
/**
* Tipo enumerado que representa o <strong>Banco ABN AMRO Real</strong>
* (<a href="http://www.bancoreal.com.br">http://www.bancoreal.com.br</a>),
* código de compensação <strong><tt>356</tt></strong>. <br/>
* <p>
* Obs: Os bancos <strong>Sudameris</strong> e <strong>Bandepe</strong>
* foram incorporados ao Banco Real, portanto para gerar boletos bancários
* dos bancos citados utilize este tipo enumerado.
* </p>
* @since 0.2
*/
BANCO_ABN_AMRO_REAL("356", "33066408000115", "BANCO ABN AMRO REAL S.A.", "Banco Múltiplo"),
/**
* Tipo enumerado que representa o <strong>Banco Mercantil do Brasil</strong>
* (<a href="http://www.mercantildobrasil.com.br">http://www.mercantildobrasil.com.br</a>),
* código de compensação <strong><tt>389</tt></strong>.
* @since 0.2
*/
MERCANTIL_DO_BRASIL("389", "17184037000110", "BANCO MERCANTIL DO BRASIL S.A.", "Banco Múltiplo"),
/**
* Tipo enumerado que representa o <strong>HSBC</strong>, código de
* compensação <strong><tt>399</tt></strong> <a
* href="http://www.hsbc.com.br">site</a>.
*
* @since 0.2
*/
HSBC("399", "01701201000189", "HSBC BANK BRASIL S.A.", "Banco Múltiplo"),
/**
* Tipo enumerado que representa o <strong>Unibanco</strong>, código de
* compensação <strong><tt>409</tt></strong> <a
* href="http://www.unibanco.com.br">site</a>.
*
* @since 0.2
*/
UNIBANCO("409", "33700394000140", "UNIBANCO-UNIAO DE BANCOS BRASILEIROS S.A.", "Banco Múltiplo"),
/**
* Tipo enumerado que representa o <strong>Unibanco</strong>, código de
* compensação <strong><tt>422</tt></strong> <a
* href="http://www.safra.com.br/">site</a>.
*
* @since 0.2
*/
BANCO_SAFRA("422", "58160789000128", "BANCO SAFRA S.A.", "Banco Múltiplo"),
/**
* Tipo enumerado que representa o <strong>Citibank</strong>, código de
* compensação <strong><tt>756</tt></strong> <a
* href="http://www.citibank.com.br/">site</a>.
*
* @since 0.2
*/
CITIBANK("745", "33479023000180", "BANCO CITIBANK S.A.", "Banco Múltiplo"),
/**
* Tipo enumerado que representa o <strong>Banco Sicredi</strong>, código de
* compensação <strong><tt>748</tt></strong> <a
* href="http://www.sicredi.com.br/">site</a>.
*
* @since 0.2
*/
BANCO_SICREDI("748", "01181521000155", "BANCO COOPERATIVO SICREDI S.A.", "Banco Mútiplo Cooperativo"),
/**
* Tipo enumerado que representa o <strong>Banco Rural</strong>, código de
* compensação <strong><tt>453</tt></strong> <a
* href="http://www.rural.com.br/">site</a>.
*
* @since 0.2
*/
BANCO_RURAL("453", "58160789000128", "BANCO RURAL S.A.", "Banco Múltiplo"),
/**
* Tipo enumerado que representa o <strong>Bancoob</strong>, código de
* compensação <strong><tt>756</tt></strong> <a
* href="http://www.bancoob.com.br/">site</a>.
*
* @since 0.2
*/
BANCOOB("756", "02038232000164", "BANCO COOPERATIVO DO BRASIL S.A. - BANCOOB", "Banco Comercial Cooperativo");
/**
* Singleton <code>Map</code> para pesquisa por bancos suportados no
* componente.
*
* @since 0.2
*/
public static final Map<String, BancosSuportados> suportados = new HashMap<String, BancosSuportados>(
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 <a
* href="http://www.bcb.gov.br/?CHEQUESCOMPE">BACEN</a>.
*
* @since 0.2
*/
private String codigoDeCompensacaoBACEN;
/**
* CNPJ registrado na <a href="http://www.bcb.gov.br/?CHEQUESCOMPE">BACEN</a>.
*
* @since 0.2
*/
private String cNPJ;
/**
* Nome da instituição registrado na <a
* href="http://www.bcb.gov.br/?CHEQUESCOMPE">BACEN</a>.
*
* @since 0.2
*/
private String instituicao;
/**
* Segmento bancário da instituição registrado na <a
* href="http://www.bcb.gov.br/?CHEQUESCOMPE">BACEN</a>.
*
* @since 0.2
*/
private String segmento;
/**
* <p>
* Construtor naturalmente <code>private</code> responsável por criar uma
* única instância para cada banco.
* </p>
*
* @param codigoDeCompensacaoBACEN
* @param cNPJ
* @param instituicao
* @param segmento
*
* @see java.lang.Enum
* @see <a
* href="http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html">Enum
* Guide</a>
*
* @since 0.2
*
*/
private BancosSuportados(String codigoDeCompensacaoBACEN, String cnpj,
String instituicao, String segmento) {
this.codigoDeCompensacaoBACEN = codigoDeCompensacaoBACEN;
this.cNPJ = cnpj;
this.instituicao = instituicao;
this.segmento = segmento;
}
/**
* <p>
* Verifica se exite suporte (implementação) de "Campos Livres" para o banco
* representado pelo <code>codigoDeCompensacao</code>.
* </p>
*
* @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);
}
/**
* <p>
* Cria uma instância para o banco representado pelo tipo enumerado.
* </p>
* <p>
* Cada instância retornada por este método contém:
* <ul>
* <li><tt>Código de componsação</tt></li>
* <li><tt>Nome da instituição</tt></li>
* <li><tt>CNPJ da instituição</tt></li>
* <li><tt>Segmento da instituição bancária</tt></li>
* </ul>
* </p>
*
* @return Uma instância do respectivo banco.
*
* @see org.jrimum.domkee.financeiro.banco.febraban.Banco#Banco(CodigoDeCompensacaoBACEN, String, CNPJ, String)
* @see <a href="http://www.bcb.gov.br/?CHEQUESCOMPE">Bancos supervisionados
* pela BACEN</a>
*
* @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;
}
}

View File

@ -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;
/**
* <p>
* É a representação do documento Boleto que por sua vez, representa títulos
* em cobrança.
* </p>
*
* <p>
* A classe encapsula os atributos integrantes e as funcionalidades inerentes
* à construção de tal documento.
* </p>
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento Mercantil</a>
* @author <a href="mailto:samuelvalerio@gmail.com">Samuel Valério</a>
*
* @since 0.2
*
* @version 0.2
*/
public class Boleto {
private static Logger log = Logger.getLogger(Boleto.class);
/**
* @see Titulo
*/
private Titulo titulo;
/**
* @see #setDataDeProcessamento(Date)
*/
private Date dataDeProcessamento;
/**
* @see CodigoDeBarras
*/
private CodigoDeBarras codigoDeBarras;
/**
* @see LinhaDigitavel
*/
private LinhaDigitavel linhaDigitavel;
/**
* @see CampoLivre
*/
private CampoLivre campoLivre;
/**
* @see #setLocalPagamento(String)
*/
private String localPagamento;
/**
* @see #setInstrucaoAoSacado(String)
*/
private String instrucaoAoSacado;
private String instrucao1;
private String instrucao2;
private String instrucao3;
private String instrucao4;
private String instrucao5;
private String instrucao6;
private String instrucao7;
private String instrucao8;
/**
* @see #setTextosExtras(Map)
*/
private Map<String, String> textosExtras;
/**
*<p>
* Map com nome do campo e imagem para este campo.
*</p>
*/
private Map<String, Image> 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;
}
/**
* <p>
* Data de emissão do boleto de cobrança.
* </p>
*
* @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;
}
/**
* <p>
* Possíveis locais para pagamento.
* </p>
* <p>
* Exemplo: <em>Pagável preferencialmente na Rede X ou em qualquer Banco até
* o Vencimento.</em>
* </p>
*
* @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;
}
/**
* <p>
* Instrução adicional ao sacado, para visualizar o conceito de negócio de sacado consultar o
* <a href="http://www.jrimum.org/bopepo">glossário</a>.
* </p>
*
* @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<String, String> getTextosExtras() {
return this.textosExtras;
}
/**
* Substitui todos os campos extra da instância caso exista.
*
* @param textosExtras
* Campos atribuídos
*/
public void setTextosExtras(Map<String,String> 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<String, String>());
}
getTextosExtras().put(campo, conteudo);
}
/**
* @return Todas os campos de imagem usados como extra ou sobrescrita no
* template.
*/
public Map<String, Image> getImagensExtras() {
return this.imagensExtras;
}
/**
* Substitui todos os campos extra da instância caso exista.
*
* @param imagensExtras
* Campos atribuídos
*/
public void setImagensExtras(Map<String,Image> 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<String, Image>());
}
getImagensExtras().put(campo, conteudo);
}
@Override
public String toString() {
return Objects.toString(this);
}
}

View File

@ -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;
/**
*
* <p>
* Qualquer exceção gerada durante a geração de um Boleto gera uma <code>BoletoExceptiton</code>. Centraliza e localiza os problemas relativos a geração de um boleto.
* </p>
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Utilitário para recuperar informações de strings de códigos de barras e
* linhas digitáveis de boletos.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*
* @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!");
}
/**
* <p>
* Retorna o campo livre de uma dada linha digitável.
* </p>
*
* @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();
}
/**
* <p>
* Retorna o valor do título de uma dada linha digitável.
* </p>
*
* @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);
}
/**
* <p>
* Retorna o fator de vencimento de uma dada linha digitável.
* </p>
*
* @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);
}
/**
* <p>
* Retorna o dígito verificador geral de uma dada linha digitável.
* </p>
*
* @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);
}
/**
* <p>
* Retorna o código da moeda de uma dada linha digitável.
* </p>
*
* @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);
}
/**
* <p>
* Retorna o código do banco de uma dada linha digitável.
* </p>
*
* @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);
}
/**
* <p>
* Retorna o campo livre de um dado código de barras.
* </p>
*
* @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);
}
/**
* <p>
* Retorna o valor do título de um dado código de barras.
* </p>
*
* @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);
}
/**
* <p>
* Retorna o fator de vencimento de um dado código de barras.
* </p>
*
* @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);
}
/**
* <p>
* Retorna o dígito verificador de um dado código de barras.
* </p>
*
* @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);
}
/**
* <p>
* Retorna o código da moeda de um dado código de barras.
* </p>
*
* @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);
}
/**
* <p>
* Retorna o código do banco de um dado código de barras.
* </p>
*
* @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);
}
/**
* <p>
* Transforma um código de barras em uma linha digitável no formato
* FEBRABAN.
* </p>
* <p>
* "<strong>dddddddddddddddddddddddddddddddddddddddddddd</strong>" <br />
* <b>&rArr;</b> <br />
* "<strong>ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd</strong>"
* </p>
*
* @see #checkFormatoCodigoDeBarras(String)
*
* @param codigoDeBarras
* string contendo somente números
* @return linha digitável contendo somente números
* @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 codigoDeBarrasEmLinhaDigitavelFormatada(
String codigoDeBarras) throws
IllegalArgumentException, CodigoDeBarrasException {
return linhaDigitavelNumericaEmFormatada(codigoDeBarrasEmLinhaDigitavelNumerica(codigoDeBarras));
}
/**
* <p>
* Transforma um código de barras em uma linha digitável numérica.
* </p>
* <p>
* "<strong>dddddddddddddddddddddddddddddddddddddddddddd</strong>" <br />
* <b>&rArr;</b> <br />
* "<strong>ddddddddddddddddddddddddddddddddddddddddddddddd</strong>"
* </p>
*
* @see #checkFormatoCodigoDeBarras(String)
*
* @param codigoDeBarras
* string contendo somente números
* @return linha digitável contendo somente números
*
* @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 codigoDeBarrasEmLinhaDigitavelNumerica(
String codigoDeBarras) throws
IllegalArgumentException, CodigoDeBarrasException {
checkFormatoCodigoDeBarras(codigoDeBarras);
final BoletoLinhaDigitavelDV calculadorDV = new BoletoLinhaDigitavelDV();
final StringBuilder linhaDigitavel = new StringBuilder();
final String c = trim(codigoDeBarras);
// campo1
// banco
linhaDigitavel.append(c.substring(0, 3));
// moeda
linhaDigitavel.append(c.substring(3, 4));
linhaDigitavel.append(c.substring(19, 24));
linhaDigitavel.append(calculadorDV.calcule(linhaDigitavel.toString()));
// campo2
linhaDigitavel.append(c.substring(24, 34));
linhaDigitavel.append(calculadorDV.calcule(c.substring(24, 34)));
// campo3
linhaDigitavel.append(c.substring(34, 44));
linhaDigitavel.append(calculadorDV.calcule(c.substring(34, 44)));
// campo4=DV_Geral
linhaDigitavel.append(c.substring(4, 5));
// campo5
linhaDigitavel.append(c.substring(5, 19));
return linhaDigitavel.toString();
}
/**
* <p>
* Transforma uma linha digitável no formato FEBRABAN em um código de
* barras.
* </p>
* <p>
* "<strong>ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd</strong>"
* <br />
* <b>&rArr;</b> <br />
* "<strong>dddddddddddddddddddddddddddddddddddddddddddd</strong>"
* </p>
*
* @see #checkExistsLinhaDigitavel(String)
* @see #checkFormatoLinhaDigitavelFormatada(String)
*
* @param linhaDigitavel
* string no formato FEBRABAN
* @return linha digitável contendo somente números
* @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 linhaDigitavelFormatadaEmCodigoDeBarras(
String linhaDigitavel) throws
IllegalArgumentException, LinhaDigitavelException {
return linhaDigitavelNumericaEmCodigoDeBarras(linhaDigitavelFormatadaEmNumerica(linhaDigitavel));
}
/**
* <p>
* Transforma uma linha digitável não formatada em um código de barras.
* </p>
* <p>
* "<strong>ddddddddddddddddddddddddddddddddddddddddddddddd</strong>" <br />
* <b>&rArr;</b> <br />
* "<strong>dddddddddddddddddddddddddddddddddddddddddddd</strong>"
* </p>
*
* @see #checkExistsLinhaDigitavel(String)
* @see #checkFormatoLinhaDigitavelFormatada(String)
*
* @param linhaDigitavel
* string no formato FEBRABAN
* @return linha digitável contendo somente números
* @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 linhaDigitavelNumericaEmCodigoDeBarras(
String linhaDigitavel) throws
IllegalArgumentException, LinhaDigitavelException {
checkFormatoLinhaDigitavelNumerica(linhaDigitavel);
final StringBuilder codigoDeBarras = new StringBuilder();
final String l = trim(linhaDigitavel);
// banco
codigoDeBarras.append(l.substring(0, 3));
// moeda
codigoDeBarras.append(l.substring(3, 4));
codigoDeBarras.append(l.substring(32, 33));
codigoDeBarras.append(l.substring(33, 47));
codigoDeBarras.append(l.substring(4, 9));
codigoDeBarras.append(l.substring(10, 20));
codigoDeBarras.append(l.substring(21, 31));
return codigoDeBarras.toString();
}
/**
* <p>
* Remove formatação e espaços de uma linha digitável no formato FEBRABAN:
* </p>
* <p>
* "<strong>ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd</strong>"
* <br />
* <b>&rArr;</b> <br />
* "<strong>ddddddddddddddddddddddddddddddddddddddddddddddd</strong>"
* </p>
*
* @see #checkExistsLinhaDigitavel(String)
* @see #checkFormatoLinhaDigitavelFormatada(String)
*
* @param linhaDigitavel
* string no formato FEBRABAN
* @return linha digitável contendo somente números
* @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 linhaDigitavelFormatadaEmNumerica(
String linhaDigitavel) throws IllegalArgumentException,
LinhaDigitavelException {
checkFormatoLinhaDigitavelFormatada(linhaDigitavel);
return linhaDigitavel.replaceAll(WHITE_SPACE, EMPTY).replaceAll("\\.",
EMPTY);
}
/**
* <p>
* Transforma linha digitável númerica em FEBRABAN:
* </p>
* <p>
* "<strong>ddddddddddddddddddddddddddddddddddddddddddddddd</strong>" <br />
* <b>&rArr;</b> <br />
* "<strong>ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd</strong>"
* </p>
*
* @see #checkExistsLinhaDigitavel(String)
* @see #checkFormatoLinhaDigitavelNumerica(String)
*
* @param linhaDigitavel
* string no formato FEBRABAN
* @return linha digitável contendo somente números
* @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 linhaDigitavelNumericaEmFormatada(
String linhaDigitavel) throws
IllegalArgumentException, LinhaDigitavelException {
checkFormatoLinhaDigitavelNumerica(linhaDigitavel);
final StringBuilder linhaFormatada = new StringBuilder();
final String l = trim(linhaDigitavel);
linhaFormatada.append(l.substring(0, 5));
linhaFormatada.append(".");
linhaFormatada.append(l.substring(5, 10));
linhaFormatada.append(WHITE_SPACE);
linhaFormatada.append(l.substring(10, 15));
linhaFormatada.append(".");
linhaFormatada.append(l.substring(15, 21));
linhaFormatada.append(WHITE_SPACE);
linhaFormatada.append(l.substring(21, 26));
linhaFormatada.append(".");
linhaFormatada.append(l.substring(26, 32));
linhaFormatada.append(WHITE_SPACE);
linhaFormatada.append(l.substring(32, 33));
linhaFormatada.append(WHITE_SPACE);
linhaFormatada.append(l.substring(33));
return linhaFormatada.toString();
}
/**
* <p>
* Informa se um dado código de barras é válido ou não.
* </p>
*
* @param codigoDeBarras
* @return true = valida
*/
public static boolean isCodigoDeBarrasValido(String codigoDeBarras) {
if (isNotBlank(codigoDeBarras)) {
return codigoDeBarras.trim().matches(CODIGO_DE_BARRAS_REGEX);
} else {
return false;
}
}
/**
* <p>
* Informa se uma dada linha digitável formatada é válida ou não.
* </p>
*
* @param linhaDigitavel
* @return true = valida
*/
public static boolean isLinhaDigitavelFormatadaValida(
String linhaDigitavel) {
if (isNotBlank(linhaDigitavel)) {
return linhaDigitavel.trim().matches(
LINHA_DIGITAVEL_FORMATADA_REGEX);
} else {
return false;
}
}
/**
* <p>
* Informa se uma dada linha digitável é válida ou não.
* </p>
*
* @param linhaDigitavel
* @return true = valida
*/
public static boolean isLinhaDigitavelNumericaValida(
String linhaDigitavel) {
if (isNotBlank(linhaDigitavel)) {
return linhaDigitavel.trim()
.matches(LINHA_DIGITAVEL_NUMERICA_REGEX);
} else {
return false;
}
}
/**
* <p>
* Verifica se a linha digitável <strong>não é nula</strong>, <strong>não é
* vazia</strong> e <strong>é numérica</strong>, obedecendo o seguinte
* FEBRABAN:
* </p>
* <p>
* "<strong>ddddd.ddddd ddddd.dddddd ddddd.dddddd d dddddddddddddd</strong>"
* </p>
* <p>
* Onde o número de dígitos é igual a 54 e o número de espaços é igual a 4.
* </p>
* <p>
* <ul>
* <li>Caso a string seja nula, lança uma <code>IllegalArgumentException</code>;
* </li>
* <li>Caso seja vazia, lança uma <code>IllegalArgumentException</code>;</li>
* <li>Caso não esteja no formato especificado, lança uma
* <code>LinhaDigitavelException</code>.</li>
* </ul>
* </p>
*
* @see #checkExistsLinhaDigitavel(String)
*
* @param linhaDigitavel
* string no formato FEBRABAN
* @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 void checkFormatoLinhaDigitavelFormatada(
String linhaDigitavel) throws
IllegalArgumentException, LinhaDigitavelException {
checkExistsLinhaDigitavel(linhaDigitavel);
if (!linhaDigitavel.contains(".")) {
throw new LinhaDigitavelException(MSG_LINHA_INVALIDA
+ " "
+ String.format(MSG_NAO_FORMATADA, linhaDigitavel,
linhaDigitavel.length())
+ " A linha digitável formatada deve conter pontos!");
}
if (!linhaDigitavel.trim().contains(" ")) {
throw new LinhaDigitavelException(MSG_LINHA_INVALIDA
+ " "
+ String.format(MSG_NAO_FORMATADA, linhaDigitavel,
linhaDigitavel.length())
+ " A linha digitável formatada deve conter espaços!");
}
if (!isLinhaDigitavelFormatadaValida(linhaDigitavel)) {
throw new LinhaDigitavelException(MSG_LINHA_INVALIDA
+ " "
+ String.format(MSG_NAO_FORMATADA, linhaDigitavel,
linhaDigitavel.length()));
}
}
/**
* <p>
* Verifica se a linha digitável <strong>não é nula</strong>, <strong>não é
* vazia</strong> e <strong>é numérica</strong>, obedecendo o seguinte
* formato:
*</p>
* <p>
* "<strong>ddddddddddddddddddddddddddddddddddddddddddddddd</strong>"
* </p>
* <p>
* Onde o número de dígitos é igual a 47.
* </p>
* <p>
* <ul>
* <li>Caso a string seja nula, lança uma <code>IllegalArgumentException</code>;
* </li>
* <li>Caso seja vazia, lança uma <code>IllegalArgumentException</code>;</li>
* <li>Caso não esteja no formato especificado, lança uma
* <code>LinhaDigitavelException</code>.</li>
* </ul>
* </p>
*
* @see #checkExistsLinhaDigitavel(String)
*
* @param linhaDigitavel
* @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 void checkFormatoLinhaDigitavelNumerica(
String linhaDigitavel) throws
IllegalArgumentException, LinhaDigitavelException {
checkExistsLinhaDigitavel(linhaDigitavel);
if (!isLinhaDigitavelNumericaValida(linhaDigitavel)) {
throw new LinhaDigitavelException(MSG_LINHA_INVALIDA
+ " "
+ String.format(MSG_STR_NUMERICA, linhaDigitavel,
linhaDigitavel.length())
+ " A linha deve conter apenas 47 dígitos númericos [0-9]!");
}
}
/**
* <p>
* Verifica se o código de barras <strong>não é nulo</strong>, <strong>não é
* vazio</strong> e <strong>é numérico</strong>, obedecendo o seguinte
* formato:
*</p>
* <p>
* "<strong>dddddddddddddddddddddddddddddddddddddddddddd</strong>"
* </p>
* <p>
* Onde o número de dígitos é igual a 44.
* </p>
* <p>
* <ul>
* <li>Caso a string seja nula, lança uma <code>IllegalArgumentException</code>;
* </li>
* <li>Caso seja vazia, lança uma <code>IllegalArgumentException</code>;</li>
* <li>Caso não esteja no formato especificado, lança uma
* <code>LinhaDigitavelException</code>.</li>
* </ul>
* </p>
*
* @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]!");
}
}
/**
* <p>
* Verifica se a linha digitável <strong>não é nula</strong> e <strong>não é
* vazia</strong>. Caso nula lança uma <code>IllegalArgumentException</code>,
* caso vazia lança uma <code>IllegalArgumentException</code>.
* </p>
* <p>
* Considera-se vazia se <code>linhaDigitavel.trim().length()</code> == 0.
* </p>
*
* @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()));
}
}
/**
* <p>
* Verifica se código de barras <strong>não é nulo</strong> e <strong>não é
* vazio</strong>. Caso nula lança uma <code>IllegalArgumentException</code>,
* caso vazia lança uma <code>IllegalArgumentException</code>.
* </p>
* <p>
* Considera-se vazia se <code>linhaDigitavel.trim().length()</code> == 0.
* </p>
*
* @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()));
}
}
}

View File

@ -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;
/**
* <p>
* É um número único para cada Boleto composto dos seguintes campos:
* </p>
* <div>
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" width="100%">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição </th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo</th>
* </tr>
* </thead>
* <tbody style="text-align:center">
* <tr>
* <td>01-03</td>
* <td>3</td>
* <td style="text-align:right;padding-right:10px">9(3)</td>
* <td style="text-align:left;padding-left:10px">Identificação do banco </td>
* </tr>
* <tr>
* <td>04-04 </td>
* <td>1 </td>
* <td style="text-align:right;padding-right:10px">9 </td>
* <td style="text-align:left;padding-left:10px">Código moeda (9-Real) </td>
* </tr>
* <tr>
* <td>05-05 </td>
* <td>1 </td>
* <td style="text-align:right;padding-right:10px">9 </td>
* <td style="text-align:left;padding-left:10px">Dígito verificador do composição de barras (DV) </td>
* </tr>
* <tr>
* <td>06-09 </td>
* <td>4 </td>
* <td style="text-align:right;padding-right:10px">9(4)</td>
* <td style="text-align:left;padding-left:10px">Posições 06 a 09 fator de vencimento</td>
* </tr>
* <tr>
* <td>10-19</td>
* <td>10</td>
* <td style="text-align:right;padding-right:10px">9(08)v99</td>
* <td style="text-align:left;padding-left:10px">Posições 10 a 19 valor nominal do título&nbsp;</td>
* </tr>
* <tr>
* <td>20-44 </td>
* <td>25 </td>
* <td style="text-align:right;padding-right:10px">9(25) </td>
* <td style="text-align:left;padding-left:10px">FixedField livre utilizado de acordo com a especificação interna do banco
* emissor</td>
* </tr>
* </tbody>
* </table>
* </div>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento Mercantil</a>
*
* @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<String> codigoDoBanco;
/**
* Código da moeda usada no boleto.
*/
private FixedField<Integer> codigoDaMoeda;
/**
* Mecanismo de autenticação usado no composição de barras.
*
* @see org.jrimum.vallia.digitoverificador.BoletoCodigoDeBarrasDV
*/
private FixedField<Integer> digitoVerificadorGeral;
/**
* Representa a quantidade de dias decorridos da data base à data de
* vencimento do título.
*
* @see FatorDeVencimento#toFator(Date)
*/
private FixedField<Integer> fatorDeVencimento;
/**
* Valor do título.
*/
private FixedField<BigDecimal> valorNominalDoTitulo;
/**
* @see org.jrimum.bopepo.campolivre.CampoLivre
*/
private FixedField<String> campoLivre;
/**
* <p>
* Cria um Código de Barras a partir do título e campo livre passados.
* </p>
*
* @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<String>("0", 3, Fillers.ZERO_LEFT);
codigoDaMoeda = new FixedField<Integer>(0, 1, Fillers.ZERO_LEFT);
digitoVerificadorGeral = new FixedField<Integer>(0, 1, Fillers.ZERO_LEFT);
fatorDeVencimento = new FixedField<Integer>(0, 4, Fillers.ZERO_LEFT);
valorNominalDoTitulo = new FixedField<BigDecimal>(new BigDecimal(0), 10,DecimalFormat.NUMBER_DD_BR.copy(),Fillers.ZERO_LEFT);
this.campoLivre = new FixedField<String>(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());
}
/**
* <p>
* Representa a quantidade de dias decorridos da data base à data de
* vencimento do título.
* </p>
* <p>
* É 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<EFBFBD>cio
* do processo).
* </p>
* <p>
* 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.
* </p>
*
* @param vencimento
*/
private void calculateAndSetFatorDeVencimento(Date vencimento) {
fatorDeVencimento.setValue(
FatorDeVencimento.toFator(vencimento));
}
/**
* @return the codigoDoBanco
*/
FixedField<String> getCodigoDoBanco() {
return codigoDoBanco;
}
/**
* @param codigoDoBanco the codigoDoBanco to set
*/
void setCodigoDoBanco(FixedField<String> codigoDoBanco) {
this.codigoDoBanco = codigoDoBanco;
}
/**
* @return the codigoDaMoeda
*/
FixedField<Integer> getCodigoDaMoeda() {
return codigoDaMoeda;
}
/**
* @param codigoDaMoeda the codigoDaMoeda to set
*/
void setCodigoDaMoeda(FixedField<Integer> codigoDaMoeda) {
this.codigoDaMoeda = codigoDaMoeda;
}
/**
* @return the digitoVerificadorGeral
*/
FixedField<Integer> getDigitoVerificadorGeral() {
return digitoVerificadorGeral;
}
/**
* @param digitoVerificadorGeral the digitoVerificadorGeral to set
*/
void setDigitoVerificadorGeral(FixedField<Integer> digitoVerificadorGeral) {
this.digitoVerificadorGeral = digitoVerificadorGeral;
}
/**
* @return the fatorDeVencimento
*/
FixedField<Integer> getFatorDeVencimento() {
return fatorDeVencimento;
}
/**
* @param fatorDeVencimento the fatorDeVencimento to set
*/
void setFatorDeVencimento(FixedField<Integer> fatorDeVencimento) {
this.fatorDeVencimento = fatorDeVencimento;
}
/**
* @return the valorNominalDoTitulo
*/
FixedField<BigDecimal> getValorNominalDoTitulo() {
return valorNominalDoTitulo;
}
/**
* @param valorNominalDoTitulo the valorNominalDoTitulo to set
*/
void setValorNominalDoTitulo(FixedField<BigDecimal> valorNominalDoTitulo) {
this.valorNominalDoTitulo = valorNominalDoTitulo;
}
/**
* @return the campoLivre
*/
FixedField<String> getCampoLivre() {
return campoLivre;
}
/**
* @param campoLivre the campoLivre to set
*/
void setCampoLivre(FixedField<String> campoLivre) {
this.campoLivre = campoLivre;
}
@Override
public String toString() {
return Objects.toString(this);
}
}

View File

@ -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;
/**
*
* <p>
* Qualquer exceção gerada durante a geração do Código de Barras gera uma <code>CodigoDeBarrasException</code>. Centraliza e localiza os problemas relativos a geração de um código de barras.
* </p>
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Serviços utilitários do universo bancário, como por exemplo calcular o fator
* de vencimento de boletos.</code>
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento
* Mercantil</a>
*
* @since 0.2
*
* @version 0.2
*/
public class FatorDeVencimento{
/**
* <p>
* Data base para o cálculo do fator de vencimento fixada em 07/10/1997 pela
* FEBRABAN.
* </p>
*/
private static final Calendar BASE_DO_FATOR_DE_VENCIMENTO = new GregorianCalendar(1997, Calendar.OCTOBER, 7);
/**
* <p>
* Data base para o cálculo do fator de vencimento fixada em 07/10/1997 pela
* FEBRABAN.
* </p>
*/
private static final Date DATA_BASE_DO_FATOR_DE_VENCIMENTO = BASE_DO_FATOR_DE_VENCIMENTO.getTime();
/**
*<p>
* Data máxima alcançada pelo fator de vencimento com base fixada em
* 07/10/1997.
* </p>
*/
private static final Date DATA_LIMITE_DO_FATOR_DE_VENCIMENTO = new GregorianCalendar(2025, Calendar.FEBRUARY, 21).getTime();
/**
* <p>
* 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.
* </p>
*
* <p>
* 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.
* </p>
*
* <p>
* Exemplos:
* </p>
* <ul type="circule"> <li>07/10/1997 (Fator = 0);</li> <li>03/07/2000
* (Fator = 1000);</li> <li>05/07/2000 (Fator = 1002);</li> <li>01/05/2002
* (Fator = 1667);</li> <li>21/02/2025 (Fator = 9999).</li> </ul>
*
* <p>
* Funcionamento:
* </p>
*
* <ul type="square"> <li>Caso a data de vencimento seja anterior a data
* base (Teoricamente fator negativo), uma exceção do tipo
* IllegalArgumentException será lançada.</li> <li>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.</li> </ul>
*
* <p>
* <strong>ATENÇÃO</strong>, 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.
* </p>
* @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);
}
}
/**
* <p>
* Transforma um fator de vencimento em um objeto data da forma inversa
* descrita em {@linkplain #toFator(Date)}.
* </p>
*
* @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);
}
/**
* <p>
* 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}.
* </p>
*
* @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)));
}
}
/**
* <p>Lança exceção caso o {@code fator} estja fora do intervalo.</p>
*
* @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.");
}
}
}

View File

@ -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. <br />
* <br />
* Modelo: <br />
* <br />
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" width="90%" id="linhaDigitável"> <thead>
* <tr>
* <th>Posição </th>
* <th>Tamanho</th>
* <th>Conteúdo</th>
* </tr>
* </thead>
* <tr>
* <td>01-03 </td>
* <td>3 </td>
* <td>Identificação do banco </td>
* </tr>
* <tr>
* <td>04-04</td>
* <td>1 </td>
* <td>Código de moeda (9 Real) </td>
* </tr>
* <tr>
* <td>05-09 </td>
* <td>5 </td>
* <td>Cinco primeiras posições do campo livre (posições 20 a 24 do código de
* barras)</td>
* </tr>
* <tr>
* <td>10-10 </td>
* <td>1 </td>
* <td>Dígito verificador do primeiro campo </td>
* </tr>
* <tr>
* <td>11-20 </td>
* <td>10 </td>
* <td>6ª a 15ª posições do campo livre (posições 25 a 34 do código de barras)
* </td>
* </tr>
* <tr>
* <td>21-21 </td>
* <td>1 </td>
* <td>Dígito verificador do segundo campo </td>
* </tr>
* <tr>
* <td>22-31 </td>
* <td>10 </td>
* <td>16ª a 25ª posições do campo livre (posições 35 a 44 do código de barras)
* </td>
* </tr>
* <tr>
* <td>32-32 </td>
* <td>1 </td>
* <td>Dígito verificador do terceiro campo </td>
* </tr>
* <tr>
* <td>33-33 </td>
* <td>1 </td>
* <td>Dígito verificador geral (posição 5 do código de barras) </td>
* </tr>
* <tr>
* <td>34-37 </td>
* <td>4 </td>
* <td>Posições 34 a 37 fator de vencimento (posições 6 a 9 do código debarras)</td>
* </tr>
* <tr>
* <td>37-47 </td>
* <td>10 </td>
* <td>Posições 38 a 47 valor nominal do título(posições 10 a 19 do código de barras) </td>
* </tr>
* </table>
*
* <br />
* <br />
*
* Observações:
*
* <br />
* <ul>
*
* <li>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;</li>
* <li>Quinto campo:
* <ul>
* <br />
* <li>preenchimento com zeros entre o fator de vencimento e o valor até
* completar 14 posições;
* <li>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;</li>
* <li>quando se tratar de bloquetos sem discriminação do valor no código de
* barras, a representação deverá ser com zeros;</li>
* <li>não deverá conter separação por pontos, vírgulas ou espaços;</li>
* </ul>
* <br />
* </li>
* <li>Os dígitos verificadores referentes aos 1º, 2º e 3º campos não são
* representados no código de barras;</li>
* <li>Os dados da linha digitável não se apresentam na mesma ordem do código
* de barras.</li>
*
* </ul>
*
*
* @see org.jrimum.bopepo.CodigoDeBarras
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento Mercantil</a>
*
* @since 0.2
*
* @version 0.2
*/
public class LinhaDigitavel extends BlockOfFields {
/**
*
*/
private static final long serialVersionUID = -6089634012523938802L;
private static Logger log = Logger.getLogger(LinhaDigitavel.class);
/**
*
*/
private static final Integer FIELDS_LENGTH = 5;
/**
* <p>
* Tamanho dos campos mais os espaços entre eles.
* </p>
*/
private static final Integer STRING_LENGTH = 54;
/**
*
*/
private FixedField<InnerCampo1> innerCampo1;
/**
*
*/
private FixedField<InnerCampo2> innerCampo2;
/**
*
*/
private FixedField<InnerCampo3> innerCampo3;
/**
* <p>
* Digito verificador geral.
* </p>
*/
private FixedField<Integer> campo4;
/**
*
*/
private FixedField<InnerCampo5> innerCampo5;
/**
* <p>
* Cria uma linha digitável a partir do código de barras passado.
* </p>
*
* @param codigoDeBarras
*
* @see CodigoDeBarras
*
* @since 0.2
*/
LinhaDigitavel(CodigoDeBarras codigoDeBarras) {
super();
setLength(STRING_LENGTH);
setSize(FIELDS_LENGTH);
if(log.isTraceEnabled())
log.trace("Instanciando Linha Digitável");
if(log.isDebugEnabled())
log.debug("codigoDeBarra instance : "+codigoDeBarras);
innerCampo1 = new FixedField<InnerCampo1>(new InnerCampo1(4,11),11);
innerCampo2 = new FixedField<InnerCampo2>(new InnerCampo2(2,12),12);
innerCampo3 = new FixedField<InnerCampo3>(new InnerCampo3(2,12),12);
campo4 = new FixedField<Integer>(new Integer(0),1);
innerCampo5 = new FixedField<InnerCampo5>(new InnerCampo5(2,14),14);
add(innerCampo1);
add(innerCampo2);
add(innerCampo3);
add(campo4);
add(innerCampo5);
this.innerCampo1.getValue().load(codigoDeBarras);
this.innerCampo2.getValue().load(codigoDeBarras);
this.innerCampo3.getValue().load(codigoDeBarras);
this.campo4.setValue(codigoDeBarras.getDigitoVerificadorGeral().getValue());
if(log.isDebugEnabled())
log.debug("InnerCampo 4 da Linha Digitável : "+this.campo4.getValue());
this.innerCampo5.getValue().load(codigoDeBarras);
if(log.isDebugEnabled() || log.isTraceEnabled())
log.debug("linhaDigitavel instanciada : "+this.write());
}
/**
* Escreve a linha digitável foramatada (com espaço entre os campos).
*
* @see org.jrimum.texgit.type.component.BlockOfFields#write()
*/
@Override
public String write(){
return new StringBuilder(innerCampo1.write()).
append(Strings.WHITE_SPACE).
append(innerCampo2.write()).
append(Strings.WHITE_SPACE).
append(innerCampo3.write()).
append(Strings.WHITE_SPACE).
append(campo4.write()).
append(Strings.WHITE_SPACE).
append(innerCampo5.write()).toString();
}
private abstract class InnerCampo extends BlockOfFields {
/**
*
*/
private static final long serialVersionUID = 6746400538765124943L;
/**
*
*/
protected final BoletoLinhaDigitavelDV calculadorDV = new BoletoLinhaDigitavelDV();
protected InnerCampo(Integer fieldsLength, Integer stringLength) {
super();
setLength(stringLength);
setSize(fieldsLength);
}
}
private abstract class InnerCampoFormatado extends InnerCampo {
/**
*
*/
private static final long serialVersionUID = 3650450185403697045L;
protected InnerCampoFormatado(final Integer fieldsLength, final Integer stringLength) {
super(fieldsLength, stringLength);
}
/**
* <p>
*
* Aplicação do seguinte requisito da FEBRABAN: <br />
* 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.
*
* </p>
*
*
* @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: <br />
* <ul>
* <li>Identificação do banco</li>
* <li>Código de moeda (9 Real)</li>
* <li>Cinco primeiras posições do campo livre (posições 20 a 24 do código
* de barras)</li>
* <li>Dígito verificador do primeiro campo</li>
* </ul>
*
* @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<String>(codigoDeBarras.write().substring(0, 3),3));
add(new FixedField<String>(codigoDeBarras.write().substring(3, 4),1));
add(new FixedField<String>(codigoDeBarras.write().substring(19, 24),5));
add(new FixedField<Integer>(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: <br />
* <ul>
* <li>6ª a 15ª posições do campo livre (posições 25 a 34 do código de
* barras)</li>
* <li>Dígito verificador do segundo campo</li>
* </ul>
*
* @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<String>(codigoDeBarras.write().substring(24, 34),10));
add(new FixedField<Integer>(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: <br />
* <ul>
* <li>16ª a 25ª posições do campo livre (posições 35 a 44 do código de
* barras)</li>
* <li>Dígito verificador do terceiro campo</li>
* </ul>
*
* @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<String>(codigoDeBarras.write().substring(34, 44),10));
add(new FixedField<Integer>(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: <br />
* <ul>
* <li>Posições 34 a 37 fator de vencimento (posições 6 a 9 do código de
* barras)</li>
* <li>Posições 38 a 47 valor nominal do título(posições 10 a 19 do
* código de barras)</li>
* </ul>
*
* @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<String>(codigoDeBarras.write().substring(5, 9),4));
add(new FixedField<String>(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);
}
}

View File

@ -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;
/**
*
* <p>
* Qualquer exceção gerada durante a geração da Linha Digitável gera uma <code>LinhaDigitavelException</code>. Centraliza e localiza os problemas relativos a geração de uma linha digitável.
* </p>
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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);
}
}

View File

@ -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.
*
* <p>
* Utiliza o Banco Bradesco como exemplo, já que possui um implementação simples.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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();
}
}
}

View File

@ -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 <a href="mailto:fabianojustino@gmail.com">Fabiano Carrijo Justino</a>
* @since 0.2
* @version 0.2
*/
abstract class AbstractCLBancoCitibank extends AbstractCampoLivre {
/**
* {@code serialVersionUID = 6080749970883991308L}
*/
private static final long serialVersionUID = 6080749970883991308L;
/**
* <p>
* Cria um campo livre com um determinado número de campos
* </p>
*
* @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).");
}
}

View File

@ -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;
/**
* <p>
* Interface comum para todos os campos livres do BRB - Banco de Brasília que
* venham a existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:contato@douglasramiro.com.br">Douglas Ramiro</a>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Interface comum para todos os campos livres do Banco do Brasil que venham a existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento
* Mercantil</a>
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLBancoDoBrasil extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = -7324315662526104153L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @see AbstractCampoLivre
*
* @param fieldsLength - Número de campos
*/
protected AbstractCLBancoDoBrasil(Integer fieldsLength) {
super(fieldsLength);
}
protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException{
checkNossoNumero(titulo);
checkNumeroDaContaNotNull(titulo);
checkCodigoDoNumeroDaConta(titulo);
switch(titulo.getNossoNumero().length()){
case NN10:
return new CLBancoDoBrasilNN10(titulo);
case NN11:
return new CLBancoDoBrasilNN11(titulo);
case NN17:
if(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta() < 1000000){
return new CLBancoDoBrasilNN17Convenio6(titulo);
}else{
return new CLBancoDoBrasilNN17Convenio7().build(titulo);
}
default:
throw new NotSupportedCampoLivreException(
"Campo livre diponível somente para títulos com nosso número " +
"composto por 10 posições(convênio com 7), 11 posições ou " +
"17 posições(convênio com 6)."
);
}
}
}

View File

@ -0,0 +1,53 @@
/**
*
*/
package org.jrimum.bopepo.campolivre;
import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
/**
* <p>
* Interface comum para todos os campos livres do Banco do Nordeste do
* Brasil que venham a existir.
* </p>
*
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:pporto@gmail.com">Paulo Porto</a>
*
* @since 0.2
*
* @version 0.2
*/
public abstract class AbstractCLBancoDoNordesteDoBrasil extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = -5036970456320987443L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Interface comum para todos os campos livres do Banco Intermedium que venham a
* existir.
* </p>
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:lukas.antunes@virtualsistemas.com.br">Lukas
* Antunes</a>
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLBancoIntermedium extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = -8103863452995430046L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @see AbstractCampoLivre
*
* @param fieldsLength - Número de campos
*/
protected AbstractCLBancoIntermedium(Integer fieldsLength) {
super(fieldsLength);
}
protected static CampoLivre create(Titulo titulo){
return new CLBancoIntermedium(titulo);
}
}

View File

@ -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;
/**
* <p>
* Interface comum para todos os campos livres do Banco Real que venham a existir.
* </p>
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @see AbstractCampoLivre
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLBancoReal extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = -2020155324741631945L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @see AbstractCampoLivre
*
* @param fieldsLength - Número de campos
*/
protected AbstractCLBancoReal(Integer fieldsLength) {
super(fieldsLength);
}
protected static CampoLivre create(Titulo titulo){
return new CLBancoReal(titulo);
}
}

View File

@ -0,0 +1,76 @@
package org.jrimum.bopepo.campolivre;
import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
/**
* <p>
* Interface comum para todos os campos livres do Banco Santander que venham a
* existir.
* </p>
*
* @author <a href="mailto:fernandobgi@gmail.com">Fernando Dias</a> -
* Colaborador com o campo livre {@code CLBancoRuralCobrancaRegistrada}
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLBancoRural extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = -602454445158254612L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @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)."
);
}
}
}

View File

@ -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;
/**
* <p>
* Interface comum para todos os campos livres do Banco Safra que venham a
* existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
*
* @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 <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*/
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<Integer> SISTEMA_CONSTANT_FIELD = new FixedField<Integer>(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);
/**
* <p>
* Cria um campo livre com um determinado número de campos
* </p>
*
* @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.");
}
}
}

View File

@ -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;
/**
*<p>
* Interface comum para todos os campos livres do Bancoob (BANCO COOPERATIVO DO
* BRASIL S.A.) que venham a existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLBancoob extends AbstractCampoLivre {
/**
* {@code serialVersionUID = 6080749970883991308L}
*/
private static final long serialVersionUID = 6080749970883991308L;
/**
* <p>
* Cria um campo livre com um determinado número de campos
* </p>
*
* @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);
}
}

View File

@ -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;
/**
*<p>
* Interface comum para todos os campos livres do Banco Banestes que venham a
* existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="mailto:samuelvalerio@gmail.com">Samuel Valério</a> Valerio
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLBanestes extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = 2713363808443832056L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @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);
}
}

View File

@ -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;
/**
*<p>
* Interface comum para todos os campos livres do Banco Banrisul que venham a
* existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="mailto:samuelvalerio@gmail.com">Samuel Valério</a> Valerio
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLBanrisul extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = -259398499475894938L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @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.");
}
}
/**
* <p>
* Calcula o duplo dígito referente às posições 20 a 42 (módulos 10 e 11).
* </p>
*
*
* @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);
}
/**
* <p>
* Calcula o segundo dígito verificador.
* </p>
*
* @param restoMod11
* @return segundo dígito
*
* @since 0.2
*/
private byte calculeSegundoDV(byte restoMod11) {
final byte segundoDV;
if (restoMod11 == 0)
segundoDV = restoMod11;
else
segundoDV = (byte) (11 - restoMod11);
return segundoDV;
}
/**
* <p>
* Calcula o primeiro dígito verificador.
* </p>
*
* @param restoMod10
* @return primeiro dígito verificador
*
* @since 0.2
*/
private byte calculePrimeiroDV(byte restoMod10) {
final byte primeiroDV;
if (restoMod10 == 0)
primeiroDV = 0;
else
primeiroDV = (byte) (10 - restoMod10);
return primeiroDV;
}
/**
* <p>
* Calcula o resto da soma módulo 10.
* </p>
*
* @param somaMod10
* @return Resto do modúlo 10
*
* @since 0.2
*/
private byte calculeRestoMod10(int somaMod10) {
final byte restoMod10;
if (somaMod10 < 10)
restoMod10 = (byte) somaMod10;
else
restoMod10 = (byte) (somaMod10 % 10);
return restoMod10;
}
/**
* <p>
* Encontra um valor válido para o primeiro dígito.
* </p>
*
* @param primeiroDV
* @return valor válido para o primeiro dígito
*
* @since 0.2
*/
private byte encontreValorValidoParaPrimeiroDV(byte primeiroDV) {
final byte novoValorDoPrimeiroDV;
if (primeiroDV == 9)
novoValorDoPrimeiroDV = 0;
else
novoValorDoPrimeiroDV = (byte) (primeiroDV + 1);
return novoValorDoPrimeiroDV;
}
/**
* <p>
* Calcula o resto do módulo 11.
* </p>
*
* @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();
}
}

View File

@ -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;
/**
*<p>
* Interface comum para todos os campos livres do Banco Bradesco que venham a
* existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento
* Mercantil</a>
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLBradesco extends AbstractCampoLivre {
/**
* {@code serialVersionUID = -1733227746617862639L}
*/
private static final long serialVersionUID = -1733227746617862639L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @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);
}
}

View File

@ -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;
/**
*<p>
* Interface comum para todos os campos livres do Banco Caixa Econômica Federal
* que venham a existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="mailto:rogerio@visaosoft.com.br">Rogério Kleinkauf</a> -
* Colaborador do campo livre SIGCB
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLCaixaEconomicaFederal extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = -4104858478390595830L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @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)
);
}
}
}

View File

@ -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;
/**
* <p>
* Interface comum para todos os campos livres do CECRED - Cooperativa Central de Crédito Urbano que
* venham a existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
*
* @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);
}
}

View File

@ -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;
/**
* <p>
* Interface comum para todos os campos livres do Banco HSBC que venham a
* existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento
* Mercantil</a>
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLHSBC extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = 3179450500491723317L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @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;
}
}
}

View File

@ -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;
/**
*<p>
* Interface comum para todos os campos livres do Banco Itaú que venham a
* existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLItau extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = -3082903872777434482L;
/**
* <p>
* 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).
* </p>
*/
private static final Set<Integer> CARTEIRAS_ESPECIAIS = new HashSet<Integer>(8);
static{
CARTEIRAS_ESPECIAIS.add(106);
CARTEIRAS_ESPECIAIS.add(107);
CARTEIRAS_ESPECIAIS.add(122);
CARTEIRAS_ESPECIAIS.add(142);
CARTEIRAS_ESPECIAIS.add(143);
CARTEIRAS_ESPECIAIS.add(195);
CARTEIRAS_ESPECIAIS.add(196);
CARTEIRAS_ESPECIAIS.add(198);
}
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @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);
}
}
/**
* <p>
* 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
* (<code>calculeDigitoDaPosicao31</code> e <code>calculeDigitoDaPosicao41</code>)
* </p>
* <p>
* O cálculo é feito através do módulo 10.
* </p>
*
* @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);
}
}

View File

@ -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;
/**
*<p>
* Interface comum para todos os campos livres do Banco Mercantil do Brasil que
* venham a existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLMercantilDoBrasil extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = -6705784312499730452L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @see AbstractCampoLivre
*
* @param fieldsLength - Número de campos
*/
protected AbstractCLMercantilDoBrasil(Integer fieldsLength) {
super(fieldsLength);
}
protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException {
return new CLMercantilDoBrasil(titulo);
}
}

View File

@ -0,0 +1,40 @@
package org.jrimum.bopepo.campolivre;
import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
/**
* <p>
* Interface comum para todos os campos livres do Banco Santander que venham a
* existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLSantander extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = 1882819688182515282L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @see AbstractCampoLivre
*
* @param fieldsLength - Número de campos
*/
protected AbstractCLSantander(Integer fieldsLength) {
super(fieldsLength);
}
protected static CampoLivre create(Titulo titulo) {
return new CLBancoSantander(titulo);
}
}

View File

@ -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;
/**
*<p>
* Interface comum para todos os campos livres do Banco Sicredi que venham a
* existir.
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @since 0.2
*
* @version 0.2
*/
abstract class AbstractCLSicredi extends AbstractCampoLivre {
/**
* {@code serialVersionUID = 636384334503863949L}
*/
private static final long serialVersionUID = 636384334503863949L;
/**
* <p>
* Cria um campo livre com um determinado número de campos
* </p>
*
* @see AbstractCampoLivre
*
* @param fieldsLength
* - Número de campos
*/
protected AbstractCLSicredi(Integer fieldsLength) {
super(fieldsLength);
}
protected static CampoLivre create(Titulo titulo) {
return new CLSicredi().build(titulo);
}
}

View File

@ -0,0 +1,70 @@
package org.jrimum.bopepo.campolivre;
import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
import org.jrimum.vallia.digitoverificador.Modulo;
abstract class AbstractCLUnibanco extends AbstractCampoLivre {
/**
*
*/
private static final long serialVersionUID = -6169577742706045367L;
/**
* <p>Cria um campo livre com um determinado número de campos</p>
*
* @see AbstractCampoLivre
*
* @param fieldsLength - Número de campos
*/
protected AbstractCLUnibanco(Integer fieldsLength) {
super(fieldsLength);
}
protected static CampoLivre create(Titulo titulo) throws NotSupportedCampoLivreException {
checkCarteiraNotNull(titulo);
checkRegistroDaCarteiraNotNull(titulo);
switch(titulo.getContaBancaria().getCarteira().getTipoCobranca()){
case SEM_REGISTRO:
return new CLUnibancoCobrancaNaoRegistrada(titulo);
case COM_REGISTRO:
return new CLUnibancoCobrancaRegistrada(titulo);
default:
return null;
}
}
/**
* <p>
* Calcula o dígito verificador para
* <em>referência do cliente (cobrança sem registro)</em> e base para
* cálculo do <em>super dígito do nosso numero (cobrança com registro)</em>.
* </p>
*
* @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;
}
}

View File

@ -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;
/**
* <p>
* 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.
* </p>
*
* <p>
* Uma outra forma de analisar esta classe é sob o prisma de uma Abstract
* Factory.
* </p>
*
* <p>
* <dl>
* <dt><strong>Field Livre:</strong>
* <dd>É um espaço reservado no código de barras e a sua implementação varia de
* banco para banco.</dd></dt>
* </dl>
* </p>
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="mailto:lukas.antunes@virtualsistemas.com.br">Lukas
* Antunes</a> - Colaborador com o banco Intermedium (077)
* @author <a href="mailto:fernandobgi@gmail.com">Fernando Dias</a> -
* Colaborador com o banco Rural (453)
* @author <a href="mailto:pporto@gmail.com">Paulo Porto</a> -
* Colaborador com o Banco do Nordeste do Brasil (004).
* @author <a href="mailto:fabianojustino@gmail.com">Fabiano Carrijo</a> -
* Colaborador com o Banco Citibank (756).
* @author <a href="mailto:contato@douglasramiro.com.br">Douglas Ramiro</a> -
* 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);
}
}
/**
* <p>
* 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.
* </p>
*
* @param titulo
*
* @return a instância pronta para escrita
*
* @since 0.2
*/
protected final CampoLivre build(Titulo titulo) {
checkValues(titulo);
addFields(titulo);
return this;
}
/**
* <p>
* 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.
* </p>
*
* @param titulo
*
* @since 0.2
*/
protected abstract void checkValues(Titulo titulo);
/**
* <p>
* Usado pelo método {@link AbstractCampoLivre#build(Titulo)}, adiciona os campos do campo
* livre deixando-o pronto para escrita.
* </p>
*
* @param titulo
*
* @since 0.2
*/
protected abstract void addFields(Titulo titulo);
/**
* <p>
* 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.
* </p>
*
* @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.
*/
/**
* <p>
* Verifica se o título não é nulo, senão lança uma {@code
* IllegalArgumentException}.
* </p>
*
* @param titulo
*
* @since 0.2
*/
private static void checkTituloNotNull(Titulo titulo){
Objects.checkNotNull(titulo, "Título não pode ser nulo!");
}
/**
* <p>
* Verifica se a conta bancária do título não é nula, senão lança uma
* {@code IllegalArgumentException}.
* </p>
*
* @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!");
}
/**
* <p>
* Verifica se o banco da conta bancária do título não é nulo, senão lança
* uma {@code IllegalArgumentException}.
* </p>
*
* @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.
*/
/**
* <p>
* Verifica se a carteira da conta bancária do título não é nula, senão
* lança uma {@code IllegalArgumentException}.
* </p>
*
* @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!");
}
/**
* <p>
* Verifica se o tipo da carteira da conta bancária do título não é nulo,
* senão lança uma {@code IllegalArgumentException}.
* </p>
*
* @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!");
}
/**
* <p>
* 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}.
* </p>
*
* @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()));
}
/**
* <p>
* 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}.
* </p>
*
* @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));
}
/**
* <p>
* Verifica se a agência da conta bancária do título não é nula, senão lança
* uma {@code IllegalArgumentException}.
* </p>
*
* @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!");
}
/**
* <p>
* 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}.
* </p>
*
* @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()));
}
/**
* <p>
* 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}.
* </p>
*
* @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));
}
/**
* <p>
* 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}.
* </p>
*
* @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()));
}
/**
* <p>
* Verifica se o número da conta da conta bancária do título não é nulo,
* senão lança uma {@code IllegalArgumentException}.
* </p>
*
* @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!");
}
/**
* <p>
* 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}.
* </p>
*
* @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()));
}
/**
* <p>
* 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}.
* </p>
*
* @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));
}
/**
* <p>
* 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}.
* </p>
*
* @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()));
}
/**
* <p>
* 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}.
* </p>
*
* @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()));
}
/**
* <p>
* Verifica se o nosso número do título tem o tamanho determinado, caso
* contrário lança uma {@code IllegalArgumentException} com a mensagem
* <tt>"Tamanho do nosso número [%s] diferente do esperado [%s]!"</tt>.
* </p>
*
* @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));
}
/**
* <p>
* 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.
* </p>
*
* @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);
}
/**
* <p>
* 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}.
* </p>
*
* @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()));
}
/**
* <p>
* 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
* <tt>"Tamanho [%s] do dígito do nosso número [\"%s\"] diferente do esperado [%s]!"</tt>.
* </p>
*
* @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));
}
/**
* <p>
* 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.
* </p>
*
* @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);
}
/**
* <p>
* Verifica se o valor do título não é nulo e é positivo, caso contrário lança uma
* {@code IllegalArgumentException}.
* </p>
*
* @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()));
}
/**
* <p>
* 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}.
* </p>
*
* @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));
}
/**
* <p>
* 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}.
* </p>
*
* @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);
}
}

View File

@ -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 <a href="mailto:fabianojustino@gmail.com">Fabiano Carrijo Justino</a>
* @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!");
}
}

View File

@ -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;
/**
* <p>
* O campo livre do BRB - Banco de Brasília deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td >20-22</td>
* <td >3</td>
* <td >9(3)</td>
* <td style="text-align:left;padding-left:10">fixo "000" ZEROS</td>
* <td style="text-align:left;padding-left:10">ZEROS</td>
* </tr>
* <tr>
* <td >23-25</td>
* <td >3</td>
* <td >9(3)</td>
* <td style="text-align:left;padding-left:10">Agência Cedente (Sem o dígito verificador, completar com zeros a esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Código da Agência (sem dígito)</td>
* </tr>
* <tr>
* <td >26-32</td>
* <td >7</td>
* <td >&nbsp;9(7)</td>
* <td style="text-align:left;padding-left:10">Conta do Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Conta do Cedente (sem dígito)</td>
* </tr>
* <tr>
* <td >33-33</td>
* <td >1</td>
* <td >9</td>
* <td style="text-align:left;padding-left:10">Carteira | Modalidade/ Categoria</td>
* <td style="text-align:left;padding-left:10">Categoria - referente ao tipo de cobrança 1-sem registro impressão local, 2-com registro impressão local</td>
* </tr>
* <tr>
* <td >34-39</td>
* <td >6</td>
* <td >&nbsp;9(6)</td>
* <td style="text-align:left;padding-left:10">Número do Nosso Número(Sem o digito verificador)</td>
* <td style="text-align:left;padding-left:10">Número sequencial</td>
* </tr>
* <tr>
* <td >40-42</td>
* <td >3</td>
* <td >&nbsp;9(3)</td>
* <td style="text-align:left;padding-left:10">Código BACEN(Sem o digito verificador)</td>
* <td style="text-align:left;padding-left:10">Código do Banco- 070 - BRB</td>
* </tr>
* <tr>
* <td >43-43</td>
* <td >1</td>
* <td >9</td>
* <td style="text-align:left;padding-left:10">Dígito verificador 1 da CHAVE ASBACE</td>
* <td style="text-align:left;padding-left:10">DV1</td>
* </tr>
* <tr>
* <td >44-44</td>
* <td >1</td>
* <td >9</td>
* <td style="text-align:left;padding-left:10">Dígito verificador 2 da CHAVE ASBACE</td>
* <td style="text-align:left;padding-left:10">DV2</td>
* </tr>
* </table>
*
*
* @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:contato@douglasramiro.com.br">Douglas Ramiro</a>
*
* @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;
/**
* <p>
* Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
* </p>
*
* @since 0.2
*/
protected CLBancoDeBrasilia() {
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) {
checkAgenciaNotNull(titulo);
checkCodigoDaAgencia(titulo);
checkCodigoDaAgenciaMenorOuIgualQue(titulo, 999);
checkNumeroDaContaNotNull(titulo);
checkCodigoDoNumeroDaConta(titulo);
checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 9999999);
checkNossoNumero(titulo);
checkTamanhoDoNossoNumero(titulo, 6);
checkCarteiraNotNull(titulo);
checkCodigoDaCarteira(titulo);
checkCarteiraComOuSemRegistro(titulo);
}
/**
* {@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<String>(CAMPO_ZERADO_VALUE, CAMPO_ZERADO_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigo(), BANCO_LENGTH, Fillers.ZERO_LEFT));
calculeDigitosNecessariosDaChaveASBACE();
this.add(new FixedField<Integer>(this.digitoVerificador1DaChaveASBACE, DIGITO_CHAVE_ASBACE_LENGTH));
this.add(new FixedField<Integer>(this.digitoVerificador2DaChaveASBACE, DIGITO_CHAVE_ASBACE_LENGTH));
disponibilizeDigitosDaChaveAsbaceNeste(titulo);
}
/**
* Calcula os dos dígitos verificadores da CHAVE ASBACE.
*
* @since 0.2
*/
private void calculeDigitosNecessariosDaChaveASBACE() {
calculeChaveAsbaceDigito1();
calculeChaveAsbaceDigito2();
}
/**
* Calcula o primeiro dígito da CHAVE ASBECE independente do segundo, mas o
* segundo DV depende deste e quando o segundo é calculado este pode,
* talvez, ser alterado.
*
* @since 0.2
*/
private void calculeChaveAsbaceDigito1(){
final String chaveAasbace = writeFields();
int dig = Modulo.calculeMod10(chaveAasbace, 1, 2);
if(dig == 0){
this.digitoVerificador1DaChaveASBACE = dig;
}else{
this.digitoVerificador1DaChaveASBACE = 10 - dig;
}
}
/**
* Calcula o segundo dígito da CHAVE ASBECE, recursivamente dependendo do valor do primeiro DV.
*
* @since 0.2
*/
private void calculeChaveAsbaceDigito2(){
final String chaveAasbaceComDv1 = writeFields()+this.digitoVerificador1DaChaveASBACE;
int digito2 = Modulo.calculeMod11(chaveAasbaceComDv1, 2, 7);
if(digito2 == 0){
this.digitoVerificador2DaChaveASBACE = digito2;
}else{
if(digito2 != 1){
this.digitoVerificador2DaChaveASBACE = 11 - digito2;
}else{
int digito1Recalculado = this.digitoVerificador1DaChaveASBACE + 1;
this.digitoVerificador1DaChaveASBACE = (digito1Recalculado == 10) ? 0 : digito1Recalculado;
calculeChaveAsbaceDigito2();
}
}
}
/**
* Disponibiliza no objeto titulo os dígitos da CHAVE ASBACE = mesmo que o
* campo livre menos os dois ultimos digitos.
*
* @param titulo
*
* @since 0.2
*/
private void disponibilizeDigitosDaChaveAsbaceNeste(Titulo titulo) {
ParametrosBancariosMap parametrosBancarios = titulo.getParametrosBancarios();
if(parametrosBancarios == null){
parametrosBancarios = new ParametrosBancariosMap();
}
parametrosBancarios.adicione(CHAVE_ASBACE_DIGITO1, this.digitoVerificador1DaChaveASBACE);
parametrosBancarios.adicione(CHAVE_ASBACE_DIGITO2, this.digitoVerificador2DaChaveASBACE);
titulo.setParametrosBancarios(parametrosBancarios);
}
/**
* <p>
* 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}.
* </p>
*
* @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()));
}
}

View File

@ -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:
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" width="60%" id="campolivre">
* <tr> <thead>
* <th >Posição </th>
* <th >Tamanho</th>
* <th >Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </thead> </tr>
* <tr>
* <td >20-25</td>
* <td >6</td>
* <td >9(6) </td>
* <td >ZEROS</td>
* <td >ZEROS</td>
* </tr>
* <tr>
* <td >26-32</td>
* <td >7</td>
* <td >9(7) </td>
* <td >Conta do cedente (sem dígito)</td>
* <td >Convênio (sem dígito)</td>
* </tr>
* <tr>
* <td >33-42</td>
* <td >10</td>
* <td >9(10) </td>
* <td >Nosso Número</td>
* <td >Nosso Número</td>
* </tr>
* <tr>
* <td >43-44</td>
* <td >2</td>
* <td >9(2) </td>
* <td >Carteira</td>
* <td >Carteira</td>
* </tr>
* </table>
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento
* Mercantil</a>
*
* @since JRimum 1.0
*
* @version 0.2
*/
class CLBancoDoBrasilNN10 extends AbstractCLBancoDoBrasil {
/**
*
*/
private static final long serialVersionUID = -7675528811239346517L;
/**
*
*/
private static final Integer FIELDS_LENGTH = 4;
/**
* <p>
* 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.
* </p>
* @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<String>("", 6, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(conta.getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(nossoNumero, 10, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(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!");
}
}

View File

@ -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:
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" width="60%" id="campolivre">
* <tr> <thead>
* <th>Posição </th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </thead> </tr>
* <tr>
* <td>20-30</td>
* <td>11</td>
* <td>9(11) </td>
* <td>Nosso número (sem dígito)</td>
* <td>Nosso número (sem dígito)</td>
* </tr>
* <tr>
* <td>31-34</td>
* <td>4</td>
* <td>9(4) </td>
* <td>Código da agência (sem dígito)</td>
* <td>Código da Agência (sem dígito)</td>
* </tr>
* <tr>
* <td>35-42</td>
* <td>8</td>
* <td>9(8) </td>
* <td>Código da conta (sem dígito)</td>
* <td>Convênio (sem dígito)</td>
* </tr>
* <tr>
* <td >43-44</td>
* <td >2</td>
* <td >9(2) </td>
* <td >Carteira</td>
* <td >Carteira</td>
* </tr>
* </table>
*
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento
* Mercantil</a>
*
* @since 0.2
*
* @version 0.2
*/
class CLBancoDoBrasilNN11 extends AbstractCLBancoDoBrasil {
/**
*
*/
private static final long serialVersionUID = -4859699102593834115L;
/**
*
*/
private static final Integer FIELDS_LENGTH = 4;
/**
* <p>
* 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.
* </p>
* @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<String>(nossoNumero, 11, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(conta.getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(conta.getNumeroDaConta().getCodigoDaConta(), 8, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(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!");
}
}

View File

@ -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:
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: * collapse" bordercolor="#111111" width="60%" id="campolivre">
* <tr>
* <thead>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </thead>
* </tr>
* <tr>
* <td>20-25</td>
* <td>6</td>
* <td>9(6)</td>
* <td>Conta do cedente (sem dígito)</td>
* <td>Convênio (sem dígito)</td>
* </tr>
* <tr>
* <td>26-42</td>
* <td>17</td>
* <td>9(17)</td>
* <td>Nosso Número (sem dígito)</td>
* <td>Nosso Número (sem dígito)</td>
* </tr>
* <tr>
* <td>43-44</td>
* <td>2</td>
* <td>9(2)</td>
* <td>Fixo 21 (serviço)</td>
* <td>Fixo 21 (serviço)</td>
* </tr>
* </table>
*
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento
* Mercantil</a>
*
* @since 0.2
*
* @version 0.2
*/
class CLBancoDoBrasilNN17Convenio6 extends AbstractCLBancoDoBrasil{
/**
*
*/
private static final long serialVersionUID = 3035422743112225831L;
/**
*
*/
private static final int SERVICO = 21;
/**
*
*/
private static final Integer FIELDS_LENGTH = 3;
/**
* <p>
* 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.
* </p>
* @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<Integer>(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(nossoNumero, 17, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(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!");
}
}

View File

@ -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 <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
*
* @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<Integer> CONSTANT_FIELD = new FixedField<Integer>(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);
/**
* <p>
* Cria um campo livre instanciando o número de fields ({@code
* FIELDS_LENGTH}) deste campo.
* </p>
*
* @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<String>(titulo.getNossoNumero(),NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT));
}
}

View File

@ -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;
/**
* <p>
* O campo livre do Banco do Nordeste deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td>20-23</td>
* <td>4</td>
* <td>9(4)</td>
* <td style="text-align:left;padding-left:10">Agência Cedente (sem o digito verificador, completar com zeros à esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Código da Agência (sem dígito)</td>
* </tr>
* <tr>
* <td>24-30</td>
* <td>7</td>
* <td>9(7)</td>
* <td style="text-align:left;padding-left:10">Conta do Cedente (sem o dígito verificador, completar com zeros à esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Conta do Cedente (sem dígito)</td>
* </tr>
* <tr>
* <td>31-31</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10">Dígito da Conta do Cedente</td>
* <td style="text-align:left;padding-left:10">Dígito da Conta do Cedente</td>
* </tr>
* <tr>
* <td>32-38</td>
* <td>7</td>
* <td>9(7)</td>
* <td style="text-align:left;padding-left:10">Nosso Número (sem o dígito verificador, completar com zeros à esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Nosso Número (No. Bancário) (sem dígito)</td>
* </tr>
* <tr>
* <td>39-39</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10">Dígito do Nosso Número</td>
* <td style="text-align:left;padding-left:10">Dígito do Nosso Número (No. Bancário)</td>
* </tr>
* <tr>
* <td>40-41</td>
* <td>2</td>
* <td>9(2)</td>
* <td style="text-align:left;padding-left:10">Carteira (utilizar o código da carteira)</td>
* <td style="text-align:left;padding-left:10">Carteira (Tipo de Operação)</td>
* </tr>
* <tr>
* <td>42-44</td>
* <td>3</td>
* <td>9(3)</td>
* <td style="text-align:left;padding-left:10">Preenchar campo com ZEROS.</td>
* <td style="text-align:left;padding-left:10">Campo zerado</td>
* </tr>
* </table>
* <br/>
*
* @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:pporto@gmail.com">Paulo Porto</a>
*
* @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);
/**
* <p>
* Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
* </p>
*
* @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<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), DIGITO_CONTA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getDigitoDoNossoNumero(), DIGITO_NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(CAMPO_ZERADO_VALUE, CAMPO_ZERADO_LENGTH, Fillers.ZERO_LEFT));
}
}

View File

@ -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:
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" width="60%" id="campolivre">
* <tr> <thead>
* <th >Posição </th>
* <th >Tamanho</th>
* <th >Picture</th>
* <th>Conteúdo</th>
* </thead> </tr>
* <tr>
* <td >20-23</td>
* <td >4</td>
* <td >4 </td>
* <td >Código da agência</td>
* </tr>
* <tr>
* <td >24-25</td>
* <td >2</td>
* <td >2 </td>
* <td >Constante = 70</td>
* </tr>
* <tr>
* <td >26-36</td>
* <td >11</td>
* <td >11 </td>
* <td >Nosso número sem o dígito</td>
* </tr>
* <tr>
* <td >37-42</td>
*<td >6</td>
* <td >6 </td>
* <td >Código da conta</td>
* </tr>
* <tr>
* <td >43-43</td>
* <td >1</td>
* <td >1 </td>
* <td >Dígito da conta</td>
* </tr>
* <tr>
* <td >44-44</td>
* <td >1</td>
* <td >1 </td>
* <td >Constante = 0</td>
* </tr>
* </table>
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:lukas.antunes@virtualsistemas.com.br">Lukas Antunes</a>
*
* @since 0.2
*
* @version 0.2
*/
class CLBancoIntermedium extends AbstractCLBancoIntermedium {
/**
*
*/
private static final long serialVersionUID = 858563493013156459L;
/**
*
*/
private static final Integer FIELDS_LENGTH = 6;
private static final Integer CONSTANTE_70 = Integer.valueOf(70);
private static final Integer CONSTANTE_0 = Integer.valueOf(0);
/**
* <p>
* Dado um título, cria um campo livre para banco Intermedium (077).
* </p>
*
* @param titulo - título com as informações para geração do campo livre
*/
CLBancoIntermedium(Titulo titulo) {
super(FIELDS_LENGTH);
this.add(new FixedField<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(CONSTANTE_70, 2));
this.add(new FixedField<String>(titulo.getNossoNumero(), 11, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>( titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT));
this.add(new FixedField<String>( titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), 1, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(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!");
}
}

View File

@ -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;
/**
* <p><strong>*** COBRANÇA SEM REGISTRO ***</strong></p>
* O campo livre do Banco Real deve seguir esta forma:
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" id="campolivre">
* <tr> <thead>
* <th >Posição </th>
* <th >Tamanho</th>
* <th >Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </thead> </tr>
* <tr>
* <td>20-23</td>
* <td>4</td>
* <td>9(4)</td>
* <td>Código da agência (sem dígito)</td>
* <td>Agência - Código da agência do cedente</td>
* </tr>
* <tr>
* <td>24-30</td>
* <td>7</td>
* <td>9(7) </td>
* <td>Código da conta (sem dígito)</td>
* <td>Conta - Número da conta do cedente</td>
* </tr>
* <tr>
* <td>31-31</td>
* <td>1</td>
* <td>9(1) </td>
* <td>Dígito verificador</td>
* <td>Digitão - Dígito de cobrança</td>
* </tr>
* <tr>
* <td>32-44</td>
* <td>13</td>
* <td>9(13) </td>
* <td>Número do título(máximo de 13 posições numéricas)</td>
* <td>Número do banco - Número do título no banco</td>
* </tr>
* </table>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @since 0.2
*
* @version 0.2
*/
class CLBancoReal extends AbstractCLBancoReal {
/**
*
*/
private static final long serialVersionUID = -5294809022535972391L;
private static final Modulo modulo10 = new Modulo(TipoDeModulo.MODULO10);
/**
* Tamanho deste campo.
*/
private static final Integer FIELDS_LENGTH = 4;
/**
* <p>
* Dado um título, cria um campo livre para o padrão do Banco Real.
* </p>
* @param titulo título com as informações para geração do campo livre
*/
CLBancoReal(Titulo titulo) {
super(FIELDS_LENGTH);
this.add(new FixedField<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(calculeDigitoDaPosicao31(titulo.getNossoNumero(), titulo.getContaBancaria().getAgencia().getCodigo(), titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta()), 1, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(Strings.eliminateSymbols(titulo.getNossoNumero()), 13, Fillers.ZERO_LEFT));
}
/**
* <p>
* Calcula o Dígito da posição <tt>31</tt> deste campo livre (<code>CLBancoReal</code>).
* </p>
*
* <p>
* No cálculo do dígito da posição 31 são considerados, para a obtenção do
* dígito, os dados <em><tt>{[NOSSO NÚMERO],[AGÊNCIA],[CONTA]}</tt></em> calculado pelos
* critérios do Módulo 10.
* </p>
* <h5>Exemplo:</h5>
*
* <div align="center"> <table border="1" cellpadding="3" cellspacing="0">
* <tr>
* <td>Nosso Número</td>
* <td>1234567890123</td>
* </tr>
* <tr>
* <td>Agência</td>
* <td>4444</td>
* </tr>
* <tr>
* <td>Conta Corrente</td>
* <td>7777777</td>
* </tr>
* </table></div>
*
* @param nossoNumero
* @param agencia
* @param contaCorrente
* @return Dígito verficador calculado
*
* @see org.jrimum.vallia.digitoverificador.Modulo
*
* @since 0.2
*/
private String calculeDigitoDaPosicao31(String nossoNumero,
Integer agencia, Integer contaCorrente) {
StringBuilder formula = new StringBuilder();
String dV = null;
formula.append(Fillers.ZERO_LEFT.fill(nossoNumero, 13));
formula.append(Fillers.ZERO_LEFT.fill(agencia, 4));
formula.append(Fillers.ZERO_LEFT.fill(contaCorrente, 7));
int restoDivisao = modulo10.calcule(formula.toString());
int restoSubtracao = (10 - restoDivisao);
if (restoSubtracao == 10) {
dV = "0";
} else {
dV = "" + restoSubtracao;
}
return dV;
}
@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!");
}
}

View File

@ -0,0 +1,120 @@
package org.jrimum.bopepo.campolivre;
import static org.jrimum.bopepo.parametro.ParametroBancoRural.CODIGO_REDUZIDO;
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;
/**
* <p>
* O campo livre do Banco Rural, para cobrança não registrada, deve seguir esta
* forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td>20-20</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10">Tipo de Cobrança - 9</td>
* <td style="text-align:left;padding-left:10">Tipo de Cobrança - 9</td>
* </tr>
* <tr>
* <td>21-23</td>
* <td>3</td>
* <td>9(3)</td>
* <td style="text-align:left;padding-left:10">Código da Agência</td>
* <td style="text-align:left;padding-left:10">Agência Cedente</td>
* </tr>
* <tr>
* <td>24-26</td>
* <td>3</td>
* <td>9(3)</td>
* <td style="text-align:left;padding-left:10">Código Reduzido do Cliente</td>
* <td style="text-align:left;padding-left:10">O código reduzido deverá ser
* solicitado ao gerente da agência.</td>
* </tr>
* <tr>
* <td>27-41</td>
* <td>15</td>
* <td>9(15)</td>
* <td style="text-align:left;padding-left:10">Seu número</td>
* <td style="text-align:left;padding-left:10">Nosso número</td>
* </tr>
* <tr>
* <td>42-44</td>
* <td>3</td>
* <td>9(3)</td>
* <td style="text-align:left;padding-left:10">Constante "000"</td>
* <td style="text-align:left;padding-left:10">Zeros</td>
* </tr>
* </tbody>
* </table>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*/
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";
/**
* <p>
* Dado um título, cria um campo livre para cobrança não registrada do Banco
* Rural.
* </p>
*
* @param titulo
* - Título com as informações para geração do campo livre
*/
CLBancoRuralCobrancaNaoRegistrada(Titulo titulo) {
super(FIELDS_LENGTH);
this.add( new FixedField<Integer>( TIPO_COBRANCA , 1 ) );
this.add( new FixedField<Integer>( titulo.getContaBancaria().getAgencia().getCodigo(), 3 , Fillers.ZERO_LEFT ) );
this.add( new FixedField<Integer>(titulo.getParametrosBancarios().<Integer>getValor(CODIGO_REDUZIDO), 3, Fillers.ZERO_LEFT ) );
this.add( new FixedField<String>( titulo.getNossoNumero(), 15 , Fillers.ZERO_LEFT ) );
this.add( new FixedField<String>( 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!");
}
}

View File

@ -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;
/**
* <p>
* O campo livre do Banco Rural, para cobrança sem registro (apólice de seguro
* com I.O.S.), deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td>20-20</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10px">Tipo de Cobrança - 4</td>
* <td style="text-align:left;padding-left:10">Tipo de Cobrança - 4</td>
* </tr>
* <tr>
* <td>21-23</td>
* <td>3</td>
* <td>9(3)</td>
* <td style="text-align:left;padding-left:10">Código da Agência</td>
* <td style="text-align:left;padding-left:10">Agência Cedente</td>
* </tr>
* <tr>
* <td>24-26</td>
* <td>3</td>
* <td>9(3)</td>
* <td style="text-align:left;padding-left:10">Código Reduzido do Cliente</td>
* <td style="text-align:left;padding-left:10">O código reduzido deverá ser
* solicitado ao gerente da agência.</td>
* </tr>
* <tr>
* <td>27-36</td>
* <td>10</td>
* <td>9(10)</td>
* <td style="text-align:left;padding-left:10">Seu número</td>
* <td style="text-align:left;padding-left:10">Nosso número</td>
* </tr>
* <tr>
* <td>37-37</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10">Dígito seu Número</td>
* <td style="text-align:left;padding-left:10">Dígito nosso número</td>
* </tr>
* <tr>
* <td>42-44</td>
* <td>3</td>
* <td>9(3)</td>
* <td style="text-align:left;padding-left:10">Valor I.O.S. 05 (cinco) inteiros,
* 02 (duas) decimais</td>
* <td style="text-align:left;padding-left:10">Valor do imposto</td>
* </tr>
* </tbody>
* </table>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*/
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);
/**
* <p>
* Dado um título, cria um campo livre para cobrança sem registro apólice de seguro com I.O.S..
* </p>
*
* @param titulo
* - título com as informações para geração do campo livre
*/
CLBancoRuralCobrancaNaoRegistradaSeguradora(Titulo titulo) {
super(FIELDS_LENGTH);
this.add( new FixedField<Integer>( TIPO_COBRANCA , 1 ) );
this.add( new FixedField<Integer>( titulo.getContaBancaria().getAgencia().getCodigo(), 3 , Fillers.ZERO_LEFT ) );
this.add( new FixedField<Integer>(titulo.getParametrosBancarios().<Integer>getValor(CODIGO_REDUZIDO), 3, Fillers.ZERO_LEFT ) );
this.add( new FixedField<String>( titulo.getNossoNumero(), 10 , Fillers.ZERO_LEFT ) );
this.add( new FixedField<String>( titulo.getDigitoDoNossoNumero(), 1 , Fillers.ZERO_LEFT ) );
this.add( new FixedField<BigDecimal>(titulo.getParametrosBancarios().<BigDecimal>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!");
}
}

View File

@ -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;
/**
* <p>
* O campo livre do Banco Rural, para cobrança registrada, deve seguir esta
* forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td>20-20</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10px">Tipo de Cobrança - 0</td>
* <td style="text-align:left;padding-left:10">Tipo de Cobrança - 0</td>
* </tr>
* <tr>
* <td>21-23</td>
* <td>3</td>
* <td>9(3)</td>
* <td style="text-align:left;padding-left:10">Código da Agência</td>
* <td style="text-align:left;padding-left:10">Agência Cedente</td>
* </tr>
* <tr>
* <td>24-32</td>
* <td>9</td>
* <td>9(9)</td>
* <td style="text-align:left;padding-left:10">Conta Corrente</td>
* <td style="text-align:left;padding-left:10">Conta do Cedente</td>
* </tr>
* <tr>
* <td>33-33</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10">Dígito da Conta Corrente</td>
* <td style="text-align:left;padding-left:10">Dígito da Conta do Cedente</td>
* </tr>
* <tr>
* <td>34-40</td>
* <td>7</td>
* <td>9(7)</td>
* <td style="text-align:left;padding-left:10">Nosso Número</td>
* <td style="text-align:left;padding-left:10">Nosso Número</td>
* </tr>
* <tr>
* <td>41-41</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10">Dígito do Nosso Número</td>
* <td style="text-align:left;padding-left:10">Dígito do Nosso Número</td>
* </tr>
* <tr>
* <td>42-44</td>
* <td>3</td>
* <td>9(3)</td>
* <td style="text-align:left;padding-left:10">Constante "000"</td>
* <td style="text-align:left;padding-left:10">Zeros</td>
* </tr>
* </tbody>
* </table>
*
* @author <a href="mailto:fernandobgi@gmail.com">Fernando Dias</a>
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
*/
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";
/**
* <p>
* Dado um título, cria um campo livre para cobrança registrada do Banco
* Rural.
* </p>
*
* @param titulo
* - título com as informações para geração do campo livre
*/
CLBancoRuralCobrancaRegistrada(Titulo titulo) {
super(FIELDS_LENGTH);
this.add( new FixedField<Integer>( TIPO_COBRANCA , 1 ) );
this.add( new FixedField<Integer>( titulo.getContaBancaria().getAgencia().getCodigo(), 3 , Fillers.ZERO_LEFT ) );
this.add( new FixedField<Integer>( titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 9, Fillers.ZERO_LEFT ) );
this.add( new FixedField<String>( titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), 1 ) );
this.add( new FixedField<String>( titulo.getNossoNumero(), 7 , Fillers.ZERO_LEFT ) );
this.add( new FixedField<String>( titulo.getDigitoDoNossoNumero(), 1 ) );
this.add( new FixedField<String>( 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!");
}
}

View File

@ -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;
/**
* <p>
* O campo livre do Bradesco deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td >20-20</td>
* <td >1</td>
* <td >9(1)</td>
* <td style="text-align:left;padding-left:10">Sistema = constante 7</td>
* <td style="text-align:left;padding-left:10">Valor fixo 7</td>
* </tr>
* <tr>
* <td >21-26</td>
* <td >6</td>
* <td >9(6)</td>
* <td style="text-align:left;padding-left:10">Fixo atribuído pelo banco (*)
* Identificação numérica com cinco números + um dígito verificador</td>
* <td style="text-align:left;padding-left:10">Número da conta + DV</td>
* </tr>
* <tr>
* <td >27-43</td>
* <td >17</td>
* <td >&nbsp;9(17)</td>
* <td style="text-align:left;padding-left:10">Livre do cliente - Variável
* conforme necessidade do cliente</td>
* <td style="text-align:left;padding-left:10">Nosso Número (sem dígito)</td>
* </tr>
* <tr>
* <td >44-44</td>
* <td >1</td>
* <td >9</td>
* <td style="text-align:left;padding-left:10">Tipo cobrança = constante 4 -
* Express Emitido pelo Cliente</td>
* <td style="text-align:left;padding-left:10">Valor fixo 4</td>
* </tr>
* </table>
*
* @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), CONTA_DIGITO_LENGTH));
this.add(new FixedField<String>(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH));
this.add(new FixedField<Integer>(TipoDeCobranca.EXPRESS_BOLETO_EMITIDO_PELO_CLIENTE.codigo(), TIPO_COBRANCA_FIELD_LENGTH));
}
}

View File

@ -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;
/**
* <p>
* O campo livre do Bradesco deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td >20-20</td>
* <td >1</td>
* <td >9(1)</td>
* <td style="text-align:left;padding-left:10">Sistema = constante 7</td>
* <td style="text-align:left;padding-left:10">Valor fixo 7</td>
* </tr>
* <tr>
* <td >21-34</td>
* <td >14</td>
* <td >9(14)</td>
* <td style="text-align:left;padding-left:10">Código do cliente = Agência +
* Conta</td>
* <td style="text-align:left;padding-left:10">Código do cliente = (Ag[4] +
* dv[1]) + (Cc[8] + dv[1])</td>
* </tr>
* <tr>
* <td >35-43</td>
* <td >9</td>
* <td >&nbsp;9(9)</td>
* <td style="text-align:left;padding-left:10">Número do Nosso Número(Sem o
* digito verificador)</td>
* <td style="text-align:left;padding-left:10">Nosso Número do título exatamente
* com 9 dígitos (sem dígito verificador)</td>
* </tr>
* <tr>
* <td >44-44</td>
* <td >1</td>
* <td >9</td>
* <td style="text-align:left;padding-left:10">Tipo cobrança = constante 2 -
* Eletrônica Emitido pelo Cliente</td>
* <td style="text-align:left;padding-left:10">Valor fixo 2</td>
* </tr>
* </table>
*
* @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @since 0.2
*
* @version 0.2
*/
class CLBancoSafraCobrancaRegistrada extends AbstractCLBancoSafra {
/**
* {@code serialVersionUID = -4532989921797507161L}
*/
private static final long serialVersionUID = -4532989921797507161L;
/**
* Tamanho do número de campos = 7.
*/
protected 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 Dígito da Agência = 1.
*/
private static final Integer AGENCIA_DIGITO_LENGTH = Integer.valueOf(1);
/**
* Tamanho do campo Conta = 8.
*/
private static final Integer CONTA_LENGTH = Integer.valueOf(8);
/**
* Tamanho do campo Dígito da Conta = 1.
*/
private static final Integer CONTA_DIGITO_LENGTH = Integer.valueOf(1);
/**
* Tamanho do campo Nosso Número = 9.
*/
private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(9);
/**
* Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}
* ) deste campo.
*
* @since 0.2
*/
protected CLBancoSafraCobrancaRegistrada() {
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);
checkDigitoDoCodigoDaAgencia(titulo);
checkNumeroDaContaNotNull(titulo);
checkCodigoDoNumeroDaConta(titulo);
checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 999999);
checkDigitoDoCodigoDoNumeroDaConta(titulo);
checkNossoNumero(titulo);
checkTamanhoDoNossoNumero(titulo, NN9);
}
/**
* {@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<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getContaBancaria().getAgencia().getDigitoVerificador(), AGENCIA_DIGITO_LENGTH));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), CONTA_DIGITO_LENGTH));
this.add(new FixedField<String>(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH));
this.add(new FixedField<Integer>(TipoDeCobranca.DIRETA_BOLETO_EMITIDO_PELO_CLIENTE.codigo(), TIPO_COBRANCA_FIELD_LENGTH));
}
}

View File

@ -0,0 +1,184 @@
package org.jrimum.bopepo.campolivre;
import static org.jrimum.bopepo.parametro.ParametroBancoSantander.IOF_SEGURADORA;
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;
/**
* <p>
* O campo livre do Banco Santander deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: * collapse" bordercolor="#111111" width="60%" id="campolivre">
* <tr>
* <thead>
* <th >Posição</th>
* <th >Tamanho</th>
* <th >Picture</th>
* <th>Conteúdo</th>
* </thead>
* </tr>
* <tr>
* <td >20-20</td>
* <td >1</td>
* <td >9(01)</td>
* <td >Fixo "9"</td>
* </tr>
* <tr>
* <td >21-27</td>
* <td >7</td>
* <td >9(7)</td>
* <td >Conta do cedente padrão Santander</td>
* </tr>
* <tr>
* <td >28-40</td>
* <td >13</td>
* <td >9(13)</td>
* <td >
* <p>
* Nosso Número com zeros a esquerda. <strong>OBS:</strong> Caso o arquivo de
* registro para os títulos seja de 400 bytes (CNAB)
* </p>
* <ul>
* <li>Banco 353 (Banco Santander) - Utilizar somente 08 posições do Nosso Numero (07 posições +
* DV), zerando os 05 primeiros dígitos</li>
* <li>Banco 008 (Meridional do Brasil S/A) - Utilizar somente 09 posições do Nosso Numero (08 posições +
* DV), zerando os 04 primeiros dígitos</li>
* </ul>
* </td>
* </tr>
* <tr>
* <td >41-41</td>
* <td >1</td>
* <td >9(1)</td>
* <td >
* <p>
* IOF Seguradoras (Se 7% informar 7. Limitado a 9%)
* </p>
* <p>
* <strong>Demais clientes usar 0 (zero)</strong>
* </p>
* </td>
* </tr>
* <tr>
* <td >42-44</td>
* <td >3</td>
* <td >9(3)</td>
* <td >
* <ul>
* <li>101 - Cobrança Simples Rápida COM Registro</li>
* <li>102 - Cobrança simples SEM Registro</li>
* <li>104 - Cobrança Simples Eletrônica - COM Registro</li>
* <li>201 - Penhor Rápida com Registro</li>
* </ul>
* </td>
* </tr>
* </table>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:">Dani Schinniger</a>
*/
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<Integer>(CONSTANTE, 1));
this.add(new FixedField<Integer>(conta.getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
// this.add(new FixedField<String>(conta.getNumeroDaConta().getDigitoDaConta(), 1));
this.add(new FixedField<String>(nossoNumero.toString(), 13, Fillers.ZERO_LEFT));
// IOF Seguradoras
if (titulo.hasParametrosBancarios()
&& Objects.isNotNull(titulo.getParametrosBancarios().getValor(
IOF_SEGURADORA))) {
this.add(new FixedField<Integer>(titulo
.getParametrosBancarios().<Integer>getValor(IOF_SEGURADORA), 1));
} else {
this.add(new FixedField<Integer>(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<Integer>(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!");
}
}

View File

@ -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;
/**
* <p>
* O campo livre do bradesco deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td >20-20</td>
* <td >1</td>
* <td >9(1)</td>
* <td style="text-align:left;padding-left:10">Carteira</td>
* <td style="text-align:left;padding-left:10">Carteira</td>
* </tr>
* <tr>
* <td >21-24</td>
* <td >4</td>
* <td >9(4)</td>
* <td style="text-align:left;padding-left:10">Agência Cedente (Cooperativa) (sem o dígito
* verificador, completar com zeros a esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Código da Agência (sem dígito)</td>
* </tr>
* <tr>
* <td >25-26</td>
* <td >2</td>
* <td >9(2)</td>
* <td style="text-align:left;padding-left:10">Modalidade</td>
* <td style="text-align:left;padding-left:10">Modalidade</td>
* </tr>
* <tr>
* <td >27-33</td>
* <td >7</td>
* <td >9(7)</td>
* <td style="text-align:left;padding-left:10">Código do Cliente (sem o dígito
* verificador, completar com zeros a esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Conta do Beneficiário (sem dígito)</td>
* </tr>
* <tr>
* <td >34-40</td>
* <td >7</td>
* <td >9(7)</td>
* <td style="text-align:left;padding-left:10">Número do título(sem o dígito
* verificador, completar com zeros a esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Nosso Número (sem dígito)</td>
* </tr>
* <tr>
* <td >41-41</td>
* <td >1</td>
* <td >9(1)</td>
* <td style="text-align:left;padding-left:10">Dígito verificador do Nosso Número</td>
* <td style="text-align:left;padding-left:10">Dígito verificador do Nosso Número</td>
* </tr>
* <tr>
* <td >42-44</td>
* <td >3</td>
* <td >9(3)</td>
* <td style="text-align:left;padding-left:10">Número da Parcela (completar com zeros a esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Número da Parcela</td>
* </tr>
* </table>
*
* @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @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;
/**
* <p>
* Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
* </p>
*
* @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<Integer>(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(codigoDaModalidadeDeCobranca, MODALIDADE_DE_COBRANCA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getContaBancaria().getNumeroDaConta().getDigitoDaConta(), DV_CONTA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getNossoNumero(),NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getDigitoDoNossoNumero(),DV_NOSSO_NUMERO_LENGTH));
this.add(new FixedField<Integer>(numeroDaParcela, NUMERO_DA_PARCELA_LENGTH, Fillers.ZERO_LEFT));
}
}

View File

@ -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;
/**
*
* <p>
* Representação do campo livre usado para boletos com carteiras (<em>cobrança</em>)
* 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.
* </p>
*
* <p>
* Layout:<br />
* <div align="center">
* <p align="center">
* <font face="Arial">Cobrança Normal - CAMPO LIVRE - Chave ASBACE</font>
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" >
* <tr>
* <td align="center" bgcolor="#C0C0C0"><strong><font face="Arial">Posição</font></strong></td>
* <td bgcolor="#C0C0C0"><strong><font face="Arial">Campo Livre No Código De
* Barras (20 a 44)</font></strong></td>
* <tr>
* <td align="center"><font face="Arial">20 a 27</font></td>
* <td><font face="Arial">Nosso Número (sem os dois dígitos)</font></td>
*
* </tr>
* <tr>
* <td align="center"><font face="Arial">28 a 38</font></td>
* <td><font face="Arial">Conta Corrente</font></td>
* </tr>
* <tr>
* <td align="center"><font face="Arial">39 a 39</font></td>
*
* <td><font face="Arial">Produto = 2-Sem registro; 3-Caucionada; 4,5,6 e 7-Cobrança com registro</font></td>
* </tr>
*
* <tr>
* <td align="center"><font face="Arial">40 a 42</font></td>
* <td><font face="Arial">Constante = "021" Código do BANESTES </font></td>
* </tr>
*
* <tr>
* <td align="center"><font face="Arial">43 a 44</font></td>
* <td><font face="Arial">Duplo Dígito referente às posições 20 a 42</font></td>
* </tr>
*
* </table> </div>
* </p>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="mailto:samuelvalerio@gmail.com">Samuel Valério</a> 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>(Integer.valueOf(titulo.getNossoNumero()), 8, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 11, Fillers.ZERO_LEFT));
final Integer codigoDaCarteiraDeCobranca = titulo.getContaBancaria().getCarteira().getCodigo();
if (exists(codigoDaCarteiraDeCobranca)) {
this.add(new FixedField<Integer>(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<Integer>(2, 1));
break;
case COM_REGISTRO:
if (codigoDaCarteiraDeCobranca >= 3 && codigoDaCarteiraDeCobranca <= 7) {
this.add(new FixedField<Integer>(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<Byte>(titulo.getContaBancaria().getBanco().getCodigoDeCompensacaoBACEN().getCodigo().byteValue(), 3, Fillers.ZERO_LEFT));
this.add(new FixedField<Byte>(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!");
}
}

View File

@ -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;
/**
* <p>
* 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:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td>20-20</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10px">Tipo de Cobrança: constante = 2
* </td>
* <td style="text-align:left;padding-left:10">"2" Cobrança Direta, Fichário
* emitido pelo CLIENTE.</td>
* </tr>
* <tr>
* <td>21-21</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10">Constante "1"</td>
* <td style="text-align:left;padding-left:10">Constante "1"</td>
* </tr>
* <tr>
* <td>22-25</td>
* <td>4</td>
* <td>9(4)</td>
* <td style="text-align:left;padding-left:10">Código da Agência sem digito
* verificador</td>
* <td style="text-align:left;padding-left:10">Código da Agência, com quatro
* dígitos, sem o Número de Controle.</td>
* </tr>
* <tr>
* <td>26-32</td>
* <td>7</td>
* <td>9(7)</td>
* <td style="text-align:left;padding-left:10">Código do Cedente sem dígito
* verificador</td>
* <td style="text-align:left;padding-left:10">Código do Cedente sem Número de
* Controle.</td>
* </tr>
* <tr>
* <td>33-40</td>
* <td>8</td>
* <td>9(8)</td>
* <td style="text-align:left;padding-left:10">Seu número sem dígito verificador
* </td>
* <td style="text-align:left;padding-left:10">Nosso Número sem Número de
* Controle</td>
* </tr>
* <tr>
* <td>41-42</td>
* <td>2</td>
* <td>9(2)</td>
* <td style="text-align:left;padding-left:10">Constante "40"</td>
* <td style="text-align:left;padding-left:10">Constante "40"</td>
* </tr>
* <tr>
* <td>43-44</td>
* <td>2</td>
* <td>9(2)</td>
* <td style="text-align:left;padding-left:10">Dois dígitos verificadores
* calculados com os campos anteriores pelos (módulos 10 e 11)</td>
* <td style="text-align:left;padding-left:10">Duplo Dígito referente às
* posições 20 a 42 (módulos 10 e 11)</td>
* </tr>
* </tbody>
* </table>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="mailto:samuelvalerio@gmail.com">Samuel Valério</a> 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<Integer>(2, 1));
this.add(new FixedField<String>("1", 1));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(Integer.valueOf(titulo.getNossoNumero()), 8, Fillers.ZERO_LEFT));
this.add(new FixedField<String>("40", 2));
this.add(new FixedField<String>(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!");
}
}

View File

@ -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;
/**
* <p>
* Representação do campo livre usado para boletos com carteiras (
* <em>cobrança</em>) com registro.
* </p>
*
* <p>
* O campo livre do Barisul para cobrança registrada (Cobrança Normal
* "com registro" - Sistema BDL/Carteira de Letras) deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td>20-20</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10px">Tipo de Cobrança: constante = 1
* </td>
* <td style="text-align:left;padding-left:10">"1" Cobrança Normal, Fichário
* emitido pelo BANRISUL</td>
* </tr>
* <tr>
* <td>21-21</td>
* <td>1</td>
* <td>9(1)</td>
* <td style="text-align:left;padding-left:10">Constante "1"</td>
* <td style="text-align:left;padding-left:10">Constante "1"</td>
* </tr>
* <tr>
* <td>22-25</td>
* <td>4</td>
* <td>9(4)</td>
* <td style="text-align:left;padding-left:10">Código da Agência sem digito
* verificador</td>
* <td style="text-align:left;padding-left:10">Código da Agência, com quatro
* dígitos, sem o Número de Controle.</td>
* </tr>
* <tr>
* <td>26-32</td>
* <td>7</td>
* <td>9(7)</td>
* <td style="text-align:left;padding-left:10">Código do Cedente sem dígito
* verificador</td>
* <td style="text-align:left;padding-left:10">Código do Cedente sem Número de
* Controle.</td>
* </tr>
* <tr>
* <td>33-40</td>
* <td>8</td>
* <td>9(8)</td>
* <td style="text-align:left;padding-left:10">Seu número sem dígito verificador
* </td>
* <td style="text-align:left;padding-left:10">Nosso Número sem Número de
* Controle</td>
* </tr>
* <tr>
* <td>41-42</td>
* <td>2</td>
* <td>9(2)</td>
* <td style="text-align:left;padding-left:10">Constante "40"</td>
* <td style="text-align:left;padding-left:10">Constante "40"</td>
* </tr>
* <tr>
* <td>43-44</td>
* <td>2</td>
* <td>9(2)</td>
* <td style="text-align:left;padding-left:10">Dois dígitos verificadores
* calculados com os campos anteriores pelos (módulos 10 e 11)</td>
* <td style="text-align:left;padding-left:10">Duplo Dígito referente às
* posições 20 a 42 (módulos 10 e 11)</td>
* </tr>
* </tbody>
* </table>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="mailto:samuelvalerio@gmail.com">Samuel Valério</a> 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<Integer>(1, 1));
this.add(new FixedField<String>("1", 1));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(Integer.valueOf(titulo.getNossoNumero()),8, Fillers.ZERO_LEFT));
this.add(new FixedField<String>("40", 2));
this.add(new FixedField<String>(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!");
}
}

View File

@ -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;
/**
* <p>
* O campo livre do Bradesco deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td >20-23</td>
* <td >4</td>
* <td >9(4)</td>
* <td style="text-align:left;padding-left:10">Agência Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Código da Agência (sem dígito)</td>
* </tr>
* <tr>
* <td >24-25</td>
* <td >2</td>
* <td >9(2)</td>
* <td style="text-align:left;padding-left:10">Código da Carteira</td>
* <td style="text-align:left;padding-left:10">Código da Carteira</td>
* </tr>
* <tr>
* <td >26-36</td>
* <td >11</td>
* <td >&nbsp;9(11)</td>
* <td style="text-align:left;padding-left:10">Número do Nosso Número(Sem o digito verificador)</td>
* <td style="text-align:left;padding-left:10">Nosso Número (sem dígito)</td>
* </tr>
* <tr>
* <td >37-43</td>
* <td >7</td>
* <td >&nbsp;9(7)</td>
* <td style="text-align:left;padding-left:10">Conta do Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)</td>
* <td style="text-align:left;padding-left:10">Conta do Cedente (sem dígito)</td>
* </tr>
* <tr>
* <td >44-44</td>
* <td >1</td>
* <td >9</td>
* <td style="text-align:left;padding-left:10">Constante "0"</td>
* <td style="text-align:left;padding-left:10">Zero Fixo</td>
* </tr>
* </table>
*
*
* @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento
* Mercantil</a>
*
* @since 0.2
*
* @version 0.2
*/
class CLBradesco extends AbstractCLBradesco {
/**
* {@code serialVersionUID = -1253549781074159862L}
*/
private static final long serialVersionUID = -1253549781074159862L;
/**
* Número de campos = 5.
*/
private static final Integer FIELDS_LENGTH = Integer.valueOf(5);
/**
* Tamanho do campo Agência = 4.
*/
private static final Integer AGENCIA_LENGTH = Integer.valueOf(4);
/**
* Tamanho do campo Carteira = 2.
*/
private static final Integer CARTEIRA_LENGTH = Integer.valueOf(2);
/**
* Tamanho do campo Nosso Número = 11.
*/
private static final Integer NOSSO_NUMERO_LENGTH = Integer.valueOf(11);
/**
* Tamanho do campo Conta = 7.
*/
private static final Integer CONTA_LENGTH = Integer.valueOf(7);
/**
* Tamanho do campo Constante = 1.
*/
private static final Integer CONSTANT_LENGTH = Integer.valueOf(1);
/**
* Valor do campo Constante = 0.
*/
private static final Integer CONSTANT_VALUE = Integer.valueOf(0);
/**
* Constante em forma de campo {@linkplain #CONSTANT_VALUE} e {@linkplain #CONSTANT_LENGTH}.
*/
private static final FixedField<Integer> CONSTANT_FIELD = new FixedField<Integer>(CONSTANT_VALUE, CONSTANT_LENGTH);
/**
* Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
*
* @since 0.2
*/
protected CLBradesco() {
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);
checkCarteiraNotNull(titulo);
checkCodigoDaCarteira(titulo);
checkCodigoDaCarteiraMenorOuIgualQue(titulo, 99);
checkNossoNumero(titulo);
checkTamanhoDoNossoNumero(titulo, NN11);
checkNumeroDaContaNotNull(titulo);
checkCodigoDoNumeroDaConta(titulo);
checkCodigoDoNumeroDaContaMenorOuIgualQue(titulo, 9999999);
}
/**
* {@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<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT));
this.add(CONSTANT_FIELD);
}
}

View File

@ -0,0 +1,217 @@
package org.jrimum.bopepo.campolivre;
import static java.lang.String.format;
import static org.jrimum.bopepo.parametro.ParametroCaixaEconomicaFederal.CODIGO_OPERACAO;
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;
/**
* <p>
* O campo livre da Caixa Econômica Federal para cobrança simples (CS), rápida(CR) e sem registro (SR)
* - SICOB, deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td>20-29</td>
* <td>10</td>
* <td>9(10)</td>
* <td style="text-align:left;padding-left:10px">Nosso Número</td>
* <td style="text-align:left;padding-left:10">
* Nosso Número no padrão de uma das
* três cobranças (simples, rápida ou sem registro)
*
* <p>Exemplos:<br/>
* Cobrança Simples - Nosso número inicia com 3. Ex: Carteira 11<br/>
* Cobrança Rápida - Nosso número inicia com 9. Ex: Carteira 12 <br/>
* Cobrança Sem Registro - Nosso número inicia com 80, 81 ou 82. Ex: Carteira 14.
* </p>
*
* </td>
* </tr>
* <tr>
* <td>30-33</td>
* <td>4</td>
* <td>9(4)</td>
* <td style="text-align:left;padding-left:10">Código da Agência</td>
* <td style="text-align:left;padding-left:10">Código da Agência Cedente</td>
* </tr>
* <tr>
* <td>34-36</td>
* <td>3</td>
* <td>9(3)</td>
* <td style="text-align:left;padding-left:10">Código da Operação</td>
* <td style="text-align:left;padding-left:10">Operação Código</td>
* </tr>
* <tr>
* <td>37-44</td>
* <td>8</td>
* <td>9(8)</td>
* <td style="text-align:left;padding-left:10">Código do número da conta</td>
* <td style="text-align:left;padding-left:10">Código fornecido pela Agência</td>
* </tr>
* </tbody>
* </table>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @see <a href="http://www1.caixa.gov.br/download/asp/download.asp?subCategId=198&CategId=65&subCateglayout=Manuais&Categlayout=Cobran%C3%A7a%20Caixa%20%E2%80%93%20SICOB#aba_voce">Manuais SICOB - Caixa</a>
* @see <a href="http://downloads.caixa.gov.br/_arquivos/cobrcaixasicob/manuaissicob/ESPCODBARR_SICOB.pdf">Especificação código barras com nosso número de 11 posições</a>
* @see <a href="http://downloads.caixa.gov.br/_arquivos/cobrcaixasicob/manuaissicob/ESPCODBARBLOQCOBRANREGIST_16POSICOES.pdf">Leiaute de Arquivo Eletrônico Padrão CNAB 240 - Cobrança Bancária CAIXA - SICOB</a>
*
* @since 0.2
*
* @version 0.2
*/
class CLCaixaEconomicaFederalSICOBNossoNumero10 extends AbstractCLCaixaEconomicaFederal {
/**
*
*/
private static final long serialVersionUID = 5585190685525441426L;
/**
*
*/
private static final Integer FIELDS_LENGTH = 4;
/**
* <p>
* Dado um título, cria um campo livre para o padrão do Banco Caixa Econômica
* Federal que tenha o serviço SINCO.
* </p>
*
* @param titulo - Título com as informações para geração do campo livre
*/
CLCaixaEconomicaFederalSICOBNossoNumero10(Titulo titulo) {
super(FIELDS_LENGTH);
Objects.checkNotNull(titulo.getParametrosBancarios(), "Parâmetros bancários necessários [titulo.getParametrosBancarios()==null]!");
checkPadraoNossoNumero(titulo.getNossoNumero());
// TODO: Testar checkPadraoNossoNumeroPorCodigoDaCarteira;
/*
Integer codigoDaCarteira = titulo.getContaBancaria().getCarteira().getCodigo();
if (Objects.isNotNull(codigoDaCarteira)) {
checkPadraoNossoNumeroPorCodigoDaCarteira(titulo.getNossoNumero(), codigoDaCarteira);
}
*/
this.add(new FixedField<String>(titulo.getNossoNumero(), 10));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
if(titulo.getParametrosBancarios().contemComNome(CODIGO_OPERACAO)){
Integer cnpv = titulo.getParametrosBancarios().getValor(CODIGO_OPERACAO);
Objects.checkNotNull(titulo.getParametrosBancarios(), "Parâmetro bancário código operação inválido [CodigoOperacao==null]!");
this.add(new FixedField<Integer>(cnpv, 3, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 8, Fillers.ZERO_LEFT));
}else{
throw new CampoLivreException("Parâmetro bancário código operação (\"CodigoOperacao\") não encontrado!");
}
}
/**
* <p>
* 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}.
* </p>
*
* <p>
* Padrões aceitos de 10 dígitos:
* <ul>
* <li>3NNNNNNNNN (a ser validado com os colegas da Neogrid)</li>
* <li>9NNNNNNNNN</li>
* <li>80NNNNNNNN</li>
* <li>81NNNNNNNN</li>
* <li>82NNNNNNNN</li>
* </ul>
* </p>
*
* @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));
}
}
/**
* <p>
* Verifica se o nosso número informado tem o padrão esperado de acordo com
* o código da carteira informada.
* </p>
* <p>
* Obs: Como não há uma garantia documental de que todo nosso número que
* começa com "3" pertencerá <u>somente</u> 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.
* </p>
*
* @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!");
}
}

View File

@ -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;
/**
* <p>
* O campo livre da Caixa para Cobrança Sem Registro SICOB - Nosso Número 16
* posições, deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead> <tbody style="text-align:center">
* <tr>
* <td >20-24</td>
* <td >5</td>
* <td >9(5)</td>
* <td style="text-align:left;padding-left:10">Código do Cliente(sem dígito
* verificador)</td>
* <td style="text-align:left;padding-left:10">Código do Cliente Cedente
* fornecido pela CAIXA</td>
* </tr>
* <tr>
* <td >25-28</td>
* <td >4</td>
* <td >9(4)</td>
* <td style="text-align:left;padding-left:10">Código da Agência(sem dígito
* verificador)</td>
* <td style="text-align:left;padding-left:10">CNPJ da Agência da Conta do
* Cliente Cedente</td>
* </tr>
* <tr>
* <td >29-29</td>
* <td >1</td>
* <td >9(1)</td>
* <td style="text-align:left;padding-left:10">Código da Carteira = 8</td>
* <td style="text-align:left;padding-left:10">Código da Carteira = 8</td>
* </tr>
* <tr>
* <td >30-30</td>
* <td >1</td>
* <td >9(1)</td>
* <td style="text-align:left;padding-left:10">Constante = 7</td>
* <td style="text-align:left;padding-left:10">Constante = 7</td>
* </tr>
* <tr>
* <td >31-44</td>
* <td >14</td>
* <td >&nbsp;9(14)</td>
* <td style="text-align:left;padding-left:10">Nosso Número(sem dígito
* verificador)</td>
* <td style="text-align:left;padding-left:10">Nosso Número do Cliente com 14
* posições</td>
* </tr>
* </table>
*
*
* @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
*
* @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<Integer> CONSTANT_FIELD = new FixedField<Integer>(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<Integer> CARTEIRA_FIELD = new FixedField<Integer>(CARTEIRA_SEM_REGISTRO, 1);
/**
* <p>
* Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
* </p>
*
* @since 0.2
*/
protected CLCaixaEconomicaFederalSICOBNossoNumero14() {
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, 99999);
checkAgenciaNotNull(titulo);
checkCodigoDaAgencia(titulo);
checkCodigoDaAgenciaMenorOuIgualQue(titulo, 9999);
checkCarteiraNotNull(titulo);
checkCodigoDaCarteira(titulo);
checkCodigoDaCarteiraMenorOuIgualQue(titulo, 9);
checkCarteiraSemRegistro(titulo);
checkNossoNumero(titulo);
checkTamanhoDoNossoNumero(titulo, NN14);
}
/**
* {@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<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), CONTA_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), AGENCIA_LENGTH, Fillers.ZERO_LEFT));
this.add(CARTEIRA_FIELD);
this.add(CONSTANT_FIELD);
this.add(new FixedField<String>(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
}
/**
* Verifica se o código da carteira da conta bancária do título é igual
* (carteira simples), caso contrário lança uma {@code
* IllegalArgumentException}.
*
* <p>
* Motivo extraído do manual do banco: <br />
* <br />
* <i>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.</i>
* </p>
*
* @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())
);
}
}

View File

@ -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;
/**
* <p>
* O campo livre para o modelo SIGCB segue esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: * collapse" bordercolor="#111111" width="60%" id="campolivre">
* <thead>
* <tr>
* <td>Posição</td>
* <td>Tamanho</td>
* <td>Conteúdo</td>
* </tr>
* </thead> <tbody>
* <tr>
* <td>01-05</td>
* <td>6</td>
* <td>Código do Cedente</td>
* </tr>
* <tr>
* <td>06</td>
* <td>1</td>
* <td>Dígito Verificador do Código do Cedente</td>
* </tr>
* <tr>
* <td>07-09</td>
* <td>3</td>
* <td>Nosso Número Seqüência 1</td>
* </tr>
* <tr>
* <td>10</td>
* <td>1</td>
* <td>Constante 1</td>
* </tr>
* <tr>
* <td>11-13</td>
* <td>3</td>
* <td>Nosso Número Seqüência 2</td>
* </tr>
* <tr>
* <td>14</td>
* <td>1</td>
* <td>Constante 2</td>
* </tr>
* <tr>
* <td>15-23</td>
* <td>9</td>
* <td>Nosso Número Seqüência 3</td>
* </tr>
* <tr>
* <td>24</td>
* <td>1</td>
* <td>Dígito Verificador do Campo Livre</td>
* </tr>
* </tbody>
* </table>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:rogerio@visaosoft.com.br">Rogério Kleinkauf</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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;
/**
* <p>
* Dado um título, cria um campo livre para o padrão do Banco Caixa
* Econômica Federal que tenha o serviço SIGCB.
* </p>
*
* @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<Integer>(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(dVCodigoDoCedente, 1));
this.add(new FixedField<String>(nossoNumero.substring(0, 3), 3));
if(conta.getCarteira().isComRegistro()){
this.add(new FixedField<Integer>(COBRANCA_REGISTRADA, 1));
}else{
this.add(new FixedField<Integer>(COBRANCA_NAO_REGISTRADA, 1));
}
this.add(new FixedField<String>(nossoNumero.substring(3, 6), 3));
this.add(new FixedField<Integer>(EMISSAO_CEDENTE, 1));
this.add(new FixedField<String>(nossoNumero.substring(6, 15), 9));
this.add(new FixedField<Integer>(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.
* <p>
* Os campos utilizados são:
* <ul>
* <li>Código do Cedente: 06 posições</li>
* <li>Dígito Verificador do Código do Cedente: 01 posição</li>
* <li>Nosso Número Seqüência 1: 03 posições</li>
* <li>Constante 1: 01 posição</li>
* <li>Nosso Número Seqüência 2: 03 posições</li>
* <li>Constante 2: 01 posição</li>
* <li>Nosso Número Seqüência 3: 09 posições</li>
* </ul>
* </p>
*
* @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!");
}
}

View File

@ -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;
/**
* <p>
* O campo livre para o modelo SINCO segue esta forma:
* </p>
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" width="60%" id="campolivre">
* <thead>
* <tr>
* <td>Posição</td>
* <td>Tamanho</td>
* <td>Conteúdo</td>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td>01</td>
* <td>1</td>
* <td>Número "1" (valor fixo)</td>
* </tr>
* <tr>
* <td>02-07</td>
* <td>6</td>
* <td>Código do cliente CEDENTE (fornecido pela CAIXA)</td>
* </tr>
* <tr>
* <td>08</td>
* <td>1</td>
* <td>Número "9" (valor fixo)</td>
* </tr>
* <tr>
* <td>09-25</td>
* <td>17</td>
* <td>Posições livres do "nosso número"</td>
* </tr>
* </tbody>
* </table>
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento Mercantil</a>
*
* @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;
/**
* <p>
* Dado um título, cria um campo livre para o padrão do Banco Caixa Econômica
* Federal que tenha o serviço SINCO.
* </p>
* @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<Integer>(1, 1));
this.add(new FixedField<Integer>(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(9, 1));
this.add(new FixedField<String>(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!");
}
}

View File

@ -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;
/**
* <p>
* O campo livre do CECRED - Cooperativa Central de Crédito Urbano deve seguir esta forma:
* </p>
*
* TODO tabela com campos
*
* @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
*
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:contato@douglasramiro.com.br">Douglas Ramiro</a>
*
* @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);
/**
* <p>
* Cria um campo livre instanciando o número de fields ({@code FIELDS_LENGTH}) deste campo.
* </p>
*
* @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<Integer>(titulo.getParametrosBancarios().<Integer>getValor(ParametroCECRED.CODIGO_DO_CONVENIO), CONVENIO_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getNossoNumero(), NOSSO_NUMERO_LENGTH, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getCarteira().getCodigo(), CARTEIRA_LENGTH, Fillers.ZERO_LEFT));
}
}

View File

@ -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;
/**
* <p>
* O campo livre do HSBC, para cobrança não registrada(CNR), deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" width="60%" id="campolivre">
* <tr>
* <thead>
* <th>Posição </th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </thead>
* </tr>
*
* <tr>
* <td>20-26</td>
* <td>7</td>
* <td>9(7) </td>
* <td>Conta do cedente (sem dígito)</td>
* <td>Código do cedente</td>
* </tr>
*
* <tr>
* <td>27-39</td>
* <td>13</td>
* <td>9(13) </td>
* <td>Nosso número (sem dígito)</td>
* <td>
* Número bancário - Código do documento, sem os dígitos
* verificadores e tipo identificador.
* </td>
* </tr>
*
* <tr>
* <td>40-43</td>
* <td>4</td>
* <td>9(4) </td>
* <td>Fator de vencimento</td>
* <td>ou Data do vencimento no formato juliano</td>
* </tr>
*
* <tr>
* <td>44-44</td>
* <td>1</td>
* <td>9(1) </td>
* <td>2 FIXO</td>
* <td>Código do Aplicativo CNR = 2</td>
* </tr>
* </table>
*
*
* @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
* @author <a href="mailto:misaelbarreto@gmail.com">Misael Barreto</a>
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
* @author <a href="http://www.nordestefomento.com.br">Nordeste Fomento Mercantil</a>
*
* @since 0.2
*
* @version 0.2
*/
class CLHSBCCobrancaNaoRegistrada extends AbstractCLHSBC {
/**
*
*/
private static final long serialVersionUID = -1253549781074159862L;
/**
*
*/
private static final Integer FIELDS_LENGTH = 4;
/**
* <p>
* 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.
* </p>
*
* @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<Integer>(
conta.getNumeroDaConta().getCodigoDaConta(), 7,
Fillers.ZERO_LEFT));
// Nosso número (sem dígito)
this.add(new FixedField<String>(nossoNumero, 13, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(getDataVencimentoFormatoJuliano(
tipoIdentificadorCNR, titulo.getDataDoVencimento()), 4,
Fillers.ZERO_LEFT));
// 2 FIXO (Código do Aplicativo CNR - Cob. Não Registrada)
this.add(new FixedField<Integer>(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!");
}
}

View File

@ -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;
/**
* <p>
* O campo livre do HSBC, para cobrança registrada(CSB), deve seguir esta forma:
* </p>
*
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" width="100%" id="campolivre">
* <thead bgcolor="#DEDEDE">
* <tr>
* <th>Posição </th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo (terminologia padrão)</th>
* <th>Conteúdo (terminologia do banco)</th>
* </tr>
* </thead>
* <tbody style="text-align:center">
* <tr>
* <td>20-30</td>
* <td>11</td>
* <td>9(11) </td>
* <td style="text-align:left;padding-left:10px">Nosso número com dígito</td>
* <td style="text-align:left;padding-left:10">Número Bancário</td>
* </tr>
* <tr>
* <td>31-34</td>
* <td>4</td>
* <td>9(4) </td>
* <td style="text-align:left;padding-left:10">Código da Agência.</td>
* <td style="text-align:left;padding-left:10">Código da Agência.</td>
* </tr>
* <tr>
* <td>35-41</td>
* <td>7</td>
* <td>9(7) </td>
* <td style="text-align:left;padding-left:10">Conta Corrente.</td>
* <td style="text-align:left;padding-left:10">Conta de cobrança.</td>
* </tr>
* <tr>
* <td>42-43</td>
* <td>2</td>
* <td>9(2) </td>
* <td style="text-align:left;padding-left:10">Código da carteira="00"</td>
* <td style="text-align:left;padding-left:10">Código da carteira="00"</td>
* </tr>
* <tr>
* <td>44-44</td>
* <td>2</td>
* <td>9(2) </td>
* <td style="text-align:left;padding-left:10">Constante="1"</td>
* <td style="text-align:left;padding-left:10">Código do aplicativo da Cobrança (COB) = "1"</td>
* </tr>
* </tbody>
* </table>
*
*
* @see org.jrimum.bopepo.campolivre.AbstractCampoLivre
*
* @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L</a>
*
* @since 0.2
*
* @version 0.2
*/
class CLHSBCCobrancaRegistrada extends AbstractCLHSBC{
/**
*
*/
private static final long serialVersionUID = -5052841093486791338L;
private static final Integer FIELDS_LENGTH = 6;
private static final String CODIGO_DA_CARTEIRA = "00";
private static final Integer CODIGO_DO_APLICATIVO = Integer.valueOf(1);
/**
* * <p>
* Dado um título, cria um campo livre para cobrança registrada do banco HSBC.
* </p>
*
* @param titulo - título com as informações para geração do campo livre
*/
CLHSBCCobrancaRegistrada(Titulo titulo) {
super(FIELDS_LENGTH);
this.add(new FixedField<String>(titulo.getNossoNumero(), 10, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getDigitoDoNossoNumero(), 1));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 7, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(CODIGO_DA_CARTEIRA, 2));
this.add(new FixedField<Integer>(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!");
}
}

View File

@ -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ú
*
* <p>
* Constrói o campo livre no caso especial, ou seja, quando a carteira for:
* 106, 107, 122, 142, 143, 195, 196 ou 198.
* </p>
*
* <p>
* <h2>Layout do Banco Itaú para o campo livre ESPECIAL</h2>
* <pre>
* <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:
* collapse" bordercolor="#111111" id="campolivre">
* <thead>
* <tr>
* <th>Posição</th>
* <th>Tamanho</th>
* <th>Picture</th>
* <th>Conteúdo</th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td >20 a 22</td>
* <td >3</td>
* <td >9(03)</td>
* <td >Carteira</td>
* </tr>
* <tr>
* <td >23 a 30</td>
* <td >8</td>
* <td >9(08)</td>
* <td >Nosso número</td>
* </tr>
* <tr>
* <td >31 a 37</td>
* <td >7</td>
* <td >9(07)</td>
* <td >Seu Número (Número do Documento)</td>
* </tr>
* <tr>
* <td >38 a 42</td>
* <td >5</td>
* <td >9(05)</td>
* <td >Código do Cliente (fornecido pelo Banco)</td>
* </tr>
* <tr>
* <td >43 a 43</td>
* <td >1</td>
* <td >9(01)</td>
* <td >DAC dos campos acima (posições 20 a 42 veja anexo 3)</td>
* </tr>
* <tr>
* <tr>
* <td >44 a 44</td>
* <td >1</td>
* <td >9(01)</td>
* <td >Zero</td>
* </tr>
* </tbody>
* </table>
* <pre>
* </p>
*
* @author <a href="mailto:romulomail@gmail.com">Rômulo Augusto</a>
*
* @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<Integer>(conta.getCarteira().getCodigo(), 3, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getNossoNumero(), 8, Fillers.ZERO_LEFT));
this.add(new FixedField<String>(titulo.getNumeroDoDocumento(), 7, Fillers.ZERO_LEFT));
//Aqui é o código do cedente, simbolizado pelo código da conta bancária.
this.add(new FixedField<Integer>(conta.getNumeroDaConta().getCodigoDaConta(), 5, Fillers.ZERO_LEFT));
this.add(new FixedField<Integer>(calculeDigitoDoCampoLivreEspecial(
conta.getCarteira().getCodigo(),
titulo.getNossoNumero(),
titulo.getNumeroDoDocumento(),
conta.getNumeroDaConta().getCodigoDaConta()), 1));
this.add(new FixedField<Integer>(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!");
}
}

Some files were not shown because too many files have changed in this diff Show More