//
public string GerarTrailerLoteRemessaCNAC240SIGCB(int numeroRegistro)
{
try
{
TRegistroEDI reg = new TRegistroEDI();
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0001, 003, 0, base.Codigo, '0')); // posição 1 até 3 (3) - código do banco na compensação
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0004, 004, 0, "1", '0')); // posição 4 até 7 (4) - Lote de Serviço
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0008, 001, 0, "5", '0')); // posição 8 até 8 (1) - Tipo de Registro
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0009, 009, 0, string.Empty, ' ')); // posição 9 até 17 (9) - Uso Exclusivo FEBRABAN/CNAB
#region Pega o Numero de Registros + 1(HeaderLote) + 1(TrailerLote)
int vQtdeRegLote = numeroRegistro; // (numeroRegistro + 2);
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0018, 006, 0, vQtdeRegLote, '0')); // posição 18 até 23 (6) - Quantidade de Registros no Lote
#endregion
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0024, 006, 0, "0", '0')); // posição 24 até 29 (6) - Quantidade de Títulos em Cobrança
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0030, 015, 2, "0", '0')); // posição 30 até 46 (15) - Valor Total dos Títulos em Carteiras
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0047, 006, 0, "0", '0')); // posição 47 até 52 (6) - Quantidade de Títulos em Cobrança
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0053, 015, 2, "0", '0')); // posição 53 até 69 (15) - Valor Total dos Títulos em Carteiras
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0070, 006, 0, "0", '0')); // posição 70 até 75 (6) - Quantidade de Títulos em Cobrança
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0076, 015, 2, "0", '0')); // posição 76 até 92 (15)- Quantidade de Títulos em Carteiras
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0093, 031, 0, string.Empty, ' ')); // posição 93 até 123 (31) - Uso Exclusivo FEBRABAN/CNAB
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0124, 117, 0, string.Empty, ' ')); // posição 124 até 240 (117)- Uso Exclusivo FEBRABAN/CNAB
reg.CodificarLinha();
//
string vLinha = reg.LinhaRegistro;
string _headerLote = Utils.SubstituiCaracteresEspeciais(vLinha);
//
return _headerLote;
}
catch (Exception ex)
{
throw new Exception("Erro ao gerar HEADER do lote no arquivo de remessa do CNAB400.", ex);
}
}
//
#region Detalhes
public string GerarDetalheSegmentoPRemessaCNAB240SIGCB(Cedente cedente, Boleto boleto, int numeroRegistro)
{
try
{
#region Segmento P
validaInstrucoes240(boleto);
TRegistroEDI reg = new TRegistroEDI();
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0001, 003, 0, base.Codigo, '0')); // posição 1 até 3 (3) - código do banco na compensação
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0004, 004, 0, "1", '0')); // posição 4 até 7 (4) - Lote de Serviço
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0008, 001, 0, "3", '0')); // posição 8 até 8 (1) - Tipo de Registro
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0009, 005, 0, numeroRegistro, '0')); // posição 9 até 13 (5) - Nº Sequencial do Registro no Lote
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0014, 001, 0, "P", '0')); // posição 14 até 14 (1) - Cód. Segmento do Registro Detalhe
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0015, 001, 0, string.Empty, ' ')); // posição 15 até 15 (1) - Uso Exclusivo FEBRABAN/CNAB
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0016, 002, 0, "01", '0')); // posição 16 até 17 (2) - Código de Movimento Remessa
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0018, 005, 0, cedente.ContaBancaria.Agencia, '0')); // posição 18 até 22 (5) - Agência Mantenedora da Conta
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0023, 001, 0, cedente.ContaBancaria.DigitoAgencia.ToUpper(), ' ')); // posição 23 até 23 (1) - Dígito Verificador da Agência
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0024, 006, 0, cedente.Convenio, '0')); // posição 24 até 29 (6) - Código do Convênio no Banco
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0030, 011, 0, "0", '0')); // posição 30 até 40 (11)- Uso Exclusivo CAIXA
//modalidade são os dois algarimos iniciais do nosso número...
//nosso numero já traz a modalidade concatenada, então passa direto o nosso nro que preenche os dois campos do leiaute
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0041, 017, 0, boleto.NossoNumero, '0')); // posição 43 até 57 (15)- Identificação do Título no Banco
#region Código da Carteira
//Código adotado pela FEBRABAN, para identificar a característica dos títulos dentro das modalidades de cobrança existentes no banco.
//‘1’ = Cobrança Simples; ‘3’ = Cobrança Caucionada; ‘4’ = Cobrança Descontada
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0058, 001, 0, "1", '0')); // posição 58 até 58 (1) - Código Carteira
#endregion
#region Forma de Cadastramento do Título no Banco
string vFormaCadastramento = "1";// Com registro
if (boleto.Remessa.TipoDocumento.Equals("2"))
vFormaCadastramento = "2";//sem registro
#endregion
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0059, 001, 0, vFormaCadastramento, '0')); // posição 59 até 59 (1) - Forma de Cadastr. do Título no Banco 1 - Com Registro 2 - Sem registro.
#region Tratamento do tipo Cobrança (com ou sem registro)
#endregion
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0060, 001, 0, "2", '0'));
String Emissao = boleto.Carteira.Equals("CS") ? "1" : "2";// posição 60 até 60 (1) - Tipo de Documento
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0061, 001, 0, Emissao, '0')); // posição 61 até 61 (1) - Identificação da Emissão do Bloqueto -- ‘1’-Banco Emite, '2'-entrega do bloqueto pelo Cedente
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0062, 001, 0, "0", '0')); // posição 62 até 62 (1) - Identificação da Entrega do Bloqueto /* ‘0’ = Postagem pelo Cedente ‘1’ = Sacado via Correios ‘2’ = Cedente via Agência CAIXA*/
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0063, 011, 0, boleto.NumeroDocumento, ' ')); // posição 63 até 73 (11)- Número do Documento de Cobrança
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0074, 004, 0, string.Empty, ' ')); // posição 74 até 77 (4) - Uso Exclusivo CAIXA
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediDataDDMMAAAA_________, 0078, 008, 0, boleto.DataVencimento, ' ')); // posição 78 até 85 (8) - Data de Vencimento do Título
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0086, 015, 2, boleto.ValorBoleto, '0')); // posição 86 até 100 (15)- Valor Nominal do Título
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0101, 005, 2, "0", '0'));//0sistema atribui AEC pelo CEP do sacado // posição 101 até 105 (5) - AEC = Agência Encarregada da Cobrança
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0106, 001, 0, cedente.ContaBancaria.DigitoAgencia.ToUpper(), ' ')); // posição 106 até 106 (1) - Dígito Verificador da Agência
string EspDoc = boleto.EspecieDocumento.Sigla.Equals("DM") ? "02" : boleto.EspecieDocumento.Codigo;
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0107, 002, 2, EspDoc, '0')); // posição 107 até 108 (2) - Espécie do Título
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0109, 001, 0, boleto.Aceite, ' ')); // posição 109 até 109 (1) - Identific. de Título Aceito/Não Aceito
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediDataDDMMAAAA_________, 0110, 008, 0, boleto.DataDocumento, '0')); // posição 110 até 117 (8) - Data da Emissão do Título
#region Código de juros
string CodJurosMora;
if (boleto.JurosMora == 0 && boleto.PercJurosMora == 0)
CodJurosMora = "3";
else
CodJurosMora = "1";
#endregion
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0118, 001, 2, CodJurosMora, '0')); // posição 118 até 118 (1) - Código do Juros de Mora
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediDataDDMMAAAA_________, 0119, 008, 0, boleto.DataJurosMora, '0')); // posição 119 até 126 (8) - Data do Juros de Mora
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0127, 015, 2, boleto.JurosMora, '0')); // posição 127 até 141 (15)- Juros de Mora por Dia/Taxa
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0142, 001, 0, "0", '0')); // posição 142 até 142 (1) - Código do Desconto 1 - "0" = Sem desconto. "1"= Valor Fixo até a data informada "2" = Percentual até a data informada
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediDataDDMMAAAA_________, 0143, 008, 0, boleto.DataDesconto, '0')); // posição 143 até 150 (8) - Data do Desconto
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0151, 015, 2, boleto.ValorDesconto, '0')); // posição 151 até 165 (15)- Valor/Percentual a ser Concedido
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0166, 015, 2, boleto.IOF, '0')); // posição 166 até 180 (15)- Valor do IOF a ser concedido
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0181, 015, 2, boleto.Abatimento, '0')); // posição 181 até 195 (15)- Valor do Abatimento
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0196, 025, 0, boleto.NumeroDocumento, ' ')); // posição 196 até 220 (25)- Identificação do Título na Empresa. Informar o Número do Documento - Seu Número (mesmo das posições 63-73 do Segmento P)
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0221, 001, 0, (protestar ? "1" : "3"), '0')); // posição 221 até 221 (1) - Código para protesto - ‘1’ = Protestar. "3" = Não Protestar. "9" = Cancelamento Protesto Automático
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0222, 002, 0, diasProtesto, '0')); // posição 222 até 223 (2) - Número de Dias para Protesto
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0224, 001, 0, (baixaDevolver ? "1" : "2"), '0')); // posição 224 até 224 (1) - Código para Baixa/Devolução ‘1’ = Baixar / Devolver. "2" = Não Baixar / Não Devolver
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0225, 003, 0, diasDevolucao, '0')); // posição 225 até 227 (3) - Número de Dias para Baixa/Devolução
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0228, 002, 0, "09", '0')); // posição 228 até 229 (2) - Código da Moeda. Informar fixo: ‘09’ = REAL
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0230, 010, 2, "0", '0')); // posição 230 até 239 (10)- Uso Exclusivo CAIXA
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0240, 001, 0, string.Empty, ' ')); // posição 240 até 240 (1) - Uso Exclusivo FEBRABAN/CNAB
//
reg.CodificarLinha();
//
string vLinha = reg.LinhaRegistro;
string _SegmentoP = Utils.SubstituiCaracteresEspeciais(vLinha);
return _SegmentoP;
#endregion
}
catch (Exception ex)
{
throw new Exception("Erro ao gerar DETALHE do Segmento P no arquivo de remessa do CNAB240 SIGCB.", ex);
}
}
public string GerarHeaderLoteRemessaCNAC240SIGCB(Cedente cedente, int numeroArquivoRemessa)
{
try
{
TRegistroEDI reg = new TRegistroEDI();
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0001, 003, 0, base.Codigo, '0')); // posição 1 até 3 (3) - código do banco na compensação
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0004, 004, 0, 1, '0')); // posição 4 até 7 (4) - Lote de Serviço
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0008, 001, 0, "1", '0')); // posição 8 até 8 (1) - Tipo de Registro
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0009, 001, 0, "R", ' ')); // posição 9 até 9 (1) - Tipo de Operação
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0010, 002, 0, "01", '0')); // posição 10 até 11 (2) - Tipo de Serviço
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0012, 002, 0, "00", '0')); // posição 12 até 13 (2) - Uso Exclusivo FEBRABAN/CNAB
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0014, 003, 0, "030", '0')); // posição 14 até 16 (3) - Nº da Versão do Layout do Lote
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0017, 001, 0, string.Empty, ' ')); // posição 17 até 17 (1) - Uso Exclusivo FEBRABAN/CNAB
#region Regra Tipo de Inscrição Cedente
string vCpfCnpjEmi = "0";//não informado
if (cedente.CPFCNPJ.Length.Equals(11)) vCpfCnpjEmi = "1"; //Cpf
else if (cedente.CPFCNPJ.Length.Equals(14)) vCpfCnpjEmi = "2"; //Cnpj
#endregion
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0018, 001, 0, vCpfCnpjEmi, '0')); // posição 18 até 18 (1) - Tipo de Inscrição
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0019, 015, 0, cedente.CPFCNPJ, '0')); // posição 19 até 33 (15)- Número de Inscrição da empresa
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0034, 006, 0, cedente.Convenio, '0')); // posição 34 até 39 (6) - Código do Convênio no Banco
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0040, 014, 0, "0", '0')); // posição 40 até 53 (14)- Uso Exclusivo CAIXA
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0054, 005, 0, cedente.ContaBancaria.Agencia, '0')); // posição 54 até 58 (5) - Agência Mantenedora da Conta
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0059, 001, 0, cedente.ContaBancaria.DigitoAgencia.ToUpper(), ' ')); // posição 59 até 59 (1) - Dígito Verificador da Agência
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0060, 006, 0, cedente.Convenio, '0')); // posição 60 até 65 (6) - Código do Convênio no Banco
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0066, 007, 0, "0", '0')); // posição 66 até 72 (7) - Código do Modelo Personalizado
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0073, 001, 0, "0", '0')); // posição 73 até 73 (1) - Uso Exclusivo CAIXA
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0074, 030, 0, cedente.Nome.ToUpper(), ' ')); // posição 73 até 103 (30)- Nome da Empresa
//TODO.: ROGER KLEIN - INSTRUÇÕES NÃO TRATADAS
#region Instruções
//string descricao = string.Empty;
////
string vInstrucao1 = string.Empty;
string vInstrucao2 = string.Empty;
//foreach (Instrucao_Caixa instrucao in boleto.Instrucoes)
//{
// switch ((EnumInstrucoes_Caixa)instrucao.Codigo)
// {
// case EnumInstrucoes_Caixa.Protestar:
// //
// //instrucao.Descricao.ToString().ToUpper();
// break;
// case EnumInstrucoes_Caixa.NaoProtestar:
// //
// break;
// case EnumInstrucoes_Caixa.ImportanciaporDiaDesconto:
// //
// break;
// case EnumInstrucoes_Caixa.ProtestoFinsFalimentares:
// //
// break;
// case EnumInstrucoes_Caixa.ProtestarAposNDiasCorridos:
// break;
// }
//}
#endregion
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0104, 040, 0, vInstrucao1, ' ')); // posição 104 até 143 (40) - Mensagem 1
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0144, 040, 0, vInstrucao2, ' ')); // posição 144 até 183 (40) - Mensagem 2
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediNumericoSemSeparador_, 0184, 008, 0, numeroArquivoRemessa, '0')); // posição 184 até 191 (8) - Número Remessa/Retorno
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediDataDDMMAAAA_________, 0192, 008, 0, DateTime.Now, ' ')); // posição 192 até 199 (8) - Data de Geração do Arquivo
/*Data do Crédito
Data de efetivação do crédito referente ao pagamento do título de cobrança.
Informação enviada somente no arquivo de retorno.*/
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediDataDDMMAAAA_________, 0200, 008, 0, DateTime.Now, '0')); // posição 200 até 207 (8) - Data do Crédito
reg.CamposEDI.Add(new TCampoRegistroEDI(TTiposDadoEDI.ediAlphaAliEsquerda_____, 0208, 033, 0, string.Empty, ' ')); // posição 208 até 240(33) - Uso Exclusivo FEBRABAN/CNAB
//
reg.CodificarLinha();
//
string vLinha = reg.LinhaRegistro;
string _headerLote = Utils.SubstituiCaracteresEspeciais(vLinha);
//
return _headerLote;
}
catch (Exception ex)
{
throw new Exception("Erro ao gerar HEADER do lote no arquivo de remessa do CNAB400.", ex);
}
}
请发表评论