Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

Postado

Bom Dia,

Validando alguns boletos que ao informar a linha digitavel no banco aparecia como boleto ainda não emitido pude verificar que ao mandar imprimir o boleto pelo componente ele está gerando o nosso número de forma incorreta quando se faz a opção do banco gerar o nosso número na hora da criação do boleto. 

image.thumb.png.fb78dd367b9b5d6fd6c30c9213939b83.png

Na hora do envio do boleto ao passar o nosso número em branco o Banco retornara o nosso número caso o boleto seja criado com sucesso.

Enviei um boleto e o retorno do banco foi: 

{
    "resultado": [{
            "status": {
                "codigo": 200
            },
            "boleto": {
                "numeroContrato": ******,
                "modalidade": 1,
                "numeroContaCorrente": *****,
                "nossoNumero": 31144,
                "seuNumero": "6666-01",
                "especieDocumento": "DM",
                "dataEmissao": "2024-10-25T00:00:00-03:00",
                "codigoBarras": "75693991000000010001300801121407100031144001",
                "linhaDigitavel": "75691300860112140710800311440010399100000001000",
                "valor": 10.0000,
                "dataVencimento": "2024-11-24T00:00:00-03:00",
                "valorAbatimento": 0,
                "tipoDesconto": 0,
                "valorPrimeiroDesconto": 0.0000,
                "valorSegundoDesconto": 0.0000,
                "valorTerceiroDesconto": 0.0000,
                "valorMulta": 2.0000,
                "valorJurosMora": 0.3300,
                "numeroParcela": 1,
                "aceite": false,
                "pagador": {
                    "nome": "TESTE BOLETO",
                    "numeroCpfCnpj": "24759618058",
                    "endereco": "********",
                    "bairro": "***********",
                    "cidade": "***********",
                    "cep": "*********",
                    "uf": "ES"
                },
                "mensagensInstrucao": {
                    "mensagens": ["Pagável Preferencialmente nas Cooperativ", "as da Rede Sicoob ou Qualquer Banco até", "o Vencimento.", "", ""]
                },
                "identificacaoBoletoEmpresa": "66661",
                "quantidadeDiasFloat": 1,
                "tipoJurosMora": 2,
                "dataJurosMora": "2024-11-25T00:00:00-03:00",
                "tipoMulta": 2,
                "dataMulta": "2024-11-25T00:00:00-03:00",
                "identificacaoEmissaoBoleto": 2,
                "identificacaoDistribuicaoBoleto": 2,
                "codigoProtesto": 3,
                "codigoNegativacao": 3,
                "qrCode": "*************",
                "numeroContratoCobranca": *****
            }
        }
    ]
}

Note que ele retorna a linha digitavel do boleto que é a seguinte: 75691300860112140710800311440010399100000001000

Na hora da impressão deste boleto pelo ACBR o mesmo gera a seguinte linha digitavel:  75691300860112140710800311480016599100000001000

Destaquei em negrito a parte correspondente ao nosso número, a divergencia acontece que o Sicoob está considerando que o digito verificador para o nosso número 3114 é 4 e o ACBR 8, trazendo uma divergencia de informações e impossibilitando o pagamento do titulo.

Postado

@Leonardo Batista Verifica o numero da agencia (cooperativa) e do cliente, eles são usados para calcular o digito juntamente com o nosso numero. Pode ser que tenha alguma diferença do que vc esta informando para gerar o boleto para o que está definido no contrato do cliente.

Postado

Em relação ao problema relatado acima entrei em contato com o suporte do Sicoob e obtive essa respota deles.

Neste caso penso em criar uma propriedade para definir quando quando gerar e quando não gerar o DV.

Segunda irei fazer as implementações e subo aqui.

image.thumb.png.2c93f59e9fad8699a8df8c65de7cdfb0.png

 

image.thumb.png.1b705569de02778ec38966637195da5e.png

  • Consultores
Postado

Sicoob é muito utilizado e até o momento não temos relatos de problemas semelhantes.
Verifique se esta preenchendo todos os campos corretamente, vide particularidades tbm

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Postado

Tivemos esse problema por aqui utilizando CNAB. O Sicoob parou de calcular o DV como padrão no arquivo de e está utilizando os 8 dígitos para a numeração. Informação confirmada pelo suporte do banco.

