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

com.github.braully.boleto.LayoutFebraban Maven / Gradle / Ivy

Go to download

This is a fork and merge from JRimum ( http://www.jrimum.org ), - Bopepo: https://github.com/jrimum/bopepo - Texgit: https://github.com/jrimum/texgit - Valia: https://github.com/jrimum/vallia - Utilix: https://github.com/jrimum/utilix - Domkee: https://github.com/jrimum/domkee For Brazillian Boleto Payment Method. So much thanks for original authors: Gilmar P. S. L, Misael Barreto and Rômulo Augusto.

The newest version!
/*
 * Copyright 2021 strike.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.braully.boleto;

import static com.github.braully.boleto.CNAB.CNAB_240;
import static com.github.braully.boleto.TagLayout.TagCreator.banco;
import static com.github.braully.boleto.TagLayout.TagCreator.cabecalho;
import static com.github.braully.boleto.TagLayout.TagCreator.cabecalhoLote;
import static com.github.braully.boleto.TagLayout.TagCreator.cnab;
import static com.github.braully.boleto.TagLayout.TagCreator.detalheSegmentoJ;
import static com.github.braully.boleto.TagLayout.TagCreator.detalheSegmentoJ52;
import static com.github.braully.boleto.TagLayout.TagCreator.detalheSegmentoP;
import static com.github.braully.boleto.TagLayout.TagCreator.detalheSegmentoQ;
import static com.github.braully.boleto.TagLayout.TagCreator.detalheSegmentoR;
import static com.github.braully.boleto.TagLayout.TagCreator.detalheSegmentoT;
import static com.github.braully.boleto.TagLayout.TagCreator.detalheSegmentoU;
import static com.github.braully.boleto.TagLayout.TagCreator.faceite;
import static com.github.braully.boleto.TagLayout.TagCreator.fagencia;
import static com.github.braully.boleto.TagLayout.TagCreator.fbairro;
import static com.github.braully.boleto.TagLayout.TagCreator.fbancoCodigo;
import static com.github.braully.boleto.TagLayout.TagCreator.fbancoNome;
import static com.github.braully.boleto.TagLayout.TagCreator.fbranco;
import static com.github.braully.boleto.TagLayout.TagCreator.fcedenteCnpj;
import static com.github.braully.boleto.TagLayout.TagCreator.fcedenteNome;
import static com.github.braully.boleto.TagLayout.TagCreator.fcep;
import static com.github.braully.boleto.TagLayout.TagCreator.fcidade;
import static com.github.braully.boleto.TagLayout.TagCreator.fcodigoAcrescimo;
import static com.github.braully.boleto.TagLayout.TagCreator.fcodigoArquivo;
import static com.github.braully.boleto.TagLayout.TagCreator.fcodigoBaixa;
import static com.github.braully.boleto.TagLayout.TagCreator.fcodigoBarras;
import static com.github.braully.boleto.TagLayout.TagCreator.fcodigoCarteira;
import static com.github.braully.boleto.TagLayout.TagCreator.fcodigoDesconto;
import static com.github.braully.boleto.TagLayout.TagCreator.fcodigoMoeda;
import static com.github.braully.boleto.TagLayout.TagCreator.fcodigoOcorrencia;
import static com.github.braully.boleto.TagLayout.TagCreator.fcodigoProtesto;
import static com.github.braully.boleto.TagLayout.TagCreator.fcodigoRegistro;
import static com.github.braully.boleto.TagLayout.TagCreator.fconta;
import static com.github.braully.boleto.TagLayout.TagCreator.fconvenio;
import static com.github.braully.boleto.TagLayout.TagCreator.fdac;
import static com.github.braully.boleto.TagLayout.TagCreator.fdata;
import static com.github.braully.boleto.TagLayout.TagCreator.fdataAcrescimo;
import static com.github.braully.boleto.TagLayout.TagCreator.fdataDesconto;
import static com.github.braully.boleto.TagLayout.TagCreator.fdataGeracao;
import static com.github.braully.boleto.TagLayout.TagCreator.fdataOcorrencia;
import static com.github.braully.boleto.TagLayout.TagCreator.fdataPagamento;
import static com.github.braully.boleto.TagLayout.TagCreator.fdataVencimento;
import static com.github.braully.boleto.TagLayout.TagCreator.fendereco;
import static com.github.braully.boleto.TagLayout.TagCreator.fespecieTitulo;
import static com.github.braully.boleto.TagLayout.TagCreator.fidOpcional;
import static com.github.braully.boleto.TagLayout.TagCreator.field;
import static com.github.braully.boleto.TagLayout.TagCreator.flatfile;
import static com.github.braully.boleto.TagLayout.TagCreator.flote;
import static com.github.braully.boleto.TagLayout.TagCreator.fmovimentoCodigo;
import static com.github.braully.boleto.TagLayout.TagCreator.fmovimentoTipo;
import static com.github.braully.boleto.TagLayout.TagCreator.fnossoNumero;
import static com.github.braully.boleto.TagLayout.TagCreator.fnumeroDocumento;
import static com.github.braully.boleto.TagLayout.TagCreator.fnumeroRemessa;
import static com.github.braully.boleto.TagLayout.TagCreator.focorrencias;
import static com.github.braully.boleto.TagLayout.TagCreator.foperacao;
import static com.github.braully.boleto.TagLayout.TagCreator.fquantidadeRegistros;
import static com.github.braully.boleto.TagLayout.TagCreator.frejeicoes;
import static com.github.braully.boleto.TagLayout.TagCreator.fsacadoCpf;
import static com.github.braully.boleto.TagLayout.TagCreator.fsacadoNome;
import static com.github.braully.boleto.TagLayout.TagCreator.fsegmento;
import static com.github.braully.boleto.TagLayout.TagCreator.fsequencialArquivo;
import static com.github.braully.boleto.TagLayout.TagCreator.fsequencialRegistro;
import static com.github.braully.boleto.TagLayout.TagCreator.fservico;
import static com.github.braully.boleto.TagLayout.TagCreator.ftipoDocumento;
import static com.github.braully.boleto.TagLayout.TagCreator.ftipoEmissaoBoleto;
import static com.github.braully.boleto.TagLayout.TagCreator.ftipoInscricao;
import static com.github.braully.boleto.TagLayout.TagCreator.fuf;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalor;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalorAbatimento;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalorAcrescimo;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalorDesconto;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalorIOF;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalorLiquido;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalorOutrasDespesas;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalorOutrasReceitas;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalorPagamento;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalorTarifaCustas;
import static com.github.braully.boleto.TagLayout.TagCreator.fvalorTotalRegistros;
import static com.github.braully.boleto.TagLayout.TagCreator.layout;
import static com.github.braully.boleto.TagLayout.TagCreator.nome;
import static com.github.braully.boleto.TagLayout.TagCreator.rodape;
import static com.github.braully.boleto.TagLayout.TagCreator.rodapeLote;
import static com.github.braully.boleto.TagLayout.TagCreator.tag;
import static com.github.braully.boleto.TagLayout.TagCreator.versao;
import java.text.SimpleDateFormat;
import org.jrimum.texgit.Fillers;

/**
 *
 * @author Braully Rocha da Silva
 */
public class LayoutFebraban {
      static final TagLayout _LAYOUT_FEBRABAN_CNAB240 = flatfile(
            layout(nome("Layout Padrão Febraban CNAB240"),
                    cnab(CNAB_240),
                    banco("000"),
                    tag("url").value("https://portal.febraban.org.br/pagina/3053/33/pt-br/layout-240"),
                    versao("05")
            ),
            cabecalho(
                    //Controle: Banco, lote e registro
                    //Banco: Código do Banco na Compensação133-NumG001
                    fbancoCodigo(),
                    flote().value("0000"),
                    fcodigoRegistro().value("0"),
                    //Uso Exclusivo FEBRABAN / CNAB9179-AlfaBrancosG004
                    fbranco().length(9),
                    ftipoInscricao().value("2"),
                    fcedenteCnpj().length(14).filler(Fillers.ZERO_LEFT),
                    //ConvênioCódigo do Convênio no Banco335220-Alfa*G007
                    //Código adotado pelo Banco para identificar o Contrato entre este e a Empresa Cliente.
                    fconvenio().length(20),
                    //Agência Mantenedora da Conta 53 57 5-Num*G008
                    //Dígito Verificador da Agência 58 58 1-Alfa*G009
                    fagencia(),
                    //Número da Conta Corrente5970 12-Num*G010
                    //Dígito Verificador da Conta7171 1-Alfa*G011
                    fconta(), //Conta com DV
                    //Dígito Verificador da Ag/Conta72721-Alfa*G012
                    //Dígito Verificador da Agência / Conta CorrenteCódigo  
                    //adotado  pelo  Banco  responsável  pela  conta  corrente,
                    //para  verificação  da autenticidade do par Código da Agência / Número da Conta Corrente.
                    //Para os Bancos que se utilizam de duas posições para o Dígito Verificador 
                    //do Número da Conta Corrente, preencher este campo com a 2ª posição deste dígito. 
                    fdac(), fcedenteNome().length(30), fbancoNome().length(30),
                    //Uso Exclusivo FEBRABAN / CNAB
                    fbranco().length(10),
                    //Código Remessa / Retorno1431431-NumG015
                    //Código adotado pela FEBRABAN para qualificar o envio ou devolução de arquivo 
                    //entre a Empresa  Cliente e o Banco prestador dos Serviços.
                    //Domínio:'1'  =  Remessa (Cliente -> Banco) '2'  =  Retorno (Banco -> Cliente)
                    fcodigoArquivo().value(1),
                    //Data de Geração do Arquivo1441518-Num
                    fdataGeracao(),
                    //Hora de Geração do Arquivo1521576
                    field("horaGeracao").length(6).format(new SimpleDateFormat("hhmmss")),
                    //Número Seqüencial do Arquivo1581636-Num*G018
                    fsequencialArquivo().length(6),
                    field("versaoLayoutArquivo").valLen("103"),
                    //Densidade de gravação (BPI), do arquivo encaminhado. Domínio:1600 BPI ou 6250 BPI
                    field("densidadeArquivo").value(0).length(5).filler(Fillers.ZERO_LEFT),
                    //Para Uso Reservado do Banco17219120-AlfaG021
                    fbranco().length(20),
                    //Para Uso Reservado da Empresa19221120-AlfaG022
                    fbranco().length(20),
                    //Uso Exclusivo FEBRABAN / CNAB21224029-AlfaBrancosG004
                    fbranco().length(29)
            ),
            //Registro Header de Lote: 3.2.2 -Títulos em Cobrança
            cabecalhoLote(
                    //Controle: Banco, lote e registro
                    //Banco: Código do Banco na Compensação133-NumG001
                    fbancoCodigo(),
                    //Valor default para o primeiro lote, demais devem ser alterados
                    flote().value(1),
                    fcodigoRegistro().value("1"),
                    //Código adotado pela FEBRABAN para identificar a transação que será realizada com os registros detalhe do lote.
                    /* 
                    Domínio:
                        'C' = Lançamento a Crédito
                        'D' = Lançamento a Débito
                        'E' = Extrato para Conciliação
                        'G' = Extrato para Gestão de Caixa
                        'I' = Informações de Títulos Capturados do Próprio Banco
                        'R' = Arquivo Remessa
                        'T' = Arquivo Retorno
                     */
                    foperacao(),
                    //Código adotado pela FEBRABAN para indicar o tipo de serviço / produto (processo) contido no arquivo / lote.
                    /*
                    TODO: Fazer um enum
                     Domínio:
                            '01' = Cobrança
                            '03' = Boleto de Pagamento Eletrônico
                            '04' = Conciliação Bancária
                            '05' = Débitos
                            '06' = Custódia de Cheques
                            '07' = Gestão de Caixa
                            '08' = Consulta/Informação Margem
                            '09' = Averbação da Consignação/Retenção
                            '10' = Pagamento Dividendos
                            ‘11’ = Manutenção da Consignação
                            ‘12’ = Consignação de Parcelas
                            ‘13’ = Glosa da Consignação (INSS)
                            ‘14’ = Consulta de Tributos a pagar
                            '20' = Pagamento Fornecedor
                            ‘22’ = Pagamento de Contas, Tributos e Impostos
                            ‘23’ = Interoperabilidade entre Contas de Instituições de Pagamentos
                            ‘25’ = Compror
                            ‘26’ = Compror Rotativo
                            '29' = Alegação do Pagador
                            '30' = Pagamento Salários
                            ‘32’ = Pagamento de honorários
                            ‘33’ = Pagamento de bolsa auxílio
                            ‘34’ = Pagamento de prebenda (remuneração a padres e sacerdotes)
                            '40' = Vendor
                            '41' = Vendor a Termo
                            '50' = Pagamento Sinistros Segurados
                            '60' = Pagamento Despesas Viajante em Trânsito
                            '70' = Pagamento Autorizado
                            '75' = Pagamento Credenciados
                            ‘77’ = Pagamento de Remuneração
                            '80' = Pagamento Representantes / Vendedores Autorizados
                            '90' = Pagamento Benefícios
                            '98' = Pagamentos Diversos                     
                     */
                    fservico(),
                    //Uso Exclusivo FEBRABAN/CNAB
                    fbranco().length(2),
                    //Nº da Versão do Layout do Lote
                    field("versaoLayoutLote").value("060").length(3),
                    //Uso Exclusivo da FEBRABAN/CNAB 17 17 1 - Alfa Brancos G004
                    fbranco().length(1),
                    ftipoInscricao().value("2"),
                    fcedenteCnpj().length(15),
                    //ConvênioCódigo do Convênio no Banco335220-Alfa*G007
                    //Código adotado pelo Banco para identificar o Contrato entre este e a Empresa Cliente.
                    fconvenio().length(20),
                    //Agência Mantenedora da Conta 53 57 5-Num*G008
                    //Dígito Verificador da Agência 58 58 1-Alfa*G009
                    fagencia(),
                    //Número da Conta Corrente5970 12-Num*G010
                    //Dígito Verificador da Conta7171 1-Alfa*G011
                    fconta(), //Conta com DV
                    //Dígito Verificador da Ag/Conta72721-Alfa*G012
                    //Dígito Verificador da Agência / Conta CorrenteCódigo  
                    //adotado  pelo  Banco  responsável  pela  conta  corrente,
                    //para  verificação  da autenticidade do par Código da Agência / Número da Conta Corrente.
                    //Para os Bancos que se utilizam de duas posições para o Dígito Verificador 
                    //do Número da Conta Corrente, preencher este campo com a 2ª posição deste dígito. 
                    fdac(), //Conta com DV
                    fcedenteNome().length(30),
                    //Texto referente a mensagens que serão impressas nos documentos e/ou avisos a serem emitidos.
                    //Informação 1: Genérica. Quando informada constará em todos os avisos e/ou
                    //documentos originados dos detalhes desse lote. Informada no Header do Lote.
                    field("mensagem1").length(40).filler(Fillers.WHITE_SPACE_LEFT),
                    field("mensagem2").length(40).filler(Fillers.WHITE_SPACE_LEFT),
                    fnumeroRemessa().length(8).value(0),
                    fdataGeracao().length(8),
                    field("dataCredito").length(8).value("").filler(Fillers.WHITE_SPACE_LEFT),
                    //Uso Exclusivo da FEBRABAN/CNAB
                    fbranco().length(33)
            //Código das Ocorrências p/ Retorno 
            //focorrencias()
            ),
            //Registro Detalhe - Segmento J (Obrigatório - Remessa / Retorno)
            detalheSegmentoJ(
                    //Controle: Banco, lote e registro
                    //Banco: Código do Banco na Compensação133-NumG001
                    fbancoCodigo(),
                    //Número seqüencial para identificar univocamente um lote de serviço. Criado e
                    //controlado pelo responsável pela geração magnética dos dados contidos no arquivo.
                    //Preencher com '0001' para o primeiro lote do arquivo. Para os demais: número do lote
                    //anterior acrescido de 1. O número não poderá ser repetido dentro do arquivo.
                    //Se registro for Header do Arquivo preencher com '0000'
                    //Se registro for Trailer do Arquivo preencher com '9999'
                    flote().value(1),
                    fcodigoRegistro().value("3"),
                    fsequencialRegistro(),
                    //Código adotado pela FEBRABAN para identificar o segmento do registro.
                    fsegmento().id(true).value("J"),
                    //Código adotado pela FEBRABAN, para identificar o tipo de movimentação enviada no arquivo.
                    fmovimentoTipo().value(0),
                    //Código da Instrução para Movimento
                    //Código adotado pela FEBRABAN, para identificar a ação a ser realizada com o
                    //lançamento enviado no arquivo. 
                    fmovimentoCodigo().value("01"),//Padrão entrada de titulo
                    //Código adotado pela FEBRABAN para identificar o Título.
                    //Especificações do Código de Barras do Boleto de Pagamentode Cobrança -Ficha de Compensação
                    fcodigoBarras().length(44),
                    fsacadoNome().length(30),
                    fdataVencimento(),
                    fvalor().length(15),
                    //Valor do Desconto + Abatimento
                    //Valor de desconto (bonificação) sobre o valor nominal do documento, somado ao Valor
                    //do abatimento concedido pelo Beneficiário, expresso em moeda corrente.
                    fvalorDesconto().value(0).length(15),
                    //Valor da Mora + Multa
                    //Valor do juros de mora somado ao Valor da multa, expresso em moeda corrente
                    fvalorAcrescimo().value(0).length(15),
                    fdataPagamento(), fvalorPagamento().length(15),
                    //Número de unidades do tipo de moeda identificada para cálculo do valor do documento. G041
                    field("qtdeMoeda").filler(Fillers.ZERO_LEFT).value(1).length(15),
                    //Referência Pagador Nº do Docto Atribuído pela Empresa 183 202 20 - Alfa G064
                    fnumeroDocumento().length(20),
                    //Nosso Número Nº do Docto Atribuído pelo Banco 203 222 20 - Alfa *G043
                    //Número do Documento Atribuído pelo Banco (Nosso Número)
                    //Número atribuído pelo Banco para identificar o lançamento, que será utilizado nas manutenções do mesmo. 
                    fnossoNumero().length(20),
                    //G065 Código da Moeda
                    //Código adotado pela FEBRABAN para identificar a moeda referenciada no Título
                    fcodigoMoeda(),
                    //20.3J CNAB Uso Exclusivo FEBRABAN/CNAB 225 230 6 - Alfa Brancos G004
                    fbranco().length(6),
                    //Código das Ocorrências para Retorno/Remessa
                    //Código adotado pela FEBRABAN para identificar as ocorrências detectadas no
                    //processamento.
                    //Pode-se informar até 5 ocorrências simultaneamente, cada uma delas codificada com
                    //dois dígitos, conforme relação abaixo.
                    focorrencias()
            ),
            //Registro Detalhe - Segmento J-52 (Obrigatório – Remessa / Retorno)
            detalheSegmentoJ52(
                    //Controle: Banco, lote e registro
                    //Banco: Código do Banco na Compensação133-NumG001
                    //Número seqüencial para identificar univocamente um lote de serviço. Criado e
                    //controlado pelo responsável pela geração magnética dos dados contidos no arquivo.
                    //Preencher com '0001' para o primeiro lote do arquivo. Para os demais: número do lote
                    //anterior acrescido de 1. O número não poderá ser repetido dentro do arquivo.
                    //Se registro for Header do Arquivo preencher com '0000'
                    //Se registro for Trailer do Arquivo preencher com '9999'
                    fbancoCodigo(), flote().value(1),
                    fcodigoRegistro().value("3"),
                    fsequencialRegistro(),
                    //Código adotado pela FEBRABAN para identificar o segmento do registro.
                    fsegmento().id(true).value("J"),
                    //06.4.J52 CNAB Uso Exclusivo FEBRABAN/CNAB 15 15 1 - Alfa Brancos G004
                    fbranco().length(1),
                    //C004: Código de Movimento Remessa 
                    //Código adotado pela FEBRABAN, para identificar o tipo de movimentação enviado nos
                    //registros do arquivo de remessa.
                    //Cada Banco definirá os campos a serem alterados para o código de movimento '31'
                    fmovimentoCodigo().value("01"),
                    //08.4.J52 Código Reg. Opcional Identificação Registro Opcional 18 19 2 - Num “52” G067
                    fidOpcional().id(true).value("52"),
                    //DADOS DO PAGADOR
                    //Tipo de Inscrição: '0'  =  Isento / Não Informado
                    //                   '1'  =  CPF
                    //                   '2'  =  CGC / CNPJ
                    //                   '3'  =  PIS / PASEP
                    //                   '9'  =   Outros
                    field("tipoInscricaoSacado").valLen("1"),
                    fsacadoCpf().length(15),
                    fsacadoNome().length(40),
                    //DADOS DO BENEFICIARIO
                    field("tipoInscricaoCedente").valLen("2"),
                    fcedenteCnpj().length(15),
                    fcedenteNome().length(40),
                    //DADOS DO PAGADORR
                    //Pagadorr - Dados sobre o Beneficiário responsável pela emissão do título original
                    field("tipoInscricaoPagadorr").valLen("2"),
                    field("pagadorrInscricao").length(15).filler(Fillers.ZERO_LEFT),
                    field("pagadorr").length(40).filler(Fillers.WHITE_SPACE_LEFT),
                    //Uso Exclusivo FEBRABAN/CNAB
                    fbranco().length(53)
            ),
            //Layout Padrão Febraban 240 posições V10.5
            //http://www.febraban.org.br
            //Registro Detalhe -Segmento U (Obrigatório -Retorno)
            detalheSegmentoU(
                    fbancoCodigo(), flote(),
                    fcodigoRegistro().value("3"),
                    fsequencialRegistro(),
                    //Código adotado pela FEBRABAN para identificar o segmento do registro.
                    fsegmento().id(true).value("U"),
                    //06.4.J52 CNAB Uso Exclusivo FEBRABAN/CNAB 15 15 1 - Alfa Brancos G004
                    fbranco().length(1),
                    //C004: Código de Movimento Remessa 
                    //Código adotado pela FEBRABAN, para identificar o tipo de movimentação enviado nos
                    //registros do arquivo de remessa.
                    //Cada Banco definirá os campos a serem alterados para o código de movimento '31'
                    fmovimentoCodigo(),
                    //Dadosdo Título
                    //Valor da Mora + Multa
                    //Valor do juros de mora somado ao Valor da multa, expresso em moeda corrente
                    fvalorAcrescimo().length(15),
                    fvalorDesconto().length(15),
                    fvalorAbatimento().length(15),
                    fvalorIOF().length(15),
                    fvalorPagamento().length(15),
                    fvalorLiquido().length(15),
                    fvalorOutrasDespesas(),
                    fvalorOutrasReceitas(),
                    fdataOcorrencia(),
                    fdata().nome("dataOutrasReceitas"),
                    //Ocorr. do Pagador
                    fcodigoOcorrencia().length(4),
                    fdata().nome("dataOcorrenciaPagador"),
                    fvalor().nome("valorOcorrenciaPagador"),
                    field("complementoOcorrencia").length(30),
                    field("codBancoCorrespondenteCompens").length(3),
                    field("nossoNumeroBancoCorrespondenteCompens").length(20),
                    field("CNAB").length(7)
            ),
            //Registro Detalhe -Segmento T (Obrigatório -Retorno)
            detalheSegmentoT(
                    fbancoCodigo(), flote(),
                    fcodigoRegistro().value("3"),
                    fsequencialRegistro(),
                    //Código adotado pela FEBRABAN para identificar o segmento do registro.
                    fsegmento().id(true).value("T"),
                    //06.4.J52 CNAB Uso Exclusivo FEBRABAN/CNAB 15 15 1 - Alfa Brancos G004
                    fbranco().length(1),
                    fmovimentoCodigo(),
                    //C/C
                    fagencia(),
                    //Número da Conta Corrente5970 12-Num*G010
                    //Dígito Verificador da Conta7171 1-Alfa*G011
                    fconta(), //Conta com DV
                    //Dígito Verificador da Ag/Conta72721-Alfa*G012
                    //Dígito Verificador da Agência / Conta CorrenteCódigo  
                    //adotado  pelo  Banco  responsável  pela  conta  corrente,
                    //para  verificação  da autenticidade do par Código da Agência / Número da Conta Corrente.
                    //Para os Bancos que se utilizam de duas posições para o Dígito Verificador 
                    //do Número da Conta Corrente, preencher este campo com a 2ª posição deste dígito. 
                    fdac(),
                    fnossoNumero().length(20),
                    fcodigoCarteira(),
                    fnumeroDocumento().length(15),
                    fdataVencimento(),
                    fvalor().length(15),
                    //*C045
                    fbancoCodigo().nome("bancoCodigoRecebedor"),
                    //Agencia (5) + DV (1)
                    fagencia().nome("agenciaBancoRecebedor"),
                    field("usoEmpresa").length(25),
                    fcodigoMoeda(),
                    ftipoInscricao().value(1),//Default 1 CPF
                    fsacadoCpf().length(15),
                    fsacadoNome().length(40),
                    field("numeroContrato").length(10),
                    fvalorTarifaCustas().length(15),
                    frejeicoes().length(10),
                    field("CNAB").length(17)
            ),
            //Registro Detalhe -Segmento P (Obrigatório -Remessa)
            detalheSegmentoP(
                    fbancoCodigo(),
                    flote().value(1), // o mesmo do cabeçalho do lote
                    fcodigoRegistro().value("3"),
                    fsequencialRegistro(),
                    fsegmento().id(true).value("P"),
                    fbranco().length(1),
                    //C004
                    fmovimentoCodigo().value("01"),//Default '01' = Entrada de Títulos
                    fagencia(),
                    fconta(), //Conta com DV
                    fdac(),
                    fnossoNumero().length(20),
                    fcodigoCarteira().value(1),//Default '1' = Cobrança Simples
                    //1'  =  Com Cadastramento (Cobrança Registrada)
                    //'2'  =  Sem Cadastramento (Cobrança sem Registro) 
                    //Obs.: Destina-se somente para emissão de Boleto de Pagamentopelo banco
                    //'3'  =  Com Cadastramento / Recusa do Débito Autom
                    field("formaCadastroTitulo").length(1).value(1),
                    ftipoDocumento(),
                    ftipoEmissaoBoleto(),
                    //C010 Identificação da Distribuição
                    //Código adotado pela FEBRABAN para identificar o responsável pela distribuição do Boleto de Pagamento.
                    // Domínio:
                    //        '1' = Banco Distribui
                    //        '2' = Cliente Distribui
                    //        ‘3’ = Banco envia e-mail
                    //        ‘4’ = Banco envia SMS
                    field("formaDistribuicaoTitulo").length(1).value(2),
                    fnumeroDocumento().length(15),
                    fdataVencimento(),
                    fvalor(),
                    field("agenciaCobradora")
                            .length(6).filler(Fillers.ZERO_LEFT)
                            .value(0),
                    fespecieTitulo(),
                    faceite(),
                    fdataGeracao(),
                    fcodigoAcrescimo(),
                    //Data indicativa do início da cobrança do Juros de Mora de um título de cobrança.
                    //A data informada deverá ser maior que a Data de Vencimento do título de cobrança
                    //Caso seja inválida ou não informada será assumida a data do vencimento.
                    fdataAcrescimo().value(0),
                    //Valor ou porcentagem sobre o valor do título a ser cobrada de juros de mora.
                    fvalorAcrescimo(),
                    fcodigoDesconto(),
                    fdataDesconto().value(0),
                    //Valor ou percentual de desconto a ser concedido sobre o título de cobrança.
                    fvalorDesconto(),
                    fvalorIOF(),
                    fvalorAbatimento(),
                    //Identificação do Título na Empresa
                    fnumeroDocumento().nome("numeroDocumentoEmpresa")
                            .length(25).filler(Fillers.ZERO_LEFT)
                            .value(0),
                    fcodigoProtesto(),
                    field("numeroDiasProtesto").length(2).value("00"),
                    fcodigoBaixa().value("0"),
                    field("numeroDiasBaixa").length(3).value("000"),
                    fcodigoMoeda(),
                    field("numeroContrato").length(10)
                            .filler(Fillers.WHITE_SPACE_LEFT)
                            .type(Number.class).value(0),
                    fbranco().length(1)
            ),
            //Registro Detalhe -Segmento Q (Obrigatório -Remessa)
            detalheSegmentoQ(
                    fbancoCodigo(),
                    flote().value(1), // o mesmo do cabeçalho do lote
                    fcodigoRegistro().value("3"),
                    fsequencialRegistro(),
                    fsegmento().id(true).value("Q"),
                    fbranco().length(1),
                    //*C004
                    fmovimentoCodigo().value("01"),//Default '01' = Entrada de Títulos
                    //Tipo de Inscrição 
                    ftipoInscricao().value(1),
                    fsacadoCpf().length(15),
                    fsacadoNome().length(40),
                    fendereco().length(40).value(""),
                    fbairro().length(15).value(""),
                    fcep().length(8).value(0),
                    fcidade().truncate(true).length(15).value(""),
                    fuf().length(2).value(""),
                    field("tipoInscricaoAvalista").length(1).value(0),
                    field("numeroInscricaoAvalista")
                            .length(15).filler(Fillers.ZERO_LEFT)
                            .value(0),
                    field("nomeAvalista").filler(Fillers.WHITE_SPACE_RIGHT)
                            .length(40).value(""),
                    fbancoCodigo()
                            .nome("bancoCodigoCorrespondente")
                            .value(0),
                    field("nossoNumeroBancoCorrespondente").filler(Fillers.ZERO_LEFT)
                            .length(20).value(0),
                    fbranco().length(8)
            ),
            //Registro Detalhe - Segmento R (Opcional - Remessa)
            detalheSegmentoR(
                    fbancoCodigo(),
                    flote().value(1), // o mesmo do cabeçalho do lote
                    fcodigoRegistro().value("3"),
                    fsequencialRegistro(),
                    fsegmento().id(true).value("R"),
                    fbranco().length(1),
                    //*C004
                    fmovimentoCodigo().value("01"),//Default '01' = Entrada de Títulos
                    //Desconto 2
                    fcodigoDesconto(),
                    fdataDesconto(),
                    //Valor ou percentual de desconto a ser concedido sobre o título de cobrança.
                    fvalorDesconto(),
                    //Desconto 3
                    fcodigoDesconto().nome("codigoDescontoExtra"),
                    fdata().nome("dataDescontoExtra"),
                    //Valor ou percentual de desconto a ser concedido sobre o título de cobrança.
                    fvalorDesconto().nome("valorDescontoExtra"),
                    //Multa/Juros
                    /**
                     * G073: Código adotado pela FEBRABAN para identificação do
                     * critério de pagamento de pena pecuniária, a ser aplicada
                     * pelo atraso do pagamento do Título. Domínio:'1' = Valor
                     * Fixo'2' = Percentual
                     */
                    fcodigoAcrescimo().value(0),
                    /**
                     * Caso não tenha multa, informar 'zeros'. Sistema aceita a
                     * mesma data do vencimento, ou dia seguinte.
                     */
                    fdataAcrescimo(),
                    /**
                     * Caso não tenha multa, informar 'zeros'. Sistema aceita a
                     * mesma data do vencimento, ou dia seguinte.
                     */
                    fvalorAcrescimo(),
                    /**
                     * Informação ao PagadorTexto de observações destinado ao
                     * envio de informações do Beneficiário ao Pagador.Este
                     * campo só poderá ser utilizado, caso haja troca de
                     * arquivos magnéticos entre o Banco e o Pagador.
                     */
                    field("infoPagador").length(10).filler(Fillers.WHITE_SPACE_RIGHT).value(""),
                    field("mensagem3").length(40).filler(Fillers.WHITE_SPACE_RIGHT).value(""),
                    field("mensagem4").length(40).filler(Fillers.WHITE_SPACE_RIGHT).value(""),
                    fbranco().length(20),
                    //C038: Código da Ocorrência do Pagador
                    //Código adotado pela FEBRABAN para identificar a ocorrência do Pagador (Descrição A001) 
                    // a(s) qual(is) o Beneficiário não concorda.
                    //Somente será utilizado para o Código de Movimento '30' (Descrição C004).
                    fcodigoOcorrencia().nome("codigoOcorrenciaPagador").length(8)
                            .filler(Fillers.ZERO_LEFT).value(0),
                    //Dados para debito
                    fbancoCodigo().nome("bancoCodigoDebito").value(0),
                    fagencia().nome("agenciaDebito").value(0),
                    fconta().nome("contaDebito").value(0),
                    fdac().nome("dacDebito").value(0),
                    //C0039: Aviso para Débito Automático Código adotado pela FEBRABAN para 
                    //identificação da emissão do aviso de débito automático em conta corrente.
                    //Domínio: '01' = Emite o Aviso com o Endereço Informado no Arquivo Remessa
                    //'02' = Não Emite Aviso ao Pagador
                    //'03' = Emite Aviso com o Endereço Constante do Cadastro do Banco
                    //Para códigos diferentes de '01', '02' e '03' seguir a regra do '03'.
                    field("avisoDebitoAutomatico").length(1).value("0"),
                    fbranco().length(9)
            ),
            rodapeLote(
                    //Controle: Banco, lote e registro
                    //Banco: Código do Banco na Compensação133-NumG001
                    fbancoCodigo(),
                    flote().value(1), // o mesmo do cabeçalho do lote
                    fcodigoRegistro().value("5"),
                    //04.5 CNAB Uso Exclusivo FEBRABAN/CNAB 9 17 9 - Alfa Brancos G004
                    fbranco().length(9),
                    //Quantidade de Registros do Lote 18 23 6 - Num *G057
                    fquantidadeRegistros().length(6).value(0), fvalorTotalRegistros().length(18).value(0),
                    //Qtde de Moeda Somatória de Quantidade de Moedas 42 59 13 5 Num G058
                    //G058 Somatória de Quantidade de Moedas
                    //Valor obtido pela somatória das quantidades de moeda dos registros de detalhe
                    //(Registro = '3' / Código de Segmento = {'A' / 'J'}).
                    field("qtedMoedas").length(18).filler(Fillers.ZERO_LEFT).value(1),
                    //08.5 Número Aviso Débito Número Aviso Débito 60 65 6 - Num G066
                    //Número do Aviso de Débito
                    //Número atribuído pelo Banco para identificar um Débito efetuado na Conta Corrente a
                    //partir do(s) pagamento(s) efetivado(s), visando facilitar a Conciliação Bancária.
                    field("numAvisoDebito").length(6).filler(Fillers.ZERO_LEFT),
                    fbranco().length(165),
                    //Código das Ocorrências para Retorno/Remessa G0059
                    focorrencias()
            ),
            rodape(
                    //Controle: Banco, lote e registro
                    //Banco: Código do Banco na Compensação133-NumG001
                    fbancoCodigo(), flote().value("9999"), fcodigoRegistro().value("9"),
                    //Uso Exclusivo FEBRABAN/CNAB9179-AlfaBrancosG004
                    fbranco().length(9),
                    //Qtde. de LotesQuantidade de Lotes do Arquivo18236-NumG049
                    field("qtdeLotes").padding(Fillers.ZERO_LEFT).length(6).value(1),
                    //Qtde. de RegistrosQuantidade de Registros do Arquivo24296-NumG0
                    fquantidadeRegistros().length(6).value(0),
                    //Qtde. de Contas Concil.Qtde de Contas p/ Conc. (Lotes)30356-Num*G037
                    /**
                     * Número indicativo de lotes de Conciliação Bancária
                     * enviados no arquivo. Somatória dos registros de tipo 1 e
                     * Tipo de Operação = 'E'. Campo específico para o serviço
                     * de Conciliação Bancária
                     */
                    field("qtedContas").value(0).filler(Fillers.ZERO_LEFT).length(6),
                    //Uso Exclusivo FEBRABAN/CNAB9179-AlfaBrancosG004
                    fbranco().length(205)
            )
    );
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy