public RetornoGenerico(RetornoCnab240 retornoCnab240) { Inicializa(); RetornoCnab240Especifico = retornoCnab240; /* Transformar de CNAB240 para formato genérico */ foreach (var loteAtual in retornoCnab240.Lotes) { foreach (var d in loteAtual.RegistrosDetalheSegmentos) { var detalheGenericoAdd = new RetornoDetalheGenerico { NossoNumero = d.SegmentoT.NossoNumero, Carteira = d.SegmentoT.CodigoCarteira.ToString(CultureInfo.InvariantCulture), NumeroDocumento = d.SegmentoT.NumeroDocumento }; // Segmento T var valorDoc = d.SegmentoT.ValorTitulo; detalheGenericoAdd.ValorDocumento = valorDoc; detalheGenericoAdd.DataVencimento = Convert.ToDateTime(d.SegmentoT.DataVencimento); detalheGenericoAdd.NomeSacado = d.SegmentoT?.NomeSacado; // Segmento U detalheGenericoAdd.DataCredito = d.SegmentoU.DataCredito; detalheGenericoAdd.DataOcorrencia = Convert.ToDateTime(d.SegmentoU.DataOcorrencia); #region Valores no detalhe var valorAcres = d.SegmentoU.JurosMultaEncargos; var valorDesc = d.SegmentoU.ValorDescontoConcedido + d.SegmentoU.ValorAbatimentoConcedido; //var valorPago = d.SegmentoU.ValorPagoPeloSacado; var valorRecebido = d.SegmentoU.ValorLiquidoASerCreditado; detalheGenericoAdd.ValorAcrescimos = valorAcres; detalheGenericoAdd.ValorDesconto = valorDesc; //detalheGenericoAdd.ValorPago = valorPago; detalheGenericoAdd.ValorRecebido = valorRecebido; #endregion var banco = BancoFactory.ObterBanco(d.SegmentoU?.CodigoBanco.ToString().PadLeft(3, '0')); var ocorrencia = banco.ObtemCodigoOcorrenciaByInt(d.SegmentoU.BoletoBrToBind().CodigoMovimento); detalheGenericoAdd.CodigoOcorrencia = ocorrencia?.Codigo.ToString(); detalheGenericoAdd.MensagemOcorrenciaRetornoBancario = ocorrencia?.Descricao; detalheGenericoAdd.Ocorrencia = ocorrencia; //DATA LIQUIDAÇÃO E DATA OCORRENCIA if (detalheGenericoAdd.Pago && detalheGenericoAdd.DataLiquidacao == DateTime.MinValue) { detalheGenericoAdd.DataLiquidacao = d.SegmentoU.DataOcorrencia; } RegistrosDetalhe.Add(detalheGenericoAdd); } } Trailer.QtdRegistrosArquivo = retornoCnab240.Trailer.QtdRegistrosArquivo.ToString(CultureInfo.InvariantCulture); }
public RetornoGenerico(RetornoCnab400 retornoCnab400) { Inicializa(); RetornoCnab400Especifico = retornoCnab400; /* Transformar de CNAB400 para formato genérico */ Header.CodigoDoBanco = retornoCnab400.Header.CodigoDoBanco; Header.Convenio = retornoCnab400.Header.NumeroConvenio.ToString(CultureInfo.InvariantCulture); Header.CodigoAgencia = retornoCnab400.Header.CodigoAgenciaCedente.ToString(CultureInfo.InvariantCulture); Header.DvAgencia = retornoCnab400.Header.DvAgenciaCedente; Header.NumeroConta = retornoCnab400.Header.ContaCorrente; Header.DvConta = retornoCnab400.Header.DvContaCorrente; Header.NomeEmpresa = retornoCnab400.Header.NomeDoBeneficiario; Header.NomeDoBanco = retornoCnab400.Header.NomeDoBanco; foreach (var registroAtual in retornoCnab400.RegistrosDetalhe) { var banco = BancoFactory.ObterBanco(Header.CodigoDoBanco); var ocorrencia = banco.ObtemCodigoOcorrenciaByInt(registroAtual.CodigoDeOcorrencia); var detalheGenericoAdd = new RetornoDetalheGenerico { NossoNumero = registroAtual.NossoNumero, TipoCobranca = registroAtual.TipoCobranca.ToString(CultureInfo.InvariantCulture), Carteira = registroAtual.CodigoCarteira, PercentualDesconto = registroAtual.TaxaDesconto, PercentualIof = registroAtual.TaxaIof, Especie = registroAtual.Especie, //DataPagamento = registroAtual.DataPagamento.ToString("ddMMyy").Equals("0") ? new DateTime(0001, 01, 01) : Convert.ToDateTime(registroAtual.DataPagamento.ToString("ddMMyy")), DataCredito = registroAtual.DataDeCredito, DataVencimento = registroAtual.DataDeVencimento, //DataOcorrencia = registroAtual.DataEmissao.ToString("ddMMyy").Equals(null) ? new DateTime(0001, 01, 01) : Convert.ToDateTime(registroAtual.DataEmissao.ToString("ddMMyy")), NumeroDocumento = registroAtual.NumeroDocumento, ValorDocumento = registroAtual.ValorDoTituloParcela, ValorTarifaCustas = registroAtual.ValorTarifa, ValorOutrasDespesas = registroAtual.ValorOutrasDespesas, ValorJurosDesconto = registroAtual.ValorJurosDesconto, ValorIofDesconto = registroAtual.ValorIofDesconto, ValorAbatimento = registroAtual.ValorAbatimento, ValorDesconto = registroAtual.ValorDesconto, ValorRecebido = registroAtual.ValorLiquidoRecebido + registroAtual.ValorDoDebitoCredito, ValorAcrescimos = registroAtual.ValorJurosDeMora + registroAtual.ValorMulta, ValorOutrosRecebimentos = registroAtual.ValorOutrosRecebimentos, ValorAbatimentoNaoAproveitadoPeloSacado = registroAtual.ValorAbatimentosNaoAproveitado, ValorLancamento = registroAtual.ValorLancamento, //DataLiquidacao = registroAtual.DataLiquidacao.ToString("ddMMyy").Equals(null) ? new DateTime(0001, 01, 01) : Convert.ToDateTime(registroAtual.DataLiquidacao.ToString("ddMMyy")), InscricaoSacado = registroAtual.NumeroInscricaoSacado.ToString(CultureInfo.InvariantCulture), NomeSacado = registroAtual.NomeSacado, //CodigoMovimento = registroAtual.MotivoCodigoRejeicao.Equals(null) ? "0" : registroAtual.MotivoCodigoRejeicao, CodigoOcorrencia = String.IsNullOrEmpty(registroAtual.MotivoCodigoOcorrencia) ? "00" : registroAtual.MotivoCodigoOcorrencia, MensagemOcorrenciaRetornoBancario = ocorrencia.Descricao }; RegistrosDetalhe.Add(detalheGenericoAdd); } }
public RetornoGenerico(RetornoCnab400 retornoCnab400) { Inicializa(); RetornoCnab400Especifico = retornoCnab400; /* Transformar de CNAB400 para formato genérico */ Header.CodigoDoBanco = retornoCnab400.Header.CodigoDoBanco; Header.Convenio = retornoCnab400.Header.NumeroConvenio.ToString(CultureInfo.InvariantCulture); Header.CodigoAgencia = retornoCnab400.Header.CodigoAgenciaCedente.ToString(CultureInfo.InvariantCulture); Header.DvAgencia = retornoCnab400.Header.DvAgenciaCedente; Header.NumeroConta = retornoCnab400.Header.ContaCorrente; Header.DvConta = retornoCnab400.Header.DvContaCorrente; Header.NomeEmpresa = retornoCnab400.Header.NomeDoBeneficiario; Header.NomeDoBanco = retornoCnab400.Header.NomeDoBanco; Header.NumeroInscricaoEmpresa = retornoCnab400.RegistrosDetalhe.FirstOrDefault()?.IdentificacaoEmpresaNoBanco; foreach (var registroAtual in retornoCnab400.RegistrosDetalhe) { var banco = BancoFactory.ObterBanco(Header.CodigoDoBanco); var ocorrencia = banco.ObtemCodigoOcorrenciaByInt(registroAtual.CodigoDeOcorrencia); var detalheGenericoAdd = new RetornoDetalheGenerico { NossoNumero = registroAtual.NossoNumero, TipoCobranca = registroAtual.TipoCobranca.ToString(CultureInfo.InvariantCulture), Carteira = registroAtual.CodigoCarteira, PercentualDesconto = registroAtual.TaxaDesconto, PercentualIof = registroAtual.TaxaIof, Especie = registroAtual.Especie, DataCredito = registroAtual.DataDeCredito, DataVencimento = registroAtual.DataDeVencimento, DataLiquidacao = registroAtual.DataLiquidacao, NumeroDocumento = registroAtual.NumeroDocumento, SeuNumero = registroAtual.SeuNumero, ValorDocumento = registroAtual.ValorDoTituloParcela, ValorTarifaCustas = registroAtual.ValorTarifa, ValorOutrasDespesas = registroAtual.ValorOutrasDespesas, ValorJurosDesconto = registroAtual.ValorJurosDesconto, ValorIofDesconto = registroAtual.ValorIofDesconto, ValorAbatimento = registroAtual.ValorAbatimento, ValorDesconto = registroAtual.ValorDesconto, ValorRecebido = registroAtual.ValorLiquidoRecebido + registroAtual.ValorDoDebitoCredito, ValorAcrescimos = registroAtual.ValorJurosDeMora + registroAtual.ValorMulta + registroAtual.ValorTarifa, ValorJuros = registroAtual.ValorJurosDeMora, ValorMulta = registroAtual.ValorMulta, ValorOutrosRecebimentos = registroAtual.ValorOutrosRecebimentos, ValorAbatimentoNaoAproveitadoPeloSacado = registroAtual.ValorAbatimentosNaoAproveitado, ValorLancamento = registroAtual.ValorLancamento, InscricaoSacado = registroAtual.NumeroInscricaoSacado.ToString(CultureInfo.InvariantCulture), NomeSacado = registroAtual.NomeSacado, CodigoOcorrencia = String.IsNullOrEmpty(registroAtual.MotivoCodigoOcorrencia) ? "00" : registroAtual.MotivoCodigoOcorrencia, MensagemOcorrenciaRetornoBancario = ocorrencia.Descricao, Ocorrencia = ocorrencia }; //DATA LIQUIDAÇÃO E DATA OCORRENCIA if (detalheGenericoAdd.Pago && detalheGenericoAdd.DataLiquidacao == DateTime.MinValue) { detalheGenericoAdd.DataLiquidacao = registroAtual.DataDaOcorrencia; } RegistrosDetalhe.Add(detalheGenericoAdd); } }
public string EscreverDetalhe(DetalheRemessaCnab400 infoDetalhe) { if (infoDetalhe.TipoCarteiraCobranca != "1" && infoDetalhe.TipoCarteiraCobranca != "2" && infoDetalhe.TipoCarteiraCobranca != "3") { throw new Exception( "Informe o tipo carteira de cobrança. 1- Sem Registro; 2- Com Registro- Impressão Local ou 3- Com Registro- Impressão pelo BRB"); } #region Variáveis var objBanco = BancoFactory.ObterBanco(infoDetalhe.CodigoBanco); var enderecoSacado = string.Empty; var cidadeSacado = string.Empty; var nomeSacado = string.Empty; var tipoSacado = string.Empty; #endregion if (String.IsNullOrEmpty(infoDetalhe.EnderecoPagador)) { enderecoSacado.PadRight(35, ' '); } else { enderecoSacado = infoDetalhe.EnderecoPagador.Length > 35 ? infoDetalhe.EnderecoPagador.ExtrairValorDaLinha(0, 35).ToUpper() : infoDetalhe.EnderecoPagador.PadRight(35, ' ').ToUpper(); } if (String.IsNullOrEmpty(infoDetalhe.CidadePagador)) { cidadeSacado.PadRight(15, ' '); } else { cidadeSacado = infoDetalhe.CidadePagador.Length > 15 ? infoDetalhe.CidadePagador.ExtrairValorDaLinha(0, 15).ToUpper() : infoDetalhe.CidadePagador.PadRight(15, ' ').ToUpper(); } if (String.IsNullOrEmpty(infoDetalhe.NomePagador)) { nomeSacado.PadRight(35, ' '); } else { nomeSacado = infoDetalhe.NomePagador.Length > 35 ? infoDetalhe.NomePagador.ExtrairValorDaLinha(0, 35).ToUpper() : infoDetalhe.NomePagador.PadRight(35, ' ').ToUpper(); } //1- Física; 2- Jurídica ou 9- Isenta switch (infoDetalhe.InscricaoPagador.Replace(".", "").Replace("/", "").Replace("-", "").Length) { case 11: tipoSacado = "1"; break; case 14: tipoSacado = "2"; break; default: tipoSacado = "9"; break; } var detalhe = new string(' ', 400); try { detalhe = detalhe.PreencherValorNaLinha(1, 2, "01"); // Identificação do Registro Transação detalhe = detalhe.PreencherValorNaLinha(3, 5, infoDetalhe.Agencia); detalhe = detalhe.PreencherValorNaLinha(6, 12, (infoDetalhe.ContaCorrente + infoDetalhe.DvContaCorrente).PadLeft(7, '0')); detalhe = detalhe.PreencherValorNaLinha(13, 26, infoDetalhe.InscricaoPagador.Replace(".", "").Replace("/", "").Replace("-", "").PadRight(14, ' ')); detalhe = detalhe.PreencherValorNaLinha(27, 61, nomeSacado); detalhe = detalhe.PreencherValorNaLinha(62, 96, enderecoSacado); detalhe = detalhe.PreencherValorNaLinha(97, 111, cidadeSacado); detalhe = detalhe.PreencherValorNaLinha(112, 113, infoDetalhe.UfPagador.PadRight(2, ' ')); detalhe = detalhe.PreencherValorNaLinha(114, 121, infoDetalhe.CepPagador.Replace(".", "").Replace("-", "").PadLeft(8, '0')); detalhe = detalhe.PreencherValorNaLinha(122, 122, tipoSacado); detalhe = detalhe.PreencherValorNaLinha(123, 135, infoDetalhe.NumeroDocumento.PadLeft(13, '0')); detalhe = detalhe.PreencherValorNaLinha(136, 136, infoDetalhe.TipoCarteiraCobranca); detalhe = detalhe.PreencherValorNaLinha(137, 144, infoDetalhe.DataEmissao.ToString("ddMMyyyy")); detalhe = detalhe.PreencherValorNaLinha(145, 146, infoDetalhe.Especie.Codigo.ToString()); //0- Simples detalhe = detalhe.PreencherValorNaLinha(147, 147, "0"); //0- No vencimento; 1- À Vista ou 2- Contra Apresentação detalhe = detalhe.PreencherValorNaLinha(148, 148, "0"); //02- Real; 51- UFIR ou 91- UPDF detalhe = detalhe.PreencherValorNaLinha(149, 150, "02"); detalhe = detalhe.PreencherValorNaLinha(151, 153, "070"); detalhe = detalhe.PreencherValorNaLinha(154, 157, infoDetalhe.Agencia.PadLeft(4, '0')); //detalhe = detalhe.PreencherValorNaLinha(158, 187, " "); detalhe = detalhe.PreencherValorNaLinha(188, 195, infoDetalhe.DataVencimento.ToString("ddMMyyyy")); detalhe = detalhe.PreencherValorNaLinha(196, 209, infoDetalhe.ValorBoleto.ToString("f").Replace(".", "").Replace(",", "").PadLeft(14, '0')); if (infoDetalhe.TipoCarteiraCobranca == "3") { detalhe = detalhe.PreencherValorNaLinha(210, 221, string.Empty.PadLeft(12, '0')); } else { detalhe = detalhe.PreencherValorNaLinha(210, 221, infoDetalhe.NossoNumeroFormatado); } //00- Sem Juros ('Não Cobrar Juros'); //50-Diário ("Juro de mora ao dia de...") ou //51- Mensal ("Juro de mora ao mês de ...%") if (infoDetalhe.TipoCobrancaJuro == TipoCobrancaJuro.JurosDiario) { detalhe = detalhe.PreencherValorNaLinha(222, 223, "50"); } else if (infoDetalhe.TipoCobrancaJuro == TipoCobrancaJuro.JurosMensal) { detalhe = detalhe.PreencherValorNaLinha(222, 223, "51"); } else { detalhe = detalhe.PreencherValorNaLinha(222, 223, "00"); } detalhe = detalhe.PreencherValorNaLinha(224, 237, infoDetalhe.ValorJuros.ToString("f").Replace(",", "").PadLeft(14, '0')); detalhe = detalhe.PreencherValorNaLinha(238, 251, infoDetalhe.ValorAbatimento.ToString("f").Replace(",", "").PadLeft(14, '0')); if (infoDetalhe.ValorDescontoDia > 0) { detalhe = detalhe.PreencherValorNaLinha(252, 253, "52"); } else if (infoDetalhe.ValorDesconto > 0) { detalhe = detalhe.PreencherValorNaLinha(252, 253, "53"); } else { detalhe = detalhe.PreencherValorNaLinha(252, 253, "00"); } if (infoDetalhe.DataLimiteConcessaoDesconto == DateTime.MinValue) { detalhe = detalhe.PreencherValorNaLinha(254, 261, string.Empty.PadLeft(8, '0')); } else { detalhe = detalhe.PreencherValorNaLinha(254, 261, infoDetalhe.DataLimiteConcessaoDesconto.ToString("ddMMyyyy")); } if (infoDetalhe.ValorDescontoDia > 0) { detalhe = detalhe.PreencherValorNaLinha(262, 275, infoDetalhe.ValorDescontoDia.ToString("f").Replace(",", "").PadLeft(14, '0')); } else if (infoDetalhe.ValorDesconto > 0) { detalhe = detalhe.PreencherValorNaLinha(262, 275, infoDetalhe.ValorDesconto.ToString("f").Replace(",", "").PadLeft(14, '0')); } else { detalhe = detalhe.PreencherValorNaLinha(262, 275, string.Empty.PadLeft(14, '0')); } #region Instruções if (infoDetalhe.Instrucoes.Count > 2) { throw new Exception( string.Format( "<BoletoBr>{0}Não são aceitas mais que 2 instruções padronizadas para remessa de boletos no banco BRB.", Environment.NewLine)); } var primeiraInstrucao = infoDetalhe.Instrucoes.FirstOrDefault(); if (primeiraInstrucao != null) { detalhe = detalhe.PreencherValorNaLinha(276, 277, primeiraInstrucao.Codigo.BoletoBrToStringSafe()); detalhe = detalhe.PreencherValorNaLinha(278, 279, primeiraInstrucao.QtdDias.BoletoBrToStringSafe()); detalhe = detalhe.PreencherValorNaLinha(284, 288, primeiraInstrucao.Valor.ToString("f").Replace(",", "").PadLeft(5, '0')); } else { detalhe = detalhe.PreencherValorNaLinha(276, 277, "00"); detalhe = detalhe.PreencherValorNaLinha(278, 279, "00"); detalhe = detalhe.PreencherValorNaLinha(284, 288, string.Empty.PadLeft(5, '0')); } if (infoDetalhe.Instrucoes.Count > 1) { var segundaIntrucao = infoDetalhe.Instrucoes.LastOrDefault(); detalhe = detalhe.PreencherValorNaLinha(280, 281, segundaIntrucao.Codigo.BoletoBrToStringSafe()); detalhe = detalhe.PreencherValorNaLinha(282, 283, segundaIntrucao.QtdDias.BoletoBrToStringSafe()); } else { detalhe = detalhe.PreencherValorNaLinha(280, 281, "00"); detalhe = detalhe.PreencherValorNaLinha(282, 283, "00"); } #endregion var razao = ""; if (infoDetalhe.RazaoContaCorrente.Length > 40) { razao = infoDetalhe.RazaoContaCorrente.ExtrairValorDaLinha(1, 40); } else { razao = infoDetalhe.RazaoContaCorrente; } detalhe = detalhe.PreencherValorNaLinha(289, 328, razao.PadRight(40, ' ')); var obs = ""; if (infoDetalhe.Mensagem1.BoletoBrToStringSafe().Length > 40) { obs = infoDetalhe.Mensagem1.ExtrairValorDaLinha(1, 40); } else { obs = infoDetalhe.Mensagem1.BoletoBrToStringSafe(); } detalhe = detalhe.PreencherValorNaLinha(329, 368, obs.PadRight(40, ' ')); return(detalhe); } catch (Exception e) { throw new Exception(string.Format("<BoletoBr>{0}Falha na geração do DETALHE do arquivo de REMESSA.", Environment.NewLine), e); } }
public string EscreverDetalhe(DetalheRemessaCnab400 infoDetalhe, int sequenciaDetalhe) { if (String.IsNullOrEmpty(infoDetalhe.BairroPagador)) { throw new Exception("Não foi informado o bairro do pagador " + infoDetalhe.NomePagador + "(" + infoDetalhe.InscricaoPagador + ")"); } if (String.IsNullOrEmpty(infoDetalhe.CepPagador) || infoDetalhe.CepPagador.Length < 8) { throw new Exception("CEP Inválido! Verifique o CEP do pagador " + infoDetalhe.NomePagador + "(" + infoDetalhe.InscricaoPagador + ")"); } // Na geração do detalhe na remessa não está sendo tratado os casos de cancelamento das instruções nas posições 34-37 var objBanco = BancoFactory.ObterBanco(infoDetalhe.CodigoBanco); //string nossoNumeroCarteira = // infoDetalhe.NossoNumeroFormatado.Replace(".", "").Replace("/", "").Replace("-", "").Substring(0, 3); string nossoNumeroSequencial = infoDetalhe.NossoNumeroFormatado.Replace(".", "").Replace("/", "").Replace("-", "").Substring(3, 8); //string nossoNumeroDigito = // infoDetalhe.NossoNumeroFormatado.Replace(".", "").Replace("/", "").Replace("-", "").Substring(11, 1); string carteiraCob = infoDetalhe.CarteiraCobranca.PadLeft(3, ' '); string enderecoSacado = string.Empty; string bairroSacado = string.Empty; string cidadeSacado = string.Empty; string nomeSacado = string.Empty; if (String.IsNullOrEmpty(infoDetalhe.EnderecoPagador)) { enderecoSacado.PadRight(40, ' '); } else if (infoDetalhe.EnderecoPagador.Length > 40) { enderecoSacado = infoDetalhe.EnderecoPagador.Substring(0, 40).ToUpper(); } else { enderecoSacado = infoDetalhe.EnderecoPagador.PadRight(40, ' ').ToUpper(); } if (String.IsNullOrEmpty(infoDetalhe.BairroPagador)) { bairroSacado.PadRight(12, ' '); } else if (infoDetalhe.BairroPagador.Length > 12) { bairroSacado = infoDetalhe.BairroPagador.Substring(0, 12).ToUpper(); } else { bairroSacado = infoDetalhe.BairroPagador.PadRight(12, ' ').ToUpper(); } if (String.IsNullOrEmpty(infoDetalhe.CidadePagador)) { cidadeSacado.PadRight(15, ' '); } else if (infoDetalhe.CidadePagador.Length > 15) { cidadeSacado = infoDetalhe.CidadePagador.Substring(0, 15).ToUpper(); } else { cidadeSacado = infoDetalhe.CidadePagador.PadRight(15, ' ').ToUpper(); } if (String.IsNullOrEmpty(infoDetalhe.NomePagador)) { nomeSacado.PadRight(30, ' '); } else if (infoDetalhe.NomePagador.Length > 30) { nomeSacado = infoDetalhe.NomePagador.Substring(0, 30).ToUpper(); } else { nomeSacado = infoDetalhe.NomePagador.PadRight(30, ' ').ToUpper(); } var detalhe = new string(' ', 400); try { detalhe = detalhe.PreencherValorNaLinha(1, 1, "1"); // Identificação do Registro Transação detalhe = detalhe.PreencherValorNaLinha(2, 3, infoDetalhe.InscricaoCedente.Replace(".", "").Replace("/", "").Replace("-", "").Length == 11 ? "01" : "02"); // Tipo de Inscrição da Empresa detalhe = detalhe.PreencherValorNaLinha(4, 17, infoDetalhe.InscricaoCedente.Replace(".", "").Replace("/", "").Replace("-", "")); // Nro de Inscrição da Empresa (CPF/CNPJ) detalhe = detalhe.PreencherValorNaLinha(18, 21, infoDetalhe.Agencia.PadLeft(4, '0')); // Agência Mantenedora da Conta detalhe = detalhe.PreencherValorNaLinha(22, 23, string.Empty.PadRight(2, '0')); // Complemento de Registro detalhe = detalhe.PreencherValorNaLinha(24, 28, infoDetalhe.ContaCorrente.PadLeft(5, '0')); // Nro da Conta Corrente da Empresa detalhe = detalhe.PreencherValorNaLinha(29, 29, infoDetalhe.DvContaCorrente); // Dígito de Auto Conferência Ag/Conta Empresa detalhe = detalhe.PreencherValorNaLinha(30, 33, string.Empty.PadRight(4, ' ')); // Complemento de Registro if (infoDetalhe.CodigoOcorrencia.Codigo != 35 && infoDetalhe.CodigoOcorrencia.Codigo != 38) { detalhe = detalhe.PreencherValorNaLinha(34, 37, "0000"); // Cód. Instrução/Alegação a ser cancelada } const string doc = "DOC"; var seuNumero = doc + infoDetalhe.NossoNumeroFormatado.PadRight(25 - doc.Length, ' '); detalhe = detalhe.PreencherValorNaLinha(38, 62, seuNumero); // Identificação do Título na Empresa detalhe = detalhe.PreencherValorNaLinha(63, 70, nossoNumeroSequencial); // Identificação do Título no Banco // Se Moeda = REAL, preenche com zeros if (infoDetalhe.Moeda == "9" || infoDetalhe.Moeda == "09" || infoDetalhe.Moeda == "R$" || infoDetalhe.Moeda == "REAL") { detalhe = detalhe.PreencherValorNaLinha(71, 83, string.Empty.PadLeft(13, '0')); } // Quantidade de Moeda Variável // Caso contrário, preenche com a quantidade else { detalhe = detalhe.PreencherValorNaLinha(71, 83, infoDetalhe.QuantidadeMoeda.ToString("F5").Replace(".", "").Replace(",", "").PadLeft(13, '0')); } // Quantidade de Moeda Variável detalhe = detalhe.PreencherValorNaLinha(84, 86, infoDetalhe.CarteiraCobranca.PadLeft(3, '0')); // Número da Carteira no Banco detalhe = detalhe.PreencherValorNaLinha(87, 107, string.Empty.PadRight(21, ' ')); // Identificação da Operação no Banco /* Código da Carteira */ // Modalidade de Carteira D - Direta if (carteiraCob == "108" || carteiraCob == "109" || carteiraCob == "110" || carteiraCob == "111") { detalhe = detalhe.PreencherValorNaLinha(108, 108, "I"); } // Modalidade de Carteira S - Sem Registro if (carteiraCob == "103" || carteiraCob == "173" || carteiraCob == "196" || carteiraCob == "198") { detalhe = detalhe.PreencherValorNaLinha(108, 108, "I"); } // Modalidade de Carteira E - Escritural if (carteiraCob == "104" || carteiraCob == "112" || carteiraCob == "138") { detalhe = detalhe.PreencherValorNaLinha(108, 108, "I"); } if (carteiraCob == "147") { detalhe = detalhe.PreencherValorNaLinha(108, 108, "E"); } detalhe = detalhe.PreencherValorNaLinha(109, 110, infoDetalhe.CodigoOcorrencia.Codigo.ToString().PadLeft(2, '0')); // Identificação da Ocorrência detalhe = detalhe.PreencherValorNaLinha(111, 120, infoDetalhe.NumeroDocumento.Replace("-", "").PadLeft(10, '0')); detalhe = detalhe.PreencherValorNaLinha(121, 126, infoDetalhe.DataVencimento.ToString("ddMMyy")); // Data de Vencimento do Título detalhe = detalhe.PreencherValorNaLinha(127, 139, infoDetalhe.ValorBoleto.ToString("f").Replace(".", "").Replace(",", "").PadLeft(13, '0')); // Valor Nominal do Título detalhe = detalhe.PreencherValorNaLinha(140, 142, "341"); // Nro do Banco na Câmara de Compensação detalhe = detalhe.PreencherValorNaLinha(143, 147, string.Empty.PadLeft(5, '0')); // Agência onde o título será cobrado // Espécie do documento padronizado para DM - Duplicata Mercantil detalhe = detalhe.PreencherValorNaLinha(148, 149, infoDetalhe.Especie.Sigla.Equals("DM") ? "01" : infoDetalhe.Especie.Codigo.ToString().Length <= 1? "0" + infoDetalhe.Especie.Codigo.ToString() : infoDetalhe.Especie.Codigo.ToString()); detalhe = detalhe.PreencherValorNaLinha(150, 150, infoDetalhe.Aceite.Equals("A") ? "A" : "N"); // Identificação de Título Aceitou ou Não Aceito detalhe = detalhe.PreencherValorNaLinha(151, 156, infoDetalhe.DataEmissao.ToString("ddMMyy")); // Data da Emissão do Título #region INSTRUÇÕES REMESSA var primeiraInstrucao = infoDetalhe.Instrucoes.FirstOrDefault(); var segundaInstrucao = infoDetalhe.Instrucoes.LastOrDefault(); // No caso da instrução "39", se informar "00" na posição 392-393 será impresso no boleto a literal "NÃO RECEBER APÓS O VENCIMENTO". if (primeiraInstrucao != null && primeiraInstrucao.Codigo.BoletoBrToStringSafe().Length == 2) { detalhe = detalhe.PreencherValorNaLinha(157, 158, primeiraInstrucao.Codigo.ToString()); } else { detalhe = detalhe.PreencherValorNaLinha(157, 158, "39"); } // Código 94 (Mensagem customizada). if (segundaInstrucao != null && segundaInstrucao.Codigo.BoletoBrToStringSafe().Length == 2) { detalhe = detalhe.PreencherValorNaLinha(159, 160, segundaInstrucao.Codigo.ToString()); } else { detalhe = detalhe.PreencherValorNaLinha(159, 160, "94"); } #endregion #region VALOR JUROS // Valor de Mora Por Dia de Atraso /* ITAU não passa % para juros e sim o valor calculado a ser cobrado por dia */ var jurosBoleto = string.Empty; if (infoDetalhe.ValorMoraDia > 0) { var valorCobrarJuroDia = infoDetalhe.ValorBoleto * ((infoDetalhe.ValorMoraDia / 30) / 100); infoDetalhe.ValorCobradoDiaAtraso = Math.Round(valorCobrarJuroDia, 2); } if (infoDetalhe.ValorCobradoDiaAtraso.ToString().Contains('.') && infoDetalhe.ValorCobradoDiaAtraso.ToString().Contains(',')) { jurosBoleto = infoDetalhe.ValorCobradoDiaAtraso.ToString().Replace(".", "").Replace(",", ""); detalhe = detalhe.PreencherValorNaLinha(161, 173, jurosBoleto.PadLeft(13, '0')); } if (infoDetalhe.ValorCobradoDiaAtraso.ToString().Contains('.')) { jurosBoleto = infoDetalhe.ValorCobradoDiaAtraso.ToString().Replace(".", ""); detalhe = detalhe.PreencherValorNaLinha(161, 173, jurosBoleto.PadLeft(13, '0')); } if (infoDetalhe.ValorCobradoDiaAtraso.ToString().Contains(',')) { jurosBoleto = infoDetalhe.ValorCobradoDiaAtraso.ToString().Replace(",", ""); detalhe = detalhe.PreencherValorNaLinha(161, 173, jurosBoleto.PadLeft(13, '0')); } detalhe = detalhe.PreencherValorNaLinha(161, 173, jurosBoleto.PadLeft(13, '0')); #endregion if (infoDetalhe.DataDesconto == DateTime.MinValue) { detalhe = detalhe.PreencherValorNaLinha(174, 179, string.Empty.PadLeft(6, '0')); } else { detalhe = detalhe.PreencherValorNaLinha(174, 179, infoDetalhe.DataDesconto.ToString("ddMMyy")); } // Data Limite para Concesão de Desconto detalhe = detalhe.PreencherValorNaLinha(180, 192, infoDetalhe.ValorDesconto.ToString().Replace(",", "").PadLeft(13, '0')); // Valor do Desconto a ser Concedido detalhe = detalhe.PreencherValorNaLinha(193, 205, infoDetalhe.ValorIof.ToString().Replace(",", "").PadLeft(13, '0')); // Valor do I.O.F. recolhido p/ notas seguro detalhe = detalhe.PreencherValorNaLinha(206, 218, infoDetalhe.ValorAbatimento.ToString().Replace(",", "").PadLeft(13, '0')); // Valor do Abatimento a ser concedido detalhe = detalhe.PreencherValorNaLinha(219, 220, infoDetalhe.InscricaoPagador.Replace(".", "").Replace("/", "").Replace("-", "").Length == 11 ? "01" : "02"); // Identificação do tipo de inscrição/sacado detalhe = detalhe.PreencherValorNaLinha(221, 234, infoDetalhe.InscricaoPagador.Replace(".", "").Replace("/", "").Replace("-", "").PadLeft(14, '0')); // Nro de Inscrição do Sacado (CPF/CNPJ) detalhe = detalhe.PreencherValorNaLinha(235, 264, nomeSacado.PadRight(30, ' ')); // Nome do Sacado detalhe = detalhe.PreencherValorNaLinha(265, 274, string.Empty.PadRight(10, ' ')); // Complemento de registro detalhe = detalhe.PreencherValorNaLinha(275, 314, enderecoSacado.PadRight(40, ' ')); // Rua, Número, e Complemento do Sacado detalhe = detalhe.PreencherValorNaLinha(315, 326, bairroSacado.PadRight(12, ' ')); // Bairro do Sacado var Cep = infoDetalhe.CepPagador; if (Cep.Contains(".")) { Cep = Cep.Replace(".", ""); } if (Cep.Contains("-")) { Cep = Cep.Replace("-", ""); } detalhe = detalhe.PreencherValorNaLinha(327, 334, Cep); detalhe = detalhe.PreencherValorNaLinha(335, 349, cidadeSacado.PadRight(15, ' ')); detalhe = detalhe.PreencherValorNaLinha(350, 351, infoDetalhe.UfPagador.PadRight(2, ' ')); // Caso não tenha sacador/avalista informar mensagem no campo if (infoDetalhe.NomeAvalistaOuMensagem2.BoletoBrToStringSafe().Trim().Length == 0) { // Mensagem if (primeiraInstrucao != null && primeiraInstrucao.Codigo.BoletoBrToStringSafe().BoletoBrToInt() == 0) { var instrucao1 = primeiraInstrucao.TextoInstrucao; if (instrucao1.BoletoBrToStringSafe().Trim().Length > 40) { instrucao1 = instrucao1.ExtrairValorDaLinha(1, 40); } detalhe = detalhe.PreencherValorNaLinha(352, 391, instrucao1.PadRight(40, ' ')); } else if (segundaInstrucao != null && segundaInstrucao.Codigo.BoletoBrToStringSafe().BoletoBrToInt() == 0) { var instrucao2 = segundaInstrucao.TextoInstrucao; if (instrucao2.BoletoBrToStringSafe().Trim().Length > 40) { instrucao2 = instrucao2.ExtrairValorDaLinha(1, 40); } detalhe = detalhe.PreencherValorNaLinha(352, 391, instrucao2.PadRight(40, ' ')); } } else { // Nome do Sacador ou Avalista detalhe = detalhe.PreencherValorNaLinha(352, 381, infoDetalhe.NomeAvalistaOuMensagem2.BoletoBrToStringSafe().PadRight(30, ' ')); // Complemento do Registro detalhe = detalhe.PreencherValorNaLinha(382, 385, string.Empty.PadRight(4, ' ')); // Data de Mora if (infoDetalhe.DataJurosMora == DateTime.MinValue) { detalhe = detalhe.PreencherValorNaLinha(386, 391, string.Empty.PadLeft(6, '0')); // Data de Mora } else { detalhe = detalhe.PreencherValorNaLinha(386, 391, infoDetalhe.DataJurosMora.ToString("ddMMyy")); } } // Quantidade de Dias Posição 392 a 393 detalhe = detalhe.PreencherValorNaLinha(392, 393, infoDetalhe.NroDiasParaProtesto.ToString().PadLeft(2, '0')); // Complemento do Registro detalhe = detalhe.PreencherValorNaLinha(394, 394, string.Empty.PadRight(1, ' ')); // Nro Sequencial do Registro no Arquivo detalhe = detalhe.PreencherValorNaLinha(395, 400, sequenciaDetalhe.ToString().PadLeft(6, '0')); return(detalhe); } catch (ArgumentException e) { throw new ArgumentException(string.Format("<BoletoBr>{0}Falha na geração do DETALHE do arquivo de REMESSA.", Environment.NewLine), e); } }
public RetornoGenericoPagamento(RetornoCnab240 retornoCnab240) { Inicializa(); RetornoCnab240Especifico = retornoCnab240; /* Transformar de CNAB240 para formato genérico */ foreach (var loteAtual in retornoCnab240.Lotes) { foreach (var d in loteAtual.RegistrosDetalheSegmentos) { var detalheGenericoAdd = new RetornoDetalheGenerico(); if (d.SegmentoJ != null) { detalheGenericoAdd.NossoNumero = d.SegmentoJ.NossoNumero; detalheGenericoAdd.SeuNumero = d.SegmentoJ.SeuNumero; detalheGenericoAdd.NomeFavorecido = d.SegmentoJ.NomeCedente; detalheGenericoAdd.DataPagamento = d.SegmentoJ.DataPagamento.GetValueOrDefault(); detalheGenericoAdd.DataEfetivacaoPagamento = detalheGenericoAdd.DataPagamento; detalheGenericoAdd.DataVencimento = Convert.ToDateTime(d.SegmentoJ.DataVencimento); detalheGenericoAdd.ValorPagamento = d.SegmentoJ.ValorPagamento; detalheGenericoAdd.ValorDocumento = d.SegmentoJ.ValorTitulo; detalheGenericoAdd.ValorRealEfetivacaoPagamento = d.SegmentoJ.ValorPagamento; detalheGenericoAdd.ValorAcrescimos = d.SegmentoJ.ValorAcrescimo; detalheGenericoAdd.ValorDesconto = d.SegmentoJ.ValorDesconto; var banco = BancoFactory.ObterBanco(d.SegmentoJ?.CodigoBanco.ToString()); var ocorrencia = banco.ObtemCodigoOcorrenciaPagamento(d.SegmentoJ.Ocorrencia.Substring(8, 2)); detalheGenericoAdd.CodigoOcorrencia = ocorrencia?.CodigoText.ToString(); detalheGenericoAdd.MensagemOcorrenciaRetornoBancario = ocorrencia?.Descricao; detalheGenericoAdd.Ocorrencia = ocorrencia; RegistrosDetalhe.Add(detalheGenericoAdd); } else { detalheGenericoAdd.NossoNumero = d.SegmentoA.NossoNumero; detalheGenericoAdd.SeuNumero = d.SegmentoA.SeuNumero; detalheGenericoAdd.NomeFavorecido = d.SegmentoA.NomeFavorecido; detalheGenericoAdd.DataPagamento = d.SegmentoA.DataPagamento.GetValueOrDefault(); detalheGenericoAdd.DataVencimento = Convert.ToDateTime(d.SegmentoB.DataVencimento); detalheGenericoAdd.DataEfetivacaoPagamento = d.SegmentoA.DataEfetivacaoPagamento.GetValueOrDefault(); detalheGenericoAdd.ValorPagamento = d.SegmentoA.ValorPagamento; detalheGenericoAdd.ValorRealEfetivacaoPagamento = d.SegmentoA.ValorRealEfetivacaoPagamento; detalheGenericoAdd.ValorAcrescimos = d.SegmentoB.ValorJurosMora.GetValueOrDefault(); detalheGenericoAdd.ValorDesconto = d.SegmentoB.ValorDesconto.GetValueOrDefault(); detalheGenericoAdd.ValorMulta = d.SegmentoB.ValorMulta.GetValueOrDefault(); var banco = BancoFactory.ObterBanco(d.SegmentoB?.CodigoBanco.ToString()); var ocorrencia = banco.ObtemCodigoOcorrenciaPagamento(d.SegmentoA.Ocorrencia.Substring(8, 2)); detalheGenericoAdd.CodigoOcorrencia = ocorrencia?.CodigoText.ToString(); detalheGenericoAdd.MensagemOcorrenciaRetornoBancario = ocorrencia?.Descricao; detalheGenericoAdd.Ocorrencia = ocorrencia; RegistrosDetalhe.Add(detalheGenericoAdd); } } } Trailer.QtdRegistrosArquivo = retornoCnab240.Trailer.QtdRegistrosArquivo.ToString(CultureInfo.InvariantCulture); }
public string EscreverDetalhe(DetalheRemessaCnab400 infoDetalhe, int sequenciaDetalhe) { if (String.IsNullOrEmpty(infoDetalhe.BairroPagador)) { throw new Exception("Não foi informado o bairro do pagador " + infoDetalhe.NomePagador + "(" + infoDetalhe.InscricaoPagador + ")"); } if (String.IsNullOrEmpty(infoDetalhe.CepPagador) || infoDetalhe.CepPagador.Length < 8) { throw new Exception("CEP inválido! Verifique o CEP do pagador " + infoDetalhe.NomePagador + "(" + infoDetalhe.InscricaoPagador + ")"); } if (String.IsNullOrEmpty(infoDetalhe.NumeroDocumento)) { throw new Exception("Informe um número de documento!"); } #region Variáveis var detalhe = new string(' ', 400); try { var objBanco = BancoFactory.ObterBanco(infoDetalhe.CodigoBanco); string nossoNumeroSequencial = infoDetalhe.NossoNumeroFormatado.Replace(".", "").Replace("/", "").Replace("-", ""); #endregion infoDetalhe.Instrucao1 = infoDetalhe.Instrucao1 == null ? "01" : infoDetalhe.Instrucao1; #region Instrução1 /* Este campo só permite usar os seguintes códigos: * 01 - Cadastro de Títulos * 02 - Pedido de Baixa * 04 - Concessão de Abatimento * 05 - Cancelamento de Abatimento * 06 - Alteração de Vencimento * 09 - Pedido de Protesto * 18 - Sustar protesto e baixar título * 19 - Sustar protesto e manter em carteira * 31 - Alteração de outros dados * 45 - Incluir negativação * 75 - Excluir negativação e manter na carteira * 76 - Excluir negativação e baixar títulos */ #endregion /*Código adotado pela FEBRABAN para identificação do tipo de pagamento de multa. * Domínio: * ‘1’ = Valor Fixo (R$) * ‘2’ = Taxa (%) * ‘3’ = Isento */ var codigoMulta = infoDetalhe.PercentualMulta > 0 ? "2" : "3"; /*Código adotado pela FEBRABAN para identificação do tipo de pagamento de mora de juros. * Domínio: * ‘1’ = Valor Diário (R$) * ‘2’ = Taxa Mensal (%) * ‘3’= Valor Mensal (R$) * * ‘4’ = Taxa diária (%) * ‘5’ = Isento * OBSERVAÇÃO: * ‘3’ - Valor Mensal (R$): a CIP não acata valor mensal, segundo manual. Cógido mantido * para Correspondentes que ainda utilizam.*/ var codigoMora = infoDetalhe.ValorMoraDia > 0 ? "1" : "5";; /*Código adotado pela FEBRABAN para identificação do desconto. * Domínio: * 0 = Isento * 1 = Valor Fixo*/ var codigoDesconto = infoDetalhe.ValorDesconto > 0 ? "1" : "0"; /*Código para Protesto* * Código adotado pela FEBRABAN para identificar o tipo de prazo a ser considerado para o * protesto. * Domínio: * 1 = Protestar Dias Corridos * 2 = Protestar Dias Úteis * 3 = Não Protestar */ var protesto = infoDetalhe.NroDiasParaProtesto > 0 ? "2" : "3"; detalhe = detalhe.PreencherValorNaLinha(1, 1, "1"); // Identificação do Registro Transação detalhe = detalhe.PreencherValorNaLinha(2, 6, infoDetalhe.Agencia.ToString().PadLeft(5, '0')); //Agência do BENEFICIÁRIO na UNICRED detalhe = detalhe.PreencherValorNaLinha(7, 7, infoDetalhe.DvAgencia.PadRight(1, ' ')); detalhe = detalhe.PreencherValorNaLinha(8, 19, infoDetalhe.ContaCorrente.ToString().PadLeft(12, '0')); detalhe = detalhe.PreencherValorNaLinha(20, 20, infoDetalhe.DvContaCorrente.ToString().PadRight(1, ' ')); detalhe = detalhe.PreencherValorNaLinha(21, 21, "0"); detalhe = detalhe.PreencherValorNaLinha(22, 24, "021"); //Código carteira detalhe = detalhe.PreencherValorNaLinha(25, 37, string.Empty.PadLeft(13, '0')); detalhe = detalhe.PreencherValorNaLinha(38, 62, string.Empty.PadLeft(25, ' ')); //Uso Empresa detalhe = detalhe.PreencherValorNaLinha(63, 65, "136"); //cod Banco detalhe = detalhe.PreencherValorNaLinha(66, 67, "00"); detalhe = detalhe.PreencherValorNaLinha(68, 92, string.Empty.PadLeft(25, ' ')); detalhe = detalhe.PreencherValorNaLinha(93, 93, "0"); detalhe = detalhe.PreencherValorNaLinha(94, 94, codigoMulta); detalhe = detalhe.PreencherValorNaLinha(95, 104, infoDetalhe.PercentualMulta.ToStringParaValoresDecimais().PadLeft(10, '0')); detalhe = detalhe.PreencherValorNaLinha(105, 105, codigoMora); detalhe = detalhe.PreencherValorNaLinha(106, 106, "N"); detalhe = detalhe.PreencherValorNaLinha(107, 108, string.Empty.PadLeft(2, ' ')); detalhe = detalhe.PreencherValorNaLinha(109, 110, "01"); /*01 = remessa*/ detalhe = detalhe.PreencherValorNaLinha(111, 120, infoDetalhe.NumeroDocumento.PadRight(10, ' ')); detalhe = detalhe.PreencherValorNaLinha(121, 126, infoDetalhe.DataVencimento.ToString("ddMMyy").Replace("/", "")); /*A data de vencimento deve ser sete dias MAIOR que a data de emissão (campos 151-156). Formato: DDMMAA*/ detalhe = detalhe.PreencherValorNaLinha(127, 139, infoDetalhe.ValorBoleto.ToStringParaValoresDecimais().PadLeft(13, '0')); detalhe = detalhe.PreencherValorNaLinha(140, 149, string.Empty.PadLeft(10, '0')); detalhe = detalhe.PreencherValorNaLinha(150, 150, codigoDesconto); detalhe = detalhe.PreencherValorNaLinha(151, 156, infoDetalhe.DataEmissao.ToString("ddMMyy").Replace("/", "")); detalhe = detalhe.PreencherValorNaLinha(157, 157, "0"); detalhe = detalhe.PreencherValorNaLinha(158, 158, protesto); detalhe = detalhe.PreencherValorNaLinha(159, 160, infoDetalhe.NroDiasParaProtesto.ToString().PadLeft(2, '0')); var valorMora = Math.Round((infoDetalhe.ValorBoleto * (infoDetalhe.ValorMoraDia / 100)) / 30, 2); detalhe = detalhe.PreencherValorNaLinha(161, 173, valorMora.ToStringParaValoresDecimais().PadLeft(13, '0')); if (infoDetalhe.DataLimiteConcessaoDesconto > DateTime.MinValue) { detalhe = detalhe.PreencherValorNaLinha(174, 179, infoDetalhe.DataLimiteConcessaoDesconto.ToString("ddMMyy").Replace("/", "")); } else { detalhe = detalhe.PreencherValorNaLinha(174, 179, "000000"); } detalhe = detalhe.PreencherValorNaLinha(180, 192, infoDetalhe.ValorDesconto.ToStringParaValoresDecimais().PadLeft(13, '0')); detalhe = detalhe.PreencherValorNaLinha(193, 203, infoDetalhe.NossoNumeroFormatado.Replace("/", "").Replace("-", "").PadLeft(11, '0')); detalhe = detalhe.PreencherValorNaLinha(204, 205, "00"); detalhe = detalhe.PreencherValorNaLinha(206, 218, infoDetalhe.ValorAbatimento.ToStringParaValoresDecimais().PadLeft(13, '0')); detalhe = detalhe.PreencherValorNaLinha(219, 220, infoDetalhe.InscricaoPagador.Replace(".", "").Replace("/", "").Replace("-", "").Length == 11 ? "01" : "02"); detalhe = detalhe.PreencherValorNaLinha(221, 234, infoDetalhe.InscricaoPagador.Replace(".", "").Replace("/", "").Replace("-", "").PadLeft(14, '0')); detalhe = detalhe.PreencherValorNaLinha(235, 274, infoDetalhe.NomePagador.PadLeft(40, ' ')); string endereco = infoDetalhe.EnderecoPagador.Replace(".", "").Replace("/", "").Replace(",", "").Replace("-", ""); if (endereco.Length > 40) { endereco = endereco.Substring(0, 40); } string bairro = infoDetalhe.BairroPagador.Replace(".", "").Replace("/", "").Replace(",", "").Replace("-", ""); if (bairro.Length > 12) { bairro = bairro.Substring(0, 12); } string cidade = infoDetalhe.CidadePagador.Replace(".", "").Replace("/", "").Replace("-", ""); if (cidade.Length > 20) { cidade = cidade.Substring(0, 20); } detalhe = detalhe.PreencherValorNaLinha(275, 314, endereco.PadRight(40, ' ')); detalhe = detalhe.PreencherValorNaLinha(315, 326, bairro.PadRight(12, ' ')); detalhe = detalhe.PreencherValorNaLinha(327, 334, infoDetalhe.CepPagador.Replace(".", "").Replace("/", "").Replace("-", "").PadRight(8, ' ')); detalhe = detalhe.PreencherValorNaLinha(335, 354, cidade.PadRight(20, ' ')); detalhe = detalhe.PreencherValorNaLinha(355, 356, infoDetalhe.UfPagador.Replace(".", "").Replace("/", "").Replace("-", "").PadRight(2, ' ')); detalhe = detalhe.PreencherValorNaLinha(357, 394, string.Empty.PadLeft(38, ' ')); detalhe = detalhe.PreencherValorNaLinha(395, 400, sequenciaDetalhe.ToString().PadLeft(6, '0')); return(detalhe); } catch (Exception e) { throw new Exception(string.Format("<BoletoBr>{0}Falha na geração do DETALHE do arquivo de REMESSA.", Environment.NewLine), e); } }
public void TestGerarRemessaPagamento() { var contaBancariaCedente = new ContaBancaria("3249", "2", "7341", "5"); var empresaPagadora = new Cedente("999999", "123456", 0, "99.999.999/9999-99", "Razão Social X", contaBancariaCedente, null); empresaPagadora.EnderecoCedente = new Endereco() { Bairro = "Jardins", Cep = "75690000", Cidade = "Goiabalândia", Complemento = "EDF EXECUTIVO", Logradouro = "Rua x", Numero = "25", SiglaUf = "GO", }; var objEndereco = new Endereco() { Bairro = "Trenzim", Cep = "75690000", Cidade = "Mangalandia", Complemento = "Galho esquerdo", Logradouro = "Rua 3", Numero = "5", SiglaUf = "GO", }; var contaBancariaFavorecido = new BoletoBr.ContaBancaria("4343", "0", "35432", "2"); var favorecido = new BoletoBr.Sacado("012.365.489-01", "1", objEndereco, contaBancariaFavorecido); favorecido.Nome = "RAFAEL TAVEIRA"; var bancoEmpresa = BancoFactory.ObterBanco("756", "0"); var bancoFavorecido = BancoFactory.ObterBanco("237", ""); var pagamento = new BoletoBr.Pagamento() { BancoEmpresa = bancoEmpresa, BancoFavorecido = bancoFavorecido, CodigoBanco = bancoEmpresa.CodigoBanco, CodigoBancoFavorecido = bancoFavorecido.CodigoBanco, CodigoCamaraCentralizadora = "018", CodigoFinalidadeDoc = "", CodigoFinalidadeTed = "5", FinalidadePagamento = "CC", DataVencimento = new DateTime(2021, 4, 21), Empresa = empresaPagadora, Favorecido = favorecido, ValorPagamento = 5M, ValorDesconto = 0, ValorJurosMora = 0, ValorMulta = 0, CodigoConvenio = "7980171", SeuNumero = "1015", TipoServico = "0", FormaDePagamento = "01", FormaDeLancamento = "03", ValorTitulo = 5M, CodBarras = "24691859100000299845004110028796200000000150" }; var remessa = new RemessaCnab240 { Header = new HeaderRemessaCnab240(pagamento, 1) }; var loteRemessa = new LoteRemessaCnab240 { HeaderLote = new HeaderLoteRemessaCnab240(pagamento, 1), TrailerLote = new TrailerLoteRemessaCnab240(4) }; remessa.Trailer = new TrailerRemessaCnab240(1, 6); var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessaPagamento(remessa); var listaBoletoBrRemessa = new List <Pagamento>() { pagamento }; var fabricaRemessa = new RemessaFactory(); var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, loteRemessa.HeaderLote, listaBoletoBrRemessa, loteRemessa.TrailerLote, remessa.Trailer); var linhasEscrever = escritor.EscreverTexto(remessaPronta); StringBuilder sb = new StringBuilder(); foreach (var linha in linhasEscrever) { sb.AppendLine(linha); } }
public RetornoGenerico(RetornoCnab240 retornoCnab240) { Inicializa(); RetornoCnab240Especifico = retornoCnab240; /* Transformar de CNAB240 para formato genérico */ foreach (var loteAtual in retornoCnab240.Lotes) { foreach (var d in loteAtual.RegistrosDetalheSegmentos) { var detalheGenericoAdd = new RetornoDetalheGenerico { NossoNumero = d.SegmentoT.NossoNumero, Carteira = d.SegmentoT.CodigoCarteira.ToString(CultureInfo.InvariantCulture), NumeroDocumento = d.SegmentoT.NumeroDocumento }; // Segmento T var valorDoc = d.SegmentoT.ValorTitulo; detalheGenericoAdd.ValorDocumento = valorDoc; detalheGenericoAdd.DataVencimento = Convert.ToDateTime(d.SegmentoT.DataVencimento); //detalheGenericoAdd.ValorDocumento = Math.Round(d.SegmentoT.ValorTitulo, 2); //detalheGenericoAdd.ValorTarifaCustas = d.SegmentoT.ValorTarifas / 100; //detalheGenericoAdd.CodigoMovimento = d.SegmentoT.CodigoMovimento.ToString(); //detalheGenericoAdd.CodigoOcorrencia = d.SegmentoT.MotivoOcorrencia.ToString(); // Segmento U detalheGenericoAdd.DataCredito = d.SegmentoU.DataCredito; //detalheGenericoAdd.DataLiquidacao = Convert.ToDateTime(d.SegmentoU.DataLiquidacao.ToString()); //detalheGenericoAdd.DataCredito = Convert.ToDateTime(d.SegmentoU.DataCredito.ToString()); #region Valores no detalhe var valorAcres = d.SegmentoU.JurosMultaEncargos; var valorDesc = d.SegmentoU.ValorDescontoConcedido + d.SegmentoU.ValorAbatimentoConcedido; //var valorPago = d.SegmentoU.ValorPagoPeloSacado; var valorRecebido = d.SegmentoU.ValorLiquidoASerCreditado; detalheGenericoAdd.ValorAcrescimos = valorAcres; detalheGenericoAdd.ValorDesconto = valorDesc; //detalheGenericoAdd.ValorPago = valorPago; detalheGenericoAdd.ValorRecebido = valorRecebido; #endregion //detalheGenericoAdd.ValorIof = d.SegmentoU.ValorIofRecolhido / 100; //detalheGenericoAdd.ValorOutrasDespesas = d.SegmentoU.ValorOutrasDespesas / 100; //detalheGenericoAdd.ValorOutrosCreditos = d.SegmentoU.ValorOutrosCreditos / 100; var banco = BancoFactory.ObterBanco(d.SegmentoU?.CodigoBanco.ToString()); var ocorrencia = banco.ObtemCodigoOcorrenciaByInt(d.SegmentoU.BoletoBrToBind().CodigoMovimento); if (ocorrencia.Descricao == "ENTRADA REJEITADA") { ocorrencia = new CodigoOcorrencia(ocorrencia.Codigo) { Descricao = $@"{ocorrencia.Descricao}. Motivo: {d.SegmentoT.MotivoOcorrencia}" } } ; detalheGenericoAdd.CodigoOcorrencia = ocorrencia?.Codigo.ToString(); detalheGenericoAdd.MensagemOcorrenciaRetornoBancario = ocorrencia?.Descricao; detalheGenericoAdd.Ocorrencia = ocorrencia; //detalheGenericoAdd.CodigoOcorrencia = d.SegmentoU.CodigoOcorrenciaPagador; //detalheGenericoAdd.DataOcorrencia = d.SegmentoU.DataOcorrenciaPagador; //detalheGenericoAdd.ValorOcorrencia = d.SegmentoU.ValorOcorrenciaPagador / 100; //detalheGenericoAdd.DataDebitoTarifaCustas = Convert.ToDateTime(d.SegmentoU.DataDebitoTarifa.ToString()); //DATA LIQUIDAÇÃO E DATA OCORRENCIA if (detalheGenericoAdd.Pago && detalheGenericoAdd.DataLiquidacao == DateTime.MinValue) { detalheGenericoAdd.DataLiquidacao = d.SegmentoU.DataOcorrencia; } RegistrosDetalhe.Add(detalheGenericoAdd); } } Trailer.QtdRegistrosArquivo = retornoCnab240.Trailer.QtdRegistrosArquivo.ToString(CultureInfo.InvariantCulture); }
public string EscreverDetalhe(DetalheRemessaCnab400 infoDetalhe, int sequenciaDetalhe) { if (String.IsNullOrEmpty(infoDetalhe.BairroPagador)) { throw new Exception("Não foi informado o bairro do pagador " + infoDetalhe.NomePagador + "(" + infoDetalhe.InscricaoPagador + ")"); } if (String.IsNullOrEmpty(infoDetalhe.CepPagador) || infoDetalhe.CepPagador.Length < 8) { throw new Exception("CEP inválido! Verifique o CEP do pagador " + infoDetalhe.NomePagador + "(" + infoDetalhe.InscricaoPagador + ")"); } if (String.IsNullOrEmpty(infoDetalhe.NumeroDocumento)) { throw new Exception("Informe um número de documento!"); } if ((infoDetalhe.DataVencimento - infoDetalhe.DataEmissao).Days < 1) { throw new Exception("A data de vencimento deve ser no minimo um dia MAIOR que a data de emissão."); } if (infoDetalhe.Especie == null) { throw new Exception("Espécie do documento não informada! São aceitas:{A,B,C,D,E,F,H,I,J,O,K}"); } if (!infoDetalhe.Especie.Sigla.Equals("A") && //A - Duplicata Mercantil por Indicação !infoDetalhe.Especie.Sigla.Equals("B") && //B - Duplicata Rural; !infoDetalhe.Especie.Sigla.Equals("C") && //C - Nota Promissória; !infoDetalhe.Especie.Sigla.Equals("D") && //D - Nota Promissória Rural; !infoDetalhe.Especie.Sigla.Equals("E") && //E - Nota de Seguros; !infoDetalhe.Especie.Sigla.Equals("F") && //G – Recibo; !infoDetalhe.Especie.Sigla.Equals("H") && //H - Letra de Câmbio; !infoDetalhe.Especie.Sigla.Equals("I") && //I - Nota de Débito; !infoDetalhe.Especie.Sigla.Equals("J") && //J - Duplicata de Serviço por Indicação; !infoDetalhe.Especie.Sigla.Equals("O") && //O – Boleto Proposta !infoDetalhe.Especie.Sigla.Equals("K") //K – Outros. ) { throw new Exception("Informe o código da espécie documento! São aceitas:{A,B,C,D,E,F,H,I,J,O,K}"); } #region Variáveis var detalhe = new string(' ', 400); try { var objBanco = BancoFactory.ObterBanco(infoDetalhe.CodigoBanco); string nossoNumeroSequencial = infoDetalhe.NossoNumeroFormatado.Replace(".", "").Replace("/", "").Replace("-", ""); #endregion infoDetalhe.Instrucao1 = infoDetalhe.Instrucao1 == null ? "01" : infoDetalhe.Instrucao1; #region Instrução1 /* Este campo só permite usar os seguintes códigos: * 01 - Cadastro de Títulos * 02 - Pedido de Baixa * 04 - Concessão de Abatimento * 05 - Cancelamento de Abatimento * 06 - Alteração de Vencimento * 09 - Pedido de Protesto * 18 - Sustar protesto e baixar título * 19 - Sustar protesto e manter em carteira * 31 - Alteração de outros dados * 45 - Incluir negativação * 75 - Excluir negativação e manter na carteira * 76 - Excluir negativação e baixar títulos */ #endregion detalhe = detalhe.PreencherValorNaLinha(1, 1, "1"); // Identificação do Registro Transação detalhe = detalhe.PreencherValorNaLinha(2, 2, "A"); // Tipo de Inscrição da Empresa detalhe = detalhe.PreencherValorNaLinha(3, 3, "A"); detalhe = detalhe.PreencherValorNaLinha(4, 4, "A"); /*Tipo Impressao A - Normal B - Carnê */ detalhe = detalhe.PreencherValorNaLinha(5, 16, string.Empty.PadLeft(12, ' ')); detalhe = detalhe.PreencherValorNaLinha(17, 17, "A"); detalhe = detalhe.PreencherValorNaLinha(18, 18, "A"); /* TipoDesconto A - Valor monetário B - Percentual */ detalhe = detalhe.PreencherValorNaLinha(19, 19, "A"); /* TipoJuros A - Valor monetário B - Percentual */ detalhe = detalhe.PreencherValorNaLinha(20, 47, string.Empty.PadLeft(28, ' ')); detalhe = detalhe.PreencherValorNaLinha(48, 56, nossoNumeroSequencial); detalhe = detalhe.PreencherValorNaLinha(57, 62, string.Empty.PadLeft(6, ' ')); detalhe = detalhe.PreencherValorNaLinha(63, 70, DateTime.Now.ToString("yyyyMMdd").Replace("/", "")); detalhe = detalhe.PreencherValorNaLinha(71, 71, " "); detalhe = detalhe.PreencherValorNaLinha(72, 72, "N"); detalhe = detalhe.PreencherValorNaLinha(73, 73, " "); detalhe = detalhe.PreencherValorNaLinha(74, 74, "B"); detalhe = detalhe.PreencherValorNaLinha(75, 76, "00"); /*parcela carne*/ detalhe = detalhe.PreencherValorNaLinha(77, 78, "00"); /*total parcela carne*/ detalhe = detalhe.PreencherValorNaLinha(79, 82, string.Empty.PadLeft(4, ' ')); detalhe = detalhe.PreencherValorNaLinha(83, 92, infoDetalhe.ValorDescontoDia.ToStringParaValoresDecimais().PadLeft(10, '0')); detalhe = detalhe.PreencherValorNaLinha(93, 96, infoDetalhe.PercentualMulta.ToStringParaValoresDecimais().PadLeft(4, '0')); detalhe = detalhe.PreencherValorNaLinha(97, 108, string.Empty.PadLeft(12, ' ')); detalhe = detalhe.PreencherValorNaLinha(109, 110, infoDetalhe.Instrucao1.PadLeft(2, '0')); detalhe = detalhe.PreencherValorNaLinha(111, 120, infoDetalhe.NumeroDocumento.PadRight(10, ' ')); detalhe = detalhe.PreencherValorNaLinha(121, 126, infoDetalhe.DataVencimento.ToString("ddMMyy").Replace("/", ""));/*A data de vencimento deve ser sete dias MAIOR que a data de emissão (campos 151-156). Formato: DDMMAA*/ detalhe = detalhe.PreencherValorNaLinha(127, 139, infoDetalhe.ValorBoleto.ToStringParaValoresDecimais().PadLeft(13, '0')); detalhe = detalhe.PreencherValorNaLinha(149, 149, infoDetalhe.Especie.Sigla.BoletoBrToStringSafe()); detalhe = detalhe.PreencherValorNaLinha(150, 150, infoDetalhe.Aceite); detalhe = detalhe.PreencherValorNaLinha(151, 156, infoDetalhe.DataEmissao.ToString("ddMMyy").Replace("/", "")); if (infoDetalhe.NroDiasParaProtesto > 0) { detalhe = detalhe.PreencherValorNaLinha(157, 158, "06"); /*00 - Não protestar automaticamente 06 - Protestar automaticamente*/ detalhe = detalhe.PreencherValorNaLinha(159, 160, infoDetalhe.NroDiasParaProtesto.ToString().PadLeft(2, '0')); } else { detalhe = detalhe.PreencherValorNaLinha(157, 158, "00"); /*00 - Não protestar automaticamente 06 - Protestar automaticamente*/ detalhe = detalhe.PreencherValorNaLinha(159, 160, "00"); /*00 - Não protestar automaticamente 06 - Protestar automaticamente*/ } detalhe = detalhe.PreencherValorNaLinha(161, 173, infoDetalhe.ValorJuros.ToStringParaValoresDecimais().PadLeft(13, '0')); if (infoDetalhe.DataLimiteConcessaoDesconto > DateTime.MinValue) { detalhe = detalhe.PreencherValorNaLinha(174, 179, infoDetalhe.DataLimiteConcessaoDesconto.ToString("ddMMyy").Replace("/", "")); } else { detalhe = detalhe.PreencherValorNaLinha(174, 179, "000000"); } detalhe = detalhe.PreencherValorNaLinha(180, 192, infoDetalhe.ValorDesconto.ToStringParaValoresDecimais().PadLeft(13, '0')); detalhe = detalhe.PreencherValorNaLinha(193, 194, "00"); detalhe = detalhe.PreencherValorNaLinha(195, 196, "00"); detalhe = detalhe.PreencherValorNaLinha(197, 205, string.Empty.PadLeft(9, '0')); detalhe = detalhe.PreencherValorNaLinha(206, 218, infoDetalhe.ValorAbatimento.ToStringParaValoresDecimais().PadLeft(13, '0')); detalhe = detalhe.PreencherValorNaLinha(219, 219, infoDetalhe.InscricaoPagador.Replace(".", "").Replace("/", "").Replace("-", "").Length == 11 ? "1" : "2"); detalhe = detalhe.PreencherValorNaLinha(220, 220, "0"); detalhe = detalhe.PreencherValorNaLinha(221, 234, infoDetalhe.InscricaoPagador.Replace(".", "").Replace("/", "").Replace("-", "").PadLeft(14, '0')); detalhe = detalhe.PreencherValorNaLinha(235, 274, infoDetalhe.NomePagador.PadLeft(40, ' ')); string endereco = infoDetalhe.EnderecoPagador.Replace(".", "").Replace("/", "").Replace(",", "").Replace("-", ""); if (endereco.Length > 40) { endereco = endereco.Substring(0, 40); } detalhe = detalhe.PreencherValorNaLinha(275, 314, endereco.PadRight(40, ' ')); detalhe = detalhe.PreencherValorNaLinha(315, 319, string.Empty.PadLeft(5, '0')); detalhe = detalhe.PreencherValorNaLinha(320, 325, string.Empty.PadLeft(6, '0')); detalhe = detalhe.PreencherValorNaLinha(326, 326, " "); detalhe = detalhe.PreencherValorNaLinha(327, 334, infoDetalhe.CepPagador.Replace(".", "").Replace("/", "").Replace("-", "")); detalhe = detalhe.PreencherValorNaLinha(335, 339, string.Empty.PadLeft(5, '0')); detalhe = detalhe.PreencherValorNaLinha(340, 353, string.Empty.PadLeft(14, ' ')); detalhe = detalhe.PreencherValorNaLinha(354, 394, string.Empty.PadLeft(41, ' ')); detalhe = detalhe.PreencherValorNaLinha(395, 400, sequenciaDetalhe.ToString().PadLeft(6, '0')); //switch (infoDetalhe.Instrucao1) //{ // case "31": // infoDetalhe.Variacao // detalhe = detalhe.PreencherValorNaLinha(71, 71, infoDetalhe.TipoRegistro); // break; // default: // detalhe = detalhe.PreencherValorNaLinha(71, 71, " "); // break; //} return(detalhe); } catch (Exception e) { throw new Exception(string.Format("<BoletoBr>{0}Falha na geração do DETALHE do arquivo de REMESSA.", Environment.NewLine), e); } }