HSBC - Gerar boleto padrão CNAB 400

Feb 2, 2012 at 12:41 PM
Edited Feb 2, 2012 at 12:42 PM

Bom Dia Pessoal

Por gentileza, podem ajudar-me com geração de boleto para o HSBC? Postei uma dúvida na lista de discussão em 10/01/12, mais, parece que o pessoal não frequenta muito a lista.

Estudei bastante os exemplos que você postados no blog do Stiven Fabiano da Câmara e outros que constam na lista de discussão e consegui implementar com sucesso o Bradesco e Itaú, porém, com o HSBC estou com dúvidas, pois, gerei um boleto e ao enviar para o gerente do banco aprovar, este foi reprovado.

Segundo ele, o boleto gerado está formatado como cobrança "não registrada" quando o correto é "cobrança registrada".

Se algum colega poder analisar, nos links abaixo há o boleto que eu gerei e o manual que o banco enviou, onde, na página 21 diz como devo gerar o boleto. Porém, utilizando o Boleto.Net, não consigo gerar a linha digitalizável (aquela que contém os números no ínicio do boleto).

Boleto gerado: http://www.rmgr.com.br/hsbc/boleto-teste.pdf
Manual HSBC: http://www.rmgr.com.br/hsbc/cobbarra.pdf o modelo do boleto está na página 21.

Peço desculpas por postar novamente este problema, mais, estou a quase 30 dias pesquisando e não encontro quase nada sobre Boleto.Net + HSBC.

Obrigado

José Roberto Siqueira
---
+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
---

Developer
Feb 8, 2012 at 6:02 PM
Edited Feb 8, 2012 at 6:03 PM

Olá José !

Cobrança registrada ou sem registro depende da carteira que vc vai trabalhar.  Para saber a respeito, precisará contatar o gerente da conta para que ele forneça o código da carteira. 

Sobre instrução bancária, vc precisará implementar.  Para isso, vc pode utilizar os exemplos de outros bancos e codificar conforme manual fornecido pelo seu banco. 

 No caso, precisará implementar a Carteira_HSBC.cs, Instrucao_HSBC.cs, EspecieDocumento_HSBC.cs.  Atualizar Banco_HSBC.cs.

Não sei se ajudei, mas é por aí.  A propósito, como vc está montando o boleto?

Abraços,

Feb 8, 2012 at 6:39 PM

Olá jsoda

Será cobrança registrada e a carteira é a CSB.

Eu criei um pequeno exemplo usando os mesmos dados que constam no manual que recebi do HSBC. Mesmo assim, não consegui reproduzir a linha digitalizável. A numeração que aparece no boleto que eu gero é diferente daquele que consta no manual.

