fixes bug#22494

dev: Celio
qua:



git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/GeneradorBoletosCNAB/trunk@108592 d1611594-4594-4d17-8e1d-87c2c4800839
master
fabio 2021-09-02 18:18:07 +00:00
parent 7473b5d7a8
commit 55cda01498
8 changed files with 550 additions and 2 deletions

View File

@ -0,0 +1,45 @@
package com.rjconsultores.ventaboletos.blocos.caixa;
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 ArquivoRemessaCaixa extends ArquivoRemessaItem {
@Override
public void setCabecalhoRemessa(CabecalhoRemessa cabecalhoRemessa) {
if(cabecalhoRemessa instanceof CabecalhoRemessaCaixa){
super.setCabecalhoRemessa(cabecalhoRemessa);
}else{
throw new ClassCastException("Somente cabecalho tipo: " + CabecalhoRemessaCaixa.class.getName());
}
}
@Override
public void addTitulo(DetalheObrigatorio titulo){
if(this.titulos == null){
this.titulos = new ArrayList<DetalheObrigatorio>();
}
if(titulo instanceof DetalheObrigatorioCaixa){
titulo.setNumeroSequencialRegistro(titulos.size() + 2);
this.titulos.add(titulo);
}else{
throw new ClassCastException("Somente cabecalho tipo: " + DetalheObrigatorioCaixa.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.caixa;
import java.util.Date;
import com.rjconsultores.ventaboletos.blocos.CabecalhoRemessa;
public class CabecalhoRemessaCaixa implements CabecalhoRemessa {
private String codigoEmpresa;
private String agenciaBeneficiario;
private String nomeEmpresa;
private Date dataGravacao;
private Integer numeroSequencialRemessa;
private Integer numeroSequencialRegistro;
private String versaoLayout;
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 String getAgenciaBeneficiario() {
return agenciaBeneficiario;
}
public void setAgenciaBeneficiario(String agenciaBeneficiario) {
this.agenciaBeneficiario = agenciaBeneficiario;
}
public String getVersaoLayout() {
return versaoLayout;
}
public void setVersaoLayout(String versaoLayout) {
this.versaoLayout = versaoLayout;
}
}

View File

@ -0,0 +1,194 @@
package com.rjconsultores.ventaboletos.blocos.caixa;
import java.math.BigDecimal;
import java.util.Date;
import com.rjconsultores.ventaboletos.blocos.DetalheObrigatorio;
import com.rjconsultores.ventaboletos.enuns.TipoInscricaoPagador;
public class DetalheObrigatorioCaixa implements DetalheObrigatorio, Cloneable {
private Integer idBoletoFechamento;
private TipoInscricaoPagador tipoInscricaoPagador;
private String numeroInscricao;
private String nossoNumero;
private String numeroDoDocumento;
private Date vencimento;
private BigDecimal valor;
private String especieDeTitulo;
private Date emissao;
private BigDecimal valorAtraso = BigDecimal.ZERO;
private BigDecimal valorMulta = BigDecimal.ZERO;
private Date dataLimiteDesconto;
private BigDecimal valorDesconto = BigDecimal.ZERO;
private BigDecimal valorIOF = BigDecimal.ZERO;
private BigDecimal valorAbatimentoConcedido = BigDecimal.ZERO;
private String nomeSacado;
private String enderecoSacado;
private String bairroSacado;
private String cepSacado;
private String cidade;
private String estado;
private String sacadorAvalista;
private Integer numeroSequencialRegistro;
private String numeroInscricaoSacado;
@Override
public void setIdBoletoFechamento(Integer id) {
this.idBoletoFechamento = id;
}
@Override
public Integer getIdBoletoFechamento(){
return this.idBoletoFechamento;
}
@Override
public DetalheObrigatorio clone() throws CloneNotSupportedException {
return (DetalheObrigatorio) super.clone();
}
public String getNumeroInscricao() {
return numeroInscricao;
}
public void setNumeroInscricao(String numeroInscricao) {
this.numeroInscricao = numeroInscricao;
}
public String getNossoNumero() {
return nossoNumero;
}
public void setNossoNumero(String nossoNumero) {
this.nossoNumero = nossoNumero;
}
public Date getVencimento() {
return vencimento;
}
public void setVencimento(Date vencimento) {
this.vencimento = vencimento;
}
public String getNumeroDoDocumento() {
return numeroDoDocumento;
}
public void setNumeroDoDocumento(String numeroDoDocumento) {
this.numeroDoDocumento = numeroDoDocumento;
}
public String getEspecieDeTitulo() {
return especieDeTitulo;
}
public void setEspecieDeTitulo(String especieDeTitulo) {
this.especieDeTitulo = especieDeTitulo;
}
public BigDecimal getValor() {
return valor;
}
public void setValor(BigDecimal valor) {
this.valor = valor;
}
public Date getEmissao() {
return emissao;
}
public void setEmissao(Date emissao) {
this.emissao = emissao;
}
public BigDecimal getValorAtraso() {
return valorAtraso;
}
public void setValorAtraso(BigDecimal valorAtraso) {
this.valorAtraso = valorAtraso;
}
public BigDecimal getValorMulta() {
return valorMulta;
}
public void setValorMulta(BigDecimal valorMulta) {
this.valorMulta = valorMulta;
}
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 String getNomeSacado() {
return nomeSacado;
}
public void setNomeSacado(String nomeSacado) {
this.nomeSacado = nomeSacado;
}
public String getEnderecoSacado() {
return enderecoSacado;
}
public void setEnderecoSacado(String enderecoSacado) {
this.enderecoSacado = enderecoSacado;
}
public String getBairroSacado() {
return bairroSacado;
}
public void setBairroSacado(String bairroSacado) {
this.bairroSacado = bairroSacado;
}
public String getCepSacado() {
return cepSacado;
}
public void setCepSacado(String cepSacado) {
this.cepSacado = cepSacado;
}
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;
}
public String getSacadorAvalista() {
return sacadorAvalista;
}
public void setSacadorAvalista(String sacadorAvalista) {
this.sacadorAvalista = sacadorAvalista;
}
public String getNumeroInscricaoSacado() {
return numeroInscricaoSacado;
}
public void setNumeroInscricaoSacado(String numeroInscricaoSacado) {
this.numeroInscricaoSacado = numeroInscricaoSacado;
}
public Integer getNumeroSequencialRegistro() {
return numeroSequencialRegistro;
}
public void setNumeroSequencialRegistro(Integer numeroSequencialRegistro) {
this.numeroSequencialRegistro = numeroSequencialRegistro;
}
}

View File

@ -10,7 +10,8 @@ public enum BancoLayout {
SANTANDER_400_Retorno("033", true, "/layouts/LayoutSantanderCNAB400Retorno.txg.xml"), SANTANDER_400_Retorno("033", true, "/layouts/LayoutSantanderCNAB400Retorno.txg.xml"),
BRADESCO_400_Retorno("237", true, "/layouts/LayoutBradescoCNAB400Retorno.txg.xml"), BRADESCO_400_Retorno("237", true, "/layouts/LayoutBradescoCNAB400Retorno.txg.xml"),
ITAU_400_Retorno("341", true, ""), ITAU_400_Retorno("341", true, ""),
BB_240_Retorno("001", true, ""); BB_240_Retorno("001", true, ""),
CAIXA_400_Envio("104", false, "/layouts/LayoutCaixaCNAB400Envio.txg.xml");
private BancoLayout(String codBanco, boolean retorno, String path) { private BancoLayout(String codBanco, boolean retorno, String path) {
this.codBanco = codBanco; this.codBanco = codBanco;

View File

@ -4,7 +4,6 @@ import com.rjconsultores.ventaboletos.enuns.BancoLayout;
public class CNABFactory { public class CNABFactory {
public static RemessaInterface createRemessa(BancoLayout bancoLayout){ public static RemessaInterface createRemessa(BancoLayout bancoLayout){
switch (bancoLayout) { switch (bancoLayout) {
@ -12,6 +11,8 @@ public class CNABFactory {
return new BradescoFlatFile(); return new BradescoFlatFile();
case SANTANDER_400_Envio: case SANTANDER_400_Envio:
return new SantanderFlatFile(); return new SantanderFlatFile();
case CAIXA_400_Envio:
return new CaixaFlatFile();
case MERCANTIL_400_Envio: case MERCANTIL_400_Envio:
return new MercantilFlatFile(); return new MercantilFlatFile();
case ITAU_400_Envio: case ITAU_400_Envio:

View File

@ -0,0 +1,126 @@
package com.rjconsultores.ventaboletos.layouts;
import java.math.BigDecimal;
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.caixa.CabecalhoRemessaCaixa;
import com.rjconsultores.ventaboletos.blocos.caixa.DetalheObrigatorioCaixa;
import com.rjconsultores.ventaboletos.enuns.BancoLayout;
import com.rjconsultores.ventaboletos.utils.FormataUtil;
public class CaixaFlatFile extends AbstractFlatFile implements RemessaInterface {
private static BigDecimal valorTotal = BigDecimal.ZERO;
private static Integer quantidadeRegistro = 0;
public CaixaFlatFile() {
super(BancoLayout.CAIXA_400_Envio);
valorTotal = BigDecimal.ZERO;
quantidadeRegistro = 0;
}
@Override
protected void createHeader(CabecalhoRemessa cabecalhoRemessaParam) {
Record header = getFlatFile().createRecord("Header");
CabecalhoRemessaCaixa cabecalhoRemessa = (CabecalhoRemessaCaixa) cabecalhoRemessaParam;
header.setValue("AgenciaBeneficiario", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getAgenciaBeneficiario(), 4));
header.setValue("NomeEmpresa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNomeEmpresa(), 30));
header.setValue("Beneficiario", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getCodigoEmpresa(), 7));
header.setValue("versaoLayout", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getVersaoLayout(), 3));
header.setValue("DataGravacao", FormataUtil.formataDataToString(cabecalhoRemessa.getDataGravacao(), "000000", "ddMMyy"));
header.setValue("NumeroSequencialRemessa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumeroSequencialRemessa().toString(), 7));
quantidadeRegistro = quantidadeRegistro + 1;
getFlatFile().addRecord(header);
}
@Override
protected void createTransacaoTitulos(DetalheObrigatorio tituloParam) {
Record transacaoTitulos = getFlatFile().createRecord("TransacaoTitulo");
DetalheObrigatorioCaixa titulo = (DetalheObrigatorioCaixa) tituloParam;
transacaoTitulos.setValue("NumeroInscricao", FormataUtil.formatarValorPorTamanho(titulo.getNumeroInscricao().toString(), 14));
transacaoTitulos.setValue("NossoNumero", FormataUtil.formatarValorPorTamanho(titulo.getNossoNumero(), 8));
transacaoTitulos.setValue("DataJuros", FormataUtil.formataDataToString(titulo.getVencimento(), "000000", "ddMMyy"));
transacaoTitulos.setValue("NumeroDoDocumento", FormataUtil.formatarValorPorTamanho(titulo.getNumeroDoDocumento(), 10));
transacaoTitulos.setValue("Vencimento", FormataUtil.formataDataToString(titulo.getVencimento(), "000000", "ddMMyy"));
transacaoTitulos.setValue("ValorTitulo", titulo.getValor());
transacaoTitulos.setValue("DataEmissao", FormataUtil.formataDataToString(titulo.getEmissao(), "000000", "ddMMyy"));
transacaoTitulos.setValue("ValorJuros", titulo.getValorAtraso());
transacaoTitulos.setValue("DataDesconto", FormataUtil.formataDataToString(titulo.getDataLimiteDesconto(), "000000", "ddMMyy"));
transacaoTitulos.setValue("ValorDesconto", titulo.getValorDesconto());
transacaoTitulos.setValue("ValorIOF", titulo.getValorIOF());
transacaoTitulos.setValue("ValorAbatimento", titulo.getValorAbatimentoConcedido());
transacaoTitulos.setValue("AgenciaCobradora", FormataUtil.formatarValorPorTamanho("", 6));
transacaoTitulos.setValue("TipoSacado", FormataUtil.formatarValorPorTamanho(titulo.getTipoInscricaoPagador().toString(), 2));
transacaoTitulos.setValue("DocumentoSacado", FormataUtil.formatarValorPorTamanho(titulo.getNumeroInscricaoSacado().toString(), 14));
transacaoTitulos.setValue("NomeSacado", FormataUtil.formatarValorPorTamanho(titulo.getNomeSacado(), 40));
transacaoTitulos.setValue("EnderecoSacado", FormataUtil.formatarValorPorTamanho(titulo.getEnderecoSacado(), 40));
transacaoTitulos.setValue("BairroSacado", FormataUtil.formatarValorPorTamanho(titulo.getBairroSacado(), 12));
transacaoTitulos.setValue("CepSacado", FormataUtil.formatarValorPorTamanho(titulo.getCepSacado().toString(), 8));
transacaoTitulos.setValue("CidadeSacado", FormataUtil.formatarValorPorTamanho(titulo.getCidade(), 15));
transacaoTitulos.setValue("EstadoSacado", FormataUtil.formatarValorPorTamanho(titulo.getEstado(), 2));
transacaoTitulos.setValue("DataMulta", FormataUtil.formataDataToString(titulo.getVencimento(), "000000", "ddMMyy"));
transacaoTitulos.setValue("ValorMulta", titulo.getValorMulta());
transacaoTitulos.setValue("SacadorAvalista", FormataUtil.formatarValorPorTamanho(titulo.getSacadorAvalista(), 30));
transacaoTitulos.setValue("NumeroSequencialRegistro", FormataUtil.formatarValorPorTamanho(titulo.getNumeroSequencialRegistro().toString(), 6));
valorTotal = valorTotal.add(titulo.getValor());
quantidadeRegistro = quantidadeRegistro + 1;
getFlatFile().addRecord(transacaoTitulos);
}
@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.");
}
@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...");
}
}

View File

@ -339,6 +339,10 @@ public class NossoNumeroUtils {
return Boolean.TRUE; return Boolean.TRUE;
} }
if(BancoLayout.CAIXA_400_Envio.equals(bancoLayout) && ( nossoNumero.length() == 10 && nossoNumero.startsWith("3"))){
return Boolean.TRUE;
}
return Boolean.FALSE; return Boolean.FALSE;
} }

View File

@ -0,0 +1,104 @@
<txg:Texgit xmlns:txg="http://jrimum.org/texgit"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jrimum.org/texgit http://jrimum.org/texgit/chrome/site/TexgitSchema.xsd"
version="1.0-academic">
<FlatFile>
<layout>
<name>Arquivo-Remessa_CaixaCNAB400</name>
<version>Version 67.126 v021micro, Published: 02/04/2021</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
</description>
</layout>
<GroupOfRecords>
<Record name="Header" description="Protocolo de comunicação" >
<GroupOfFields>
<IdType name="CodigoDoRegistro" length="1" value="0" position="1" />
<Field name="IdentificacaoRemessa" length="1" value="1" />
<Field name="LiteralRemessa" length="7" value="REMESSA" />
<Field name="CodigoServico" length="2" value="01" padding="ZERO_LEFT"/>
<Field name="LiteralServico" length="15" value="COBRANCA" />
<Field name="AgenciaBeneficiario" length="4" />
<Field name="Beneficiario" length="7" />
<Field name="Filler" length="9" />
<Field name="NomeEmpresa" length="30" />
<Field name="CodigoBanco" length="3" value="104" padding="ZERO_LEFT" />
<Field name="NomeBanco" length="15" value="C ECON FEDERAL" />
<Field name="DataGravacao" length="6" type="DATE" format="DATE_DDMMYY" />
<Field name="VersaoLayout" length="3" />
<Field name="Filler" length="286" />
<Field name="NumeroSequencialRemessa" length="5" padding="ZERO_LEFT" />
<Field name="NumeroSequencialRegistro" length="6" value="000001" padding="ZERO_LEFT" />
</GroupOfFields>
</Record>
<Record name="TransacaoTitulo" repeatable="true">
<GroupOfFields>
<IdType name="CodigoRegistro" length="1" value="1" position="1" />
<Field name="InscricaoEmpresa" length="2" value="02" />
<Field name="NumeroInscricao" length="14" padding="ZERO_LEFT" />
<Field name="Filler" length="3" />
<Field name="Beneficiario" length="7" />
<Field name="IdEmissao" length="1" value="2" />
<Field name="IdPostagem" length="1" value="0" />
<Field name="TaxaPermanencia" length="2" value="00" />
<Field name="UsoEmpresa" length="25" />
<Field name="NossoNumero" length="17" padding="ZERO_LEFT" />
<Field name="Filler" length="2" />
<Field name="UsoLivre" length="1" value="1" />
<Field name="TipoJuros" length="1" value="1" />
<Field name="DataJuros" length="6" type="DATE" format="DATE_DDMMYY" />
<Field name="CodigoDesconto" length="1" value="0" />
<Field name="Filler" length="22" />
<Field name="Carteira" length="2" value="01" />
<Field name="CodigoOcorrencia" length="2" value="01" />
<Field name="NumeroDoDocumento" length="10" padding="ZERO_LEFT"/>
<Field name="Vencimento" length="6" type="DATE" format="DATE_DDMMYY" />
<Field name="ValorTitulo" length="13" type="BIGDECIMAL" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="CodigoBanco" length="3" value="104"/>
<Field name="AgenciaCobradora" length="5" padding="ZERO_LEFT" />
<Field name="EspecieTitulo" length="2" value="01" />
<Field name="Aceite" length="1" value="N"/>
<Field name="DataEmissao" length="6" type="DATE" format="DATE_DDMMYY" />
<Field name="PrimeiraInstrucao" length="2" value="01" />
<Field name="SegundaInstrucao" length="2" value="00" />
<Field name="ValorJuros" length="13" type="BIGDECIMAL" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="DataDesconto" length="6" padding="ZERO_LEFT" />
<Field name="ValorDesconto" length="13" type="BIGDECIMAL" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="ValorIOF" length="13" type="BIGDECIMAL" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="ValorAbatimento" length="13" type="BIGDECIMAL" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="TipoSacado" length="2" padding="ZERO_LEFT" />
<Field name="DocumentoSacado" length="14" padding="ZERO_LEFT" />
<Field name="NomeSacado" length="40" />
<Field name="EnderecoSacado" length="40" />
<Field name="BairroSacado" length="12" />
<Field name="CepSacado" length="8" padding="ZERO_LEFT" />
<Field name="CidadeSacado" length="15" />
<Field name="EstadoSacado" length="2" />
<Field name="DataMulta" length="6" type="DATE" format="DATE_DDMMYY" />
<Field name="ValorMulta" length="10" type="BIGDECIMAL" format="DECIMAL_DD" padding="ZERO_LEFT" />
<Field name="SacadorAvalista" length="22" />
<Field name="TerceiraInstrucao" length="2" value="00" />
<Field name="DiasProtesto" length="2" padding="ZERO_LEFT" value="07" />
<Field name="Moeda" length="1" value="1" />
<Field name="NumeroSequencialRegistro" length="6" padding="ZERO_LEFT" />
</GroupOfFields>
</Record>
<Record name="Trailler">
<GroupOfFields>
<IdType name="CodigoDoRegistro" length="1" value="9" position="1" />
<Field name="Filler" length="393" />
<Field name="NumeroSequencialRegistro" length="6" padding="ZERO_LEFT"/>
</GroupOfFields>
</Record>
</GroupOfRecords>
</FlatFile>
</txg:Texgit>