All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jrimum.bopepo.campolivre.CLCaixaEconomicaFederalSICOBNossoNumero10 Maven / Gradle / Ivy

Go to download

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 java.lang.String.format;
import static org.jrimum.bopepo.parametro.ParametroCaixaEconomicaFederal.CODIGO_OPERACAO;

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;

/**
 * 

* 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: *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
PosiçãoTamanhoPictureConteúdo (terminologia padrão)Conteúdo (terminologia do banco)
20-29109(10)Nosso Número * Nosso Número no padrão de uma das * três cobranças (simples, rápida ou sem registro) * *

Exemplos:
* Cobrança Simples - Nosso número inicia com 3. Ex: Carteira 11
* Cobrança Rápida - Nosso número inicia com 9. Ex: Carteira 12
* Cobrança Sem Registro - Nosso número inicia com 80, 81 ou 82. Ex: Carteira 14. *

* *
30-3349(4)Código da AgênciaCódigo da Agência Cedente
34-3639(3)Código da OperaçãoOperação Código
37-4489(8)Código do número da contaCódigo fornecido pela Agência
* * @author Gilmar P.S.L. * @author Misael Barreto * @see Manuais SICOB - Caixa * @see Especificação código barras com nosso número de 11 posições * @see Leiaute de Arquivo Eletrônico Padrão CNAB 240 - Cobrança Bancária CAIXA - SICOB * * @since 0.2 * * @version 0.2 */ class CLCaixaEconomicaFederalSICOBNossoNumero10 extends AbstractCLCaixaEconomicaFederal { /** * */ private static final long serialVersionUID = 5585190685525441426L; /** * */ private static final Integer FIELDS_LENGTH = 4; /** *

* Dado um título, cria um campo livre para o padrão do Banco Caixa Econômica * Federal que tenha o serviço SINCO. *

* * @param titulo - Título com as informações para geração do campo livre */ 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(titulo.getNossoNumero(), 10)); this.add(new FixedField(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(cnpv, 3, Fillers.ZERO_LEFT)); this.add(new FixedField(titulo.getContaBancaria().getNumeroDaConta().getCodigoDaConta(), 8, Fillers.ZERO_LEFT)); }else{ throw new CampoLivreException("Parâmetro bancário código operação (\"CodigoOperacao\") não encontrado!"); } } /** *

* Verifica se o nosso número do título começa com 3 (identificador da * Carteira Simples), 9 (identificador da Carteira Rápida) ou 80, 81 ou 82 * (que são identificadores da Carteira Sem Registro); Caso contrário gera * uma {@code IllegalArgumentException}. *

* *

* Padrões aceitos de 10 dígitos: *

    *
  • 3NNNNNNNNN (a ser validado com os colegas da Neogrid)
  • *
  • 9NNNNNNNNN
  • *
  • 80NNNNNNNN
  • *
  • 81NNNNNNNN
  • *
  • 82NNNNNNNN
  • *
*

* * @param nn * - Nosso Número */ private void checkPadraoNossoNumero(String nn){ if(!nn.startsWith("3") && !nn.startsWith("9") && !nn.startsWith("80") && !nn.startsWith("81") && !nn.startsWith("82")){ Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB o nosso número [%s] deve começar com 3 que é o identificador da \"carteira siples\" [3NNNNNNNNN] ou 9 que é o identificador da \"carteira rápida\" [9NNNNNNNNN] ou 80, 81 e 82 para \"carteira sem registro\" [82NNNNNNNN]!", nn)); } } /** *

* Verifica se o nosso número informado tem o padrão esperado de acordo com * o código da carteira informada. *

*

* Obs: Como não há uma garantia documental de que todo nosso número que * começa com "3" pertencerá somente a carteira 11, então o mais * coerente é não amarrar o início do nosso número a determinada carteira, * mas sim o contrário, ou seja, amarrar que toda carteira 11 tem de ter o * nosso número iniciando com 3". O mesmo raciocíno serve para as outras * carteiras. *

* * @param nossoNumero * - Nosso Número * @param codigoDaCarteira * - Código da carteira */ private void checkPadraoNossoNumeroPorCodigoDaCarteira(String nossoNumero, Integer codigoDaCarteira){ switch (codigoDaCarteira) { case 11: if(!nossoNumero.startsWith("3")){ Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB, carteira 11 (cobrança simples), o nosso número [%s] deve começar com 3!", nossoNumero)); } break; case 12: if(!nossoNumero.startsWith("9")){ Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB, carteira 12 (cobrança rápida), o nosso número [%s] deve começar com 9!", nossoNumero)); } break; case 14: if(!nossoNumero.startsWith("80") && !nossoNumero.startsWith("81") && !nossoNumero.startsWith("82")){ Exceptions.throwIllegalArgumentException(format("Para a cobrança SICOB, carteira 14 (cobrança sem registro), o nosso número [%s] deve começar com 80, 81 ou 82!", nossoNumero)); } break; } } @Override protected void addFields(Titulo titulo) { // TODO IMPLEMENTAR Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); } @Override protected void checkValues(Titulo titulo) { // TODO IMPLEMENTAR Exceptions.throwUnsupportedOperationException("AINDA NÃO IMPLEMENTADO!"); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy