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); } }
public string EscreverDetalheSegmentoP(DetalheSegmentoPRemessaCnab240 infoSegmentoP) { # region NOTAS EXPLICATIVAS REGISTRO DETALHE SEGMENTO P
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); } }