コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
ファイル: RetornoGenerico.cs プロジェクト: samuelrvg/boletobr
        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);
        }
コード例 #10
0
        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);
            }
        }