Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Atualização do Boleto, Remessa/Retorno CNAB400 do banco UNICRED. #215

Merged
merged 8 commits into from
Dec 11, 2021
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ Criado pelo pessoal da [Akretion](http://www.akretion.com) muito TOP \o/
| 399 - HSBC | CNR, CSB - [Rafael DL](https://github.com/rafaeldl) | |
| 748 - Sicredi | C (03) | |
| 756 - Sicoob | Todas as carteiras presentes na documentação | |
| 756 - Unicred | 03 - [Marcelo J. Both](https://github.com/marceloboth) | |
| 085 - AILOS | Todas as carteiras presentes na documentação - [Marcelo J. Both](https://github.com/marceloboth)| |
| 136 - Unicred | 21 - [Magno Costa](https://github.com/mbcosta) | |
| 097 - CREDISIS | Todas as carteiras presentes na documentação - [Marcelo J. Both](https://github.com/marceloboth) | |
| 745 - Citibank | 3 | |

Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
135 changes: 55 additions & 80 deletions lib/brcobranca/boleto/unicred.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,129 +3,104 @@
module Brcobranca
module Boleto
class Unicred < Base # Banco Unicred
# <b>REQUERIDO</b>: Código do posto da cooperativa de crédito
attr_accessor :posto

# <b>REQUERIDO</b>: Byte de identificação do cedente do bloqueto utilizado para compor o nosso número.
attr_accessor :byte_idt

validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
validates_length_of :nosso_numero, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
validates_length_of :conta_corrente, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
# Carteira
# 1 – Com Registro
# 3 – Sem Registro
# Obs.: O Unicred não validará este campo.
validates_length_of :carteira, maximum: 1, message: 'deve ser menor ou igual a 1 dígitos.'
validates_length_of :posto, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
validates_length_of :byte_idt, is: 1, message: 'deve ser 1 se o numero foi gerado pela agencia ou 2-9 se foi gerado pelo beneficiário'
validates_length_of :convenio, maximum: 5, message: 'deve ser menor ou igual a 5 dígitos.'
validates_length_of :agencia, maximum: 4, message:
"deve ser menor ou igual a 4 dígitos."
validates_length_of :nosso_numero, maximum: 10, message:
"deve ser menor ou igual a 10 dígitos."
# validates_length_of :conta_corrente, maximum: 5, message:
# 'deve ser menor ou igual a 5 dígitos.'
Copy link
Collaborator

Choose a reason for hiding this comment

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

Style/AsciiComments: Use only ascii symbols in comments.

# Carteira com 2(dois) caracteres ( SEMPRE 21 )
validates_length_of :carteira, maximum: 2, message:
"deve ser menor ou igual a 2 dígitos."
validates_length_of :convenio, maximum: 10, message:
"deve ser menor ou igual a 10 dígitos."

# Nova instancia do Unicred
# @param (see Brcobranca::Boleto::Base#initialize)
def initialize(campos = {})
campos = { carteira: '3',
especie_documento: 'DM',
local_pagamento: 'PAGÁVEL PREFERENCIALMENTE NAS AGÊNCIAS DA UNICRED'
campos = {
carteira: "21",
local_pagamento: "PAGÁVEL PREFERENCIALMENTE NAS AGÊNCIAS DA UNICRED",
aceite: "N",
Copy link
Collaborator

Choose a reason for hiding this comment

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

Style/TrailingCommaInHashLiteral: Avoid comma after the last item of a hash.

}.merge!(campos)
super(campos)
end

# Codigo do banco emissor (3 dígitos sempre)
# Codigo do banco emissor 3 digitos sempre
#
# @return [String] 3 caracteres numéricos.
# @return [String] 3 caracteres numericos.
def banco
'748'
end

# Carteira
#
# @return [String] 2 caracteres numéricos.
def carteira=(valor)
@carteira = valor.to_s.rjust(1, '0') if valor
"136"
end

# Posto
#
# @return [String] 2 caracteres numéricos.
def posto=(valor)
@posto = valor.to_s.rjust(2, '0') if valor
end

# Número da conta corrente
# @return [String] 5 caracteres numéricos.
# Numero da conta corrente
# @return [String] 9 caracteres numericos.
def conta_corrente=(valor)
@conta_corrente = valor.to_s.rjust(5, '0') if valor
@conta_corrente = valor.to_s.rjust(9, "0") if valor
end

# Código Beneficiário
# @return [String] 5 caracteres numéricos.
# Codigo Beneficiario
# @return [String] 5 caracteres numericos.
def convenio=(valor)
@convenio = valor.to_s.rjust(5, '0') if valor
@convenio = valor.to_s.rjust(5, "0") if valor
end

# Dígito verificador do banco
# Digito verificador do banco
# @return [String] 1 caractere.
def banco_dv
'X'
"8"
end

# Nosso número para exibir no boleto.
# O campo Nosso Número deve ser apresentado no formato AA/BXXXXX-D, onde:
# AA = Ano atual
# B = Byte que pode ser de 2 a 9. Somente será 1 se forem boletos pré-impressos.
# XXXXX = número sequencial
# D = dígito verificador calculado
# Nosso numero para exibir no boleto. Nosso Numero e formado com 11 onze
# caracteres, sendo 10 digitos para o nosso numero e um digito para o
# digito verificador. Ex.: 9999999999-D. Obs.: O Nosso Numero e um
# identificador do boleto, devendo ser atribuido Nosso Numero diferenciado
# para cada um. D = digito verificador calculado
# @return [String]
# @example
# boleto.nosso_numero_boleto #=> "14/200022-5"
# boleto.nosso_numero_boleto #=> "9999999999-D"
def nosso_numero_boleto
"#{nosso_numero_with_byte_idt[0..1]}/#{nosso_numero_with_byte_idt[2..-1]}-#{nosso_numero_dv}"
"#{nosso_numero}-#{nosso_numero_dv}"
end

def nosso_numero_codigo_barra
nosso_numero_boleto.gsub(/\D/, '')
end

def nosso_numero_with_byte_idt
"#{data_processamento.strftime('%y')}#{byte_idt}#{nosso_numero}"
end

# Número seqüencial utilizado para identificar o boleto.
# @return [String] 5 caracteres numéricos.
# Numero sequencial utilizado para identificar o boleto.
# @return [String] 10 caracteres numericos.
def nosso_numero=(valor)
@nosso_numero = valor.to_s.rjust(5, '0') if valor
@nosso_numero = valor.to_s.rjust(10, '0') if valor
Copy link
Collaborator

Choose a reason for hiding this comment

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

Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.

end

# Dígito verificador do nosso número
# @return [Integer] 1 caracteres numéricos.
# Digito verificador do nosso numero
# @return [Integer] 1 caracteres numericos.
def nosso_numero_dv
"#{agencia_posto_conta}#{nosso_numero_with_byte_idt}"
.modulo11(mapeamento: mapeamento_para_modulo_11)
"#{nosso_numero}".modulo11(mapeamento: mapeamento_para_modulo_11)
Copy link
Collaborator

Choose a reason for hiding this comment

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

Style/UnneededInterpolation: Prefer to_s over string interpolation.

end

def agencia_conta_boleto
"#{agencia}.#{posto}.#{convenio}"
def conta_corrente_codigo_barra
"#{conta_corrente}#{conta_corrente_dv}"
end

def agencia_posto_conta
"#{agencia}#{posto}#{convenio}"
# AGENCIA / CODIGO DO BENEFICIARIO: devera ser preenchido com o codigo da
# agencia, contendo 4 quatro caracteres / Conta Corrente com 10 dez
# caracteres. Ex. 9999/999999999-9. Obs.: Preencher com zeros a direita
# quando necessario.
def agencia_conta_boleto
"#{agencia} / #{conta_corrente}-#{conta_corrente_dv}"
end

# Segunda parte do código de barras.
# Posição Tamanho Conteúdo
# 20 – 20 01 Código numérico correspondente ao tipo de cobrança: “1” – Com Registro “3 – Sem Registro”. Obs.: O SICREDI não validará este campo.
# 21 – 21 01 Código numérico correspondente ao tipo de carteira: “1” - carteira simples
# 22 – 30 09 Nosso número
# 31 – 34 # 04 # Cooperativa de crédito/agência beneficiária
# 35 – 36 # 02 # Posto da cooperativa de crédito/agência beneficiária
# 37 – 41 # 05 # Código do beneficiário
# 42 – 42 # 01 # Será 1 (um) quando houver valor expresso no campo “valor do documento”
# 43 – 43 # 01 # Filler – zeros “0”
# 44 – 44 # 01 # DV do campo livre calculado por módulo 11 com aproveitamento total (resto igual a 0 ou 1 DV cai para 0)
# Segunda parte do codigo de barras.
# Posicao Tamanho Conteudo
# 20 - 23 04 Agencia BENEFICIARIO Sem o digito verificador,
# completar com zeros a esquerda quando necessario
# 24 - 33 10 Conta do BENEFICIARIO Com o digito verificador -
# Completar com zeros a esquerda quando necessario
# 34 – 44 11 Nosso Numero Com o digito verificador
Copy link
Collaborator

Choose a reason for hiding this comment

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

Style/AsciiComments: Use only ascii symbols in comments.

def codigo_barras_segunda_parte
campo_livre = "#{carteira}1#{nosso_numero_codigo_barra}#{agencia_posto_conta}10"
campo_livre + campo_livre.modulo11(mapeamento: mapeamento_para_modulo_11).to_s
"#{agencia}#{conta_corrente_codigo_barra}#{nosso_numero_codigo_barra}"
end

private
Expand Down
Loading