Skip to content

Commit

Permalink
Corrigido problema no calculo do Digito Verificador para Boletos da C…
Browse files Browse the repository at this point in the history
…AIXA
  • Loading branch information
Ralf S. Bongiolo committed Nov 9, 2011
1 parent c8f144f commit 0644450
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 3 deletions.
1 change: 1 addition & 0 deletions Gemfile.lock
Expand Up @@ -40,6 +40,7 @@ GEM

PLATFORMS
ruby
x86-mingw32

DEPENDENCIES
brcobranca!
Expand Down
6 changes: 3 additions & 3 deletions lib/brcobranca/boleto/caixa.rb
Expand Up @@ -56,7 +56,7 @@ def nosso_numero_boleto
# Utiliza-se o [-1..-1] para retornar o último caracter
# @return [String]
def nosso_numero_dv
"#{carteira}#{numero_documento}".modulo11_9to2.to_s[-1..-1]
"#{carteira}#{numero_documento}".modulo11_2to9_caixa.to_s
end

# Número da agência/código cedente do cliente para exibir no boleto.
Expand All @@ -70,7 +70,7 @@ def agencia_conta_boleto
# Dígito verificador do convênio ou código do cedente
# @return [String]
def convenio_dv
"#{convenio.modulo11_2to9}"
"#{convenio.modulo11_2to9_caixa}"
end

# Monta a segunda parte do código de barras.
Expand All @@ -92,7 +92,7 @@ def codigo_barras_segunda_parte
"#{nosso_numero_boleto[1..1]}" <<
"#{nosso_numero_boleto[8..16]}"

"#{campo_livre}#{campo_livre.modulo11_2to9}"
"#{campo_livre}#{campo_livre.modulo11_2to9_caixa}"
end

end
Expand Down
10 changes: 10 additions & 0 deletions lib/brcobranca/calculo.rb
Expand Up @@ -58,6 +58,16 @@ def modulo11_2to9
valor = (11 - (total % 11))
return [0,10,11].include?(valor) ? 1 : valor
end

# Calcula módulo 11 com multiplicaroes de 2 a 9 (Utilizado pela CAIXA - boletos SIGCB).
#
# @return [Integer]
def modulo11_2to9_caixa
total = self.multiplicador([2,3,4,5,6,7,8,9])
total = (total % 11) unless total < 11

This comment has been minimized.

Copy link
@brenoperucchi

brenoperucchi Feb 29, 2012

Tem certeza que precisa desse unless total < 11 ? é alguma verificação ?
Até aonde eu analisei ele vai voltar total do multiplicador, mas ainda não estará com restante do resultado do multiplicador.

Exemplo: multiplicador = 234
(234%11) unless 234 < 11 ?

Abs!

This comment has been minimized.

Copy link
@mrbongiolo

mrbongiolo Feb 29, 2012

Owner

Precisa sim.
Pois ele só pode pegar o resto da divisão por 11 caso o 'total' seja maior ou igual a 11.

poderia ter feito a mesma coisa utilizando o IF também, ficaria assim:

total = (total % 11) if total > 11

valor = (11 - total)
return valor > 9 ? 0 : valor
end

# Calcula módulo 11 com multiplicaroes de 9 a 2 trocando retorno <b>10 por X</b>.
#
Expand Down

2 comments on commit 0644450

@brenoperucchi
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ralft,

Você está certo, eu vi a nota agora. Me tira uma dúvida, por favor.

Nessa montagem de usando SIGCB e emitindo pelo www.ecobranca.caixa.gov.br ambos colocam o codigo do cedente na posição 05-15 (nào tenho certeza aonde encerra) porém no Manual (CODIGO_BARRAS_SIGCB.PDF) na pagina 7 e no indice 4.1.8 mostra que a posição 05-05 é DV Geral e 06-09 fator vencimento e 10-19 valor documento.

O que está acontecendo ? Ja visse algo assim ? Estava pensando em reformatar para o padrão fornecido, mas depois que eu comparei o Ecobranca fiquei despreocupado, porém o mesmo não conseguiu gerar o exato mesmo boleto. Ficou parecido.

@mrbongiolo
Copy link
Owner

@mrbongiolo mrbongiolo commented on 0644450 Feb 29, 2012 via email

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.