FF read(final File file, String encoding) {
+
+ Objects.checkNotNull(file, "Arquivo TXT a ser importado nulo!");
+ Strings.checkNotBlank(encoding, "Encoding inválido!");
+
+ try {
+
+ getFlatFile().read(FileUtils.readLines(file, encoding));
+
+ } catch (IOException e) {
+
+ e.printStackTrace();
+ }
+
+ return (FF) this;
+ }
+
+ /**
+ *
+ * Escreve um arquivo do layout da instancia com enconding UTF-8.
+ *
+ *
+ * @return arquivo texto
+ * @throws IOException
+ */
+ public File write() throws IOException {
+
+ Objects.checkNotNull(getFlatFile(), "Arquivo TXT a ser importado nulo!");
+
+ File f = File.createTempFile(this.getClass().getName() + ""
+ + new Date().getTime(), "_jnfmtmp.txt");
+
+ FileUtils.writeLines(f, getFlatFile().write());
+
+ return f;
+ }
+
+ /**
+ *
+ * Escreve um arquivo do layout da instancia.
+ *
+ * @param encoding - Econding em que o arquivo será escrito
+ * @return arquivo texto
+ * @throws IOException
+ */
+ public File write(String encoding) throws IOException {
+
+ if (getFlatFile() != null) {
+
+ File f = File.createTempFile(this.getClass().getName() + ""
+ + new Date().getTime(), "_jnfmtmp.txt");
+
+ FileUtils.writeLines(f, getFlatFile().write(), encoding);
+
+ return f;
+
+ } else{
+
+ throw new IllegalArgumentException(new NullPointerException(
+ "Arquivo TXT a ser importado nulo!"));
+ }
+ }
+
+ /**
+ *
+ * Escreve um arquivo do layout da instancia.
+ *
+ * @param arquivoRemessaFisico
+ * @throws IOException
+ */
+ protected void write(File arquivoRemessaFisico) throws IOException{
+
+ if(arquivoRemessaFisico == null){
+ throw new IllegalArgumentException(new NullPointerException(
+ "Arquivo TXT a ser importado nulo!"));
+ }
+
+ FileUtils.writeLines(arquivoRemessaFisico, getFlatFile().write(), "\r\n");
+ }
+
+ protected void writeLines(File arquivoRemessaFisico) throws IOException{
+
+ if(arquivoRemessaFisico == null){
+ throw new IllegalArgumentException(new NullPointerException(
+ "Arquivo TXT a ser importado nulo!"));
+ }
+
+ FileUtils.writeLines(arquivoRemessaFisico, "Cp1252", this.lines, "\r\n");
+ //FileUtils.writeLines(file, encoding, lines, lineEnding);
+ }
+
+ protected void writeLines() throws IOException{
+ this.lines.addAll(getFlatFile().write());
+
+ flatFile = null;
+ configure();
+ }
+
+ /**
+ *
+ * @param arquivoRemessaFisico
+ * @param arquivoRemessa
+ * @throws FileNotFoundException
+ * @throws IOException
+ */
+ public List gerarRemessa(File arquivoRemessaFisico, ArquivoRemessa arquivoRemessa) throws FileNotFoundException, IOException{
+
+ //log.info("Gerando Remessa: " + cfgFile.name());
+ //log.info("INICIO - Bloco de Header...");
+
+ if(arquivoRemessa != null && arquivoRemessa.getItens() != null) {
+ for(ArquivoRemessaItemInteface arquivoRemessaItem : arquivoRemessa.getItens()){
+ createHeader(arquivoRemessaItem.getCabecalhoRemessa());
+ //log.info("FIM - Bloco de Header...");
+
+ //log.info("INICIO - Bloco de Titulos...");
+ for (DetalheObrigatorio titulo : arquivoRemessaItem.getTitulos()) {
+ createTransacaoTitulos(titulo);
+ }
+ //log.info("FIM - Bloco de Titulos...");
+
+ //log.info("INICIO - Bloco de Trailler...");
+ createTrailler(arquivoRemessaItem.getRodapeRemessa());
+ //log.info("FIM - Bloco de Trailler...");
+
+ //log.info("INICIO - Gerando arquivo...");
+ writeLines();
+ //log.info("FIM - Gerando arquivo...");
+ }
+
+ }
+ writeLines(arquivoRemessaFisico);
+
+ return this.lines;
+ }
+
+
+ public ArquivoRetorno lerRetorno(File arquivoRetornoFisico) throws FileNotFoundException, IOException{
+
+ //log.info("Gerando Retorno: " + cfgFile.name());
+ //log.info("INICIO - Bloco de Header...");
+
+ read(arquivoRetornoFisico);
+
+ return loadInfo();
+ }
+
+ private ArquivoRetorno loadInfo() {
+
+ ArquivoRetorno arquivoRetorno = new ArquivoRetorno();
+
+ Record header = getFlatFile().getRecord("Header");
+
+ ArquivoRetornoItem arquivoRetornoItem = new ArquivoRetornoItem();
+
+ arquivoRetornoItem.setCabecalhoRetorno(readHeader(header));
+
+ Collection registrosDeTransacoes = getFlatFile().getRecords(
+ "TransacaoTitulo");
+
+ List titulos = readTransacaoTitulos(registrosDeTransacoes);
+
+ for(DetalheRetorno titulo : titulos){
+ arquivoRetornoItem.addTitulo(titulo);
+ }
+
+
+ Record trailler = getFlatFile().getRecord("Trailler");
+
+ arquivoRetornoItem.setRodapeRetorno(readTrailler(trailler));
+
+ arquivoRetorno.addItem(arquivoRetornoItem);
+
+ return arquivoRetorno;
+ }
+
+
+ protected abstract void createHeader(CabecalhoRemessa cabecalhoRemessaParam);
+
+ protected abstract void createTransacaoTitulos(DetalheObrigatorio tituloParam);
+
+ protected abstract Record createDadosBoletos(DadosBoleto boleto);
+
+ protected abstract Record createRateioDeCredito(RateioDeCredito rateioDeCredito);
+
+ protected abstract void createTrailler(RodapeRemessa trailler);
+
+ protected abstract CabecalhoRetorno readHeader(Record header);
+
+ protected abstract List readTransacaoTitulos(Collection registrosDeTransacoes);
+
+ protected abstract RodapeRetorno readTrailler(Record trailler);
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/BancoBrasilFlatFile.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/BancoBrasilFlatFile.java
new file mode 100644
index 000000000..ded93d71c
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/BancoBrasilFlatFile.java
@@ -0,0 +1,280 @@
+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.bancobrasil.CabecalhoLoteRemessaBancoBrasil;
+import com.rjconsultores.ventaboletos.blocos.bancobrasil.CabecalhoRemessaBancoBrasil;
+import com.rjconsultores.ventaboletos.blocos.bancobrasil.DetalheObrigatorioDadosPagadorBancoBrasil;
+import com.rjconsultores.ventaboletos.blocos.bancobrasil.DetalheObrigatorioDadosTitulosBancoBrasil;
+import com.rjconsultores.ventaboletos.blocos.bancobrasil.RodapeRemessaBancoBrasil;
+import com.rjconsultores.ventaboletos.blocos.bancobrasil.RodapeRemessaLoteBancoBrasil;
+import com.rjconsultores.ventaboletos.enuns.BancoLayout;
+import com.rjconsultores.ventaboletos.utils.FormataUtil;
+
+public class BancoBrasilFlatFile extends AbstractFlatFile implements RemessaInterface {
+
+ protected BancoBrasilFlatFile() {
+ super(BancoLayout.BB_240_Envio);
+ }
+
+ @Override
+ protected void createHeader(CabecalhoRemessa cabecalhoRemessaParam) {
+
+ Record header = getFlatFile().createRecord("HeaderArquivo");
+
+ CabecalhoRemessaBancoBrasil cabecalhoRemessa = (CabecalhoRemessaBancoBrasil) cabecalhoRemessaParam;
+
+ //header.setValue("CodComp", FormataUtil.formatarValorPorTamanho("001", 3));
+ if(cabecalhoRemessa.getLoteServico() != null){
+ header.setValue("LoteServico", FormataUtil.formatarValorPorTamanhoZeroEsquerda(cabecalhoRemessa.getLoteServico().toString(), 4));
+ }
+ //header.setValue("TipoRegistro", FormataUtil.formatarValorPorTamanho("0", 1));
+ //header.setValue("UsoExclusivo", FormataUtil.formatarValorPorTamanho(" ", 9));
+ header.setValue("CpfCnpj", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getCpfCnpj().toString(), 1));
+ header.setValue("NumCpfCnpj", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumCpfCnpj(), 14));
+ header.setValue("NumConvenio", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumConvenio(), 9));
+ //header.setValue("CobrancaCedente", FormataUtil.formatarValorPorTamanho("0014", 4));
+ header.setValue("NumCarteira", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumCarteira(), 2));
+ header.setValue("NumVarCarteira", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumVarCarteira(), 3));
+ //header.setValue("Brancos1", FormataUtil.formatarValorPorTamanho(" ", 2));
+ header.setValue("NumAgencia", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumAgencia(), 5));
+ header.setValue("DigAgencia", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getDigAgencia(), 1));
+ header.setValue("NumContaCorrente", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumContaCorrente(), 12));
+ header.setValue("DigContaCorrente", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getDigContaCorrente(), 1));
+ header.setValue("DigAgenciaConta", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getDigAgenciaConta(), 1));
+ header.setValue("NomeEmpresa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNomeEmpresa(), 30));
+ //header.setValue("NomeBanco", FormataUtil.formatarValorPorTamanho("BANCO DO BRASIL S.A.", 30));
+ //header.setValue("Brancos3", FormataUtil.formatarValorPorTamanho(" ", 10));
+ //header.setValue("RemessaRetorno", FormataUtil.formatarValorPorTamanho("1", 1));
+ header.setValue("DataGeracao", FormataUtil.formataData(cabecalhoRemessa.getDataGeracao()));
+ header.setValue("HoraGeracao", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getHoraGeracao().toString(), 6));
+ header.setValue("NumRemessa", FormataUtil.formatarValorPorTamanhoZeroEsquerda(cabecalhoRemessa.getNumeroSequencialRemessa().toString(), 6));
+ //header.setValue("NumeroVersaoLayout", FormataUtil.formatarValorPorTamanho("083", 6));
+ header.setValue("DensidadeArquivo", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getDensidadeArquivo(), 5));
+ //header.setValue("Brancos4", FormataUtil.formatarValorPorTamanho(" ", 20));
+ //header.setValue("Brancos5", FormataUtil.formatarValorPorTamanho(" ", 20));
+ //header.setValue("Brancos6", FormataUtil.formatarValorPorTamanho(" ", 29));
+
+ getFlatFile().addRecord(header);
+
+ createHeaderLote(cabecalhoRemessa.getCabecalhoLoteRemessaBancoBrasil());
+
+ }
+
+ private void createHeaderLote(CabecalhoLoteRemessaBancoBrasil cabecalhoLote) {
+
+ Record header = getFlatFile().createRecord("HeaderLote");
+
+ //header.setValue("CodComp", FormataUtil.formatarValorPorTamanho("001", 3));
+ if(cabecalhoLote.getLoteServico() != null){
+ header.setValue("LoteServico", FormataUtil.formatarValorPorTamanhoZeroEsquerda(cabecalhoLote.getLoteServico().toString(), 4));
+ }
+ //header.setValue("TipoRegistro", FormataUtil.formatarValorPorTamanho("1", 1));
+ //header.setValue("TipoOperacao", FormataUtil.formatarValorPorTamanho("R", 1));
+ //header.setValue("TipoServico", FormataUtil.formatarValorPorTamanho("02", 2));
+ //header.setValue("UsoExclusivo", FormataUtil.formatarValorPorTamanho(" ", 2));
+ //header.setValue("NumeroVersaoLote", FormataUtil.formatarValorPorTamanho("042", 3));
+ //header.setValue("UsoExclusivo1", FormataUtil.formatarValorPorTamanho(" ", 1));
+ header.setValue("CpfCnpj", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getCpfCnpj().toString(), 1));
+ header.setValue("NumCpfCnpj", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNumCpfCnpj(), 15));
+ header.setValue("NumConvenio", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNumConvenio(), 9));
+ //header.setValue("CobrancaCedente", FormataUtil.formatarValorPorTamanho("0014", 4));
+ header.setValue("NumCarteira", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNumCarteira(), 2));
+ header.setValue("NumVarCarteira", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNumVarCarteira(), 3));
+ header.setValue("RemessaTeste", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getRemessaTesteID(), 2));
+ header.setValue("NumAgencia", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNumAgencia(), 5));
+ header.setValue("DigAgencia", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getDigAgencia(), 1));
+ header.setValue("NumContaCorrente", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNumContaCorrente(), 12));
+ header.setValue("DigContaCorrente", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getDigContaCorrente(), 1));
+ header.setValue("DigAgenciaConta", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getDigAgenciaConta(), 1));
+ header.setValue("NomeEmpresa", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNomeEmpresa(), 30));
+ //header.setValue("Mensagem1", FormataUtil.formatarValorPorTamanho("", 40));
+ //header.setValue("Mensagem2", FormataUtil.formatarValorPorTamanho("", 40));
+ header.setValue("NumeroRemessa", FormataUtil.formatarValorPorTamanhoZeroEsquerda(cabecalhoLote.getNumeroRemessa().toString(), 8));
+ header.setValue("DataGeracao", FormataUtil.formataData(cabecalhoLote.getDataGeracao()));
+ header.setValue("DataCredito", FormataUtil.formataData(cabecalhoLote.getDataCredito()));
+ //header.setValue("UsoExclusivo2", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNomeEmpresa(), 33));
+
+ getFlatFile().addRecord(header);
+ }
+
+ @Override
+ protected void createTransacaoTitulos(DetalheObrigatorio tituloParam) {
+
+ Record transacaoTitulos = getFlatFile().createRecord("SegmentoP");
+
+ DetalheObrigatorioDadosTitulosBancoBrasil dadosTitulosBancoBrasil = (DetalheObrigatorioDadosTitulosBancoBrasil) tituloParam;
+
+ //transacaoTitulos.setValue("IDReg", FormataUtil.formatarValorPorTamanho("001", 3));
+ if(dadosTitulosBancoBrasil.getLoteServico() != null){
+ transacaoTitulos.setValue("LoteServico", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosTitulosBancoBrasil.getLoteServico().toString(), 4));
+ }
+ //transacaoTitulos.setValue("TipoRegistro", FormataUtil.formatarValorPorTamanho("3", 1));
+ transacaoTitulos.setValue("NumSeqRegistro", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosTitulosBancoBrasil.getNumeroSequencialRegistro().toString(), 5));
+ //transacaoTitulos.setValue("CodSegmento", FormataUtil.formatarValorPorTamanho("P", 1));
+ //transacaoTitulos.setValue("Brancos1", FormataUtil.formatarValorPorTamanho(" ", 1));
+ //transacaoTitulos.setValue("CodigoRemessa", FormataUtil.formatarValorPorTamanho("01", 2));
+ transacaoTitulos.setValue("NumAgencia", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getNumAgencia(), 5));
+ transacaoTitulos.setValue("DigAgencia", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getDigAgencia(), 1));
+ transacaoTitulos.setValue("NumContaCorrente", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getNumContaCorrente(), 12));
+ transacaoTitulos.setValue("DigContaCorrente", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getDigContaCorrente(), 1));
+ transacaoTitulos.setValue("DigAgenciaConta", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getDigAgenciaConta(), 1));
+ transacaoTitulos.setValue("NossoNumero", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getNossoNumeroBB(), 20));
+ //transacaoTitulos.setValue("CodCarteira", FormataUtil.formatarValorPorTamanho("7", 1));
+ //transacaoTitulos.setValue("FormaCadTituloBanco", FormataUtil.formatarValorPorTamanho("0", 1));
+ //transacaoTitulos.setValue("TipoDocumento", FormataUtil.formatarValorPorTamanho("0", 1));
+ //transacaoTitulos.setValue("IdentEmissaoBloqueto", FormataUtil.formatarValorPorTamanho("0", 1));
+ //transacaoTitulos.setValue("IdentDistribuicao", FormataUtil.formatarValorPorTamanho("0", 1));
+ transacaoTitulos.setValue("NumeroDoDocumento", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getNumeroDoDocumento(), 15));
+ transacaoTitulos.setValue("Vencimento", FormataUtil.formataData(dadosTitulosBancoBrasil.getVencimento()));
+ transacaoTitulos.setValue("Valor", dadosTitulosBancoBrasil.getValor());
+ //transacaoTitulos.setValue("AgenciaCobradora", FormataUtil.formatarValorPorTamanho("00000", 5));
+ //transacaoTitulos.setValue("DigAgenciaCobradora", FormataUtil.formatarValorPorTamanho(" ", 1));
+ //transacaoTitulos.setValue("EspecieDeTitulo", FormataUtil.formatarValorPorTamanho("2", 1));
+ transacaoTitulos.setValue("Aceite", dadosTitulosBancoBrasil.getAceite().getValue());
+ transacaoTitulos.setValue("Emissao", FormataUtil.formataData(dadosTitulosBancoBrasil.getEmissao()));
+ transacaoTitulos.setValue("CodMora", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getCodMora().toString(), 1));
+ transacaoTitulos.setValue("DataMora", FormataUtil.formataDataToString(dadosTitulosBancoBrasil.getDataMora(), "00000000"));
+ transacaoTitulos.setValue("JurosDeMora", dadosTitulosBancoBrasil.getJurosDeMora());
+ transacaoTitulos.setValue("CodigoDesconto", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getCodigoDesconto().toString(), 1));
+ transacaoTitulos.setValue("DataDesconto", FormataUtil.formataDataToString(dadosTitulosBancoBrasil.getDataDesconto(), "00000000"));
+ transacaoTitulos.setValue("DescontoConcedido", dadosTitulosBancoBrasil.getDescontoConcedido());
+ transacaoTitulos.setValue("IOF_Devido", dadosTitulosBancoBrasil.getIOF_Devido());
+ transacaoTitulos.setValue("AbatimentoConcedido", dadosTitulosBancoBrasil.getAbatimentoConcedido());
+ transacaoTitulos.setValue("NossoNumeroEmp", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getNossoNumeroEmp(), 25));
+ transacaoTitulos.setValue("CodigoProtesto", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getCodigoProtesto().toString(), 1));
+ transacaoTitulos.setValue("DiasProtesto", FormataUtil.formatarValorPorTamanho(dadosTitulosBancoBrasil.getDiasProtesto().toString(), 2));
+ //transacaoTitulos.setValue("CodigoBaixa", FormataUtil.formatarValorPorTamanho("0", 1));
+ //transacaoTitulos.setValue("DiasBaixa", FormataUtil.formatarValorPorTamanho("000", 3));
+ //transacaoTitulos.setValue("Moeda", FormataUtil.formatarValorPorTamanho("09", 2));
+ transacaoTitulos.setValue("NumeroContrato", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosTitulosBancoBrasil.getNumeroContrato().toString(), 10));
+ //transacaoTitulos.setValue("UsoExclusivo", FormataUtil.formatarValorPorTamanho("0", 1));
+
+ getFlatFile().addRecord(transacaoTitulos);
+ createTransacaoTitulosSeguimentoQ(transacaoTitulos, dadosTitulosBancoBrasil.getDetalheObrigatorioDadosPagadorBancoBrasil());
+
+ }
+
+ private void createTransacaoTitulosSeguimentoQ(Record recordFather, DetalheObrigatorioDadosPagadorBancoBrasil dadosPagadorBancoBrasil) {
+
+ Record transacaoTitulos = getFlatFile().createRecord("SegmentoQ");
+
+ //transacaoTitulos.setValue("IDReg", FormataUtil.formatarValorPorTamanho("001", 3));
+ if(dadosPagadorBancoBrasil.getLoteServico() != null){
+ transacaoTitulos.setValue("LoteServico", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosPagadorBancoBrasil.getLoteServico().toString(), 4));
+ }
+ //transacaoTitulos.setValue("TipoRegistro", FormataUtil.formatarValorPorTamanho("3", 1));
+ transacaoTitulos.setValue("NumSeqRegistro", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosPagadorBancoBrasil.getNumeroSequencialRegistro().toString(), 5));
+ //transacaoTitulos.setValue("CodSegmento", FormataUtil.formatarValorPorTamanho("Q", 1));
+ transacaoTitulos.setValue("Brancos1", FormataUtil.formatarValorPorTamanho(" ", 1));
+ transacaoTitulos.setValue("CodigoRemessa", FormataUtil.formatarValorPorTamanho("01", 2));
+ transacaoTitulos.setValue("TipoInscricaoSacado", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getTipoInscricaoSacado().toString(), 1));
+ transacaoTitulos.setValue("NumeroInscricaoSacado", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getNumeroInscricaoSacado(), 15));
+ transacaoTitulos.setValue("NomeSacado", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getNomeSacado(), 40));
+ transacaoTitulos.setValue("LogradouroSacado", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getLogradouroSacado(), 40));
+ transacaoTitulos.setValue("BairroSacado", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getBairroSacado(), 15));
+ transacaoTitulos.setValue("CepSacado", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosPagadorBancoBrasil.getCepSacado().toString(), 5));
+ transacaoTitulos.setValue("SufixoCep", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosPagadorBancoBrasil.getSufixoCep().toString(), 3));
+ transacaoTitulos.setValue("Cidade", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getCidade(), 15));
+ transacaoTitulos.setValue("Estado", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getEstado(), 2));
+ try{
+ transacaoTitulos.setValue("TipoSacadorAvalista", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getTipoSacadorAvalista().toString(), 1));
+ transacaoTitulos.setValue("SacadorAvalista", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getSacadorAvalista().toString(), 15));
+ transacaoTitulos.setValue("NomeSacadorAvalista", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getNomeSacadorAvalista(), 40));
+ }catch(Exception e){
+
+ }
+ try{
+ transacaoTitulos.setValue("CodBancoCorresp", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getCodBancoCorresp().toString(), 3));
+ }catch(Exception e){
+
+ }
+ transacaoTitulos.setValue("NossoNumeroNoBancoCorresp", FormataUtil.formatarValorPorTamanho(dadosPagadorBancoBrasil.getNossoNumeroNoBancoCorresp(), 20));
+ //transacaoTitulos.setValue("UsoExclusivo", FormataUtil.formatarValorPorTamanho(" ", 8));
+
+ recordFather.addInnerRecord(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) {
+
+ RodapeRemessaBancoBrasil rodapeRemessaBancoBrasil = (RodapeRemessaBancoBrasil) trailler;
+
+ createTraillerLote(rodapeRemessaBancoBrasil.getRodapeRemessaLoteBancoBrasil());
+
+ Record traillerArquivo = getFlatFile().createRecord("TraillerArquivo");
+
+ String loteValue = getFlatFile().getRecord("HeaderArquivo").getValue("LoteServico").toString();
+
+ //traillerArquivo.setValue("IDReg", FormataUtil.formatarValorPorTamanho("001", 3));
+ if(!loteValue.equals("0000")){
+ traillerArquivo.setValue("LoteServico", FormataUtil.formatarValorPorTamanhoZeroEsquerda(loteValue, 4));
+ }else{
+ //traillerArquivo.setValue("LoteServico", FormataUtil.formatarValorPorTamanho("9999", 4));
+ }
+ //traillerArquivo.setValue("TipoRegistro", FormataUtil.formatarValorPorTamanho("9", 1));
+ //traillerArquivo.setValue("UsoExclusivo1", FormataUtil.formatarValorPorTamanho(" ", 9));
+ traillerArquivo.setValue("QtdLotes", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaBancoBrasil.getQtdLotes().toString(), 6));
+ traillerArquivo.setValue("QtdArquivos", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaBancoBrasil.getQtdArquivos().toString(), 6));
+ traillerArquivo.setValue("QtdContas", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaBancoBrasil.getQtdContas().toString(), 6));
+ //traillerArquivo.setValue("UsoExclusivo2", FormataUtil.formatarValorPorTamanho(" ", 205));
+
+ getFlatFile().addRecord(traillerArquivo);
+
+ }
+
+ private void createTraillerLote(RodapeRemessaLoteBancoBrasil rodapeRemessaLoteBancoBrasil) {
+
+
+ Record traillerArquivo = getFlatFile().createRecord("TraillerLote");
+
+ //traillerArquivo.setValue("IDReg", FormataUtil.formatarValorPorTamanho("001", 3));
+ traillerArquivo.setValue("LoteServico", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaLoteBancoBrasil.getLoteServico().toString(), 4));
+ //traillerArquivo.setValue("TipoRegistro", FormataUtil.formatarValorPorTamanho("5", 1));
+ //traillerArquivo.setValue("UsoExclusivo1", FormataUtil.formatarValorPorTamanho(" ", 9));
+ traillerArquivo.setValue("QtdRegistros", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaLoteBancoBrasil.getQtdRegistros().toString(), 6));
+ //traillerArquivo.setValue("UsoExclusivo2", FormataUtil.formatarValorPorTamanho(" ", 217));
+
+ getFlatFile().addRecord(traillerArquivo);
+ }
+
+ @Override
+ protected CabecalhoRetorno readHeader(Record header) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ protected List readTransacaoTitulos(Collection registrosDeTransacoes) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ protected RodapeRetorno readTrailler(Record trailler) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/BradescoFlatFile.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/BradescoFlatFile.java
new file mode 100644
index 000000000..3acd9a00e
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/BradescoFlatFile.java
@@ -0,0 +1,153 @@
+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.bradesco.CabecalhoRemessaBradesco;
+import com.rjconsultores.ventaboletos.blocos.bradesco.DetalheObrigatorioBradesco;
+import com.rjconsultores.ventaboletos.enuns.BancoLayout;
+import com.rjconsultores.ventaboletos.utils.FormataUtil;
+
+public class BradescoFlatFile extends AbstractFlatFile implements RemessaInterface {
+
+ public BradescoFlatFile() {
+ super(BancoLayout.BRADESCO_400_Envio);
+ }
+
+ @Override
+ protected void createHeader(CabecalhoRemessa cabecalhoRemessaParam) {
+
+ Record header = getFlatFile().createRecord("Header");
+
+ CabecalhoRemessaBradesco cabecalhoRemessa = (CabecalhoRemessaBradesco) cabecalhoRemessaParam;
+
+ //header.setValue("IdentificacaoRemessa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getIdentificacaoRemessa(), 1));
+ //header.setValue("LiteralRemessa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getLiteralRemessa(), 7));
+ //header.setValue("CodigoServico", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getCodigoServico(), 2));
+ //header.setValue("LiteralServico", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getLiteralServico(), 8));
+ header.setValue("CodigoDaEmpresa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getCodigoEmpresa().toString(), 20));
+ header.setValue("NomeDaEmpresa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNomeEmpresa(), 30));
+ //header.setValue("CodigoCompensacao", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getCodigoBanco().toString(), 3));
+ //header.setValue("NomeBanco", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNomeBanco(), 8));
+ header.setValue("DataGravacaoArquivo", FormataUtil.formataDataToString(cabecalhoRemessa.getDataGravacao(), "000000", "ddMMyy"));
+ //header.setValue("IdentificacaoSistema", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getIdentificacaoSistema(), 2));
+ header.setValue("NumeroSequencialRemessa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumeroSequencialRemessa().toString(), 7));
+ header.setValue("NumeroSequencialRegistro", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumeroSequencialRegistro().toString(), 6));
+
+ getFlatFile().addRecord(header);
+ }
+
+ @Override
+ protected void createTransacaoTitulos(DetalheObrigatorio tituloParam) {
+
+ Record transacaoTitulos = getFlatFile().createRecord("TransacaoTitulo");
+
+ DetalheObrigatorioBradesco titulo = (DetalheObrigatorioBradesco) tituloParam;
+
+ transacaoTitulos.setValue("AgenciaDebito", FormataUtil.formatarValorPorTamanho(" ", 5));
+ transacaoTitulos.setValue("DigitoAgenciaDebito", FormataUtil.formatarValorPorTamanho(" ", 1));
+ transacaoTitulos.setValue("RazaoContaCorrente", FormataUtil.formatarValorPorTamanho(" ", 5));
+ transacaoTitulos.setValue("ContaCorrente", FormataUtil.formatarValorPorTamanho(" ", 7));
+ transacaoTitulos.setValue("DigitoContaCorrrente", FormataUtil.formatarValorPorTamanho(" ", 1));
+ transacaoTitulos.setValue("Carteira", FormataUtil.formatarValorPorTamanho(titulo.getCarteira(), 3));
+ transacaoTitulos.setValue("Agencia", FormataUtil.formatarValorPorTamanho(titulo.getAgencia(), 5));
+ transacaoTitulos.setValue("Contacorrente", FormataUtil.formatarValorPorTamanho(titulo.getContacorrente(), 7));
+ transacaoTitulos.setValue("DvConta", FormataUtil.formatarValorPorTamanho(titulo.getDvConta(), 1));
+ transacaoTitulos.setValue("NumeroControleDoParticipante", FormataUtil.formatarValorPorTamanho(titulo.getNumeroControleDoParticipante(), 25));
+ transacaoTitulos.setValue("BancoCamaraCompensacao", FormataUtil.formatarValorPorTamanho("0", 3));
+ transacaoTitulos.setValue("Multa", titulo.existeMulta());
+ transacaoTitulos.setValue("PercentualMulta", titulo.getPercentualMulta() );
+ transacaoTitulos.setValue("NossoNumeroComDigito", FormataUtil.formatarValorPorTamanho(titulo.getNossoNumeroComDigito(), 12));
+ transacaoTitulos.setValue("DescontoBonificacaoDia", FormataUtil.formatarValorPorTamanho("0", 10));
+ transacaoTitulos.setValue("DadosIgnorados2", FormataUtil.formatarValorPorTamanho("", 15));
+ transacaoTitulos.setValue("QtdPagamento", FormataUtil.formatarValorPorTamanho("", 2));
+ //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("Valor", titulo.getValor());
+ //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çãoo", 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.formataDataToString(titulo.getDataLimiteDesconto(), "000000", "ddMMyy"));
+ transacaoTitulos.setValue("ValorDesconto", titulo.getValorDesconto());
+ transacaoTitulos.setValue("ValorIOF", titulo.getValorIOF());
+ transacaoTitulos.setValue("ValorAbatimentoConcedido", titulo.getValorAbatimentoConcedido());
+ transacaoTitulos.setValue("TipoInscricaoPagador", FormataUtil.formatarValorPorTamanho(titulo.getTipoInscricaoPagador().toString(), 2));
+ transacaoTitulos.setValue("NumeroInscricaoPagador", FormataUtil.formatarValorPorTamanho(titulo.getNumeroInscricaoPagador(), 14));
+ 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("CEP_Prefixo", FormataUtil.formatarValorPorTamanho(titulo.getCEP_Prefixo().toString(), 5));
+ transacaoTitulos.setValue("CEP_Sufixo", FormataUtil.formatarValorPorTamanho(titulo.getCEP_Sufixo().toString(), 3));
+ transacaoTitulos.setValue("Sacador_Avalista_Mensagem2", FormataUtil.formatarValorPorTamanho(titulo.getSacador_Avalista_Mensagem2(), 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){ }
+
+ RateioDeCredito rateioDeCredito = titulo.getRateioDeCredito();
+
+ try{
+ if(dadosBoleto != null){
+ transacaoTitulos.addInnerRecord(createRateioDeCredito(rateioDeCredito));
+ }
+ }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 readTransacaoTitulos(Collection registrosDeTransacoes) {
+ throw new UnsupportedOperationException("Somente classe de Retorno.");
+ }
+
+ @Override
+ protected RodapeRetorno readTrailler(Record trailler) {
+ throw new UnsupportedOperationException("Somente classe de Retorno.");
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/BradescoProcessaRetorno.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/BradescoProcessaRetorno.java
new file mode 100644
index 000000000..67fe8aaaa
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/BradescoProcessaRetorno.java
@@ -0,0 +1,139 @@
+package com.rjconsultores.ventaboletos.layouts;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+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.bradesco.DetalheRetornoBradesco;
+import com.rjconsultores.ventaboletos.enuns.BancoLayout;
+import com.rjconsultores.ventaboletos.enuns.MotivoOcorrenciaBradesco;
+import com.rjconsultores.ventaboletos.enuns.OcorrenciaBradesco;
+
+public class BradescoProcessaRetorno extends AbstractFlatFile implements RetornoInteface {
+
+ protected BradescoProcessaRetorno() {
+ super(BancoLayout.BRADESCO_400_Retorno);
+ }
+
+ @Override
+ protected void createHeader(CabecalhoRemessa cabecalhoRemessaParam) {
+ throw new UnsupportedOperationException("Somente classe de Envio.");
+ }
+
+ @Override
+ protected void createTransacaoTitulos(DetalheObrigatorio tituloParam) {
+ throw new UnsupportedOperationException("Somente classe de Envio.");
+ }
+
+ @Override
+ protected Record createDadosBoletos(DadosBoleto boleto) {
+ throw new UnsupportedOperationException("Somente classe de Envio.");
+ }
+
+ @Override
+ protected Record createRateioDeCredito(RateioDeCredito rateioDeCredito) {
+ throw new UnsupportedOperationException("Somente classe de Envio.");
+ }
+
+ @Override
+ protected void createTrailler(RodapeRemessa trailler) {
+ throw new UnsupportedOperationException("Somente classe de Envio.");
+ }
+
+ @Override
+ protected CabecalhoRetorno readHeader(Record header) {
+
+ CabecalhoRetorno cabecalhoRetorno = new CabecalhoRetorno();
+ String codEmpresa = header.getValue("CodigoDaEmpresa");
+ String numeroDoAvisoBancario = header.getValue("NumeroDoAvisoBancario");
+
+ cabecalhoRetorno.setCodEmpresa(codEmpresa);
+ cabecalhoRetorno.setNumeroDoAvisoBancario(numeroDoAvisoBancario);
+
+ return cabecalhoRetorno;
+ }
+
+ @Override
+ protected List readTransacaoTitulos(Collection registrosDeTransacoes) {
+
+ List retornos = new ArrayList();
+
+ for (Record record : registrosDeTransacoes) {
+
+ DetalheRetornoBradesco detalheRetorno = new DetalheRetornoBradesco();
+
+ String numeroControleDoParticipante = record.getValue("NumeroControleDoParticipante");
+ String codigoDeOcorrencia = record.getValue("CodigoDeOcorrencia");
+ String codigoDeMotivo1 = record.getValue("CodigoDeMotivo1");
+ String codigoDeMotivo2 = record.getValue("CodigoDeMotivo2");
+ String codigoDeMotivo3 = record.getValue("CodigoDeMotivo3");
+ String codigoDeMotivo4 = record.getValue("CodigoDeMotivo4");
+ String codigoDeMotivo5 = record.getValue("CodigoDeMotivo5");
+
+ OcorrenciaBradesco ocorrencia = OcorrenciaBradesco.getInstance(codigoDeOcorrencia);
+ detalheRetorno.setNumeroControleDoParticipante(numeroControleDoParticipante);
+ detalheRetorno.setOcorrencia(ocorrencia);
+
+ if(checkIsNullOrBlank(codigoDeMotivo1)){
+ MotivoOcorrenciaBradesco motivoOcorrencia = MotivoOcorrenciaBradesco.getInstance(ocorrencia, codigoDeMotivo1);
+ detalheRetorno.addMotivoOcorrencia(motivoOcorrencia);
+ }
+
+ if(checkIsNullOrBlank(codigoDeMotivo2)){
+ MotivoOcorrenciaBradesco motivoOcorrencia = MotivoOcorrenciaBradesco.getInstance(ocorrencia, codigoDeMotivo2);
+ detalheRetorno.addMotivoOcorrencia(motivoOcorrencia);
+ }
+
+ if(checkIsNullOrBlank(codigoDeMotivo3)){
+ MotivoOcorrenciaBradesco motivoOcorrencia = MotivoOcorrenciaBradesco.getInstance(ocorrencia, codigoDeMotivo3);
+ detalheRetorno.addMotivoOcorrencia(motivoOcorrencia);
+ }
+
+ if(checkIsNullOrBlank(codigoDeMotivo4)){
+ MotivoOcorrenciaBradesco motivoOcorrencia = MotivoOcorrenciaBradesco.getInstance(ocorrencia, codigoDeMotivo4);
+ detalheRetorno.addMotivoOcorrencia(motivoOcorrencia);
+ }
+
+ if(checkIsNullOrBlank(codigoDeMotivo5)){
+ MotivoOcorrenciaBradesco motivoOcorrencia = MotivoOcorrenciaBradesco.getInstance(ocorrencia, codigoDeMotivo5);
+ detalheRetorno.addMotivoOcorrencia(motivoOcorrencia);
+ }
+
+
+ retornos.add(detalheRetorno);
+ }
+
+ return retornos;
+ }
+
+ private boolean checkIsNullOrBlank(String value){
+
+ if(value != null){
+ return StringUtils.isEmpty(value);
+ }
+
+ return Boolean.TRUE;
+ }
+
+ @Override
+ protected RodapeRetorno readTrailler(Record trailler) {
+
+ RodapeRetorno rodapeRetorno = new RodapeRetorno();
+
+
+ return rodapeRetorno;
+
+
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/CNABFactory.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/CNABFactory.java
new file mode 100644
index 000000000..d18a37ecf
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/CNABFactory.java
@@ -0,0 +1,46 @@
+package com.rjconsultores.ventaboletos.layouts;
+
+import com.rjconsultores.ventaboletos.enuns.BancoLayout;
+
+public class CNABFactory {
+
+ public static RemessaInterface createRemessa(BancoLayout bancoLayout){
+
+ switch (bancoLayout) {
+ case BRADESCO_400_Envio:
+ return new BradescoFlatFile();
+ case SANTANDER_400_Envio:
+ return new SantanderFlatFile();
+ case CAIXA_400_Envio:
+ return new CaixaFlatFile();
+ case MERCANTIL_400_Envio:
+ return new MercantilFlatFile();
+ case ITAU_400_Envio:
+ return new ItauFlatFile();
+ case BB_240_Envio:
+ return new BancoBrasilFlatFile();
+ case SICOOB_240_Envio:
+ return new SicoobFlatFile();
+ case SAFRA_400_Envio:
+ return new SafraFlatFile();
+ default:
+ break;
+ }
+
+ return null;
+ }
+
+ public static RetornoInteface createRetorno(BancoLayout bancoLayout){
+
+ switch (bancoLayout) {
+ case BRADESCO_400_Retorno:
+ return new BradescoProcessaRetorno();
+ case ITAU_400_Retorno:
+ return null;
+ default:
+ break;
+ }
+
+ return null;
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/CaixaFlatFile.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/CaixaFlatFile.java
new file mode 100644
index 000000000..22a51beee
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/CaixaFlatFile.java
@@ -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 readTransacaoTitulos(Collection 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...");
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/ItauFlatFile.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/ItauFlatFile.java
new file mode 100644
index 000000000..8d5e4e02c
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/ItauFlatFile.java
@@ -0,0 +1,173 @@
+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.DetalheMulta;
+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.itau.CabecalhoRemessaItau;
+import com.rjconsultores.ventaboletos.blocos.itau.DetalheObrigatorioItau;
+import com.rjconsultores.ventaboletos.enuns.BancoLayout;
+import com.rjconsultores.ventaboletos.utils.FormataUtil;
+
+public class ItauFlatFile extends AbstractFlatFile implements RemessaInterface {
+
+ private static final String SOMENTE_CLASSE_DE_RETORNO = "Somente classe de Retorno.";
+
+ public ItauFlatFile() {
+ super(BancoLayout.ITAU_400_Envio);
+ }
+
+ @Override
+ protected void createHeader(CabecalhoRemessa cabecalhoRemessaParam) {
+
+ Record header = getFlatFile().createRecord("Header");
+
+ CabecalhoRemessaItau cabecalhoRemessa = (CabecalhoRemessaItau) cabecalhoRemessaParam;
+
+ //header.setValue("IdentificacaoRemessa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getIdentificacaoRemessa(), 1));
+ //header.setValue("LiteralRemessa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getLiteralRemessa(), 7));
+ //header.setValue("CodigoDeServico", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getCodigoDeServico(), 2));
+ //header.setValue("LiteralServico", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getLiteralServico(), 15));
+ header.setValue("Agencia", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getAgencia().toString(), 4));
+ //header.setValue("Zeros", "00");
+ header.setValue("Conta", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getConta().toString(), 5));
+ header.setValue("DacConta", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getDacConta().toString(), 1));
+ header.setValue("Brancos1", FormataUtil.formatarValorPorTamanho(" ", 8));
+ header.setValue("NomeEmpresa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNomeEmpresa().toString(), 30));
+ //header.setValue("CodigoCompensacao", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getIdentificacaoRemessa(), 3));
+ //header.setValue("NomeBanco", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getIdentificacaoRemessa(), 15));
+ header.setValue("DataGeracao", FormataUtil.formataData(cabecalhoRemessa.getDataGeracao()));
+ header.setValue("Brancos2", FormataUtil.formatarValorPorTamanho(" ", 294));
+ header.setValue("NumeroSequencialRegistro", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumeroSequencialRegistro().toString(), 6));
+
+ getFlatFile().addRecord(header);
+ }
+
+ @Override
+ protected void createTransacaoTitulos(DetalheObrigatorio tituloParam) {
+
+ Record transacaoTitulos = getFlatFile().createRecord("TransacaoTitulo");
+
+ DetalheObrigatorioItau titulo = (DetalheObrigatorioItau) tituloParam;
+
+ //transacaoTitulos.setValue("CodigoInscricao", FormataUtil.formatarValorPorTamanho(titulo.getCodigoInscricao().toString(), 2));
+ transacaoTitulos.setValue("NumeroInscricao", FormataUtil.formatarValorPorTamanho(titulo.getNumCpfCnpj(), 14));
+ transacaoTitulos.setValue("Agencia", FormataUtil.formatarValorPorTamanho(titulo.getAgencia().toString(), 4));
+ transacaoTitulos.setValue("Zeros", "00");
+ transacaoTitulos.setValue("Conta", FormataUtil.formatarValorPorTamanho(titulo.getConta().toString(), 5));
+ transacaoTitulos.setValue("DacConta", FormataUtil.formatarValorPorTamanho(titulo.getDacConta().toString(), 1));
+ transacaoTitulos.setValue("Brancos1", FormataUtil.formatarValorPorTamanho(" ", 4));
+ transacaoTitulos.setValue("InstrucaoAlegacao", FormataUtil.formatarValorPorTamanho(titulo.getInstrucaoAlegacao().toString(), 4));
+ transacaoTitulos.setValue("UsoDaEmpresa", FormataUtil.formatarValorPorTamanho(titulo.getUsoDaEmpresa(), 25));
+ transacaoTitulos.setValue("NossoNumero", FormataUtil.formatarValorPorTamanho(titulo.getNossoNumero().toString(), 8));
+ transacaoTitulos.setValue("QtdMoeda", titulo.getQtdMoeda());
+ transacaoTitulos.setValue("NrCarteira", FormataUtil.formatarValorPorTamanho(titulo.getNrCarteira().toString(), 3));
+ transacaoTitulos.setValue("UsoDoBanco", FormataUtil.formatarValorPorTamanho(titulo.getUsoDoBanco(), 21));
+// transacaoTitulos.setValue("CodigoCarteira", FormataUtil.formatarValorPorTamanho(titulo.getCodigoCarteira(), 1));
+ transacaoTitulos.setValue("CodigoDeOcorrencia", FormataUtil.formatarValorPorTamanho(titulo.getCodigoDeOcorrencia().toString(), 2));
+ transacaoTitulos.setValue("NumeroDoDocumento", FormataUtil.formatarValorPorTamanho(titulo.getNumeroDoDocumento().toString(), 10));
+ transacaoTitulos.setValue("Vencimento", FormataUtil.formataData(titulo.getVencimento()));
+ transacaoTitulos.setValue("Valor", titulo.getValor());
+ //transacaoTitulos.setValue("CodigoCompensacaoBancoRecebedor", FormataUtil.formatarValorPorTamanho(titulo.getCodigoCompensacaoBancoRecebedor().toString(), 3));
+ transacaoTitulos.setValue("AgenciaCobradora", FormataUtil.formatarValorPorTamanho(titulo.getAgenciaCobradora().toString(), 5));
+ transacaoTitulos.setValue("EspecieDeTitulo", FormataUtil.formatarValorPorTamanho(titulo.getEspecieDeTitulo().toString(), 2));
+ transacaoTitulos.setValue("Aceite", FormataUtil.formatarValorPorTamanho(titulo.getAceite(), 1));
+ transacaoTitulos.setValue("Emissao", FormataUtil.formataData(titulo.getEmissao()));
+ transacaoTitulos.setValue("Instrucao1", FormataUtil.formatarValorPorTamanho(titulo.getInstrucao1(), 2));
+ transacaoTitulos.setValue("Instrucao2", FormataUtil.formatarValorPorTamanho(titulo.getInstrucao2(), 2));
+ transacaoTitulos.setValue("JurosDeMora", titulo.getJurosDeMora());
+ transacaoTitulos.setValue("DataDesconto", FormataUtil.formataData(titulo.getDataDesconto()));
+ transacaoTitulos.setValue("DescontoConcedido", titulo.getDescontoConcedido());
+ transacaoTitulos.setValue("IOF_Devido", titulo.getIOF_Devido());
+ transacaoTitulos.setValue("AbatimentoConcedido", titulo.getAbatimentoConcedido());
+ transacaoTitulos.setValue("TipoInscricaoSacado", FormataUtil.formatarValorPorTamanho(titulo.getTipoInscricaoSacado().getId(), 2));
+ transacaoTitulos.setValue("NumeroInscricaoSacado", FormataUtil.formatarValorPorTamanho(titulo.getNumeroInscricaoSacado().toString(), 14));
+ transacaoTitulos.setValue("NomeSacado", FormataUtil.formatarValorPorTamanho(titulo.getNomeSacado().toString(), 30));
+ transacaoTitulos.setValue("Brancos2", FormataUtil.formatarValorPorTamanho(" ", 2));
+ transacaoTitulos.setValue("LogradouroSacado", FormataUtil.formatarValorPorTamanho(titulo.getLogradouroSacado().toString(), 40));
+ transacaoTitulos.setValue("BairroSacado", FormataUtil.formatarValorPorTamanho(titulo.getBairroSacado().toString(), 12));
+ transacaoTitulos.setValue("CepSacado", FormataUtil.formatarValorPorTamanho(titulo.getCepSacado().toString(), 8));
+ transacaoTitulos.setValue("Cidade", FormataUtil.formatarValorPorTamanho(titulo.getCidade(), 15));
+ transacaoTitulos.setValue("Estado", FormataUtil.formatarValorPorTamanho(titulo.getEstado(), 2));
+ transacaoTitulos.setValue("SacadorAvalista", FormataUtil.formatarValorPorTamanho(titulo.getSacadorAvalista(), 30));
+ transacaoTitulos.setValue("Brancos3", FormataUtil.formatarValorPorTamanho(" ", 2));
+ transacaoTitulos.setValue("DataDeMora", FormataUtil.formataData(titulo.getDataDeMora()));
+ transacaoTitulos.setValue("Prazo", FormataUtil.formatarValorPorTamanho(titulo.getPrazo().toString(), 2));
+ transacaoTitulos.setValue("Brancos4", FormataUtil.formatarValorPorTamanho(" ", 2));
+ transacaoTitulos.setValue("NumeroSequencialRegistro", FormataUtil.formatarValorPorTamanho(titulo.getNumeroSequencialRegistro().toString(), 6));
+
+ DadosBoleto dadosBoleto = titulo.getDadosBoleto();
+
+ try{
+ if(dadosBoleto != null){
+ transacaoTitulos.addInnerRecord(createDadosBoletos(dadosBoleto));
+ }
+ }catch(UnsupportedOperationException e){ }
+
+ DetalheMulta detalheMulta = titulo.getDetalheMulta();
+
+ try{
+ if(detalheMulta != null){
+ transacaoTitulos.addInnerRecord(createDetalheMulta(detalheMulta));
+ }
+ }catch(UnsupportedOperationException e){ }
+
+ getFlatFile().addRecord(transacaoTitulos);
+ }
+
+ @Override
+ protected Record createDadosBoletos(DadosBoleto boleto) {
+ throw new UnsupportedOperationException("Não necessário...");
+ }
+
+ protected Record createDetalheMulta(DetalheMulta detalheMulta) {
+ Record detalhe = getFlatFile().createRecord("DetalheMulta");
+
+ detalhe.setValue("CodigoMulta", FormataUtil.formatarValorPorTamanho(detalheMulta.getCodigoMulta(), 1));
+ detalhe.setValue("DataMulta", FormataUtil.formataData( detalheMulta.getDataMulta()) );
+ detalhe.setValue("ValorMulta", FormataUtil.formatarValorPorTamanho(detalheMulta.getPercentualMulta(), 13));
+ detalhe.setValue("NumeroSequencialRegistro", FormataUtil.formatarValorPorTamanho(detalheMulta.getNumeroSequencial(), 6));
+
+ return detalhe;
+ }
+
+ @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 readTransacaoTitulos(Collection registrosDeTransacoes) {
+ throw new UnsupportedOperationException(SOMENTE_CLASSE_DE_RETORNO);
+ }
+
+ @Override
+ protected RodapeRetorno readTrailler(Record trailler) {
+ throw new UnsupportedOperationException(SOMENTE_CLASSE_DE_RETORNO);
+ }
+
+ @Override
+ protected Record createRateioDeCredito(RateioDeCredito rateioDeCredito) {
+ throw new UnsupportedOperationException("Não necessário...");
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/MercantilFlatFile.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/MercantilFlatFile.java
new file mode 100644
index 000000000..4ea5c8d4d
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/MercantilFlatFile.java
@@ -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çãoo", 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 readTransacaoTitulos(Collection registrosDeTransacoes) {
+ throw new UnsupportedOperationException("Somente classe de Retorno.");
+ }
+
+ @Override
+ protected RodapeRetorno readTrailler(Record trailler) {
+ throw new UnsupportedOperationException("Somente classe de Retorno.");
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/RemessaInterface.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/RemessaInterface.java
new file mode 100644
index 000000000..dde0e1734
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/RemessaInterface.java
@@ -0,0 +1,14 @@
+package com.rjconsultores.ventaboletos.layouts;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.List;
+
+import com.rjconsultores.ventaboletos.ArquivoRemessa;
+
+public interface RemessaInterface {
+
+ public List gerarRemessa(File arquivoRemessaFisico, ArquivoRemessa arquivoRemessa) throws FileNotFoundException, IOException;
+
+}
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/RetornoInteface.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/RetornoInteface.java
new file mode 100644
index 000000000..ed4522cb3
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/RetornoInteface.java
@@ -0,0 +1,12 @@
+package com.rjconsultores.ventaboletos.layouts;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import com.rjconsultores.ventaboletos.ArquivoRetorno;
+
+public interface RetornoInteface {
+
+ public ArquivoRetorno lerRetorno(File arquivoRetornoFisico) throws FileNotFoundException, IOException;
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SafraFlatFile.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SafraFlatFile.java
new file mode 100644
index 000000000..ca93d06d2
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SafraFlatFile.java
@@ -0,0 +1,131 @@
+package com.rjconsultores.ventaboletos.layouts;
+
+import static com.rjconsultores.ventaboletos.utils.FormataUtil.formataDataToString;
+import static com.rjconsultores.ventaboletos.utils.FormataUtil.formatarValorPorTamanho;
+import static com.rjconsultores.ventaboletos.utils.FormataUtil.formatarValorPorTamanhoZeroEsquerda;
+
+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.safra.CabecalhoRemessaSafra;
+import com.rjconsultores.ventaboletos.blocos.safra.DetalheObrigatorioSafra;
+import com.rjconsultores.ventaboletos.blocos.safra.RodapeRemessaSafra;
+import com.rjconsultores.ventaboletos.enuns.BancoLayout;
+
+public class SafraFlatFile extends AbstractFlatFile implements RemessaInterface {
+
+ public SafraFlatFile() {
+ super(BancoLayout.SAFRA_400_Envio);
+ }
+
+ @Override
+ protected void createHeader(CabecalhoRemessa cabecalhoRemessaParam) {
+
+ Record header = getFlatFile().createRecord("Header");
+
+ CabecalhoRemessaSafra cabecalhoRemessa = (CabecalhoRemessaSafra) cabecalhoRemessaParam;
+
+ header.setValue("NumAgencia", formatarValorPorTamanho(cabecalhoRemessa.getNumAgencia(), 5));
+ header.setValue("NumContaCorrente", formatarValorPorTamanho(cabecalhoRemessa.getNumContaCorrente(), 8));
+ header.setValue("DigContaCorrente", formatarValorPorTamanho(cabecalhoRemessa.getDigContaCorrente(), 1));
+ header.setValue("NomeEmpresa", formatarValorPorTamanho(cabecalhoRemessa.getNomeEmpresa(), 30));
+ header.setValue("DataGravacao", formataDataToString(cabecalhoRemessa.getDataGravacao(), TAMANHO_DATA, DATA));
+ header.setValue(SEQUENCIAL_REMESSA, formatarValorPorTamanho(cabecalhoRemessa.getNumeroSequencialRemessa().toString(), 3));
+ header.setValue(SEQUENCIAL_REGISTRO, formatarValorPorTamanho(cabecalhoRemessa.getNumeroSequencialRegistro().toString(), 6));
+
+ getFlatFile().addRecord(header);
+ }
+
+ @Override
+ protected void createTransacaoTitulos(DetalheObrigatorio tituloParam) {
+
+ Record detalhe = getFlatFile().createRecord("TransacaoTitulo");
+
+ DetalheObrigatorioSafra titulo = (DetalheObrigatorioSafra) tituloParam;
+
+ detalhe.setValue("CpfCnpj", formatarValorPorTamanho(titulo.getCpfCnpj().toString(), 2));
+ detalhe.setValue("NumCpfCnpj", formatarValorPorTamanho(titulo.getNumCpfCnpj(), 14));
+ detalhe.setValue("NumAgencia", formatarValorPorTamanho(titulo.getNumAgencia(), 5));
+ detalhe.setValue("NumContaCorrente", formatarValorPorTamanho(titulo.getNumContaCorrente(), 8));
+ detalhe.setValue("DigContaCorrente", formatarValorPorTamanho(titulo.getDigContaCorrente(), 1));
+ detalhe.setValue("NossoNumero", formatarValorPorTamanho(titulo.getNossoNumero(), 9));
+ detalhe.setValue("IdentificacaoTitulo", formatarValorPorTamanho(titulo.getIdBoletoFechamento(), 10));
+ detalhe.setValue("Vencimento", formataDataToString(titulo.getVencimento(), TAMANHO_DATA, DATA));
+ detalhe.setValue("Valor", titulo.getValor());
+ detalhe.setValue("NumAgenciaCobranca", formatarValorPorTamanho(titulo.getNumAgencia(), 5));
+ detalhe.setValue("EspecieDeTitulo", formatarValorPorTamanho(titulo.getEspecieDeTitulo(), 2));
+ detalhe.setValue("Aceite", titulo.getAceite().getValue());
+ detalhe.setValue("Emissao", formataDataToString(titulo.getDataEmissao(), TAMANHO_DATA, DATA));
+ detalhe.setValue("Instrucao1", formatarValorPorTamanho(titulo.getInstrucao1(), 2));
+ detalhe.setValue("Instrucao2", formatarValorPorTamanho(titulo.getInstrucao2(), 2));
+ detalhe.setValue("JurosDeMora", titulo.getJurosDeMora());
+ detalhe.setValue("DataMulta", formataDataToString(titulo.getDataMulta(), TAMANHO_DATA, DATA));
+ detalhe.setValue("PercentualMulta", titulo.getPercMulta() );
+ detalhe.setValue("DataLimiteDesconto", formataDataToString(titulo.getDataLimiteDesconto(), TAMANHO_DATA, DATA));
+ detalhe.setValue("ValorDesconto", titulo.getValorDesconto());
+ detalhe.setValue("ValorIOF", titulo.getValorIOF());
+ detalhe.setValue("ValorAbatimentoConcedido", titulo.getValorAbatimentoConcedido());
+ detalhe.setValue("TipoInscricaoPagador", formatarValorPorTamanho(titulo.getTipoInscricaoPagador().toString(), 2));
+ detalhe.setValue("NumeroInscricaoPagador", formatarValorPorTamanho(titulo.getNumeroInscricaoPagador(), 14));
+ detalhe.setValue("NomePagador", formatarValorPorTamanho(titulo.getNomePagador(), 40));
+ detalhe.setValue("EnderecoPagador", formatarValorPorTamanho(titulo.getEnderecoPagador(), 30));
+ detalhe.setValue("BairroPagador", formatarValorPorTamanho(titulo.getBairroPagador(), 10));
+ detalhe.setValue("CepPagador", formatarValorPorTamanho(titulo.getCepPagador(), 8));
+ detalhe.setValue("CidadePagador", formatarValorPorTamanho(titulo.getCidadePagador(), 15));
+ detalhe.setValue("EstadoPagador", formatarValorPorTamanho(titulo.getEstadoPagador(), 2));
+ detalhe.setValue("SacadorAvalista", formatarValorPorTamanho(titulo.getSacadorAvalista(), 30));
+ detalhe.setValue(SEQUENCIAL_REMESSA, formatarValorPorTamanho(titulo.getNumeroSequencialRemessa().toString(), 3));
+ detalhe.setValue(SEQUENCIAL_REGISTRO, formatarValorPorTamanho(titulo.getNumeroSequencialRegistro().toString(), 6));
+
+ getFlatFile().addRecord(detalhe);
+ }
+
+ @Override
+ protected void createTrailler(RodapeRemessa trailler){
+
+ Record trailer = getFlatFile().createRecord("Trailler");
+ RodapeRemessaSafra rodape = (RodapeRemessaSafra) trailler;
+
+ trailer.setValue("QtdTitulos", formatarValorPorTamanho(rodape.getQtdTitulos().toString(), 8));
+ trailer.setValue("ValorTotal", formatarValorPorTamanhoZeroEsquerda(rodape.getValorTotalTitulos().toString().replace(".", ""), 15));
+ trailer.setValue(SEQUENCIAL_REMESSA, formatarValorPorTamanho(rodape.getNumeroSequencialRemessa().toString(), 3));
+ trailer.setValue(SEQUENCIAL_REGISTRO, formatarValorPorTamanho(rodape.getNumeroSequencialRegistro().toString(), 6));
+
+ getFlatFile().addRecord(trailer);
+ }
+
+ @Override
+ protected CabecalhoRetorno readHeader(Record header) {
+ throw new UnsupportedOperationException(SOMENTE_CLASSE_DE_RETORNO);
+ }
+
+ @Override
+ protected List readTransacaoTitulos(Collection 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...");
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SantanderFlatFile.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SantanderFlatFile.java
new file mode 100644
index 000000000..d985923cf
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SantanderFlatFile.java
@@ -0,0 +1,165 @@
+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.santander.CabecalhoRemessaSantander;
+import com.rjconsultores.ventaboletos.blocos.santander.DetalheObrigatorioSantander;
+import com.rjconsultores.ventaboletos.enuns.BancoLayout;
+import com.rjconsultores.ventaboletos.utils.FormataUtil;
+
+public class SantanderFlatFile extends AbstractFlatFile implements RemessaInterface {
+
+ private static BigDecimal valorTotal = BigDecimal.ZERO;
+ private static Integer quantidadeRegistro = 0;
+
+ public SantanderFlatFile() {
+ super(BancoLayout.SANTANDER_400_Envio);
+ valorTotal = BigDecimal.ZERO;
+ quantidadeRegistro = 0;
+ }
+
+ @Override
+ protected void createHeader(CabecalhoRemessa cabecalhoRemessaParam) {
+
+ Record header = getFlatFile().createRecord("Header");
+
+ CabecalhoRemessaSantander cabecalhoRemessa = (CabecalhoRemessaSantander) cabecalhoRemessaParam;
+
+ header.setValue("CodigoDaEmpresa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getCodigoEmpresa().toString(), 20));
+ header.setValue("NomeCedente", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNomeEmpresa(), 30));
+ header.setValue("CodigoTransmissao", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getCodigoTransmissao().toString(), 20));
+ header.setValue("DataGravacao", FormataUtil.formataDataToString(cabecalhoRemessa.getDataGravacao(), "000000", "ddMMyy"));
+ header.setValue("NumeroSequencialRemessa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumeroSequencialRemessa().toString(), 7));
+ header.setValue("NumeroSequencialRegistro", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumeroSequencialRegistro().toString(), 6));
+
+ quantidadeRegistro = quantidadeRegistro + 1;
+
+ getFlatFile().addRecord(header);
+ }
+
+ @Override
+ protected void createTransacaoTitulos(DetalheObrigatorio tituloParam) {
+
+ Record transacaoTitulos = getFlatFile().createRecord("TransacaoTitulo");
+
+ DetalheObrigatorioSantander titulo = (DetalheObrigatorioSantander) tituloParam;
+
+ transacaoTitulos.setValue("TipoInscricao", FormataUtil.formatarValorPorTamanho(titulo.getTipoInscricao().toString(), 2));
+ transacaoTitulos.setValue("NumeroInscricao", FormataUtil.formatarValorPorTamanho(titulo.getNumeroInscricaoSacado().toString(), 14));
+ transacaoTitulos.setValue("CodigoTransmissao", FormataUtil.formatarValorPorTamanho(titulo.getCodigoTransmissao().toString(), 20));
+ transacaoTitulos.setValue("NumControleDoParticipante", FormataUtil.formatarValorPorTamanho(titulo.getNumControleDoParticipante(), 25));
+ transacaoTitulos.setValue("NossoNumeroComDigito", FormataUtil.formatarValorPorTamanho(titulo.getNossoNumeroComDigito(), 8));
+ transacaoTitulos.setValue("Carteira", FormataUtil.formatarValorPorTamanho(titulo.getCarteira(), 3));
+ transacaoTitulos.setValue("MultaPercentual", titulo.getPercentualMulta());
+ transacaoTitulos.setValue("JurosDeMora", FormataUtil.formatarValorPorTamanho(titulo.getValorAtraso(), 13));
+ transacaoTitulos.setValue("Agencia", FormataUtil.formatarValorPorTamanho(titulo.getAgencia(), 4));
+ transacaoTitulos.setValue("DVAgencia", FormataUtil.formatarValorPorTamanho(titulo.getDvAgencia(), 1));
+ transacaoTitulos.setValue("CodigoEmpresa", FormataUtil.formatarValorPorTamanho(titulo.getCodigoEmpresa(), 7));
+ transacaoTitulos.setValue("ContaCorrente", FormataUtil.formatarValorPorTamanho(titulo.getContacorrente(), 7));
+ transacaoTitulos.setValue("DvConta", FormataUtil.formatarValorPorTamanho(titulo.getDvConta(), 1));
+ transacaoTitulos.setValue("ContaCobrancaBeneficiario", FormataUtil.formatarValorPorTamanho(titulo.getContacorrente(), 8));
+ transacaoTitulos.setValue("DvContaCobrancaBeneficiario", FormataUtil.formatarValorPorTamanho(titulo.getDvConta(), 1));
+
+ transacaoTitulos.setValue("Filler1", FormataUtil.formatarValorPorTamanho("0", 8));
+
+ transacaoTitulos.setValue("QtdPagamento", FormataUtil.formatarValorPorTamanho(titulo.getQtdPagamento().toString(), 25));
+ transacaoTitulos.setValue("NumeroDoDocumento", FormataUtil.formatarValorPorTamanho(titulo.getNumeroDoDocumento(), 10));
+ transacaoTitulos.setValue("Vencimento", FormataUtil.formataDataToString(titulo.getVencimento(), "000000", "ddMMyy"));
+ transacaoTitulos.setValue("Valor", titulo.getValor());
+ transacaoTitulos.setValue("EspecieDeTitulo", FormataUtil.formatarValorPorTamanho(titulo.getEspecieDeTitulo(), 2));
+ transacaoTitulos.setValue("NumeroInscricaoPagador", FormataUtil.formatarValorPorTamanho(titulo.getNumeroInscricao().toString(), 14));
+ transacaoTitulos.setValue("AgenciaCobradora", FormataUtil.formatarValorPorTamanho(titulo.getAgenciaCobradora(), 4));
+ transacaoTitulos.setValue("DVAgenciaCobradora", FormataUtil.formatarValorPorTamanho(titulo.getDvAgencia(), 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("JurosDeMora", 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("Mensagem1", FormataUtil.formatarValorPorTamanho(titulo.getMensagem1(), 12));
+ 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(), 5));
+ transacaoTitulos.setValue("ComplementoCepSacado", FormataUtil.formatarValorPorTamanho(titulo.getComplementoCepSacado().toString(), 3));
+ transacaoTitulos.setValue("Cidade", FormataUtil.formatarValorPorTamanho(titulo.getCidade(), 15));
+ transacaoTitulos.setValue("Estado", FormataUtil.formatarValorPorTamanho(titulo.getEstado(), 2));
+ transacaoTitulos.setValue("SacadorAvalista", FormataUtil.formatarValorPorTamanho(titulo.getSacadorAvalista(), 30));
+ transacaoTitulos.setValue("NumeroSequencialRegistro", FormataUtil.formatarValorPorTamanho(titulo.getNumeroSequencialRegistro().toString(), 6));
+ transacaoTitulos.setValue("Complemento", FormataUtil.formatarValorPorTamanho(titulo.getContacorrente().substring(titulo.getContacorrente().length()-1, titulo.getContacorrente().length()).concat(titulo.getDvConta()),2));
+
+ valorTotal = valorTotal.add(titulo.getValor());
+ quantidadeRegistro = quantidadeRegistro + 1;
+
+ DadosBoleto dadosBoleto = titulo.getDadosBoleto();
+
+ try{
+ if(dadosBoleto != null){
+ transacaoTitulos.addInnerRecord(createDadosBoletos(dadosBoleto));
+ }
+ }catch(UnsupportedOperationException e){ }
+
+ RateioDeCredito rateioDeCredito = titulo.getRateioDeCredito();
+
+ try{
+ if(dadosBoleto != null){
+ transacaoTitulos.addInnerRecord(createRateioDeCredito(rateioDeCredito));
+ }
+ }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));
+ trailer.setValue("QuantidadeRegistro",quantidadeRegistro+1);
+ trailer.setValue("ValorTotal", valorTotal);
+
+ getFlatFile().addRecord(trailer);
+
+ }
+
+ @Override
+ protected CabecalhoRetorno readHeader(Record header) {
+ throw new UnsupportedOperationException("Somente classe de Retorno.");
+ }
+
+ @Override
+ protected List readTransacaoTitulos(Collection registrosDeTransacoes) {
+ throw new UnsupportedOperationException("Somente classe de Retorno.");
+ }
+
+ @Override
+ protected RodapeRetorno readTrailler(Record trailler) {
+ throw new UnsupportedOperationException("Somente classe de Retorno.");
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SantanderProcessaRetorno.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SantanderProcessaRetorno.java
new file mode 100644
index 000000000..2df118e7a
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SantanderProcessaRetorno.java
@@ -0,0 +1,136 @@
+package com.rjconsultores.ventaboletos.layouts;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+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.enuns.BancoLayout;
+
+public class SantanderProcessaRetorno extends AbstractFlatFile implements RetornoInteface {
+
+ protected SantanderProcessaRetorno() {
+ super(BancoLayout.SANTANDER_400_Retorno);
+ }
+
+ @Override
+ protected void createHeader(CabecalhoRemessa cabecalhoRemessaParam) {
+ throw new UnsupportedOperationException("Somente classe de Envio.");
+ }
+
+ @Override
+ protected void createTransacaoTitulos(DetalheObrigatorio tituloParam) {
+ throw new UnsupportedOperationException("Somente classe de Envio.");
+ }
+
+ @Override
+ protected Record createDadosBoletos(DadosBoleto boleto) {
+ throw new UnsupportedOperationException("Somente classe de Envio.");
+ }
+
+ @Override
+ protected Record createRateioDeCredito(RateioDeCredito rateioDeCredito) {
+ throw new UnsupportedOperationException("Somente classe de Envio.");
+ }
+
+ @Override
+ protected void createTrailler(RodapeRemessa trailler) {
+ throw new UnsupportedOperationException("Somente classe de Envio.");
+ }
+
+ @Override
+ protected CabecalhoRetorno readHeader(Record header) {
+
+ CabecalhoRetorno cabecalhoRetorno = new CabecalhoRetorno();
+ String codEmpresa = header.getValue("CodigoDaEmpresa");
+ String numeroDoAvisoBancario = header.getValue("NumeroDoAvisoBancario");
+
+ cabecalhoRetorno.setCodEmpresa(codEmpresa);
+ cabecalhoRetorno.setNumeroDoAvisoBancario(numeroDoAvisoBancario);
+
+ return cabecalhoRetorno;
+ }
+
+ @Override
+ protected List readTransacaoTitulos(Collection registrosDeTransacoes) {
+
+ List retornos = new ArrayList();
+
+ for (Record record : registrosDeTransacoes) {
+/*
+ DetalheRetorno detalheRetorno = new DetalheRetorno();
+
+ String numeroControleDoParticipante = record.getValue("NumeroControleDoParticipante");
+ String codigoDeOcorrencia = record.getValue("CodigoDeOcorrencia");
+ String codigoDeMotivo1 = record.getValue("CodigoDeMotivo1");
+ String codigoDeMotivo2 = record.getValue("CodigoDeMotivo2");
+ String codigoDeMotivo3 = record.getValue("CodigoDeMotivo3");
+ String codigoDeMotivo4 = record.getValue("CodigoDeMotivo4");
+ String codigoDeMotivo5 = record.getValue("CodigoDeMotivo5");
+
+ OcorrenciaSantander ocorrencia = OcorrenciaSantander.getInstance(codigoDeOcorrencia);
+ detalheRetorno.setNumeroControleDoParticipante(numeroControleDoParticipante);
+ detalheRetorno.setOcorrencia(ocorrencia);
+
+ if(checkIsNullOrBlank(codigoDeMotivo1)){
+ MotivoOcorrenciaSantander motivoOcorrencia = MotivoOcorrenciaSantander.getInstance(ocorrencia, codigoDeMotivo1);
+ detalheRetorno.addMotivoOcorrencia(motivoOcorrencia);
+ }
+
+ if(checkIsNullOrBlank(codigoDeMotivo2)){
+ MotivoOcorrenciaSantander motivoOcorrencia = MotivoOcorrenciaSantander.getInstance(ocorrencia, codigoDeMotivo2);
+ detalheRetorno.addMotivoOcorrencia(motivoOcorrencia);
+ }
+
+ if(checkIsNullOrBlank(codigoDeMotivo3)){
+ MotivoOcorrenciaSantander motivoOcorrencia = MotivoOcorrenciaSantander.getInstance(ocorrencia, codigoDeMotivo3);
+ detalheRetorno.addMotivoOcorrencia(motivoOcorrencia);
+ }
+
+ if(checkIsNullOrBlank(codigoDeMotivo4)){
+ MotivoOcorrenciaSantander motivoOcorrencia = MotivoOcorrenciaSantander.getInstance(ocorrencia, codigoDeMotivo4);
+ detalheRetorno.addMotivoOcorrencia(motivoOcorrencia);
+ }
+
+ if(checkIsNullOrBlank(codigoDeMotivo5)){
+ MotivoOcorrenciaSantander motivoOcorrencia = MotivoOcorrenciaSantander.getInstance(ocorrencia, codigoDeMotivo5);
+ detalheRetorno.addMotivoOcorrencia(motivoOcorrencia);
+ }
+
+ retornos.add(detalheRetorno);
+*/
+ }
+
+ return retornos;
+ }
+
+ private boolean checkIsNullOrBlank(String value){
+
+ if(value != null){
+ return StringUtils.isEmpty(value);
+ }
+
+ return Boolean.TRUE;
+ }
+
+ @Override
+ protected RodapeRetorno readTrailler(Record trailler) {
+
+ RodapeRetorno rodapeRetorno = new RodapeRetorno();
+
+
+ return rodapeRetorno;
+
+
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SicoobFlatFile.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SicoobFlatFile.java
new file mode 100644
index 000000000..8cf8c1d7f
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/layouts/SicoobFlatFile.java
@@ -0,0 +1,199 @@
+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.sicoob.CabecalhoLoteRemessaSicoob;
+import com.rjconsultores.ventaboletos.blocos.sicoob.CabecalhoRemessaSicoob;
+import com.rjconsultores.ventaboletos.blocos.sicoob.DetalheObrigatorioDadosPagadorSicoob;
+import com.rjconsultores.ventaboletos.blocos.sicoob.DetalheObrigatorioSicoob;
+import com.rjconsultores.ventaboletos.blocos.sicoob.RodapeRemessaLoteSicoob;
+import com.rjconsultores.ventaboletos.blocos.sicoob.RodapeRemessaSicoob;
+import com.rjconsultores.ventaboletos.enuns.BancoLayout;
+import com.rjconsultores.ventaboletos.utils.FormataUtil;
+
+public class SicoobFlatFile extends AbstractFlatFile implements RemessaInterface {
+
+ public SicoobFlatFile() {
+ super(BancoLayout.SICOOB_240_Envio);
+ }
+
+ @Override
+ protected void createHeader(CabecalhoRemessa cabecalhoRemessaParam) {
+
+ Record header = getFlatFile().createRecord("HeaderArquivo");
+
+ CabecalhoRemessaSicoob cabecalhoRemessa = (CabecalhoRemessaSicoob) cabecalhoRemessaParam;
+
+ header.setValue("CpfCnpj", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getCpfCnpj().toString(), 1));
+ header.setValue("NumCpfCnpj", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumCpfCnpj(), 14));
+ header.setValue("NumAgencia", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumAgencia(), 5));
+ header.setValue("DigAgencia", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getDigAgencia(), 1));
+ header.setValue("NumContaCorrente", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNumContaCorrente(), 12));
+ header.setValue("DigContaCorrente", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getDigContaCorrente(), 1));
+ header.setValue("NomeEmpresa", FormataUtil.formatarValorPorTamanho(cabecalhoRemessa.getNomeEmpresa(), 30));
+ header.setValue("NumRemessa", FormataUtil.formatarValorPorTamanhoZeroEsquerda(cabecalhoRemessa.getNumRemessa().toString(), 6));
+ header.setValue("DataGeracao", FormataUtil.formataDataToString(cabecalhoRemessa.getDataGravacao(), "000000", "ddMMyyyy"));
+ header.setValue("HoraGeracao", FormataUtil.formataDataToString(cabecalhoRemessa.getDataGravacao(), "000000", "HHmmss"));
+
+ getFlatFile().addRecord(header);
+
+ createHeaderLote(cabecalhoRemessa.getCabecalhoLoteRemessaSicoob());
+ }
+
+ private void createHeaderLote(CabecalhoLoteRemessaSicoob cabecalhoLote) {
+
+ Record header = getFlatFile().createRecord("HeaderLote");
+
+ if(cabecalhoLote.getLoteServico() != null){
+ header.setValue("LoteServico", FormataUtil.formatarValorPorTamanhoZeroEsquerda(cabecalhoLote.getLoteServico().toString(), 4));
+ }
+
+ header.setValue("NumCpfCnpj", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNumCpfCnpj(), 14));
+ header.setValue("CpfCnpj", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getCpfCnpj().toString(), 1));
+ header.setValue("NumAgencia", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNumAgencia(), 5));
+ header.setValue("DigAgencia", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getDigAgencia(), 1));
+ header.setValue("NumContaCorrente", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNumContaCorrente(), 12));
+ header.setValue("DigContaCorrente", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getDigContaCorrente(), 1));
+ header.setValue("NomeEmpresa", FormataUtil.formatarValorPorTamanho(cabecalhoLote.getNomeEmpresa(), 30));
+ header.setValue("NumeroRemessa", FormataUtil.formatarValorPorTamanhoZeroEsquerda(cabecalhoLote.getNumeroRemessa().toString(), 8));
+ header.setValue("DataGeracao", FormataUtil.formataData(cabecalhoLote.getDataGeracao()));
+// header.setValue("DataCredito", FormataUtil.formataData(cabecalhoLote.getDataCredito()));
+
+ getFlatFile().addRecord(header);
+ }
+
+ @Override
+ protected void createTransacaoTitulos(DetalheObrigatorio tituloParam) {
+
+ Record transacaoTitulos = getFlatFile().createRecord("SegmentoP");
+
+ DetalheObrigatorioSicoob dadosTitulos = (DetalheObrigatorioSicoob) tituloParam;
+
+ if(dadosTitulos.getLoteServico() != null){
+ transacaoTitulos.setValue("LoteServico", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosTitulos.getLoteServico().toString(), 4));
+ }
+ transacaoTitulos.setValue("NumSeqRegistro", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosTitulos.getNumSeqRegistro().toString(), 5));
+ transacaoTitulos.setValue("NumAgencia", FormataUtil.formatarValorPorTamanho(dadosTitulos.getNumAgencia(), 5));
+ transacaoTitulos.setValue("DigAgencia", FormataUtil.formatarValorPorTamanho(dadosTitulos.getDigAgencia(), 1));
+ transacaoTitulos.setValue("NumContaCorrente", FormataUtil.formatarValorPorTamanho(dadosTitulos.getNumContaCorrente(), 12));
+ transacaoTitulos.setValue("DigContaCorrente", FormataUtil.formatarValorPorTamanho(dadosTitulos.getDigContaCorrente(), 1));
+ transacaoTitulos.setValue("NossoNumero", FormataUtil.formatarValorPorTamanho(dadosTitulos.getNossoNumero(), 20));
+ transacaoTitulos.setValue("CodCarteira",dadosTitulos.getCodCarteira());
+ transacaoTitulos.setValue("NumeroDoDocumento", FormataUtil.formatarValorPorTamanho(dadosTitulos.getNumeroDoDocumento(), 15));
+ transacaoTitulos.setValue("Vencimento", FormataUtil.formataData(dadosTitulos.getVencimento()));
+ transacaoTitulos.setValue("Valor", dadosTitulos.getValor());
+ transacaoTitulos.setValue("Emissao", FormataUtil.formataData(dadosTitulos.getEmissao()));
+ transacaoTitulos.setValue("CodMora", FormataUtil.formatarValorPorTamanho(dadosTitulos.getCodMora().toString(), 1));
+ transacaoTitulos.setValue("DataMora", FormataUtil.formataDataToString(dadosTitulos.getDataMora(), "00000000"));
+ transacaoTitulos.setValue("JurosDeMora", dadosTitulos.getJurosDeMora());
+ transacaoTitulos.setValue("CodigoDesconto", FormataUtil.formatarValorPorTamanho(dadosTitulos.getCodigoDesconto().toString(), 1));
+ transacaoTitulos.setValue("DataDesconto", FormataUtil.formataDataToString(dadosTitulos.getDataDesconto(), "00000000"));
+ transacaoTitulos.setValue("DescontoConcedido", dadosTitulos.getDescontoConcedido());
+ transacaoTitulos.setValue("IOF_Devido", dadosTitulos.getIofDevido());
+ transacaoTitulos.setValue("AbatimentoConcedido", dadosTitulos.getAbatimentoConcedido());
+ transacaoTitulos.setValue("NossoNumeroEmp", FormataUtil.formatarValorPorTamanho(dadosTitulos.getNossoNumeroEmp(), 25));
+ transacaoTitulos.setValue("CodigoProtesto", FormataUtil.formatarValorPorTamanho(dadosTitulos.getCodigoProtesto().toString(), 1));
+ transacaoTitulos.setValue("DiasProtesto", FormataUtil.formatarValorPorTamanho(dadosTitulos.getDiasProtesto().toString(), 2));
+ transacaoTitulos.setValue("NumeroContrato", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosTitulos.getNumeroContrato().toString(), 10));
+
+ getFlatFile().addRecord(transacaoTitulos);
+ createTransacaoTitulosSeguimentoQ(transacaoTitulos, dadosTitulos.getDetalheObrigatorioDadosPagadorSicoob());
+
+ }
+
+ private void createTransacaoTitulosSeguimentoQ(Record recordFather, DetalheObrigatorioDadosPagadorSicoob dadosPagadorSicoobl) {
+
+ Record transacaoTitulos = getFlatFile().createRecord("SegmentoQ");
+
+ if(dadosPagadorSicoobl.getLoteServico() != null){
+ transacaoTitulos.setValue("LoteServico", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosPagadorSicoobl.getLoteServico().toString(), 4));
+ }
+
+ transacaoTitulos.setValue("NumSeqRegistro", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosPagadorSicoobl.getNumeroSequencialRegistro().toString(), 5));
+ transacaoTitulos.setValue("TipoInscricaoSacado", FormataUtil.formatarValorPorTamanho(dadosPagadorSicoobl.getTipoInscricaoSacado().toString(), 1));
+ transacaoTitulos.setValue("NumeroInscricaoSacado", FormataUtil.formatarValorPorTamanho(dadosPagadorSicoobl.getNumeroInscricaoSacado(), 15));
+ transacaoTitulos.setValue("NomeSacado", FormataUtil.formatarValorPorTamanho(dadosPagadorSicoobl.getNomeSacado(), 40));
+ transacaoTitulos.setValue("LogradouroSacado", FormataUtil.formatarValorPorTamanho(dadosPagadorSicoobl.getLogradouroSacado(), 40));
+ transacaoTitulos.setValue("BairroSacado", FormataUtil.formatarValorPorTamanho(dadosPagadorSicoobl.getBairroSacado(), 15));
+ transacaoTitulos.setValue("CepSacado", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosPagadorSicoobl.getCepSacado().toString(), 5));
+ transacaoTitulos.setValue("SufixoCep", FormataUtil.formatarValorPorTamanhoZeroEsquerda(dadosPagadorSicoobl.getSufixoCep().toString(), 3));
+ transacaoTitulos.setValue("Cidade", FormataUtil.formatarValorPorTamanho(dadosPagadorSicoobl.getCidade(), 15));
+ transacaoTitulos.setValue("Estado", FormataUtil.formatarValorPorTamanho(dadosPagadorSicoobl.getCveEstado(), 2));
+
+ try{
+ transacaoTitulos.setValue("CodBancoCorresp", FormataUtil.formatarValorPorTamanho(dadosPagadorSicoobl.getCodBancoCorresp().toString(), 3));
+ }catch(Exception e){
+
+ }
+ transacaoTitulos.setValue("NossoNumeroNoBancoCorresp", FormataUtil.formatarValorPorTamanho(dadosPagadorSicoobl.getNossoNumeroNoBancoCorresp(), 20));
+
+ recordFather.addInnerRecord(transacaoTitulos);
+ }
+
+ @Override
+ protected void createTrailler(RodapeRemessa trailler){
+
+ RodapeRemessaSicoob rodapeRemessaSicoob = (RodapeRemessaSicoob) trailler;
+
+ createTraillerLote(rodapeRemessaSicoob.getRodapeRemessaLoteSicoob());
+
+ Record traillerArquivo = getFlatFile().createRecord("TraillerArquivo");
+
+ traillerArquivo.setValue("QtdLotes", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaSicoob.getQtdLotes().toString(), 6));
+ traillerArquivo.setValue("QtdArquivos", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaSicoob.getQtdArquivos().toString(), 6));
+ traillerArquivo.setValue("QtdContas", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaSicoob.getQtdContas().toString(), 6));
+
+ getFlatFile().addRecord(traillerArquivo);
+ }
+
+ private void createTraillerLote(RodapeRemessaLoteSicoob rodapeRemessaLoteSicoob) {
+
+
+ Record traillerArquivo = getFlatFile().createRecord("TraillerLote");
+
+ if(rodapeRemessaLoteSicoob.getLoteServico() != null){
+ traillerArquivo.setValue("LoteServico", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaLoteSicoob.getLoteServico().toString(), 4));
+ }
+
+ traillerArquivo.setValue("QtdTitulosSimples", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaLoteSicoob.getQtdRegistros().toString(), 6));
+ traillerArquivo.setValue("ValorTitulosSimples", FormataUtil.formatarValorPorTamanhoZeroEsquerda(rodapeRemessaLoteSicoob.getValorRegistros().toString(), 15) );
+
+ getFlatFile().addRecord(traillerArquivo);
+ }
+
+ @Override
+ protected CabecalhoRetorno readHeader(Record header) {
+ throw new UnsupportedOperationException("Somente classe de Retorno.");
+ }
+
+ @Override
+ protected List readTransacaoTitulos(Collection 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...");
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/utils/FormataUtil.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/utils/FormataUtil.java
new file mode 100644
index 000000000..ac303db22
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/utils/FormataUtil.java
@@ -0,0 +1,90 @@
+package com.rjconsultores.ventaboletos.utils;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class FormataUtil {
+
+ public static String formatarValorPorTamanho(String value, int tamanho) {
+
+ value = value == null ? "" : value;
+
+ if(value.length() > tamanho){
+ value = value.substring(0, tamanho);
+ }
+
+ return value;
+ }
+
+ public static String formatarValorPorTamanho(Integer valor, int tamanho) {
+
+ String value = valor == null ? "" : valor.toString();
+
+ return formatarValorPorTamanho(value, tamanho) ;
+ }
+
+ public static String formatarValorPorTamanho(BigDecimal 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;
+
+ if(value.length() > tamanho){
+ value = value.substring(0, tamanho);
+ }
+
+ while(value.length() < tamanho){
+ value = "0" + value;
+ }
+
+ return value;
+ }
+
+ public static String formatarValorPorTamanhoZeroDireita(String value, int tamanho) {
+
+ value = value == null ? "" : value;
+
+ if(value.length() > tamanho){
+ value = value.substring(0, tamanho);
+ }
+
+ while(value.length() < tamanho){
+ value = value + "0";
+ }
+
+ return value;
+ }
+
+ public static Date formataData(Date data) {
+
+ if(data == null){
+ data = new Date();
+ }
+
+ return data;
+ }
+
+ public static String formataDataToString(Date data, String defaultValue) {
+
+ if(data == null){
+ return defaultValue;
+ }
+
+ return new SimpleDateFormat("ddMMyyyy").format(data);
+ }
+
+ public static String formataDataToString(Date data, String defaultValue, String pattern) {
+
+ if(data == null){
+ return defaultValue;
+ }
+
+ return new SimpleDateFormat(pattern).format(data);
+ }
+}
diff --git a/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/utils/NossoNumeroUtils.java b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/utils/NossoNumeroUtils.java
new file mode 100644
index 000000000..a6e67cd49
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/utils/NossoNumeroUtils.java
@@ -0,0 +1,397 @@
+package com.rjconsultores.ventaboletos.utils;
+
+import java.math.BigInteger;
+
+import org.apache.commons.lang.StringUtils;
+
+import com.rjconsultores.ventaboletos.enuns.BancoLayout;
+
+public class NossoNumeroUtils {
+
+ private static final String ZERO_7 = "0000000";
+ private static final String ZERO_8 = "00000000";
+ private static final String ZERO_9 = "000000000";
+ private static final String ZERO_10 = "0000000000";
+ private static final String ZERO_11 = "00000000000";
+
+ /**
+ * Devolve o nosso numero do Bradesco com o DV calculado (Tamanho 12)...
+ * @param numCarteira
+ * @param nossoNumero
+ * @return
+ */
+ public static String calcularNossonumeroBradesco(Integer numCarteira, BigInteger nossoNumero){
+ return StringUtils.right(ZERO_11 + nossoNumero, 11) + dacBradesco(numCarteira, nossoNumero);
+ }
+
+ /**
+ * Devolve o nosso numero do Itau com o DV calculado (Tamanho 9)...
+ * @param codAgencia
+ * @param numConta
+ * @param numCarteira
+ * @param nossoNumero
+ * @return
+ */
+ public static String calcularNossoNumeroItau(Integer codAgencia, Integer numConta, Integer numCarteira, BigInteger nossoNumero){
+ return StringUtils.right(ZERO_8 + nossoNumero, 8) + dacItau(codAgencia, numConta, numCarteira, nossoNumero);
+ }
+
+ public static String calcularNossoNumeroSantander(BigInteger nossoNumero){
+ return StringUtils.right(ZERO_7 + nossoNumero, 7)+dacSantander( nossoNumero.toString() );
+ }
+
+ public static String calcularNossoNumeroSicoob(Integer numCooperativa, Integer codCliente, BigInteger nossoNumero){
+ return StringUtils.right(ZERO_7 + nossoNumero, 7)+dacSicoob(numCooperativa, codCliente, nossoNumero.toString() );
+ }
+
+ public static String calcularNossoNumeroMercantil(Integer agencia, BigInteger nossoNumero){
+ return StringUtils.right(ZERO_10 + nossoNumero, 10)+dacMercantil( agencia, nossoNumero );
+ }
+
+ public static String calcularNossoNumeroSafra(BigInteger nossoNumero){
+ return StringUtils.right(ZERO_9 + nossoNumero, 9)+dacSafra( nossoNumero );
+ }
+
+ /**
+ * Devolve o nosso numero do BB com o DV calculado (Tamanho 20)...
+ * @param convenioBanco
+ * @param numCarteira
+ * @param nossoNumero
+ * @return
+ */
+ public static String calcularNossoNumeroBancoBrasil(Long convenioBanco, Integer numCarteira, BigInteger nossoNumero){
+
+ int controllConvenioNossoNumero = 0;
+ int controllNossoNumero = 0;
+ boolean dvControll = Boolean.TRUE;
+
+ if(convenioBanco < 10000){
+ controllConvenioNossoNumero = 4;
+ controllNossoNumero = 7;
+ }else if(convenioBanco < 1000000){
+ controllConvenioNossoNumero = 6;
+ controllNossoNumero = 5;
+ }else{
+ controllConvenioNossoNumero = 7;
+ controllNossoNumero = 10;
+ dvControll = Boolean.FALSE;
+ }
+
+ String nC = StringUtils.right(ZERO_7 + convenioBanco, controllConvenioNossoNumero);
+ String nN = StringUtils.right(ZERO_10 + nossoNumero, controllNossoNumero);
+
+ String base = nC + nN;
+
+ return dvControll ? StringUtils.left(base + dacBB(base, numCarteira), 20) : base;
+ }
+
+ /**
+ * Calcula do DV para o Bradesco
+ * @param numCarteira
+ * @param nossoNumero
+ * @return
+ */
+ public static String dacBradesco(Integer numCarteira, BigInteger nossoNumero){
+
+ int multiplicadores[] = {2,7,6,5,4,3,2,7,6,5,4,3,2};
+ int multiplicandos[] = new int[13];
+
+ String carteira = StringUtils.right("00" + numCarteira, 2);
+ String nNumero = StringUtils.right(ZERO_11 + nossoNumero, 11);
+
+ String base = carteira + nNumero;
+
+ for (int i = 0; i < multiplicandos.length; i++) {
+ String d = base.charAt(i) + "";
+ multiplicandos[i] = Integer.valueOf(d) * multiplicadores[i];
+ }
+
+ int dac = 0;
+
+ for(Integer v : multiplicandos){
+ dac += v;
+ }
+
+ dac = 11 - (dac % 11);
+
+ return (dac == 11) ? "0" :(dac == 10) ? "P" : dac + "";
+
+ }
+
+ public static String dacSicoob(Integer numCooperativa, Integer codCliente, String nossoNumero){
+
+ int multiplicadores[] = {3,1,9,7,3,1,9,7,3,1,9,7,3,1,9,7,3,1,9,7,3};
+ int multiplicandos[] = new int[21];
+
+ String cooperativa = StringUtils.right("0000" + numCooperativa, 4);
+ String cliente = StringUtils.right(ZERO_10 + codCliente, 10);
+ String nNumero = StringUtils.right(ZERO_7 + nossoNumero, 7);
+
+ String base = cooperativa + cliente + nNumero;
+
+ for (int i = 0; i < multiplicandos.length; i++) {
+ String d = base.charAt(i) + "";
+ multiplicandos[i] = Integer.valueOf(d) * multiplicadores[i];
+ }
+
+ int dac = 0;
+
+ for(Integer v : multiplicandos){
+ dac += v;
+ }
+
+ dac = dac % 11;
+
+ if( dac == 0 || dac == 1)
+ return "0";
+
+ return (11 - dac) + "";
+
+ }
+
+ 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(ZERO_11 + 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);
+ }
+
+ public static String dacSafra(BigInteger nossoNumero){
+
+ int[] multiplicadores = {2,1,2,1,2,1,2,1,2};
+ int[] multiplicandos = new int[20];
+
+ String base = StringUtils.right(ZERO_9 + nossoNumero, 9);
+
+ for (int i = 0; i < 9; i++) {
+ String d = base.charAt(i) + "";
+ multiplicandos[i] = Integer.valueOf(d) * multiplicadores[i];
+ }
+
+ int dac = 0;
+
+ for(Integer v : multiplicandos){
+
+ if(v < 10){
+ dac += v;
+ }else{
+ dac += 1 + (v - 10);
+ }
+ }
+
+ dac = 10 - (dac % 10);
+
+ return dac == 10 ? "0" : dac+"";
+ }
+
+ /**
+ * Calcula do DV para o Itau
+ * @param codAgencia
+ * @param numConta
+ * @param numCarteira
+ * @param nossoNumero
+ * @return
+ */
+ public static String dacItau(Integer codAgencia, Integer numConta, Integer numCarteira, BigInteger nossoNumero){
+
+
+ int multiplicadores[] = {1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2};
+ int multiplicandos[] = new int[20];
+
+ String agencia = StringUtils.right("0000" + codAgencia, 4);
+ String conta = StringUtils.right("00000" + numConta, 5);
+ String carteira = StringUtils.right("000" + numCarteira, 3);
+ String nNumero = StringUtils.right(ZERO_8 + nossoNumero, 8);
+
+ String base = agencia + conta + carteira + nNumero;
+
+ for (int i = 0; i < multiplicandos.length; i++) {
+
+ String d = base.charAt(i) + "";
+
+ multiplicandos[i] = Integer.valueOf(d) * multiplicadores[i];
+ }
+
+ int dac = 0;
+
+ for(Integer v : multiplicandos){
+
+ if(v < 10){
+ dac += v;
+ }else{
+ dac += 1 + (v - 10);
+ }
+ }
+
+ dac = 10 - (dac % 10);
+
+ return dac == 10 ? "0" : dac+"";
+ }
+
+ /**
+ * Calcula do DV para o Banco do Brasil
+ * @param nossoNumero
+ * @param numCarteira
+ * @return
+ */
+ public static String dacBB(String nossoNumero, Integer numCarteira){
+
+ int multiplicador = 9;
+
+ int soma = 0;
+
+ for (int i = nossoNumero.length() - 1; i >= 0 ; i--) {
+
+ int current = Integer.parseInt(nossoNumero.charAt(i) + "");
+
+ current = current * multiplicador;
+ soma = soma + current;
+ multiplicador--;
+
+ if(multiplicador == 2){
+ multiplicador = 9;
+ }
+ }
+
+ int mod = soma % 11;
+
+ if(mod == 10){
+ return "X";
+ }
+
+ return mod + "";
+ }
+
+ public static String dacSantander(String nossoNumero){
+
+ int multiplicador = 2;
+
+ int soma = 0;
+
+ for (int i = nossoNumero.length() - 1; i >= 0 ; i--) {
+
+ int current = Integer.parseInt(nossoNumero.charAt(i) + "");
+
+ current = current * multiplicador;
+ soma = soma + current;
+ multiplicador++;
+
+ if(multiplicador == 2){
+ multiplicador = 9;
+ }
+ }
+
+ int mod = soma % 11;
+
+ if(mod == 10){
+ return "1";
+ }else if( mod == 0 || mod == 1 ) {
+ return "0";
+ }
+
+ return String.valueOf(11 - mod);
+ }
+
+ /**
+ * Calcula do DV para o Itau (Numero Documento)
+ * @param codAgencia
+ * @param numConta
+ * @param numCarteira
+ * @param nossoNumero
+ * @return
+ */
+ public static String dvDocumentoItau(Integer numeroDoc){
+
+
+ int multiplicadores[] = {1,2,1,2,1,2,1,2,1,2};
+ int multiplicandos[] = new int[10];
+
+ String doc = StringUtils.right(ZERO_10 + numeroDoc, 10);
+
+ String base = doc;
+
+ for (int i = 0; i < multiplicandos.length; i++) {
+
+ String d = base.charAt(i) + "";
+
+ multiplicandos[i] = Integer.valueOf(d) * multiplicadores[i];
+ }
+
+ int dac = 0;
+
+ for(Integer v : multiplicandos){
+
+ if(v < 10){
+ dac += v;
+ }else{
+ dac += 1 + (v - 10);
+ }
+ }
+
+ dac = 10 - (dac % 10);
+
+ return dac + "";
+ }
+
+ public static boolean validaNossoNumero(String nossoNumero, BancoLayout bancoLayout){
+
+ if(BancoLayout.BRADESCO_400_Envio.equals(bancoLayout) && nossoNumero.length() == 13 ){
+ return Boolean.TRUE;
+ }
+
+ if(BancoLayout.ITAU_400_Envio.equals(bancoLayout) && nossoNumero.length() == 10 ){
+ 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;
+ }
+
+ if(BancoLayout.SAFRA_400_Envio.equals(bancoLayout) && nossoNumero.length() == 10 ){
+ return Boolean.TRUE;
+ }
+
+ if(BancoLayout.BB_240_Envio.equals(bancoLayout) && (nossoNumero.length() == 13 || nossoNumero.length() == 17)){
+ return Boolean.TRUE;
+ }
+
+ if(BancoLayout.SICOOB_240_Envio.equals(bancoLayout) && nossoNumero.length() == 9 ){
+ return Boolean.TRUE;
+ }
+
+ if(BancoLayout.CAIXA_400_Envio.equals(bancoLayout) && ( nossoNumero.length() == 10 && nossoNumero.startsWith("3"))){
+ return Boolean.TRUE;
+ }
+
+ return Boolean.FALSE;
+ }
+
+ public static void main(String[] args) {
+
+ System.out.println( calcularNossoNumeroSafra( new BigInteger("422979999") ));
+ System.out.println(dacItau(5435, 34787, 109, new BigInteger("81059"))); //codAgencia, numConta, numCarteira, nossoNumero
+
+ }
+}
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutBBCNAB240Envio.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutBBCNAB240Envio.txg.xml
new file mode 100644
index 000000000..2b58f2dcc
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutBBCNAB240Envio.txg.xml
@@ -0,0 +1,188 @@
+
+
+ Arquivo-Remessa_BBCNAB240
+ Version 01, Published: 2012/05/25
+
+ Layout para Cobrança.
+ Arquivo texto - padrão CNAB Meio de Registro Transmissão de Dados Descrição de Registro - Tamanho 240 Bytes
+ Organização Sequencial ARQUIVO FORMATO CNAB REMESSA,
+ REGISTROS:
+ 0 - Header do Arquivo
+ 1 - Header do Lote
+ 3 - Segmento P
+ 3 - Segmento Q
+ 5 - Trailler Lote
+ 9 - Trailler Arquivo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutBBCNAB400Envio.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutBBCNAB400Envio.txg.xml
new file mode 100644
index 000000000..c541e689f
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutBBCNAB400Envio.txg.xml
@@ -0,0 +1,108 @@
+
+
+
+ Arquivo-Remessa_BBCNAB240
+ Version 01, Published: 2012/05/25
+
+ Layout para Cobrança.
+ Arquivo texto - padrão CNAB Meio de Registro Transmissão de Dados Descrição de Registro - Tamanho 240 Bytes
+ Organização Sequencial ARQUIVO FORMATO CNAB REMESSA,
+ REGISTROS:
+ 0 - Header do Arquivo
+ 1 - Header do Lote
+ 3 - Segmento P
+ 3 - Segmento Q
+ 5 - Trailler Lote
+ 9 - Trailler Arquivo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400Envio.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400Envio.txg.xml
new file mode 100644
index 000000000..0a494878c
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400Envio.txg.xml
@@ -0,0 +1,144 @@
+
+
+
+ Arquivo-Remessa_BradescoCNAB400
+ Version 08, Published: 2009/09/30
+
+ 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 Label
+ 1 - Cobrança - Transação
+ 2 - Mensagem (opcional)
+ 3 - Rateio de Crédito (opcional)
+ 7 – Sacador Avalista (opcional)
+ 9 - Trailler (Papel de finalizador de lote)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400Retorno.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400Retorno.txg.xml
new file mode 100644
index 000000000..8c6260b61
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400Retorno.txg.xml
@@ -0,0 +1,123 @@
+
+
+
+
+ Arquivo-Retorno_BradescoCNAB400
+ Version 08, Published: 2009/09/30
+
+ 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 RETORNO, REGISTROS:
+
+ 0 - Header Label
+ 1 - Cobrança - Transação
+ 3 - Rateio de Crédito (opcional)
+ 9 - Trailler (Papel de finalizador de lote e totalizador)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400RetornoParaLer.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400RetornoParaLer.txg.xml
new file mode 100644
index 000000000..95d014107
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400RetornoParaLer.txg.xml
@@ -0,0 +1,123 @@
+
+
+
+
+ Arquivo-Retorno_BradescoCNAB400
+ Version 08, Published: 2009/09/30
+
+ 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 RETORNO, REGISTROS:
+
+ 0 - Header Label
+ 1 - Cobrança - Transação
+ 3 - Rateio de Crédito (opcional)
+ 9 - Trailler (Papel de finalizador de lote e totalizador)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400RetornoParaReEscrever.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400RetornoParaReEscrever.txg.xml
new file mode 100644
index 000000000..4e5b40c5c
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutBradescoCNAB400RetornoParaReEscrever.txg.xml
@@ -0,0 +1,67 @@
+
+
+
+
+ Arquivo-Retorno_BradescoCNAB400
+ Version 08, Published: 2009/09/30
+
+
+ Arquivo para ler e reescrever ocorrencias e motivos.
+
+ 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 RETORNO, REGISTROS:
+
+ 0 - Header Label
+ 1 - Cobrança - Transação
+ 3 - Rateio de Crédito (opcional)
+ 9 - Trailler (Papel de finalizador de lote e totalizador)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutCaixaCNAB400Envio.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutCaixaCNAB400Envio.txg.xml
new file mode 100644
index 000000000..9260e7e3a
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutCaixaCNAB400Envio.txg.xml
@@ -0,0 +1,104 @@
+
+
+
+
+ Arquivo-Remessa_CaixaCNAB400
+ Version 67.126 v021micro, Published: 02/04/2021
+
+ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutItauCNAB400Envio.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutItauCNAB400Envio.txg.xml
new file mode 100644
index 000000000..2434cf05b
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutItauCNAB400Envio.txg.xml
@@ -0,0 +1,123 @@
+
+
+
+ Arquivo-Remessa_ItauCNAB400
+ Version 01, Published: 2012/05/25
+
+ 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 - Registro Header do Arquivo
+ 1 - Registro de Detalhe (Obrigatório)
+ 1 - Registro de Transação (Opcional – Cheque Devolvido)
+ 4 - Registro de Detalhe (Opcional)
+ 5 - Registro de Detalhe (Opcional)
+ 9 - Trailler (Papel de finalizador de lote)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutItauCNAB400Retorno.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutItauCNAB400Retorno.txg.xml
new file mode 100644
index 000000000..963c17dd1
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutItauCNAB400Retorno.txg.xml
@@ -0,0 +1,130 @@
+
+
+
+
+ Arquivo-Retorno_ItauCNAB400
+ Version 01, Published: 2012/05/25
+
+ 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 RETORNO, REGISTROS:
+
+ 0 - Header Label
+ 1 - Cobrança - Transação
+ 3 - Rateio de Crédito (opcional)
+ 9 - Trailler (Papel de finalizador de lote e totalizador)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutMercantilCNAB400Envio.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutMercantilCNAB400Envio.txg.xml
new file mode 100644
index 000000000..8eeb2cd91
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutMercantilCNAB400Envio.txg.xml
@@ -0,0 +1,113 @@
+
+
+
+
+ Arquivo-Remessa_SantanderCNAB400
+ Version 2,0, Published: outubro/2009
+
+ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutSafraCNAB400Envio.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutSafraCNAB400Envio.txg.xml
new file mode 100644
index 000000000..b85f31a17
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutSafraCNAB400Envio.txg.xml
@@ -0,0 +1,109 @@
+
+
+
+ Arquivo-Remessa_SafraCNAB400
+ Published: 2023/12/15
+
+ 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 Label
+ 1 - Cobrança - Transação
+ 9 - Trailler (Papel de finalizador de lote)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutSantanderCNAB400Envio.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutSantanderCNAB400Envio.txg.xml
new file mode 100644
index 000000000..1469832fe
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutSantanderCNAB400Envio.txg.xml
@@ -0,0 +1,119 @@
+
+
+
+
+ Arquivo-Remessa_SantanderCNAB400
+ Version 2,0, Published: outubro/2009
+
+ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutSantanderCNAB400Retorno.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutSantanderCNAB400Retorno.txg.xml
new file mode 100644
index 000000000..963c17dd1
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutSantanderCNAB400Retorno.txg.xml
@@ -0,0 +1,130 @@
+
+
+
+
+ Arquivo-Retorno_ItauCNAB400
+ Version 01, Published: 2012/05/25
+
+ 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 RETORNO, REGISTROS:
+
+ 0 - Header Label
+ 1 - Cobrança - Transação
+ 3 - Rateio de Crédito (opcional)
+ 9 - Trailler (Papel de finalizador de lote e totalizador)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GeneradorBoletosCNAB/src/layouts/LayoutSicoobCNAB240Envio.txg.xml b/GeneradorBoletosCNAB/src/layouts/LayoutSicoobCNAB240Envio.txg.xml
new file mode 100644
index 000000000..0c3436de8
--- /dev/null
+++ b/GeneradorBoletosCNAB/src/layouts/LayoutSicoobCNAB240Envio.txg.xml
@@ -0,0 +1,185 @@
+
+
+
+ Arquivo-Remessa_SicoobCNAB240
+ Version 01, Published: 2020/03/18
+
+ Layout para Cobrança.
+ Arquivo texto - padrão CNAB Meio de Registro Transmissão de Dados Descrição de Registro - Tamanho 240 Bytes
+ Organização Sequencial ARQUIVO FORMATO CNAB REMESSA,
+ REGISTROS:
+ 0 - Header do Arquivo
+ 1 - Header do Lote
+ 3 - Segmento P
+ 3 - Segmento Q
+ 5 - Trailler Lote
+ 9 - Trailler Arquivo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file