public string EscreverDetalheSegmentoP(DetalheSegmentoPRemessaCnab240 infoSegmentoP)
        {
            var segmentoP = new string(' ', 240);

            try
            {
                segmentoP = segmentoP.PreencherValorNaLinha(1, 3, "756");                                                // Código do Banco na Compensação
                segmentoP = segmentoP.PreencherValorNaLinha(4, 7, infoSegmentoP.LoteServico.ToString().PadLeft(4, '0')); // Lote De Serviço
                segmentoP = segmentoP.PreencherValorNaLinha(8, 8, "3");                                                  // Tipo de Registro
                segmentoP = segmentoP.PreencherValorNaLinha(9, 13, infoSegmentoP.NumeroRegistro.ToString().PadLeft(5, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(14, 14, "P");                                                // Cód. Segmento do Registro Detalhe
                segmentoP = segmentoP.PreencherValorNaLinha(15, 15, " ");
                segmentoP = segmentoP.PreencherValorNaLinha(16, 17, "01");                                               // Código de Movimento Remessa
                segmentoP = segmentoP.PreencherValorNaLinha(18, 22, infoSegmentoP.AgenciaMantenedora.PadLeft(5, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(23, 23, infoSegmentoP.DvAgenciaMantenedora);
                segmentoP = segmentoP.PreencherValorNaLinha(24, 35, infoSegmentoP.NumeroContaCorrente.PadLeft(12, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(36, 36, infoSegmentoP.DigitoContaCorrente.BoletoBrToStringSafe().PadLeft(1, ' '));
                segmentoP = segmentoP.PreencherValorNaLinha(37, 37, string.Empty.PadLeft(1, ' '));

                var NossoNumero = new string(' ', 20);
                NossoNumero = NossoNumero.PreencherValorNaLinha(1, 10, infoSegmentoP.BancoEmiteBoleto ? string.Empty.PadLeft(10, '0') : infoSegmentoP.NossoNumero.Replace(".", "").Replace("/", "").Replace("-", "").PadLeft(10, '0'));
                NossoNumero = NossoNumero.PreencherValorNaLinha(11, 12, "01");
                NossoNumero = NossoNumero.PreencherValorNaLinha(13, 14, "01");
                NossoNumero = NossoNumero.PreencherValorNaLinha(15, 15, "4");
                NossoNumero = NossoNumero.PreencherValorNaLinha(16, 20, string.Empty.PadLeft(5, ' '));
                segmentoP   = segmentoP.PreencherValorNaLinha(38, 57, NossoNumero);

                /* Código da Carteira
                 * '1' = Cobrança Simples Com Registro
                 * '3' = Cobrança Caucionada
                 */
                segmentoP = segmentoP.PreencherValorNaLinha(58, 58, "1");
                segmentoP = segmentoP.PreencherValorNaLinha(59, 59, "0");
                segmentoP = segmentoP.PreencherValorNaLinha(60, 60, " "); // Tipo de Documento
                // '1' = Banco Emite
                // '2' = Emissão pelo beneficiario
                segmentoP = segmentoP.PreencherValorNaLinha(61, 61, infoSegmentoP.BancoEmiteBoleto ? "1" : "2"); // Identificação da Emissão do Bloqueto
                // '1' = Sacado Via Correios
                // '2' = Envio pelo beneficiario
                segmentoP = segmentoP.PreencherValorNaLinha(62, 62, infoSegmentoP.BancoEmiteBoleto ? "1" : "2"); // Identificação da Entrega do Bloqueto
                segmentoP = segmentoP.PreencherValorNaLinha(63, 77, infoSegmentoP.NumeroDocumento.PadLeft(15, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(78, 85, infoSegmentoP.DataVencimento.ToString("ddMMyyyy"));

                var valorBoleto = string.Empty;

                if (infoSegmentoP.ValorBoleto.ToString("f").Contains('.') && infoSegmentoP.ValorBoleto.ToString("f").Contains(','))
                {
                    valorBoleto = infoSegmentoP.ValorBoleto.ToString("f").Replace(".", "").Replace(",", "");
                }
                if (infoSegmentoP.ValorBoleto.ToString("f").Contains('.'))
                {
                    valorBoleto = infoSegmentoP.ValorBoleto.ToString("f").Replace(".", "");
                }
                if (infoSegmentoP.ValorBoleto.ToString("f").Contains(','))
                {
                    valorBoleto = infoSegmentoP.ValorBoleto.ToString("f").Replace(",", "");
                }

                segmentoP = segmentoP.PreencherValorNaLinha(86, 100, valorBoleto.PadLeft(15, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(101, 105, string.Empty.PadLeft(5, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(106, 106, " ");                                                                                                       // Dígito Verificador da Agência
                segmentoP = segmentoP.PreencherValorNaLinha(107, 108, infoSegmentoP.Especie.Sigla.Equals("DM") ? "02" : infoSegmentoP.Especie.Codigo.ToString().PadLeft(2, '0')); // Espécia do Título

                if (String.IsNullOrEmpty(infoSegmentoP.Aceite))
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(109, 109, "N");
                }
                else
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(109, 109, infoSegmentoP.Aceite.Equals("A") ? "A" : "N");
                }

                if (infoSegmentoP.DataEmissao == DateTime.MinValue)
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(110, 117, DateTime.Now.ToString("ddMMyyyy"));
                }
                else
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(110, 117, infoSegmentoP.DataEmissao.ToString("ddMMyyyy"));
                }

                /* Modalidade de cobrança de juros de mora
                 * 0 - Isento
                 * * 1 - Valor por dia
                 * 2 - Taxa Mensal
                 */
                segmentoP = segmentoP.PreencherValorNaLinha(118, 118, infoSegmentoP.CodigoJurosMora.ToString().Length > 1 ? infoSegmentoP.CodigoJurosMora.ToString().Substring(infoSegmentoP.NumeroDocumento.Length - 1, 1) : infoSegmentoP.CodigoJurosMora.ToString().PadLeft(1, '0')); // Código do Juros de Mora

                if (infoSegmentoP.DataJurosMora == DateTime.MinValue)
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(119, 126, infoSegmentoP.DataVencimento.AddDays(1).ToString("ddMMyyyy"));
                }
                else
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(119, 126, infoSegmentoP.DataJurosMora.ToString("ddMMyyyy"));
                }

                segmentoP = segmentoP.PreencherValorNaLinha(127, 141, infoSegmentoP.ValorJurosMora.GetValueOrDefault().ToString("##.00").Replace(".", "").Replace(",", "").PadLeft(15, '0'));

                /* Código do Desconto
                 * 0 - Sem desconto
                 * 1 - Valor fixo até a data informada
                 * 2 - Percentual até a data informada
                 * Obs.: Para os códigos '1' e '2' será obrigatório a informação da data.
                 */
                if (infoSegmentoP.ValorDesconto1 > 0)
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(142, 142, "1"); // Código do Desconto 1
                }
                else
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(142, 142, "0"); // Código do Desconto 0
                }
                if (infoSegmentoP.DataDesconto1 == DateTime.MinValue)
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(143, 150, string.Empty.PadLeft(8, '0'));
                }
                else
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(143, 150, infoSegmentoP.DataDesconto1.ToString("ddMMyyyy"));
                }

                segmentoP = segmentoP.PreencherValorNaLinha(151, 165, infoSegmentoP.ValorDesconto1.ToString().Replace(".", "").Replace(",", "").PadLeft(15, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(166, 180, infoSegmentoP.ValorIof.ToString().Replace(".", "").Replace(",", "").PadLeft(15, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(181, 195, infoSegmentoP.ValorAbatimento.ToString().Replace(".", "").Replace(",", "").PadLeft(15, '0'));


                const string doc       = "DOC";
                var          seuNumero = doc + infoSegmentoP.NossoNumero.PadRight(25 - doc.Length, ' ');

                segmentoP = segmentoP.PreencherValorNaLinha(196, 220, seuNumero.PadRight(25, ' '));

                segmentoP = segmentoP.PreencherValorNaLinha(221, 221, infoSegmentoP.CodigoProtesto.ToString().PadLeft(1, '0'));       // Código para Protesto
                segmentoP = segmentoP.PreencherValorNaLinha(222, 223, infoSegmentoP.PrazoProtesto.ToString().PadLeft(2, '0'));        // Número de Dias para Protesto
                segmentoP = segmentoP.PreencherValorNaLinha(224, 224, infoSegmentoP.CodigoBaixaDevolucao.ToString().PadLeft(1, '0')); // Código para Baixa/Devolução
                segmentoP = segmentoP.PreencherValorNaLinha(225, 227, string.Empty.PadLeft(3, ' '));                                  // Número de Dias para Baixa/Devolução

                // Fixo 09 - REAL
                segmentoP = segmentoP.PreencherValorNaLinha(228, 229, "09");                          // Código da Moeda
                segmentoP = segmentoP.PreencherValorNaLinha(230, 239, string.Empty.PadLeft(10, '0')); // Uso Exclusivo CAIXA
                segmentoP = segmentoP.PreencherValorNaLinha(240, 240, string.Empty.PadLeft(1, ' '));

                return(segmentoP);
            }
            catch (Exception e)
            {
                throw new Exception(String.Format("<BoletoBr>{0}Falha na geração do DETALHE - Segmento P do arquivo de REMESSA.",
                                                  Environment.NewLine), e);
            }
        }
Ejemplo n.º 2
0
 public string EscreverDetalheSegmentoP(DetalheSegmentoPRemessaCnab240 infoSegmentoP)
 {
     # region NOTAS EXPLICATIVAS REGISTRO DETALHE SEGMENTO P
Ejemplo n.º 3
0
        public string EscreverDetalheSegmentoP(DetalheSegmentoPRemessaCnab240 infoSegmentoP)
        {
            var segmentoP = new string(' ', 240);

            try
            {
                segmentoP = segmentoP.PreencherValorNaLinha(1, 3, "246");                                                // Código do Banco na Compensação
                segmentoP = segmentoP.PreencherValorNaLinha(4, 7, infoSegmentoP.LoteServico.ToString().PadLeft(4, '0')); // Lote De Serviço
                segmentoP = segmentoP.PreencherValorNaLinha(8, 8, "3");                                                  // Tipo de Registro
                segmentoP = segmentoP.PreencherValorNaLinha(9, 13, infoSegmentoP.NumeroRegistro.ToString().PadLeft(5, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(14, 14, "P");                                                // Cód. Segmento do Registro Detalhe
                segmentoP = segmentoP.PreencherValorNaLinha(15, 15, " ");
                segmentoP = segmentoP.PreencherValorNaLinha(16, 17, "01");                                               // Código de Movimento Remessa
                segmentoP = segmentoP.PreencherValorNaLinha(18, 37, infoSegmentoP.Convenio.PadRight(20, ' '));
                segmentoP = segmentoP.PreencherValorNaLinha(38, 38, "5");
                segmentoP = segmentoP.PreencherValorNaLinha(39, 41, "000");
                segmentoP = segmentoP.PreencherValorNaLinha(42, 43, "00");
                segmentoP = segmentoP.PreencherValorNaLinha(44, 46, "110");

                segmentoP = segmentoP.PreencherValorNaLinha(47, 57, infoSegmentoP.NossoNumero.Replace("-", "").Replace(".", "").PadLeft(11, '0'));

                /* Código da Carteira
                 * '1' = Cobrança Simples Com Registro
                 * '3' = Cobrança Caucionada
                 */
                segmentoP = segmentoP.PreencherValorNaLinha(58, 58, "1");
                segmentoP = segmentoP.PreencherValorNaLinha(59, 59, "1");
                segmentoP = segmentoP.PreencherValorNaLinha(60, 60, "1"); // Tipo de Documento
                // '1' = Banco Emite
                // '2' = Emissão pelo beneficiario
                segmentoP = segmentoP.PreencherValorNaLinha(61, 61, infoSegmentoP.BancoEmiteBoleto ? "1" : "2"); // Identificação da Emissão do Bloqueto
                // '1' = Sacado Via Correios
                // '2' = Envio pelo beneficiario
                segmentoP = segmentoP.PreencherValorNaLinha(62, 62, infoSegmentoP.BancoEmiteBoleto ? "1" : "2"); // Identificação da Entrega do Bloqueto
                segmentoP = segmentoP.PreencherValorNaLinha(63, 77, infoSegmentoP.NumeroDocumento.PadLeft(15, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(78, 85, infoSegmentoP.DataVencimento.ToString("ddMMyyyy"));

                segmentoP = segmentoP.PreencherValorNaLinha(86, 100, infoSegmentoP.ValorBoleto.ToStringParaValoresDecimais().PadLeft(15, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(101, 105, string.Empty.PadLeft(5, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(106, 106, " ");                                                                                                       // Dígito Verificador da Agência
                segmentoP = segmentoP.PreencherValorNaLinha(107, 108, infoSegmentoP.Especie.Sigla.Equals("DM") ? "02" : infoSegmentoP.Especie.Codigo.ToString().PadLeft(2, '0')); // Espécia do Título

                if (String.IsNullOrEmpty(infoSegmentoP.Aceite))
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(109, 109, "N");
                }
                else
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(109, 109, infoSegmentoP.Aceite.Equals("A") ? "A" : "N");
                }

                if (infoSegmentoP.DataEmissao == DateTime.MinValue)
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(110, 117, DateTime.Now.ToString("ddMMyyyy"));
                }
                else
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(110, 117, infoSegmentoP.DataEmissao.ToString("ddMMyyyy"));
                }

                /* Modalidade de cobrança de juros de mora
                 * 0 - Isento
                 * 1 - Valor por dia
                 * 2 - Taxa Mensal
                 */
                segmentoP = segmentoP.PreencherValorNaLinha(118, 118, infoSegmentoP.CodigoJurosMora.ToString().Length > 1 ? infoSegmentoP.CodigoJurosMora.ToString().Substring(infoSegmentoP.NumeroDocumento.Length - 1, 1) : infoSegmentoP.CodigoJurosMora.ToString().PadLeft(1, '0')); // Código do Juros de Mora

                if (infoSegmentoP.DataJurosMora == DateTime.MinValue)
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(119, 126, infoSegmentoP.DataVencimento.AddDays(1).ToString("ddMMyyyy"));
                }
                else
                {
                    /*DATA DO JUROS/MORA – CAMPOS 119 A 126 = A data deve ser no mínimo D+1 do vencimento.*/
                    infoSegmentoP.DataJurosMora = infoSegmentoP.DataJurosMora <= infoSegmentoP.DataVencimento ? infoSegmentoP.DataVencimento.AddDays(1) : infoSegmentoP.DataJurosMora;
                    segmentoP = segmentoP.PreencherValorNaLinha(119, 126, infoSegmentoP.DataJurosMora.ToString("ddMMyyyy"));
                }

                /*JUROS/ MORA – CAMPOS 127 A 141 (descrição C020 do layout) = Valor ou porcentagem a ser cobrado de juros de mora. Quando valor em Reais, utilizar 2 decimais, quando taxa utilizar 4 decimais.*/
                segmentoP = segmentoP.PreencherValorNaLinha(127, 141, infoSegmentoP.ValorJurosMora.GetValueOrDefault().ToStringParaValoresDecimais(infoSegmentoP.CasasDecimaisJuros).PadLeft(15, '0'));

                /* Código do Desconto
                 * 0 - Sem desconto
                 * 1 - Valor fixo até a data informada
                 * 2 - Percentual até a data informada
                 * Obs.: Para os códigos '1' e '2' será obrigatório a informação da data.
                 */

                if (infoSegmentoP.ValorDesconto1 > 0)
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(142, 142, "1"); // Código do Desconto 1
                }
                else
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(142, 142, "0"); // Código do Desconto 0
                }
                if (infoSegmentoP.DataDesconto1 == DateTime.MinValue)
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(143, 150, string.Empty.PadLeft(8, '0'));
                }
                else
                {
                    segmentoP = segmentoP.PreencherValorNaLinha(143, 150, infoSegmentoP.DataDesconto1.ToString("ddMMyyyy"));
                }

                segmentoP = segmentoP.PreencherValorNaLinha(151, 165, infoSegmentoP.ValorDesconto1.GetValueOrDefault().ToStringParaValoresDecimais().PadLeft(15, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(166, 180, infoSegmentoP.ValorIof.GetValueOrDefault().ToStringParaValoresDecimais().PadLeft(15, '0'));
                segmentoP = segmentoP.PreencherValorNaLinha(181, 195, infoSegmentoP.ValorAbatimento.GetValueOrDefault().ToStringParaValoresDecimais().PadLeft(15, '0'));

                var usoEmpresa = string.IsNullOrEmpty(infoSegmentoP.UsoEmpresa) ? "" : infoSegmentoP.UsoEmpresa.Length > 25 ? infoSegmentoP.UsoEmpresa.Substring(0, 25) : infoSegmentoP.UsoEmpresa;

                segmentoP = segmentoP.PreencherValorNaLinha(196, 220, usoEmpresa.PadRight(25, ' '));

                segmentoP = segmentoP.PreencherValorNaLinha(221, 221, infoSegmentoP.CodigoProtesto.ToString().PadLeft(1, '0'));               // Código para Protesto
                segmentoP = segmentoP.PreencherValorNaLinha(222, 223, infoSegmentoP.PrazoProtesto.ToString().PadLeft(2, '0'));                // Número de Dias para Protesto
                segmentoP = segmentoP.PreencherValorNaLinha(224, 224, "2" /*infoSegmentoP.CodigoBaixaDevolucao.ToString().PadLeft(1, '0')*/); // Código para Baixa/Devolução
                segmentoP = segmentoP.PreencherValorNaLinha(225, 227, "000");                                                                 // Número de Dias para Baixa/Devolução

                // Fixo 09 - REAL
                segmentoP = segmentoP.PreencherValorNaLinha(228, 229, "09");                          // Código da Moeda
                segmentoP = segmentoP.PreencherValorNaLinha(230, 239, string.Empty.PadLeft(10, '0')); // Uso Exclusivo
                segmentoP = segmentoP.PreencherValorNaLinha(240, 240, string.Empty.PadLeft(1, ' '));

                return(segmentoP);
            }
            catch (Exception e)
            {
                throw new Exception(String.Format("<BoletoBr>{0}Falha na geração do DETALHE - Segmento P do arquivo de REMESSA.",
                                                  Environment.NewLine), e);
            }
        }