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

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.