Postado

Boa Tarde @Daniel InfoCotidiano, já utilizo a emissão de boletos Sicoob em vários clientes há um tempo e semana passada fui surpreendido com os mesmos reclamando da situação apresentada.

Como pode ver nos prints em conversa com o Suporte da Api do Sicoob eles informaram que não estão calculando mais o DV e que esta mudança foi feita sem aviso prévio.

Portanto precisei modificar o componente do ACBR para que ele parasse de calcular o DV, tendo em vista que sempre que o componente necessita do nosso número ele calcula e concatena o DV.

Pode até ser uma questão de particularidade para as pessoas que optaram por não controlar o nosso número pelo sistema e deixaram para o banco fazer o mesmo e retornar.

Assim como o Filipe Martins informou, também temos o Robson_Renan relatando a mesma situação do DV onde foi pedido que ele criasse uma nova postagem para discutir o assunto

  • Membros Pro
Postado

Estamos com o mesmo problema

Por sorte, estou gravando o boleto PDF que o banco retorna em base 64, ai consegui reimprimir este.

Mas para clientes que usam CNAB também está acontecendo, e ai ficou mais difícil resolver, alguém teve alguma solução, ou sabem se já foi submetido alguma solução pelo ACBr ?

  • Consultores
Postado

@Leonardo Batista @VEXCOM Sistemas - Valtair
Conseguem uma documentação sobre esta alteração?
Isso é somente via API OU CNAB?
 

4 minutos atrás, VEXCOM Sistemas - Valtair disse:

Mas para clientes que usam CNAB também está acontecendo, e ai ficou mais difícil resolver, alguém teve alguma solução, ou sabem se já foi submetido alguma solução pelo ACBr ?

Pode dar mais detalhe, o que esta acontecendo qdo vc le o arquivo de retorno ?
pode nos fornecer mais detalhes e um arquivo de retorno para analise?

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Postado

 

Realmente era para funcionar para todo mundo mesmo eles fazendo a alteração, mas eles não contavam que algumas pessoas poderiam estar calculando o DV a todo tempo.

O único problema que temos é que a cada solicitação do nosso número a gente faz o cálculo do DV, e como não tem mais o DV por parte deles a gente sempre adiciona um caractere a mais.

image.png.6b4a120f9fd8b89a5b14b513438587d6.png

Temos esse método hoje no ACBR e todas as vezes que ele chama esse método ele adiciona um caractere junto ao nosso número. A única coisa que eu propus na solução e que já está rodando nos meus clientes foi colocar um IF.

image.png.ac72fab0c23f3c7722f7f6c275be78aa.png

1 hora atrás, Daniel InfoCotidiano disse:

@Leonardo Batista @VEXCOM Sistemas - Valtair
Conseguem uma documentação sobre esta alteração?
Isso é somente via API OU CNAB?
 

Pode dar mais detalhe, o que esta acontecendo qdo vc le o arquivo de retorno ?
pode nos fornecer mais detalhes e um arquivo de retorno para analise?

