Retorno CNAB 400 - Itau Carteira 175

Feb 4, 2012 at 1:12 PM

Pessoal,

 

Um pequeno erro ao ler o retorno CNAB 400 - Itau Carteira 175 (não sei se é a mesma coisa para todas carteiras)

Conforme documentação ITAU

TARIFA DE COBRANÇA VALOR DA DESPESA DE COBRANÇA 176 188 9(11)V9(2)

No código esta:

double tarifaCobranca = Convert.ToUInt64(registro.Substring(174, 13));

 

Correto:

double tarifaCobranca = Convert.ToUInt64(registro.Substring(175, 13));

 

Abraços,

Developer
Feb 8, 2012 at 6:05 PM

Olá ESX.

Estou implementando remessa/retorno ITAU na empresa que trabalho.

Essas alterações vc fez no AbstractBanco.cs e DetalheRetorno.cs ?

Vc já solicitou a atualização do projeto Boleto.NET?

Abraços,

Feb 8, 2012 at 6:23 PM

Nenhum dos dois .. adicionei em Boleto.net\Banco\Banco_Itau.cs entre

#region Métodos de processamento do arquivo retorno CNAB400

#endregion

Aproveitei e ajustei o “ValorPago”, já que estava retornando 0.

Não submeti ao codeplex pq n sei como enviar ... qd tiver um tempinho irei dar uma olhada e submeter.

Segue o método:

#region Métodos de processamento do arquivo retorno CNAB400

public override DetalheRetorno LerDetalheRetornoCNAB400(string registro)

{

try

{

int dataOcorrencia = Utils.ToInt32(registro.Substring(110, 6));

int dataVencimento = Utils.ToInt32(registro.Substring(146, 6));

int dataCredito = Utils.ToInt32(registro.Substring(295, 6));

DetalheRetorno detalhe = new DetalheRetorno(registro);

detalhe.CodigoInscricao = Utils.ToInt32(registro.Substring(1, 2));

detalhe.NumeroInscricao = registro.Substring(3, 14);

detalhe.Agencia = Utils.ToInt32(registro.Substring(17, 4));

detalhe.Conta = Utils.ToInt32(registro.Substring(23, 5));

detalhe.DACConta = Utils.ToInt32(registro.Substring(28, 1));

detalhe.UsoEmpresa = registro.Substring(37, 25);

detalhe.NossoNumero = registro.Substring(85, 8);

detalhe.DACNossoNumero = Utils.ToInt32(registro.Substring(93, 1));

detalhe.Carteira = registro.Substring(107, 1);

detalhe.CodigoOcorrencia = Utils.ToInt32(registro.Substring(108, 2));

detalhe.DataOcorrencia = Utils.ToDateTime(dataOcorrencia.ToString("##-##-##"));

detalhe.NumeroDocumento = registro.Substring(116, 10);

detalhe.NossoNumero = registro.Substring(126, 9);

detalhe.DataVencimento = Utils.ToDateTime(dataVencimento.ToString("##-##-##"));

double valorTitulo = Convert.ToInt64(registro.Substring(152, 13));

detalhe.ValorTitulo = valorTitulo / 100;

detalhe.CodigoBanco = Utils.ToInt32(registro.Substring(165, 3));

detalhe.AgenciaCobradora = Utils.ToInt32(registro.Substring(168, 4));

detalhe.Especie = Utils.ToInt32(registro.Substring(173, 2));

double tarifaCobranca = Convert.ToUInt64(registro.Substring(175, 13)); // Erro - de 174 para 175

detalhe.TarifaCobranca = tarifaCobranca / 100;

// 26 brancos

double iof = Convert.ToUInt64(registro.Substring(214, 13));

detalhe.IOF = iof / 100;

double valorAbatimento = Convert.ToUInt64(registro.Substring(227, 13));

detalhe.ValorAbatimento = valorAbatimento / 100;

double valorPrincipal = Convert.ToUInt64(registro.Substring(253, 13));

detalhe.ValorPrincipal = valorPrincipal / 100;

double jurosMora = Convert.ToUInt64(registro.Substring(266, 13));

detalhe.JurosMora = jurosMora / 100;

detalhe.DataOcorrencia = Utils.ToDateTime(dataOcorrencia.ToString("##-##-##"));

// 293 - 3 brancos

detalhe.DataCredito = Utils.ToDateTime(dataCredito.ToString("##-##-##"));

detalhe.InstrucaoCancelada = Utils.ToInt32(registro.Substring(301, 4));

// 306 - 6 brancos

// 311 - 13 zeros

detalhe.NomeSacado = registro.Substring(324, 30);

// 354 - 23 brancos

detalhe.Erros = registro.Substring(377, 8);

// 377 - Registros rejeitados ou alegação do sacado

// 386 - 7 brancos

detalhe.CodigoLiquidacao = registro.Substring(392, 2);

detalhe.NumeroSequencial = Utils.ToInt32(registro.Substring(394, 6));

// Valor Pago é a soma do Valor Principal (Valor que entra na conta) + Tarifa de Cobrança

detalhe.ValorPago = detalhe.ValorPrincipal + detalhe.TarifaCobranca;

return detalhe;

}

catch (Exception ex)

{

throw new Exception("Erro ao ler detalhe do arquivo de RETORNO / CNAB 400.", ex);

}

}

