org.jrimum.bopepo.campolivre.CLUnibancoCobrancaRegistrada 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!
package org.jrimum.bopepo.campolivre;
import static org.jrimum.utilix.DateFormat.YYMMDD;
import java.util.Date;
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.utilix.Objects;
import org.jrimum.utilix.Strings;
/**
*
*
* Representação do campo livre usado para boletos com carteiras (cobrança)
* com registro.
*
*
*
* Layout:
*
*
* Cobrança Direta (com registro)
*
*
*
*
* Posição
* Campo Livre No Código De
* Barras (20 a 44)
*
* 20 a 21
* Código da transação = 04
*
*
*
* 22 a 27
* Data do Vencimento do Título (AAMMDD)
*
*
* 28 a 31
*
* Agência do Cedente
*
*
* 32
*
* Dígito Verificador da Agência do Cedente
*
*
* 33 a 43
* Nosso Número
*
*
*
* 44
* Super Digito do Nosso Número (*)
*
*
*
*
*
* @author Gilmar P.S.L.
*
* @since 0.2
*
* @version 0.2
*/
class CLUnibancoCobrancaRegistrada extends AbstractCLUnibanco {
/**
*
*/
private static final long serialVersionUID = -2740172688796212239L;
/**
*
*/
private static final Integer FIELDS_LENGTH = 6;
private static final String CODIGO_TRANSACAO = "04";
/**
*
* Dado um título, cria um campo livre para o padrão do Banco Unibanco
* que tenha o tipo de cobrança registrada.
*
* @param titulo título com as informações para geração do campo livre
*/
CLUnibancoCobrancaRegistrada(Titulo titulo) {
super(FIELDS_LENGTH);
ContaBancaria conta = titulo.getContaBancaria();
Objects.checkNotNull(conta,"Conta Bancária NULA!");
Objects.checkNotNull(titulo.getDataDoVencimento(), "Data de vencimento do título NULA!");
Objects.checkNotNull(conta.getAgencia().getCodigo(), "Número da Agência Bancária NULO!");
Objects.checkNotNull(conta.getAgencia().getDigitoVerificador(),"Dígito da Agência Bancária NULO!");
Objects.checkNotNull(titulo.getNossoNumero(),"Nosso Número NULO!");
this.add(new FixedField(CODIGO_TRANSACAO, 2));
this.add(new FixedField(titulo.getDataDoVencimento(), 6, YYMMDD.copy()));
if(conta.getAgencia().getCodigo() > 0){
this.add(new FixedField(conta.getAgencia().getCodigo(), 4, Fillers.ZERO_LEFT));
}else{
throw new CampoLivreException(new IllegalArgumentException("Agência bancária com valor inválido, a agência deve ser um número inteiro positivo, e não: "+conta.getNumeroDaConta().getCodigoDaConta()));
}
if (StringUtils.isNumeric(conta.getAgencia().getDigitoVerificador())) {
Integer digitoDaAgencia = Integer.valueOf(conta.getAgencia().getDigitoVerificador());
if(digitoDaAgencia>=0){
this.add(new FixedField(Integer.valueOf(digitoDaAgencia), 1));
}else{
throw new CampoLivreException(new IllegalArgumentException("O dígito da agência deve ser um número interio não-negativo, e não: ["+conta.getAgencia().getDigitoVerificador()+"]"));
}
}else{
throw new CampoLivreException(new IllegalArgumentException("O dígito da agência deve ser numérico, e não: ["+conta.getAgencia().getDigitoVerificador()+"]"));
}
if(StringUtils.isNumeric(titulo.getNossoNumero())){
if(Long.valueOf(Strings.removeStartWithZeros(titulo.getNossoNumero()))>0){
this.add(new FixedField(titulo.getNossoNumero(), 11,Fillers.ZERO_LEFT));
}else{
throw new CampoLivreException(new IllegalArgumentException("O campo (nosso número) do título deve ser um número natural positivo, e não: ["+titulo.getNossoNumero()+"]"));
}
}else{
throw new CampoLivreException(new IllegalArgumentException("O campo (nosso número) do título deve ser numérico, e não: ["+titulo.getNossoNumero()+"]"));
}
this.add(new FixedField(calculeSuperDigito(titulo.getNossoNumero()), 1));
}
/**
*
* Calcula o Super Dígito do Nosso Número.
*
*
*
* Super dígito do “Nosso Número” [calculado com o MÓDULO 11 (de 2 a 9)]
* obtido utilizando-se os algarismos do “Nosso Número” acrescido do número
* 1 à esquerda = [1/NNNNNNNNNNN] e multiplicando-se a sequência obetem-se a
* soma dos produtos. Em seguida multiplicando-se novamente a soma por 10 e
* depois realizando-se o módulo 11.
*
*
*
* @param nossoNumero
*
* @return Dígito verficador calculado
*
* @see #calculeDigitoEmModulo11(String)
* @see org.jrimum.vallia.digitoverificador.Modulo
*
* @since 0.2
*/
private String calculeSuperDigito(String nossoNumero) {
return calculeDigitoEmModulo11("1" + nossoNumero);
}
@Override
protected void addFields(Titulo titulo) {
// TODO IMPLEMENTAR
Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
}
@Override
protected void checkValues(Titulo titulo) {
// TODO IMPLEMENTAR
Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!");
}
}