Encontrei esta informação no site de desenvolvedor deles (https://developers.sicoob.com.br/portal/documentacao?slugItem=novidades-e-atualizacoes

image.thumb.png.3ae3596a493ca8c5a32e47bb6a87c60c.png

Nos prints ela também informa que está mudança é válida para a API e CNAB.

Em relação aos arquivos de retorno não utilizo o ACBR para fazer a leitura deles, mas precisei alterar a forma que fazia a leitura para ler 1 caractere a mais no nosso número.

 

 

  • Consultores
Postado

Certo. vou levar ao time, isso.
Mas não seria necessário ter alterado pelo que entendi do próprio suporte deles e o proprio link e print q vc anexou
 

5 minutos atrás, Leonardo Batista disse:

Em relação aos arquivos de retorno não utilizo o ACBR para fazer a leitura deles, mas precisei alterar a forma que fazia a leitura para ler 1 caractere a mais no nosso número.

Para ler 1 caracter a mais, basta setar a propriedade lerNossoNumeroCompleto = true;

 

image.png

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Consultores
Postado

Comentei sobre a sua resposta: (mas no caso é retorno)
image.png

 

Sobre sua contribuição, criei uma tarefa TK-6188 para análise do time.
qdo concluído reportamos aqui.

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Postado

Eu fiz essa alteração porque não utilizo o ACBR na leitura do arquivo CNAB. Faço a leitura toda na mão do arquivo.

Fico no aguardo da análise, qualquer coisa estou à disposição para ajudar no que for possível

  • Moderadores
Postado
51 minutos atrás, Leonardo Batista disse:

Eu fiz essa alteração porque não utilizo o ACBR na leitura do arquivo CNAB. Faço a leitura toda na mão do arquivo.

Fico no aguardo da análise, qualquer coisa estou à disposição para ajudar no que for possível

Ali que está aqui estamos tratando componente tanto de emissão quanto retorno dos dados.

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Membros Pro
Postado
Em 31/10/2024 at 13:20, Leonardo Batista disse:

 

Realmente era para funcionar para todo mundo mesmo eles fazendo a alteração, mas eles não contavam que algumas pessoas poderiam estar calculando o DV a todo tempo.

O único problema que temos é que a cada solicitação do nosso número a gente faz o cálculo do DV, e como não tem mais o DV por parte deles a gente sempre adiciona um caractere a mais.

image.png.6b4a120f9fd8b89a5b14b513438587d6.png

Temos esse método hoje no ACBR e todas as vezes que ele chama esse método ele adiciona um caractere junto ao nosso número. A única coisa que eu propus na solução e que já está rodando nos meus clientes foi colocar um IF.

image.png.ac72fab0c23f3c7722f7f6c275be78aa.png

Encontrei esta informação no site de desenvolvedor deles (https://developers.sicoob.com.br/portal/documentacao?slugItem=novidades-e-atualizacoes

image.thumb.png.3ae3596a493ca8c5a32e47bb6a87c60c.png

Nos prints ela também informa que está mudança é válida para a API e CNAB.

Em relação aos arquivos de retorno não utilizo o ACBR para fazer a leitura deles, mas precisei alterar a forma que fazia a leitura para ler 1 caractere a mais no nosso número.

 

 

Consegui entender a situação do nosso amigo Leonardo e faz muito sentido a implementação dele

Realmente, está correto o que o banco Sicoob informou, que nada muda (em partes)

Partimos do principio que nos fontes atuais, o acbrBoleto sempre calcula o digito verificado do nosso numero.

O que acontece é que quando é gerado CNAB 240, nós geramos o nosso numero, e o AcbrBoleto calcula o digito verificador do nosso numero, e enviamos para o sicoob através do arquivo CNAB, registra no banco e o processo está correto.

Quando é por API, sobre o nosso numero há duas possibilidades

1) Nós informar o nosso numero + digito verificador, igualmente é feito no CNAB240, e que o boleto é registrado no Sicoob exatamente como é enviado.

2) Nós informar '' no campo nosso numero, neste cenário, após o registro no banco, o mesmo retorna o nosso numero, este é o cenário que eles implementaram, não há digito verificador para este caso, apenas o nosso numero, e neste caso não deve calcular o digito verificador, porque se calcular estará errado

Fiz uma implementação, e fiz essa validação com boletos de alguns clientes (API e CNAB240) e agora ficou correto.


criei a property
fpGerarDV no TACBrBancoClass

e essa modificação ao gerar o digito verificador

 

function TACBrBancoSicoob.CalcularDigitoVerificador(const ACBrTitulo: TACBrTitulo ): String;
var
  Num, Res :String;
  i, base, digito : Integer;
const
  indice = '319731973197319731973';