#endregion

From: jsoda [email removed]
Sent: quarta-feira, 8 de fevereiro de 2012 16:06
To: patrick.cabral@gmail.com
Subject: Re: Retorno CNAB 400 - Itau Carteira 175 [boletonet:292555]

From: jsoda

Olá ESX.

Estou implementando remessa/retorno ITAU na empresa que trabalho.

Essas alterações vc fez no AbstractBanco.cs e DetalheRetorno.cs ?

Vc já solicitou a atualização do projeto Boleto.NET?

Abraços,

Feb 8, 2012 at 6:50 PM

Olá esx

Se você utilizar o SVN, conseguirá submeter as alterações que fez.

José Roberto Siqueira
RMGR Soluções e Serviços em Softwares
+55 11 7612-1268 Claro / +55 11 8612-8287 Tim / +55 11 7119-1634 Vivo

Gtalk..: jrsiqueira[@]gmail[.]com
MSN....: jrsiqueira[@]hotmail[.]com
SkypeID: jrsiqueira
Twitter: [@]jrsiqueira
---

Feb 22, 2012 at 2:22 PM

Tem um erro neste cálculo do Valor Total e Valor Principal

Algumas vezes o Valor Principal pode ser débito e não crédito... exemplo:

 

Valor do Titulo: 1,00

Ao efetuar o Pagamento deste Titulo o banco irá descontar TarifaCobranca .. vamos supor que seja 5,00 ... entao o ValorPrincipal principal vem 4,00

Como você irá saber se estes 4,00 é Crédito ou Débito ? Procurei na documentação e não achei nada... lá sempre fala que o valor é Crédito e na verdade não é.

 

Segue ajuste já contemplando o ValorDesconto que não esta previsto na implementação.

Outra coisa, eu troquei todos double para decimal, pois se tratando de moeda não é recomendado utilizar double por problemas de precisão.

