fixes bug#14158

dev: Wallace
qua:

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/GeneradorBoletosCNAB/trunk@94488 d1611594-4594-4d17-8e1d-87c2c4800839
master
fabio 2019-06-12 17:27:48 +00:00
parent 947898873f
commit 60c4385bdb
11 changed files with 865 additions and 53 deletions

View File

@ -5,64 +5,57 @@ import java.math.BigDecimal;
import java.util.Date;
import com.rjconsultores.ventaboletos.blocos.RodapeRemessaPadrao;
import com.rjconsultores.ventaboletos.blocos.santander.ArquivoRemessaSantander;
import com.rjconsultores.ventaboletos.blocos.santander.CabecalhoRemessaSantander;
import com.rjconsultores.ventaboletos.blocos.santander.DetalheObrigatorioSantander;
import com.rjconsultores.ventaboletos.blocos.mercantil.ArquivoRemessaMercantil;
import com.rjconsultores.ventaboletos.blocos.mercantil.CabecalhoRemessaMercantil;
import com.rjconsultores.ventaboletos.blocos.mercantil.DetalheObrigatorioMercantil;
import com.rjconsultores.ventaboletos.enuns.BancoLayout;
import com.rjconsultores.ventaboletos.enuns.TipoInscricaoPagador;
import com.rjconsultores.ventaboletos.layouts.MercantilFlatFile;
import com.rjconsultores.ventaboletos.layouts.RemessaInterface;
import com.rjconsultores.ventaboletos.layouts.SantanderFlatFile;
public class Main {
public static void main(String[] args) {
ArquivoRemessaItem arquivoRemessaItem = new ArquivoRemessaSantander();
ArquivoRemessaItem arquivoRemessaItem = new ArquivoRemessaMercantil();
CabecalhoRemessaSantander cabecalhoRemessa = new CabecalhoRemessaSantander();
//cabecalhoRemessa.setCodigoBanco("123");
CabecalhoRemessaMercantil cabecalhoRemessa = new CabecalhoRemessaMercantil();
cabecalhoRemessa.setCodigoEmpresa("123456");
//cabecalhoRemessa.setCodigoServico("1222");
//cabecalhoRemessa.setLiteralRemessa("REMESSA");
cabecalhoRemessa.setAgenciaOrigem("0555");
cabecalhoRemessa.setDataGravacao(new Date());
//cabecalhoRemessa.setLiteralServico("COBRANCA");
cabecalhoRemessa.setCnpj(new Long("1452265658222"));
cabecalhoRemessa.setNumeroSequencialRemessa(1);
cabecalhoRemessa.setNumeroSequencialRegistro(9);
cabecalhoRemessa.setCodigoTransmissao(1234567890);
cabecalhoRemessa.setNomeEmpresa("RJ Consultores");
arquivoRemessaItem.setCabecalhoRemessa(cabecalhoRemessa);
DetalheObrigatorioSantander tituloSantander = new DetalheObrigatorioSantander();
DetalheObrigatorioMercantil titulo = new DetalheObrigatorioMercantil();
tituloSantander.setValor(new BigDecimal("4567.88"));
tituloSantander.setVencimento(new Date());
tituloSantander.setTipoInscricao(TipoInscricaoPagador.getInstanceByName("cpf"));
tituloSantander.setNumeroInscricao(new Long(1452265658));
tituloSantander.setCepSacado("32015");
tituloSantander.setComplementoCepSacado("490");
tituloSantander.setNumeroDoDocumento("555666777");
tituloSantander.setAgencia("0555");
tituloSantander.setEmissao( new Date() );
//tituloSantander.setOrigemDoPagamento(999);
titulo.setValorTitulo(new BigDecimal("4567.88"));
titulo.setVencimento(new Date());
titulo.setCnpj(new Long("1452265658222"));
titulo.setCepPrefixo("32015");
titulo.setCepSufixo("490");
titulo.setNumeroDoDocumento("555666777");
titulo.setAgenciaOrigem("0555");
titulo.setEmissao( new Date() );
try {
arquivoRemessaItem.addTitulo(tituloSantander.clone());
arquivoRemessaItem.addTitulo(tituloSantander.clone());
arquivoRemessaItem.addTitulo(tituloSantander.clone());
arquivoRemessaItem.addTitulo(tituloSantander.clone());
arquivoRemessaItem.addTitulo(tituloSantander.clone());
arquivoRemessaItem.addTitulo(tituloSantander.clone());
arquivoRemessaItem.addTitulo(tituloSantander.clone());
arquivoRemessaItem.addTitulo(titulo.clone());
arquivoRemessaItem.addTitulo(titulo.clone());
arquivoRemessaItem.addTitulo(titulo.clone());
arquivoRemessaItem.addTitulo(titulo.clone());
arquivoRemessaItem.addTitulo(titulo.clone());
arquivoRemessaItem.addTitulo(titulo.clone());
arquivoRemessaItem.addTitulo(titulo.clone());
} catch (CloneNotSupportedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
RemessaInterface remessaInterface = new SantanderFlatFile();
RemessaInterface remessaInterface = new MercantilFlatFile();
RodapeRemessaPadrao rodapeRemessa = new RodapeRemessaPadrao();
rodapeRemessa.setNumeroSequencialRegistro(9999);
@ -71,7 +64,7 @@ public class Main {
File arquivoRemessaFisico = new File("C:\\Fabio\\fabio.txt");
ArquivoRemessa arquivoRemessa = new ArquivoRemessa(BancoLayout.SANTANDER_400_Envio);
ArquivoRemessa arquivoRemessa = new ArquivoRemessa(BancoLayout.MERCANTIL_400_Envio);
try {
arquivoRemessa.addItem(arquivoRemessaItem.clone());

View File

@ -0,0 +1,43 @@
package com.rjconsultores.ventaboletos.blocos.mercantil;
import java.util.ArrayList;
import com.rjconsultores.ventaboletos.ArquivoRemessaItem;
import com.rjconsultores.ventaboletos.blocos.CabecalhoRemessa;
import com.rjconsultores.ventaboletos.blocos.DetalheObrigatorio;
import com.rjconsultores.ventaboletos.blocos.RodapeRemessa;
import com.rjconsultores.ventaboletos.blocos.RodapeRemessaPadrao;
public class ArquivoRemessaMercantil extends ArquivoRemessaItem {
@Override
public void setCabecalhoRemessa(CabecalhoRemessa cabecalhoRemessa) {
if(cabecalhoRemessa instanceof CabecalhoRemessaMercantil){
super.setCabecalhoRemessa(cabecalhoRemessa);
}else{
throw new ClassCastException("Somente cabecalho tipo: " + CabecalhoRemessaMercantil.class.getName());
}
}
@Override
public void addTitulo(DetalheObrigatorio titulo){
if(this.titulos == null){
this.titulos = new ArrayList<DetalheObrigatorio>();
}
if(titulo instanceof DetalheObrigatorioMercantil){
titulo.setNumeroSequencialRegistro(titulos.size() + 2);
this.titulos.add(titulo);
}else{
throw new ClassCastException("Somente cabecalho tipo: " + DetalheObrigatorioMercantil.class.getName());
}
}
@Override
public RodapeRemessa getRodapeRemessa() {
this.rodapeRemessa = this.rodapeRemessa == null ? new RodapeRemessaPadrao() : this.rodapeRemessa;
rodapeRemessa.setNumeroSequencialRegistro(titulos.size() + 2);
return rodapeRemessa;
}
}

View File

@ -0,0 +1,73 @@
package com.rjconsultores.ventaboletos.blocos.mercantil;
import java.util.Date;
import com.rjconsultores.ventaboletos.blocos.CabecalhoRemessa;
public class CabecalhoRemessaMercantil implements CabecalhoRemessa {
private String agenciaOrigem;
private Long cnpj;
private String codigoEmpresa;
private String nomeEmpresa;
private Date dataGravacao;
private Integer numeroSequencialRemessa;
private Integer numeroSequencialRegistro;
public String getCodigoEmpresa() {
return codigoEmpresa;
}
public void setCodigoEmpresa(String codigoEmpresa) {
this.codigoEmpresa = codigoEmpresa;
}
public String getNomeEmpresa() {
return nomeEmpresa;
}
public void setNomeEmpresa(String nomeEmpresa) {
this.nomeEmpresa = nomeEmpresa;
}
public Date getDataGravacao() {
return dataGravacao;
}
public void setDataGravacao(Date dataGravacao) {
this.dataGravacao = dataGravacao;
}
public Integer getNumeroSequencialRemessa() {
return numeroSequencialRemessa;
}
public void setNumeroSequencialRemessa(Integer numeroSequencialRemessa) {
this.numeroSequencialRemessa = numeroSequencialRemessa;
}
public Integer getNumeroSequencialRegistro() {
return numeroSequencialRegistro;
}
public void setNumeroSequencialRegistro(Integer numeroSequencialRegistro) {
this.numeroSequencialRegistro = numeroSequencialRegistro;
}
public Long getCnpj() {
return cnpj;
}
public void setCnpj(Long cnpj) {
this.cnpj = cnpj;
}
public String getAgenciaOrigem() {
return agenciaOrigem;
}
public void setAgenciaOrigem(String agenciaOrigem) {
this.agenciaOrigem = agenciaOrigem;
}
}

View File

@ -0,0 +1,391 @@
package com.rjconsultores.ventaboletos.blocos.mercantil;
import java.math.BigDecimal;
import java.util.Date;
import com.rjconsultores.ventaboletos.blocos.DadosBoleto;
import com.rjconsultores.ventaboletos.blocos.DetalheObrigatorio;
import com.rjconsultores.ventaboletos.enuns.TipoInscricaoPagador;
public class DetalheObrigatorioMercantil implements DetalheObrigatorio, Cloneable {
private Integer idBoletoFechamento;
private String agenciaOrigem;
private String numeroControleDoParticipante;
private String nossoNumero;
private String digitoVerificador;
private Long cnpj;
private Integer QtdPagamento = 0;
private Integer codigoDeOcorrencia = 0;
private Date dataOcorrencia;
private String numeroDoDocumento;
private Date vencimento;
private BigDecimal ValorTitulo;
private String especieDeTitulo;
private Date emissao;
private String instrucao1;
private String instrucao2;
private BigDecimal valorAtraso = BigDecimal.ZERO;
private Date dataLimiteDesconto;
private BigDecimal valorDesconto = BigDecimal.ZERO;
private BigDecimal valorIOF = BigDecimal.ZERO;
private BigDecimal valorAbatimentoConcedido = BigDecimal.ZERO;
private TipoInscricaoPagador tipoInscricaoPagador;
private Long numeroInscricaoPagador;
private String nomePagador;
private String enderecoCompletoPagador;
private String bairro;
private String cidade;
private String estado;
private String mensagem1;
private String cepPrefixo;
private String cepSufixo;
private String sacadorAvalistaMensagem2;
private Integer numeroSequencialRegistro;
private Integer multaPercentual;
private Integer numeroContrato;
private Integer seuNumero;
/*
MultaPercentual"
MultaData"
"
IdentificacaoTitulo"
AgenciaOrigem"
DigitoVerificador"
CNPJ"
QuantidadeMoeda"
CodigoOperacao"
CodigoMovimentacao"
SeuNumero"
DataVencimento"
CodigoBanco"
Agencia"
Aceite"
JurosDeMora"
DataLimiteDesconto"
DescontoConcedido"
IOF_Devido"
AbatimentoConcedido"
TipoInscricaoSacado"
NumeroInscricaoSacado"
NomeSacado"
EnderecoSacado"
BairroSacado"
CepSacado"
ComplementoCepSacado"
Cidade"
Estado"
SacadorAvalista"
CodigoMoeda"
*/
private DadosBoleto dadosBoleto;
@Override
public void setIdBoletoFechamento(Integer id) {
this.idBoletoFechamento = id;
}
@Override
public Integer getIdBoletoFechamento(){
return this.idBoletoFechamento;
}
public DetalheObrigatorio clone() throws CloneNotSupportedException {
return (DetalheObrigatorio) super.clone();
}
public String getAgenciaOrigem() {
return agenciaOrigem;
}
public void setAgenciaOrigem(String agenciaOrigem) {
this.agenciaOrigem = agenciaOrigem;
}
public String getNumeroControleDoParticipante() {
return numeroControleDoParticipante;
}
public void setNumeroControleDoParticipante(String numeroControleDoParticipante) {
this.numeroControleDoParticipante = numeroControleDoParticipante;
}
public String getNossoNumero() {
return nossoNumero;
}
public void setNossoNumero(String nossoNumero) {
this.nossoNumero = nossoNumero;
}
public String getDigitoVerificador() {
return digitoVerificador;
}
public void setDigitoVerificador(String digitoVerificador) {
this.digitoVerificador = digitoVerificador;
}
public Integer getQtdPagamento() {
return QtdPagamento;
}
public void setQtdPagamento(Integer qtdPagamento) {
QtdPagamento = qtdPagamento;
}
public Integer getCodigoDeOcorrencia() {
return codigoDeOcorrencia;
}
public void setCodigoDeOcorrencia(Integer codigoDeOcorrencia) {
this.codigoDeOcorrencia = codigoDeOcorrencia;
}
public Date getDataOcorrencia() {
return dataOcorrencia;
}
public void setDataOcorrencia(Date dataOcorrencia) {
this.dataOcorrencia = dataOcorrencia;
}
public String getNumeroDoDocumento() {
return numeroDoDocumento;
}
public void setNumeroDoDocumento(String numeroDoDocumento) {
this.numeroDoDocumento = numeroDoDocumento;
}
public Date getVencimento() {
return vencimento;
}
public void setVencimento(Date vencimento) {
this.vencimento = vencimento;
}
public BigDecimal getValorTitulo() {
return ValorTitulo;
}
public void setValorTitulo(BigDecimal valorTitulo) {
ValorTitulo = valorTitulo;
}
public String getEspecieDeTitulo() {
return especieDeTitulo;
}
public void setEspecieDeTitulo(String especieDeTitulo) {
this.especieDeTitulo = especieDeTitulo;
}
public Date getEmissao() {
return emissao;
}
public void setEmissao(Date emissao) {
this.emissao = emissao;
}
public String getInstrucao1() {
return instrucao1;
}
public void setInstrucao1(String instrucao1) {
this.instrucao1 = instrucao1;
}
public String getInstrucao2() {
return instrucao2;
}
public void setInstrucao2(String instrucao2) {
this.instrucao2 = instrucao2;
}
public BigDecimal getValorAtraso() {
return valorAtraso;
}
public void setValorAtraso(BigDecimal valorAtraso) {
this.valorAtraso = valorAtraso;
}
public Date getDataLimiteDesconto() {
return dataLimiteDesconto;
}
public void setDataLimiteDesconto(Date dataLimiteDesconto) {
this.dataLimiteDesconto = dataLimiteDesconto;
}
public BigDecimal getValorDesconto() {
return valorDesconto;
}
public void setValorDesconto(BigDecimal valorDesconto) {
this.valorDesconto = valorDesconto;
}
public BigDecimal getValorIOF() {
return valorIOF;
}
public void setValorIOF(BigDecimal valorIOF) {
this.valorIOF = valorIOF;
}
public BigDecimal getValorAbatimentoConcedido() {
return valorAbatimentoConcedido;
}
public void setValorAbatimentoConcedido(BigDecimal valorAbatimentoConcedido) {
this.valorAbatimentoConcedido = valorAbatimentoConcedido;
}
public TipoInscricaoPagador getTipoInscricaoPagador() {
return tipoInscricaoPagador;
}
public void setTipoInscricaoPagador(TipoInscricaoPagador tipoInscricaoPagador) {
this.tipoInscricaoPagador = tipoInscricaoPagador;
}
public Long getNumeroInscricaoPagador() {
return numeroInscricaoPagador;
}
public void setNumeroInscricaoPagador(Long numeroInscricaoPagador) {
this.numeroInscricaoPagador = numeroInscricaoPagador;
}
public String getNomePagador() {
return nomePagador;
}
public void setNomePagador(String nomePagador) {
this.nomePagador = nomePagador;
}
public String getEnderecoCompletoPagador() {
return enderecoCompletoPagador;
}
public void setEnderecoCompletoPagador(String enderecoCompletoPagador) {
this.enderecoCompletoPagador = enderecoCompletoPagador;
}
public String getMensagem1() {
return mensagem1;
}
public void setMensagem1(String mensagem1) {
this.mensagem1 = mensagem1;
}
public String getSacadorAvalistaMensagem2() {
return sacadorAvalistaMensagem2;
}
public void setSacadorAvalistaMensagem2(String sacadorAvalistaMensagem2) {
this.sacadorAvalistaMensagem2 = sacadorAvalistaMensagem2;
}
public Integer getNumeroSequencialRegistro() {
return numeroSequencialRegistro;
}
public void setNumeroSequencialRegistro(Integer numeroSequencialRegistro) {
this.numeroSequencialRegistro = numeroSequencialRegistro;
}
public DadosBoleto getDadosBoleto() {
return dadosBoleto;
}
public void setDadosBoleto(DadosBoleto dadosBoleto) {
this.dadosBoleto = dadosBoleto;
}
public Integer getMultaPercentual() {
return multaPercentual;
}
public void setMultaPercentual(Integer multaPercentual) {
this.multaPercentual = multaPercentual;
}
public String getCepPrefixo() {
return cepPrefixo;
}
public void setCepPrefixo(String cepPrefixo) {
this.cepPrefixo = cepPrefixo;
}
public String getCepSufixo() {
return cepSufixo;
}
public void setCepSufixo(String cepSufixo) {
this.cepSufixo = cepSufixo;
}
public Long getCnpj() {
return cnpj;
}
public void setCnpj(Long cnpj) {
this.cnpj = cnpj;
}
public Integer getNumeroContrato() {
return numeroContrato;
}
public void setNumeroContrato(Integer numeroContrato) {
this.numeroContrato = numeroContrato;
}
public Integer getSeuNumero() {
return seuNumero;
}
public void setSeuNumero(Integer seuNumero) {
this.seuNumero = seuNumero;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
}

View File

@ -5,6 +5,7 @@ public enum BancoLayout {
ITAU_400_Envio("341", false, "/layouts/LayoutItauCNAB400Envio.txg.xml"),
BB_240_Envio("001", false, "/layouts/LayoutBBCNAB240Envio.txg.xml"),
SANTANDER_400_Envio("033", false, "/layouts/LayoutSantanderCNAB400Envio.txg.xml"),
MERCANTIL_400_Envio("389", false, "/layouts/LayoutMercantilCNAB400Envio.txg.xml"),
SANTANDER_400_Retorno("033", true, "/layouts/LayoutSantanderCNAB400Retorno.txg.xml"),
BRADESCO_400_Retorno("237", true, "/layouts/LayoutBradescoCNAB400Retorno.txg.xml"),
ITAU_400_Retorno("341", true, ""),
@ -14,13 +15,11 @@ public enum BancoLayout {
this.codBanco = codBanco;
this.retorno = retorno;
this.path = path;
this.valido = true;
}
private String codBanco;
private boolean retorno;
private String path;
private boolean valido = true;
public String getCodBanco() {
return codBanco;
@ -37,14 +36,6 @@ public enum BancoLayout {
public String getTemp() {
return path.substring(path.lastIndexOf("/"));
}
public boolean isValido() {
return valido;
}
public void setValido(boolean valido) {
this.valido = valido;
}
public static BancoLayout getInstanceByCodBanco(String codBanco){

View File

@ -0,0 +1,42 @@
package com.rjconsultores.ventaboletos.enuns;
public enum OcorrenciaMercantil {
EntNor("01","REMESSA ENTRADA NORMAL"),
PedCli("02","BAIXA PEDIDO DO CLIENTE"),
ConAba("04","ALTERAÇÃO CONCESSÃO DE ABATIMENTO"),
CanAba("05","ALTERAÇÃO CANCELAMENTO DE ABATIMENTO"),
ProVen("06","ALTERAÇÃO PRORROGAÇÃO DE VENCIMENTO"),
ConDes("07","CONCEDER DESCONTO DE R$"),
ProAvi("09","PROTESTAR SEM MAIS AVISO CONSULTA");
private OcorrenciaMercantil(String id, String label){
this.id = id;
this.label = label;
}
private String id;
private String label;
public String getId() {
return id;
}
public String getLabel() {
return label;
}
public static OcorrenciaMercantil getInstance(String id){
for(OcorrenciaMercantil o : OcorrenciaMercantil.values()){
if(o.getId().equals(id)){
return o;
}
}
return null;
}
}

View File

@ -12,6 +12,8 @@ public class CNABFactory {
return new BradescoFlatFile();
case SANTANDER_400_Envio:
return new SantanderFlatFile();
case MERCANTIL_400_Envio:
return new MercantilFlatFile();
case ITAU_400_Envio:
return new ItauFlatFile();
case BB_240_Envio:
@ -20,7 +22,6 @@ public class CNABFactory {
break;
}
return null;
}
@ -35,7 +36,6 @@ public class CNABFactory {
break;
}
return null;
}
}

View File

@ -0,0 +1,131 @@
package com.rjconsultores.ventaboletos.layouts;
import java.util.Collection;
import java.util.List;
import org.jrimum.texgit.Record;
import com.rjconsultores.ventaboletos.blocos.CabecalhoRemessa;
import com.rjconsultores.ventaboletos.blocos.CabecalhoRetorno;
import com.rjconsultores.ventaboletos.blocos.DadosBoleto;
import com.rjconsultores.ventaboletos.blocos.DetalheObrigatorio;
import com.rjconsultores.ventaboletos.blocos.DetalheRetorno;
import com.rjconsultores.ventaboletos.blocos.RateioDeCredito;
import com.rjconsultores.ventaboletos.blocos.RodapeRemessa;
import com.rjconsultores.ventaboletos.blocos.RodapeRetorno;
import com.rjconsultores.ventaboletos.blocos.mercantil.CabecalhoRemessaMercantil;
import com.rjconsultores.ventaboletos.blocos.mercantil.DetalheObrigatorioMercantil;
import com.rjconsultores.ventaboletos.enuns.BancoLayout;
import com.rjconsultores.ventaboletos.utils.FormataUtil;
public class MercantilFlatFile extends AbstractFlatFile implements RemessaInterface {
public MercantilFlatFile() {
super(BancoLayout.MERCANTIL_400_Envio);
}
@Override
protected void createHeader(CabecalhoRemessa cabecalhoRemessaParam) {
Record header = getFlatFile().createRecord("Header");
CabecalhoRemessaMercantil cabecalhoRemessa = (CabecalhoRemessaMercantil) cabecalhoRemessaParam;
header.setValue("AgenciaOrigem", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getAgenciaOrigem(), 4));
header.setValue("Cliente", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getCnpj().toString(), 15));
header.setValue("NomeDaEmpresa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNomeEmpresa(), 30));
header.setValue("DataGravacaoArquivo", FormataUtil.formataDataToString(cabecalhoRemessa.getDataGravacao(), "000000", "ddMMyy"));
header.setValue("NumeroSequencialRegistro", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumeroSequencialRegistro().toString(), 5));
header.setValue("NumeroSequencialRemessa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumeroSequencialRemessa().toString(), 6));
getFlatFile().addRecord(header);
}
@Override
protected void createTransacaoTitulos(DetalheObrigatorio tituloParam) {
Record transacaoTitulos = getFlatFile().createRecord("TransacaoTitulo");
DetalheObrigatorioMercantil titulo = (DetalheObrigatorioMercantil) tituloParam;
transacaoTitulos.setValue("AgenciaOrigem", FormataUtil.formatarValorPorTamanho(titulo.getAgenciaOrigem(), 5));
transacaoTitulos.setValue("MultaPercentual", FormataUtil.formatarValorPorTamanho(titulo.getMultaPercentual(), 2));
transacaoTitulos.setValue("CNPJ", FormataUtil.formatarValorPorTamanho(titulo.getCnpj().toString(), 15));
transacaoTitulos.setValue("NumeroContrato", FormataUtil.formatarValorPorTamanho(titulo.getNumeroContrato(), 9));
transacaoTitulos.setValue("NumeroControleDoParticipante", FormataUtil.formatarValorPorTamanho(titulo.getNumeroControleDoParticipante(), 25));
transacaoTitulos.setValue("Filler1", FormataUtil.formatarValorPorTamanho("0", 8));
transacaoTitulos.setValue("NossoNumero", FormataUtil.formatarValorPorTamanho(titulo.getNossoNumero(), 10));
transacaoTitulos.setValue("DigitoVerificador", FormataUtil.formatarValorPorTamanho(titulo.getDigitoVerificador(), 1));
transacaoTitulos.setValue("SeuNumero", FormataUtil.formatarValorPorTamanho(titulo.getSeuNumero(), 10));
transacaoTitulos.setValue("DadosIgnorados2", FormataUtil.formatarValorPorTamanho("", 25));
transacaoTitulos.setValue("QtdPagamento", FormataUtil.formatarValorPorTamanho(titulo.getQtdPagamento(), 25));
//transacaoTitulos.setValue("CodigoDeOcorrencia", FormataUtil.formatarValorPorTamanho(titulo.getCodigoDeOcorrencia().toString(), 2));
transacaoTitulos.setValue("NumeroDoDocumento", FormataUtil.formatarValorPorTamanho(titulo.getNumeroDoDocumento(), 10));
transacaoTitulos.setValue("Vencimento", FormataUtil.formataDataToString(titulo.getVencimento(), "000000", "ddMMyy"));
transacaoTitulos.setValue("ValorTitulo", titulo.getValorTitulo());
//transacaoTitulos.setValue("BancoCobranca", FormataUtil.formatarValorPorTamanho("0", 3));
//transacaoTitulos.setValue("AgenciaAgencia", FormataUtil.formatarValorPorTamanho("0", 5));
transacaoTitulos.setValue("EspecieDeTitulo", FormataUtil.formatarValorPorTamanho(titulo.getEspecieDeTitulo(), 2));
//transacaoTitulos.setValue("Identificação", FormataUtil.formatarValorPorTamanho("N", 1));
transacaoTitulos.setValue("Emissao", FormataUtil.formataDataToString(titulo.getEmissao(), "000000", "ddMMyy"));
transacaoTitulos.setValue("Instrucao1", FormataUtil.formatarValorPorTamanho(titulo.getInstrucao1(), 2));
transacaoTitulos.setValue("Instrucao2", FormataUtil.formatarValorPorTamanho(titulo.getInstrucao2(), 2));
transacaoTitulos.setValue("ValorAtraso", titulo.getValorAtraso());
transacaoTitulos.setValue("DataLimiteDesconto", FormataUtil.formataData(titulo.getDataLimiteDesconto()));
transacaoTitulos.setValue("ValorDesconto", titulo.getValorDesconto());
transacaoTitulos.setValue("ValorIOF", titulo.getValorIOF());
transacaoTitulos.setValue("ValorAbatimentoConcedido", titulo.getValorAbatimentoConcedido());
transacaoTitulos.setValue("NomePagador", FormataUtil.formatarValorPorTamanho(titulo.getNomePagador(), 40));
transacaoTitulos.setValue("EnderecoCompletoPagador", FormataUtil.formatarValorPorTamanho(titulo.getEnderecoCompletoPagador(), 40));
transacaoTitulos.setValue("Mensagem1", FormataUtil.formatarValorPorTamanho(titulo.getMensagem1(), 12));
transacaoTitulos.setValue("CEPPrefixo", FormataUtil.formatarValorPorTamanho(titulo.getCepPrefixo(), 5));
transacaoTitulos.setValue("CEPSufixo", FormataUtil.formatarValorPorTamanho(titulo.getCepSufixo(), 3));
transacaoTitulos.setValue("BairroSacado", FormataUtil.formatarValorPorTamanho(titulo.getBairro(), 12));
transacaoTitulos.setValue("Cidade", FormataUtil.formatarValorPorTamanho(titulo.getCidade(), 15));
transacaoTitulos.setValue("Estado", FormataUtil.formatarValorPorTamanho(titulo.getEstado(), 2));
transacaoTitulos.setValue("Sacador_Avalista_Mensagem2", FormataUtil.formatarValorPorTamanho(titulo.getSacadorAvalistaMensagem2(), 60));
transacaoTitulos.setValue("NumeroSequencialRegistro", FormataUtil.formatarValorPorTamanho(titulo.getNumeroSequencialRegistro().toString(), 6));
DadosBoleto dadosBoleto = titulo.getDadosBoleto();
try{
if(dadosBoleto != null){
transacaoTitulos.addInnerRecord(createDadosBoletos(dadosBoleto));
}
}catch(UnsupportedOperationException e){ }
getFlatFile().addRecord(transacaoTitulos);
}
@Override
protected Record createDadosBoletos(DadosBoleto boleto) {
throw new UnsupportedOperationException("Não necessário...");
}
@Override
protected Record createRateioDeCredito(RateioDeCredito rateioDeCredito) {
throw new UnsupportedOperationException("Não necessário...");
}
@Override
protected void createTrailler(RodapeRemessa trailler){
Record trailer = getFlatFile().createRecord("Trailler");
trailer.setValue("NumeroSequencialRegistro", FormataUtil.formatarValorPorTamanho(trailler.getNumeroSequencialRegistro().toString(), 6));
getFlatFile().addRecord(trailer);
}
@Override
protected CabecalhoRetorno readHeader(Record header) {
throw new UnsupportedOperationException("Somente classe de Retorno.");
}
@Override
protected List<DetalheRetorno> readTransacaoTitulos(Collection<Record> registrosDeTransacoes) {
throw new UnsupportedOperationException("Somente classe de Retorno.");
}
@Override
protected RodapeRetorno readTrailler(Record trailler) {
throw new UnsupportedOperationException("Somente classe de Retorno.");
}
}

View File

@ -16,6 +16,13 @@ public class FormataUtil {
return value;
}
public static String formatarValorPorTamanho(Integer valor, int tamanho) {
String value = valor == null ? "" : valor.toString();
return formatarValorPorTamanho(value, tamanho) ;
}
public static String formatarValorPorTamanhoZeroEsquerda(String value, int tamanho) {
value = value == null ? "" : value;

View File

@ -30,11 +30,14 @@ public class NossoNumeroUtils {
return StringUtils.right("00000000" + nossoNumero, 8) + dacItau(codAgencia, numConta, numCarteira, nossoNumero);
}
public static String calcularNossoNumeroSantander(BigInteger nossoNumero){
return StringUtils.right("0000000" + nossoNumero, 7)+dacSantander( nossoNumero.toString() );
}
public static String calcularNossoNumeroMercantil(Integer agencia, BigInteger nossoNumero){
return StringUtils.right("0000000000" + nossoNumero, 10)+dacMercantil( agencia, nossoNumero );
}
/**
* Devolve o nosso numero do BB com o DV calculado (Tamanho 20)...
* @param convenioBanco
@ -105,6 +108,31 @@ public class NossoNumeroUtils {
}
public static String dacMercantil(Integer agencia, BigInteger nossoNumero){
int multiplicadores[] = {7,6,5,4,3,2,9,8,7,6,5,4,3,2};
String agenciaformatada = StringUtils.right("0000" + agencia, 4);
String nNumero = StringUtils.right("00000000000" + nossoNumero, 10);
String base = agenciaformatada + nNumero;
int soma = 0;
for (int i = 0; i < base.length(); i++) {
String d = base.charAt(i)+"";
soma = Integer.valueOf(d) * multiplicadores[i];
}
int mod = soma % 11;
if( mod == 0 || mod == 1 ) {
return "0";
}
return String.valueOf(11 - mod);
}
/**
* Calcula do DV para o Itau
* @param codAgencia
@ -185,7 +213,6 @@ public class NossoNumeroUtils {
return mod + "";
}
public static String dacSantander(String nossoNumero){
int multiplicador = 2;
@ -216,7 +243,6 @@ public class NossoNumeroUtils {
return String.valueOf(11 - mod);
}
/**
* Calcula do DV para o Itau (Numero Documento)
* @param codAgencia
@ -255,8 +281,6 @@ public class NossoNumeroUtils {
dac = 10 - (dac % 10);
return dac + "";
}
@ -270,6 +294,10 @@ public class NossoNumeroUtils {
return Boolean.TRUE;
}
if(BancoLayout.MERCANTIL_400_Envio.equals(bancoLayout) && nossoNumero.length() == 12 ){
return Boolean.TRUE;
}
if(BancoLayout.SANTANDER_400_Envio.equals(bancoLayout) && nossoNumero.length() == 9 ){
return Boolean.TRUE;
}
@ -281,10 +309,9 @@ public class NossoNumeroUtils {
return Boolean.FALSE;
}
public static void main(String[] args) {
System.out.println( calcularNossoNumeroSantander( new BigInteger("2457800") ));
System.out.println( calcularNossoNumeroMercantil( 89, new BigInteger("0032861174") ));
}
}

View File

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<txg:Texgit xmlns:txg="http://gilmatryx.googlepages.com/Texgit"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://gilmatryx.googlepages.com/Texgit file:////home/gilmar/NFM/WORKSPACE/TexgitSchema.xsd"
version="1.0-academic">
<FlatFile>
<layout>
<name>Arquivo-Remessa_SantanderCNAB400</name>
<version>Version 2,0, Published: outubro/2009</version>
<description>
Layout para Cobrança.
Arquivo texto - padrão CNAB
Meio de Registro Transmissão de Dados
Descrição de Registro - Tamanho 400 Bytes
Organização Sequencial
ARQUIVO FORMATO CNAB REMESSA, REGISTROS:
0 = Header
1 = Registro de Movimento
2 = Mensagem Variável por Título (Opcional)
4 = Mensagem Variável por Título (Opcional)
5 = Mensagem Variável por Título (Opcional)
6 = Mensagem Variável por Título (Opcional)
7 = Mensagem Variável por Título (Opcional)
9 = Trailler
</description>
</layout>
<GroupOfRecords>
<Record name="Header" description="Protocolo de comunicação" repeatable="true">
<GroupOfFields>
<IdType name="IDReg" length="1" value="0" position="1" />
<Field name="IdentificacaoRemessa" length="1" value="1" />
<Field name="LiteralRemessa" length="7" value="REMESSA" />
<Field name="CodigoDeServico" length="2" value="01" />
<Field name="LiteralServico" length="8" value="COBRANCA" />
<Field name="Brancos" length="7" blankAccepted="true" />
<Field name="AgenciaOrigem" length="4" type="INTEGER" padding="ZERO_LEFT" />
<Field name="Cliente" length="15" type="INTEGER" padding="ZERO_LEFT" />
<Field name="Brancos" length="1" blankAccepted="true" />
<Field name="NomeDaEmpresa" length="30" type="CHARACTER" />
<Field name="CodigoBanco" length="3" value="389" />
<Field name="NomeBanco" length="15" value="BANCANTIL" />
<Field name="DataGravacaoArquivo" length="6" type="DATE" format="DATE_DDMMYY" />
<Field name="Brancos" length="281" blankAccepted="true" />
<Field name="Densidade" length="5" value="01600" />
<Field name="BPI" length="3" blankAccepted="true" />
<Field name="NumeroSequencialRegistro" length="5" type="INTEGER" padding="ZERO_LEFT" />
<Field name="NumeroSequencialRemessa" length="6" value="000001" />
</GroupOfFields>
</Record>
<Record name="TransacaoTitulo" repeatable="true">
<GroupOfFields>
<IdType name="IDReg" length="1" position="1" value="1"/>
<Field name="IndicadorMulta" length="2" value="00" />
<Field name="CodigoMulta" length="1" value="0" />
<Field name="MultaPercentual" length="13" type="BIGDECIMAL" value="0" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="MultaData" length="6" type="DATE" format="DATE_DDMMYY" padding="ZERO_LEFT" />
<Field name="Brancos1" length="5" type="CHARACTER" blankAccepted="true" />
<Field name="NumeroContrato" length="9" type="INTEGER" />
<Field name="IdentificacaoTitulo" length="25" type="CHARACTER" />
<Field name="AgenciaOrigem" length="4" type="INTEGER" padding="ZERO_LEFT" />
<Field name="NossoNumero" length="10" type="INTEGER" />
<Field name="DigitoVerificador" length="1" type="INTEGER" />
<Field name="Brancos2" length="5" type="CHARACTER" blankAccepted="true" />
<Field name="CNPJ" length="15" type="INTEGER" />
<Field name="QuantidadeMoeda" length="10" type="INTEGER" />
<Field name="CodigoOperacao" length="1" value="1" />
<Field name="CodigoMovimentacao" length="2" type="INTEGER" />
<Field name="SeuNumero" length="10" type="INTEGER" />
<Field name="DataVencimento" length="6" type="DATE" format="DATE_DDMMYY" padding="ZERO_LEFT" />
<Field name="ValorTitulo" length="13" type="BIGDECIMAL" value="0" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="CodigoBanco" length="3" type="INTEGER" value="389"/>
<Field name="Agencia" length="5" type="INTEGER" padding="ZERO_LEFT" />
<Field name="EspecieDeTitulo" length="2" type="CHARACTER" padding="ZERO_LEFT" />
<Field name="Aceite" length="1" type="CHARACTER" value="N" />
<Field name="Emissao" length="6" type="DATE" format="DATE_DDMMYY" padding="ZERO_LEFT" />
<Field name="Instrucao1" length="2" type="CHARACTER" />
<Field name="Instrucao2" length="2" type="CHARACTER" />
<Field name="JurosDeMora" length="13" type="BIGDECIMAL" value="0" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="DataLimiteDesconto" length="6" type="DATE" format="DATE_DDMMYY" padding="ZERO_LEFT" />
<Field name="DescontoConcedido" length="13" type="BIGDECIMAL" value="0" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="IOF_Devido" length="13" type="BIGDECIMAL" value="0" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="AbatimentoConcedido" length="13" type="BIGDECIMAL" value="0" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="TipoInscricaoSacado" length="2" type="INTEGER" padding="ZERO_LEFT" />
<Field name="NumeroInscricaoSacado" length="14" type="INTEGER" padding="ZERO_LEFT" />
<Field name="NomeSacado" length="40" type="CHARACTER" />
<Field name="EnderecoSacado" length="40" type="CHARACTER" />
<Field name="BairroSacado" length="12" type="CHARACTER" />
<Field name="CEPPrefixo" length="5" type="INTEGER" />
<Field name="CEPSufixo" length="3" type="INTEGER" />
<Field name="Cidade" length="15" type="CHARACTER" />
<Field name="Estado" length="2" type="CHARACTER" />
<Field name="SacadorAvalista" length="30" type="CHARACTER" />
<Field name="Brancos3" length="12" type="CHARACTER" blankAccepted="true" />
<Field name="CodigoMoeda" length="1" type="INTEGER" />
<Field name="NumeroSequencialRegistro" length="6" type="INTEGER" padding="ZERO_LEFT" />
</GroupOfFields>
</Record>
<Record name="Trailler">
<GroupOfFields>
<IdType name="IDReg" length="1" value="9" position="1" />
<Field name="Filler" length="393" />
<Field name="NumeroSequencialRegistro" length="6" type="INTEGER" padding="ZERO_LEFT" />
</GroupOfFields>
</Record>
</GroupOfRecords>
</FlatFile>
</txg:Texgit>