begin
   Result := '';

   if (not GerarDV) then
     Exit;

   Result := '0';

   Num :=  PadLeft(ACBrTitulo.ACBrBoleto.Cedente.Agencia, 4, '0') +
           PadLeft(ACBrTitulo.ACBrBoleto.Cedente.CodigoCedente, 10, '0') +
           PadLeft(trim(ACBrTitulo.NossoNumero), 7, '0');

   base := 0;
   for i := 1 to Length(Num) do
     base := base + ( StrToInt(copy(Num,i,1)) * StrToInt(copy(indice,i,1)) );

   digito := 11-((  base )-( trunc(base/11) * 11));
   //(Se o Resto for igual a 0 ou 1 então o DV é igual a 0)
   if (digito > 9) then
      digito := 0;

   Res    := IntToStr(digito);
   Result := Res;

   { Para o cálculo do dígito verificador do nosso número, deverá ser utilizada
     a fórmula abaixo:
     Número da Cooperativa    9(4)  3009
     Código do Cliente   9(10)  cedente
     Nosso Número   9(7)  Iniciado contagem em 1

     Constante para cálculo  = 3197


     a) Concatenar na seqüência completando com zero à esquerda.
        Ex.: Número da Cooperativa  = 0001
             Número do Cliente(cedente)  = 1-9
             Nosso Número  = 21
             000100000000190000021

     b) Alinhar a constante com a seqüência repetindo de traz para frente.
        Ex.: 000100000000190000021
             319731973197319731973

     c) Multiplicar cada componente da seqüência com o seu correspondente da
        constante e somar os resultados.
        Ex.: 1*7 + 1*3 + 9*1 + 2*7 + 1*3 = 36

     d) Calcular o Resto através do Módulo 11.
        Ex.: 36/11 = 3, resto = 3

     e) O resto da divisão deverá ser subtraído de 11 achando assim o DV
        (Se o Resto for igual a 0 ou 1 então o DV é igual a 0).
        Ex.: 11  3 = 8, então Nosso Número + DV = 21-8


     Memória de Cálculo
     Coop.(4)|Cliente(10)		    |Nosso Número(7)
     3	   0	 0	9	0	0	0	0	1	3	6	3	5	2	5	9	3	1	1	5	1
     3	   1 	 9	7	3	1	9	7	3	1	9	7	3	1	9	7	3	1	9	7	3
     9	   0	 0	63	0	0	0	0	3	3	54	21	15	2	45	63	9	1	9	35	3 = soma = 335

     digito = 11-((  soma )-( resto inteiro (trunc) da divisao da soma por 11 * 11))
     digito = 11-((  335 )-(30*11))
     digito = 6 }
end;



no meu caso isso resolveu para todos os cenários, controlo conforme a property no momento da geração, se é CNAB240 ou API

ACBrBoleto.pas ACBrBancoSicoob.pas

  • 4 semanas depois ...
  • Consultores
Postado
Em 04/11/2024 at 15:22, VEXCOM Sistemas - Valtair disse:

Consegui entender a situação do nosso amigo Leonardo e faz muito sentido a implementação dele

Realmente, está correto o que o banco Sicoob informou, que nada muda (em partes)

Partimos do principio que nos fontes atuais, o acbrBoleto sempre calcula o digito verificado do nosso numero.

O que acontece é que quando é gerado CNAB 240, nós geramos o nosso numero, e o AcbrBoleto calcula o digito verificador do nosso numero, e enviamos para o sicoob através do arquivo CNAB, registra no banco e o processo está correto.

Quando é por API, sobre o nosso numero há duas possibilidades

1) Nós informar o nosso numero + digito verificador, igualmente é feito no CNAB240, e que o boleto é registrado no Sicoob exatamente como é enviado.

2) Nós informar '' no campo nosso numero, neste cenário, após o registro no banco, o mesmo retorna o nosso numero, este é o cenário que eles implementaram, não há digito verificador para este caso, apenas o nosso numero, e neste caso não deve calcular o digito verificador, porque se calcular estará errado

Fiz uma implementação, e fiz essa validação com boletos de alguns clientes (API e CNAB240) e agora ficou correto.


criei a property
fpGerarDV no TACBrBancoClass

e essa modificação ao gerar o digito verificador

 

function TACBrBancoSicoob.CalcularDigitoVerificador(const ACBrTitulo: TACBrTitulo ): String;
var
  Num, Res :String;
  i, base, digito : Integer;
const
  indice = '319731973197319731973';