Sugiro você dar um replace em todo seu código de double para decimal e depois ir ajustando os errinhos que der ao compliar.

 

        public override DetalheRetorno LerDetalheRetornoCNAB400(string registro)
        {
            try
            {
                int dataOcorrencia = Utils.ToInt32(registro.Substring(110, 6));
                int dataVencimento = Utils.ToInt32(registro.Substring(146, 6));
                int dataCredito = Utils.ToInt32(registro.Substring(295, 6));

                DetalheRetorno detalhe = new DetalheRetorno(registro);

                detalhe.CodigoInscricao = Utils.ToInt32(registro.Substring(1, 2));
                detalhe.NumeroInscricao = registro.Substring(3, 14);
                detalhe.Agencia = Utils.ToInt32(registro.Substring(17, 4));
                detalhe.Conta = Utils.ToInt32(registro.Substring(23, 5));
                detalhe.DACConta = Utils.ToInt32(registro.Substring(28, 1));
                detalhe.UsoEmpresa = registro.Substring(37, 25);
                detalhe.NossoNumero = registro.Substring(85, 8);
                detalhe.DACNossoNumero = Utils.ToInt32(registro.Substring(93, 1));
                detalhe.Carteira = registro.Substring(107, 1);
                detalhe.CodigoOcorrencia = Utils.ToInt32(registro.Substring(108, 2));
                detalhe.DataOcorrencia = Utils.ToDateTime(dataOcorrencia.ToString("##-##-##"));
                detalhe.NumeroDocumento = registro.Substring(116, 10);
                detalhe.NossoNumero = registro.Substring(126, 9);
                detalhe.DataVencimento = Utils.ToDateTime(dataVencimento.ToString("##-##-##"));
                decimal valorTitulo = Convert.ToInt64(registro.Substring(152, 13));
                detalhe.ValorTitulo = valorTitulo / 100;
                detalhe.CodigoBanco = Utils.ToInt32(registro.Substring(165, 3));
                detalhe.AgenciaCobradora = Utils.ToInt32(registro.Substring(168, 4));
                detalhe.Especie = Utils.ToInt32(registro.Substring(173, 2));
                decimal tarifaCobranca = Convert.ToUInt64(registro.Substring(175, 13)); // Erro - Alterado de 174 para 175
                detalhe.TarifaCobranca = tarifaCobranca / 100;
                // 26 brancos
                decimal iof = Convert.ToUInt64(registro.Substring(214, 13));
                detalhe.IOF = iof / 100;
                decimal valorAbatimento = Convert.ToUInt64(registro.Substring(227, 13));
                detalhe.ValorAbatimento = valorAbatimento / 100;

                decimal valorDescontos = Convert.ToUInt64(registro.Substring(240, 13));
                detalhe.Descontos = valorDescontos / 100;

                decimal valorPrincipal = Convert.ToUInt64(registro.Substring(253, 13));
                detalhe.ValorPrincipal = valorPrincipal / 100;

                decimal jurosMora = Convert.ToUInt64(registro.Substring(266, 13));
                detalhe.JurosMora = jurosMora / 100;
                detalhe.DataOcorrencia = Utils.ToDateTime(dataOcorrencia.ToString("##-##-##"));
                // 293 - 3 brancos
                detalhe.DataCredito = Utils.ToDateTime(dataCredito.ToString("##-##-##"));
                detalhe.InstrucaoCancelada = Utils.ToInt32(registro.Substring(301, 4));
                // 306 - 6 brancos
                // 311 - 13 zeros
                detalhe.NomeSacado = registro.Substring(324, 30);
                // 354 - 23 brancos
                detalhe.Erros = registro.Substring(377, 8);
                // 377 - Registros rejeitados ou alega��o do sacado
                // 386 - 7 brancos

                detalhe.CodigoLiquidacao = registro.Substring(392, 2);
                detalhe.NumeroSequencial = Utils.ToInt32(registro.Substring(394, 6));

                // Valor principal � d�bito ou cr�dito ?
                if ( (detalhe.ValorTitulo < detalhe.TarifaCobranca) ||
                     ((detalhe.ValorTitulo - detalhe.Descontos) < detalhe.TarifaCobranca)
                    )
                {
                    detalhe.ValorPrincipal *= -1; // Para d�bito coloca valor negativo
                }


                // Valor Pago � a soma do Valor Principal (Valor que entra na conta) + Tarifa de Cobran�a
                detalhe.ValorPago = detalhe.ValorPrincipal + detalhe.TarifaCobranca;


                return detalhe;
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao ler detalhe do arquivo de RETORNO / CNAB 400.", ex);
            }
        }

 

 

 

 

 

 

// Valor p
Feb 22, 2012 at 2:34 PM
Edited Feb 22, 2012 at 2:49 PM

Submetido.

http://boletonet.codeplex.com/SourceControl/list/patches