org.jrimum.bopepo.campolivre.CLCaixaEconomicaFederalSIGCB Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bpp-cobranca Show documentation
Show all versions of bpp-cobranca Show documentation
This is a fork and merge from JRimum ( http://www.jrimum.org ),
- Bopepo: https://github.com/jrimum/bopepo
- Texgit: https://github.com/jrimum/texgit
- Valia: https://github.com/jrimum/vallia
- Utilix: https://github.com/jrimum/utilix
- Domkee: https://github.com/jrimum/domkee
For Brazillian Boleto Payment Method. So much thanks for original authors:
Gilmar P. S. L, Misael Barreto and Rômulo Augusto.
The newest version!
/*
* 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.Modulo.MOD11;
import org.apache.commons.lang3.StringUtils;
import org.jrimum.domkee.banco.ContaBancaria;
import org.jrimum.domkee.banco.Titulo;
import org.jrimum.texgit.Fillers;
import org.jrimum.texgit.FixedField;
import org.jrimum.utilix.Exceptions;
import org.jrimum.vallia.Modulo;
/**
*
* O campo livre para o modelo SIGCB segue esta forma:
*
*
*
*
*
* Posição
* Tamanho
* Conteúdo
*
*
*
* 01-05
* 6
* Código do Cedente
*
*
* 06
* 1
* Dígito Verificador do Código do Cedente
*
*
* 07-09
* 3
* Nosso Número – Seqüência 1
*
*
* 10
* 1
* Constante 1
*
*
* 11-13
* 3
* Nosso Número – Seqüência 2
*
*
* 14
* 1
* Constante 2
*
*
* 15-23
* 9
* Nosso Número – Seqüência 3
*
*
* 24
* 1
* Dígito Verificador do Campo Livre
*
*
*
*
* @author Gilmar P.S.L
* @author Rogério Kleinkauf
* @author Rômulo Augusto
*
* @since 0.2
*
* @version 0.2
*/
class CLCaixaEconomicaFederalSIGCB extends AbstractCLCaixaEconomicaFederal {
/**
*
*/
private static final long serialVersionUID = -7642075752245778160L;
/**
*
*/
private static final Integer FIELDS_LENGTH = 8;
/**
* Modalidade de cobrança.
*/
private static final int COBRANCA_REGISTRADA = 1;
/**
* Modalidade de cobrança.
*/
private static final int COBRANCA_NAO_REGISTRADA = 2;
/**
* Constante que indica emissão de boleto pelo cedente.
*/
private static final int EMISSAO_CEDENTE = 4;
/**
*
* Dado um título, cria um campo livre para o padrão do Banco Caixa
* Econômica Federal que tenha o serviço SIGCB.
*
*
* @param titulo
* - Título com as informações para geração do campo livre.
*/
CLCaixaEconomicaFederalSIGCB(Titulo titulo) {
super(FIELDS_LENGTH);
ContaBancaria conta = titulo.getContaBancaria();
String nossoNumero = titulo.getNossoNumero();
Integer dVCodigoDoCedente = null;
if (StringUtils.isNotBlank(conta.getNumeroDaConta().getDigitoDaConta()))
dVCodigoDoCedente = Integer.valueOf(conta.getNumeroDaConta().getDigitoDaConta().toString());
else
dVCodigoDoCedente = calculeDigitoVerificador(conta.getNumeroDaConta().getCodigoDaConta().toString());
this.add(new FixedField(conta.getNumeroDaConta().getCodigoDaConta(), 6, Fillers.ZERO_LEFT));
this.add(new FixedField(dVCodigoDoCedente, 1));
this.add(new FixedField(nossoNumero.substring(0, 3), 3));
if (conta.getCarteira().isComRegistro()) {
this.add(new FixedField(COBRANCA_REGISTRADA, 1));
} else {
this.add(new FixedField(COBRANCA_NAO_REGISTRADA, 1));
}
this.add(new FixedField(nossoNumero.substring(3, 6), 3));
this.add(new FixedField(EMISSAO_CEDENTE, 1));
this.add(new FixedField(nossoNumero.substring(6, 15), 9));
this.add(new FixedField(calculeDigitoVerificador(gereCampoLivre()), 1));
}
/**
* Gera o número que serve para calcular o digito verificador do campoLivre, que
* é todo o campo livre menos o dígito verificador.
*
*
* Os campos utilizados são:
*
* - Código do Cedente: 06 posições
* - Dígito Verificador do Código do Cedente: 01 posição
* - Nosso Número – Seqüência 1: 03 posições
* - Constante 1: 01 posição
* - Nosso Número – Seqüência 2: 03 posições
* - Constante 2: 01 posição
* - Nosso Número – Seqüência 3: 09 posições
*
*
*
* @return String com campos, exceto o dígito verificador.
*
* @since 0.2
*/
private String gereCampoLivre() {
return writeFields();
}
/**
* Este dígito é calculado através do Módulo 11 com os pesos 2 e 9.
*
* @param numeroParaCalculo
* @return digito
*
* @since 0.2
*/
private int calculeDigitoVerificador(String numeroParaCalculo) {
int soma = Modulo.calculeSomaSequencialMod11(numeroParaCalculo.toString(), 2, 9);
int dvCampoLivre;
if (soma < MOD11) {
dvCampoLivre = MOD11 - soma;
} else {
int restoDiv11 = soma % MOD11;
int subResto = MOD11 - restoDiv11;
if (subResto > 9) {
dvCampoLivre = 0;
} else {
dvCampoLivre = subResto;
}
}
return dvCampoLivre;
}
@Override
protected void addFields(Titulo titulo) {
// TODO IMPLEMENTAR
Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
}
@Override
protected void checkValues(Titulo titulo) {
// TODO IMPLEMENTAR
Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
}
}