begin
   Result := '';

   if (not GerarDV) then
     Exit;

   Result := '0';

   Num :=  PadLeft(ACBrTitulo.ACBrBoleto.Cedente.Agencia, 4, '0') +
           PadLeft(ACBrTitulo.ACBrBoleto.Cedente.CodigoCedente, 10, '0') +
           PadLeft(trim(ACBrTitulo.NossoNumero), 7, '0');

   base := 0;
   for i := 1 to Length(Num) do
     base := base + ( StrToInt(copy(Num,i,1)) * StrToInt(copy(indice,i,1)) );

   digito := 11-((  base )-( trunc(base/11) * 11));
   //(Se o Resto for igual a 0 ou 1 então o DV é igual a 0)
   if (digito > 9) then
      digito := 0;

   Res    := IntToStr(digito);
   Result := Res;

   { Para o cálculo do dígito verificador do nosso número, deverá ser utilizada
     a fórmula abaixo:
     Número da Cooperativa    9(4)  3009
     Código do Cliente   9(10)  cedente
     Nosso Número   9(7)  Iniciado contagem em 1

     Constante para cálculo  = 3197


     a) Concatenar na seqüência completando com zero à esquerda.
        Ex.: Número da Cooperativa  = 0001
             Número do Cliente(cedente)  = 1-9
             Nosso Número  = 21
             000100000000190000021

     b) Alinhar a constante com a seqüência repetindo de traz para frente.
        Ex.: 000100000000190000021
             319731973197319731973

     c) Multiplicar cada componente da seqüência com o seu correspondente da
        constante e somar os resultados.
        Ex.: 1*7 + 1*3 + 9*1 + 2*7 + 1*3 = 36

     d) Calcular o Resto através do Módulo 11.
        Ex.: 36/11 = 3, resto = 3

     e) O resto da divisão deverá ser subtraído de 11 achando assim o DV
        (Se o Resto for igual a 0 ou 1 então o DV é igual a 0).
        Ex.: 11  3 = 8, então Nosso Número + DV = 21-8


     Memória de Cálculo
     Coop.(4)|Cliente(10)		    |Nosso Número(7)
     3	   0	 0	9	0	0	0	0	1	3	6	3	5	2	5	9	3	1	1	5	1
     3	   1 	 9	7	3	1	9	7	3	1	9	7	3	1	9	7	3	1	9	7	3
     9	   0	 0	63	0	0	0	0	3	3	54	21	15	2	45	63	9	1	9	35	3 = soma = 335

     digito = 11-((  soma )-( resto inteiro (trunc) da divisao da soma por 11 * 11))
     digito = 11-((  335 )-(30*11))
     digito = 6 }
end;



no meu caso isso resolveu para todos os cenários, controlo conforme a property no momento da geração, se é CNAB240 ou API

ACBrBoleto.pas 266.36 kB · 3 downloads ACBrBancoSicoob.pas 82.96 kB · 3 downloads

Boa tarde,

 

o problema está somente quando o banco númera?

se o banco não numerar não ocorre problema?

e a linha digitavel em todos esses casos fica como?

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Postado
Em 06/12/2024 at 15:24, Victor H. Gonzales - Panda disse:

Boa tarde,

 

o problema está somente quando o banco númera?

se o banco não numerar não ocorre problema?

Boa Tarde, Victor.

A situação ocorre apenas quando o banco número.

Se o banco não númerar a situação não ocorre.

A linha digitavel não sofre alteração, a não ser pela situação do DV.

Como demonstrei na primeira msg que enviei a unica diferença é a demonstrada abaixo:

No exemplo o nosso número retornado pelo banco foi: 31144.

Gerado pelo Banco: 75691300860112140710800311440010399100000001000

Gerado pelo ACBR:  75691300860112140710800311480016599100000001000

  • Consultores
Postado
1 hora atrás, Leonardo Batista disse:

Boa Tarde, Victor.

A situação ocorre apenas quando o banco número.

Se o banco não númerar a situação não ocorre.

A linha digitavel não sofre alteração, a não ser pela situação do DV.

Como demonstrei na primeira msg que enviei a unica diferença é a demonstrada abaixo:

No exemplo o nosso número retornado pelo banco foi: 31144.

Gerado pelo Banco: 75691300860112140710800311440010399100000001000

Gerado pelo ACBR:  75691300860112140710800311480016599100000001000

há um chamado aberto junto ao sicoob, estamos no aguardo

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...