BoletoNet / boletonet

Boleto.Net is a library developed for use in Brazil, given it has been programmed with Brazilian retail legislation and business rules for bank registered billing integration.
Apache License 2.0
479 stars 382 forks source link

Erro ao validar arquivo remessa #686

Open jrlubas opened 6 years ago

jrlubas commented 6 years ago

Boa tarde prezados.

Tentei gerar um arquivo remessa, porém ao validá-lo pela ferramenta da Caixa, ocorrem inúmeros erros:

image

O que pode ser?

jrlubas commented 6 years ago

Resolvi.

Ficou faltando preencher o seguinte campo:

Cedente.Carteira = "1";

ivanteles commented 6 years ago

Fecha como resolvido!

FabioDlink commented 5 years ago

@jrlubas poderia compartilhar comigo seu código de geração da remessa cnab240 da caixa? Estou com erros na geração da remessa.

jrlubas commented 5 years ago

@jrlubas poderia compartilhar comigo seu código de geração da remessa cnab240 da caixa? Estou com erros na geração da remessa.

Bom dia @FabioDlink .... O cliente mudou de Caixa para BB. Não tenho mais o código da Caixa. Pode ser do BB?

ivanteles commented 5 years ago

@FabioDlink Segue código que estou usando e funcionando a bastantante tempo:

var remessa = new ArquivoRemessa(TipoArquivo.CNAB240) { NumeroArquivoRemessa = 1 };
                var banc = new Banco(104);

                var c = new Cedente("11.224.046/0001-00", "idev web", "agencia", "digito", "conta", "digito")
                {
                    NumeroSequencial = 1,
                    Convenio = 012345,
                    Codigo = "012345",
                    MostrarCNPJnoBoleto = true,
                    Endereco = new Endereco
                    {
                        End = "Endereço",
                        CEP = "72500-000",
                        Bairro = "Brasilia",
                        UF = "DF",
                        Cidade = "Brasília",
                        Numero = "5"
                    }
                };

                var boletos = new Boletos() { Banco = banc, Cedente = c };
                var arquivoHoje = DateTime.Now.ToString().Replace("/", "").Replace(":", "").Replace(" ", "");
                foreach (var i in respositotioDebitos)
                {
                    var resp = i.Responsavel;
                    int id = i.Id.ToString().Length;
                    string idM = "14";
                    if (id > 17)
                    {
                        throw new Exception("Impossível gerar o boleto");
                    }

                    var falta = 15 - id;

                    for (int j = 0; j < falta; j++)
                    {
                        idM += "0";
                    }
                    idM += i.Id.ToString();
                    var b = new Boleto(i.Vencimento, i.Receber, "RG", idM, c)
                    {
                        Remessa = new Remessa(TipoOcorrenciaRemessa.EntradaDeTitulos){ TipoDocumento = "1" },
                        DataDocumento = i.Data,
                        Banco = banc,
                        NumeroDocumento = idM,
                        EspecieDocumento = new EspecieDocumento(104, "DM"),
                        Aceite = "",
                        Sacado = new Sacado(resp.cpf, i.Nome)
                        {
                            Endereco =
                        {
                            End = resp.endResidencial,
                            Bairro = resp.cidResidencial,
                            Cidade = resp.cidResidencial,
                            CEP = resp.cep,
                            UF = resp.estResidencial
                        }
                        },
                        DataProcessamento = i.Data,
                        DataMulta = i.Vencimento.AddDays(1),
                        DataJurosMora = i.Vencimento.AddDays(1),
                        DataDesconto = i.Vencimento,
                        JurosMora = Math.Round(Convert.ToDecimal(i.Receber * ((i.Contrato.juros / 30m) / 100m)), 2),
                        ValorDesconto = Math.Round(Convert.ToDecimal(i.Receber * (i.Contrato.desconto / 100m)), 2),
                        ValorMulta = Math.Round(Convert.ToDecimal(i.Receber * (i.Contrato.multa / 100m)), 2),
                    };
                    var li = new List<IInstrucao> { new Instrucao(104) { Codigo = 91, QuantidadeDias = 30 } };
                    foreach (var l in li)
                    {
                        b.Instrucoes.Add(l);
                    }

                    boletos.Add(b);
                    sb.AppendFormat("{0},", i.Id);
                    repositorio.GeradoRemessa(i.Id, true);
                }

                var arquivoDeb = Path.Combine(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath, String.Format("VAN\\Debitos\\{0}.txt", arquivoHoje));
                File.WriteAllText(arquivoDeb, sb.ToString());

                var arquivo = Path.Combine(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath, String.Format("VAN\\Remessa\\{0}.txt", arquivoHoje));

                if (!File.Exists(arquivo))
                {
                    File.Create(arquivo).Dispose();
                }

                Stream stream = new FileStream(arquivo, FileMode.Create);
                remessa.GerarArquivoRemessa("012345", banc, c, boletos, stream, 1);
FabioDlink commented 5 years ago

@jrlubas Agradeço a atenção. Banco do Brasil já tenho implementado. Estou precisando no apenas Caixa e Bradesco para finalizar. Iniciei o processo da caixa porém está dando erro no registro R do arquivo de remessa.

FabioDlink commented 5 years ago

Vejam só meu erro na remessa da caixa: Este erro só ocorre quando informo Juros ou Multa.

image

ivanteles commented 5 years ago

@FabioDlink Cara, acho que o erro ocorre por que devido vc informar o valor percentual, provavelmente ele requer os outros campos acima. E bi campo de percentual deve ser 15 posições e esta indo com menos, num seria isso?

FabioDlink commented 5 years ago

@FabioDlink Cara, acho que o erro ocorre por que devido vc informar o valor percentual, provavelmente ele requer os outros campos acima. E bi campo de percentual deve ser 15 posições e esta indo com menos, num seria isso?

@ivanteles Quanto as 15 posições do valor da multa tudo bem. Realmente está incorreto. Mas os 6 erros referente aos descontos não conseguir compreender, uma vez que nem faço uso deles.

ivanteles commented 5 years ago

Mas creio que se não faz uso devem ser informado alguma coisa, ou não?

FabioDlink commented 5 years ago

Mas creio que se não faz uso devem ser informado alguma coisa, ou não?

@ivanteles Não identifiquei qual propriedade para setar essas informações. Sabe quais são?