Eu até postei uma nova mensagem na lista sobre esta situação (http://boletonet.codeplex.com/discussions/291032). Reproduzo a mesma abaixo. Se puder me dar uma dica de como resolver isso, fico imensamente grato. Estou há mais de um mês nisso e não consigo finalizar:

Minha dúvida é: supondo que eu gere a seguinte linha digitalizável:

39991.11119 22222.500542 66666.660015 8 10010000031155 

Em seguida faço:

b.CodigoBarra.LinhaDigitavel = "39991111192222250054266666660015810010000031155"

Porque após executar bb.Boleto.Valida() esta instrução b.CodigoBarra.LinhaDigitavel  passa a ter este valor

39991.00005 00001.111129 22225.186026 6 10010000031155

Developer
Feb 9, 2012 at 12:49 AM

Olá José.

Eu li o manual (por cima) que vc colocou em outro post e, desculpe a minha ignorância - pois não sou desenvolvedor C#, mas percebi que o HSBC está incompleto.  Não sei se alguém já conseguiu implementar/homologar o HSBC.

Pelo que vi no código (estou com a versão 85966), Banco_HSBC.cs não está de acordo com o manual que vc postou. As formatações do nosso numero, linha digitável, código de barras, os cálculos de DV.  Acho que falta implementar.

Mais uma vez, desculpe, se estou falando bobagem - só gostaria de ajudar, pois já tive muita ajuda por aqui.

Pra começar, vc comparou com outros bancos ? Apesar de não serem iguais, só pelo fato de vc ver a forma que foram implementadas, dá para perceber que está faltando um bocado de coisa.  Os bancos BRADESCO, ITAU, BB, CAIXA, parece-me que estão mais avançados. Dá uma olhadinha e perceberá que tem coisa estranha.  

De qualquer forma, me passa as classes do HSBC que vc tem. 

Vc tbém pode ver com qual banco o HSBC se parece mais e desenvolver um código semelhante.  Apesar de eu não desenvolver em C#, dá para ter uma noção de como funciona.

 

Abraços,

Feb 9, 2012 at 1:32 AM
Edited Feb 9, 2012 at 1:36 AM

Boa Noite jsoda

Obrigado pelo retorno e pela ajuda.

Não sou desenvolvedor C#, mais consegui gerar boletos para o Bradesco, Itaú com sucesso. E peguei estes dois bancos como referência para criar para o HSBC. Porém, quando gerei o boleto e enviei para o banco homologarem, disseram que estava em desacordo com o link do manual que eu postei em mensagem anterior.

Então criei um programa em VB.NET de teste usando como informações os dados que constam no exemplo do manual do HSBC. Mesmo atribuindo as informações manualmente, não sei o que ocorre quando passa pela instrução bb.Boleto.Valida, a linha digitável é alterada.

Este é o código de teste que criei onde eu detalhei o máximo possível para tentar entender porque não consigo gerar o boleto de acordo com o manual do HSBC. Já confirmei com o banco e a carteira que devo utilizar é a CSB - Cobrança Registrada.

Apenas para reforçar, o problema está ocorrendo com a linha digitável, onde:

O que deve sair no boleto é:  39991.11119 22222.500542 66666.660015 8 10010000031155 

Em seguida faço: b.CodigoBarra.LinhaDigitavel = "39991111192222250054266666660015810010000031155"

Após executar bb.Boleto.Valida() 

b.CodigoBarra.LinhaDigitavel é igual a 39991.00005 00001.111129 22225.186026 6 10010000031155

Isso que não consigo entender.

        Dim CEDENTE_NOME As String = "Loja de Roupas Ltda".ToUpper
        Dim CEDENTE_AGENCIA As String = "0054"
        Dim CEDENTE_AGENCIA_DIGITO As String = ""
        Dim CEDENTE_CONTA As String = "66666"
        Dim CEDENTE_CONTA_DIGITO As String = "66"
        Dim CEDENTE_CPF_CNPJ As String = "99999999999999"
        Dim ESPECIE As String = "REAL"
        Dim ESPECIE_DOCUMENTO As String = "PD"
        Dim CARTEIRA As String = "CSB"
        Dim ACEITE As String = "NÃO"
        Dim CARTEIRA_NOSSO_NUMERO As String = String.Empty
        Dim NUMERO_DOCUMENTO_PEDIDO As String = "178017"
        Dim DATA_DOCUMENTO As String = "06/02/2009"
        Dim DATA_PROCESSAMENTO As String = "06/02/2009"
        Dim VALOR_DOCUMENTO As String = "311,55"
        Dim INSTRUCAO1 As String = "APÓS VENCIMENTO MORA DIÁRIA DE: R$ 1,07"
        Dim INSTRUCAO2 As String = "ESTA COBRANÇA BANCÁRIA REFERE-SE A NOTA FISCAL Nº "
        Dim INSTRUCAO3 As String = "APÓS VENCIMENTO MULTA DE 4%."
        Dim INSTRUCAO4 As String = "TITULO SUJEITO A PROTESTO APÓS 5 DIAS DO VENCIMENTO"
        Dim SACADO_NOME As String = "Pedro Paulo Souza".ToUpper
        Dim SACADO_CPFCNPJ As String = "99999999999999"
        Dim SACADO_ENDERECO As String = "Avenida Brasilia".ToUpper
        Dim SACADO_NUMERO As String = "666"
        Dim SACADO_BAIRRO As String = "Zona Industr".ToUpper
        Dim SACADO_CIDADE As String = "Curitiba".ToUpper
        Dim SACADO_CEP As String = "99999-999"
        Dim SACADO_UF As String = "PR"
        Dim LOCAL_PAGAMENTO As String = "PAGAR PREFERENCIALMENTE EM AGÊNCIA DO HSBC"
        Dim TXTVENCIMENTO As Date = CDate("04/07/2000")
        Dim RANGE As String = "11111"
        Dim NUMERO_SEQUENCIAL As String = "22222"
        Dim NOSSO_NUMERO As String = "1111122222" & fnCalculoDigitoVerificador("1111122222")
        Dim CODIGO_BARRAS As String = String.Empty

        Dim bb As New BoletoNet.BoletoBancario
        bb.CodigoBanco = 399

        Dim vencimento As DateTime = New DateTime(TXTVENCIMENTO.Year, TXTVENCIMENTO.Month, TXTVENCIMENTO.Day)
        Dim c As Cedente = New Cedente(CEDENTE_CPF_CNPJ, CEDENTE_NOME, CEDENTE_AGENCIA, CEDENTE_AGENCIA_DIGITO, CEDENTE_CONTA, CEDENTE_CONTA_DIGITO)
        c.Codigo = 13000
        c.CPFCNPJ = CEDENTE_CPF_CNPJ
        c.Nome = CEDENTE_NOME
        c.ContaBancaria.Agencia = CEDENTE_AGENCIA
        c.ContaBancaria.Conta = CEDENTE_CONTA
        c.ContaBancaria.DigitoAgencia = CEDENTE_AGENCIA_DIGITO
        c.ContaBancaria.DigitoConta = CEDENTE_CONTA_DIGITO

        Dim Ender As Endereco = New Endereco
        Ender.Bairro = SACADO_BAIRRO
        Ender.CEP = SACADO_CEP
        Ender.Cidade = SACADO_CIDADE
        Ender.Complemento = ""
        Ender.End = SACADO_ENDERECO & " " & SACADO_NUMERO
        Ender.Logradouro = ""
        Ender.UF = SACADO_UF

        Dim b As Boleto = New Boleto(vencimento, VALOR_DOCUMENTO, CARTEIRA, NOSSO_NUMERO, c, New EspecieDocumento(341, 1))

        b.NumeroDocumento = NUMERO_DOCUMENTO_PEDIDO
        b.Sacado = New Sacado(SACADO_CPFCNPJ, SACADO_NOME)
        b.Sacado.Endereco = Ender
        b.LocalPagamento = LOCAL_PAGAMENTO

        Dim item As Instrucao = New Instrucao(1)
        item.Descricao = INSTRUCAO1.ToUpper
        b.Instrucoes.Add(item)

        Dim item2 As Instrucao = New Instrucao(1)
        item2.Descricao = INSTRUCAO2.ToUpper & " " & NUMERO_DOCUMENTO_PEDIDO
        b.Instrucoes.Add(item2)

        Dim item3 As Instrucao = New Instrucao(1)
        item3.Descricao = INSTRUCAO3.ToUpper
        b.Instrucoes.Add(item3)

        Dim item4 As Instrucao = New Instrucao(1)
        item4.Descricao = INSTRUCAO4.ToUpper
        b.Instrucoes.Add(item4)

        '----------------------------
        'FORMAÇÃO DO CÓDIGO DE BARRAS
        '----------------------------

        Dim CODIGO_COMPENSACAO As String = "399"
        Dim TIPO_DE_MOEDA As String = "9"
        Dim FATOR_DE_VENCIMENTO As String = "1001"
        Dim AGENCIA_CONTA_CORRENTE As String = CEDENTE_AGENCIA & CEDENTE_AGENCIA_DIGITO & CEDENTE_CONTA & CEDENTE_CONTA_DIGITO
        Dim CODIGO_DA_CARTEIRA As String = "00"
        Dim CODIGO_APLICATIVO_COBRANCA As String = "1"
        Dim DIGITO_DE_AUTOCONFERENCIA As String = String.Empty

        DIGITO_DE_AUTOCONFERENCIA = fnCalculoDigitoAutoConferenciaCodigoBarras( _
                CODIGO_COMPENSACAO & _
                TIPO_DE_MOEDA & _
                FATOR_DE_VENCIMENTO & _
                clsFormatacao.fnZeroEsquerda(VALOR_DOCUMENTO.Replace(",", ""), 10) & _
                NOSSO_NUMERO & _
                AGENCIA_CONTA_CORRENTE & _
                CODIGO_DA_CARTEIRA & _
                CODIGO_APLICATIVO_COBRANCA)

        CODIGO_BARRAS = CODIGO_COMPENSACAO & _
                        TIPO_DE_MOEDA & _
                        DIGITO_DE_AUTOCONFERENCIA & _
                        FATOR_DE_VENCIMENTO & _
                        clsFormatacao.fnZeroEsquerda(VALOR_DOCUMENTO.Replace(",", ""), 10) & _
                        NOSSO_NUMERO & _
                        AGENCIA_CONTA_CORRENTE & _
                        CODIGO_DA_CARTEIRA & _
                        CODIGO_APLICATIVO_COBRANCA

        b.EspecieDocumento.Sigla = ESPECIE_DOCUMENTO
        b.Especie = ESPECIE
        b.Aceite = ACEITE
        b.NossoNumero = NOSSO_NUMERO
        b.CodigoBarra.Codigo = CODIGO_BARRAS
        b.CodigoBarra.Chave = CODIGO_BARRAS

        '----------------------------
        'LINHA  DIGITÁVEL
        '----------------------------

        Dim Campo1_CODIGO_COMPENSACAO As String = "399"
        Dim Campo1_TIPO_DE_MOEDA As String = "9"
        Dim Campo1_RANGE As String = NOSSO_NUMERO.Substring(0, 5)
        Dim Campo1_DV As String = fnCalculoDigitoVerificadorCampo(Campo1_CODIGO_COMPENSACAO & Campo1_TIPO_DE_MOEDA & Campo1_RANGE)
        Dim Campo1 As String = Campo1_CODIGO_COMPENSACAO & Campo1_TIPO_DE_MOEDA & Campo1_RANGE & Campo1_DV

        Dim Campo2_FINAL_NOSSO_NUMERO_MAIS_DV As String = NOSSO_NUMERO.Substring(5)
        Dim Campo2_CODIGO_AGENCIA As String = CEDENTE_AGENCIA
        Dim Campo2_DV As String = fnCalculoDigitoVerificadorCampo(Campo2_FINAL_NOSSO_NUMERO_MAIS_DV & Campo2_CODIGO_AGENCIA)
        Dim Campo2 As String = Campo2_FINAL_NOSSO_NUMERO_MAIS_DV & Campo2_CODIGO_AGENCIA & Campo2_DV

        Dim Campo3_CONTA_CORRENTE As String = CEDENTE_CONTA & CEDENTE_CONTA_DIGITO
        Dim Campo3_CODIGO_DA_CARTEIRA As String = "00"
        Dim Campo3_CODIGO_APLICATIVO_COBRANCA As String = "1"
        Dim Campo3_DV As String = fnCalculoDigitoVerificadorCampo(Campo3_CONTA_CORRENTE & Campo3_CODIGO_DA_CARTEIRA & Campo3_CODIGO_APLICATIVO_COBRANCA)
        Dim Campo3 As String = Campo3_CONTA_CORRENTE & Campo3_CODIGO_DA_CARTEIRA & Campo3_CODIGO_APLICATIVO_COBRANCA & Campo3_DV

        Dim Campo4_DIGITO_DE_AUTOCONFERENCIA As String = DIGITO_DE_AUTOCONFERENCIA
        Dim Campo4_FATOR_DE_VENCIMENTO As String = FATOR_DE_VENCIMENTO
        Dim Campo4_VALOR_DO_DOCUMENTO As String = clsFormatacao.fnZeroEsquerda(VALOR_DOCUMENTO.Replace(",", ""), 10)
        Dim Campo4 As String = Campo4_DIGITO_DE_AUTOCONFERENCIA & Campo4_FATOR_DE_VENCIMENTO & Campo4_VALOR_DO_DOCUMENTO

        b.CodigoBarra.LinhaDigitavel = Campo1 & Campo2 & Campo3 & Campo4

        bb.Boleto = b
        bb.Boleto.Valida()

        Boletos.Add(b)

Abraços  

Developer
Feb 9, 2012 at 2:48 AM

Olá José.

Complicado esse seu programa...rs

Acho que não tem muito haver, mas pq vc está usando ITAU ? --->  

Dim b As Boleto = New Boleto(vencimento, VALOR_DOCUMENTO, CARTEIRA, NOSSO_NUMERO, c, New EspecieDocumento(341, 1))

Esse processo todo que vc faz, vc faz nos outros bancos, respeitando as caracteristicas de cada um ?

Outra coisa: Não sei o que fazem a suas funções de calculo de DV, mas:

O DV do nosso numero é MOD11, O DV de autoconferência do código de barras é MOD11, O DV da linha digitável é MOD10, estão certos?

A propósito, como vc chegou ou sabe que a linha digitável tem que dar 39991.11119 22222.500542 66666.660015 8 10010000031155...é do manual ?

A validação tem todo um processo que depende das informações que vc atribui, e, pelo menos na ultima versão (85966), a validação do boleto para HSBC está diferente dos cálculos que o manual diz.

Verifique a composição dessa linha digitável, no Banco_HSBC.cs.

Abraços,

Feb 9, 2012 at 3:47 AM

Olá jsoda

Não é complicado não.

Criei uma rotina de teste e destaquei cada campo que deverá compor o boleto.

Estes dados eu obtive do manual do HSBC no exemplo que consta na página 21 e 22 http://www.rmgr.com.br/hsbc/hsbc-page-21-22.pdf

As funções para obter dígitos eu criei conforme o manual do HSBC. E testei usando as informações que constam no manual, onde obtive o mesmo resultado positivo.

Fiz isso para tentar identificar a causa do problema quando eu debugasse o programa.

Quanto ao uso do ITAU, esta foi uma tentativa de teste, pois, no forum eu peguei um exemplo de criação para HSBC (cobrança não registrada) no qual usaram ITAU.

Para os outros bancos que deram certinho, os procedimentos são outros e mais "limpos".

Apenas para o HSBC fiz assim na tentativa de entender o que acontece. Todos os dados que utilizo estão no manual (emitente, sacado, número digitável, datas, valor etc), é uma tentativa minha de conseguir reproduzir o que está no manual.

Abraços

Developer
Feb 9, 2012 at 12:02 PM
Edited Feb 9, 2012 at 12:03 PM

Bom dia, Jrsiqueira.

Entendi. 

Não sei se estarei sendo "chato", mas olhando todos os pontos do HSBC no projeto, acho que o código não está pronto.  Não vejo os programas escritos coerentemente, em relação ao BB, ITAU, BRADESCO, CAIXA que são os mais usados.

Isto posto, acho que terá que implementar o código...e depois avisar o STIVEN para que ele verifique e poste uma nova atualização.

O que acha? Assim, você terá um código limpo e ajuda a comunidade.

A propósito, o link do MANUAL do HSBC é atualizado ? Posso me direcionar por ele?

OBS.: Vou dar uma "sapeada" no código para te ajudar, mas não prometo, pois tenho que desenvolver/ajustar/testar/homologar REMESSA/RETORNO do ITAU, BRADESCO e SANTANDER.

Abraços,

Feb 9, 2012 at 12:24 PM

Bom Dia jsoda

Agradeço imensamente a sua atenção para este meu problema.

Eu já entrei em contato com o Stive através do blog que ele possui, também enviei email e ontem o adicionei no MSN e Gtalk. Pediu para que eu o cobrasse que ele vai tentar ajudar-me.

Pode ter certeza que tão logo esta questão do HSBC esteja concluída, vou ajustar, comentar e enviar o fonte para a comunidade, pois, se consegui hoje ter Itaú e Bradesco foi graças a esta comunidade.

O manual do HSBC é atualizado e é sobre cobrança registrada, link é http://www.rmgr.com.br/hsbc/cobbarra.pdf

Se eu puder ajudar, tenho a remessa do Bradesco concluída e em produção há uns dois meses. Utilizei VB.NET.

Após conversar com Stive, posto aqui o andamento deste processo. Ele está com problema de tempo por causa do trabalho, cursinho, etc. Vamos ver o que conseguimos.

Abraços

Developer
Feb 9, 2012 at 2:37 PM
Edited Feb 9, 2012 at 2:38 PM

Bom dia, Jrsiqueira.

Muito bom.  Eu também entrei em contato com ele.  De qualquer forma, estou trabalhando em cima da V85966.

Estou implementando algumas partes do HSBC.  Por acaso você tem informações de especie de documentos, instruções do HSBC ?  Com isso, eu posso implementar alguma coisa mais.

Se não souber, dê uma olhada nos outros bancos, por favor.

Abraços,

Developer
Feb 9, 2012 at 5:37 PM

Jrsiqueira ?

Analisando seu código e comparando com o projeto (já desenvolvi uma parte do HSBC), percebi que sua conta possui 5 caracteres + digitoconta (2).

Não seria a conta de 7 caracteres, sem dígito ?

Abraço,

Jan 17, 2013 at 7:15 PM

Pessoal, meses depois, aproveitando o assunto, o que vocês usam de codigo do convenio?

O boletonet pede int mas o HSBC diz que é "COB". O que fazer?

 

Obrigado!