Skip to content

Commit

Permalink
Atualização do Boleto, Remessa/Retorno CNAB400 do banco UNICRED. (kiv…
Browse files Browse the repository at this point in the history
…anio#215)

* Atualização do Boleto do banco UNICRED.

* Atualização Remessa CNAB400 do Banco UNICRED.

* Atualização Retorno CNAB400 Banco Unicred.

* Removido hardcode do campo carteira na Remessa CNAB 400 Unicred.

* [FIX] Especificações do Repo, aspas duplas e tamanho da linha.

* Atualização dados de teste do UNICRED 400.

* Atualização do README para o UNICRED 400.

* [FIX] Atualização dados de teste do UNICRED 400.
  • Loading branch information
mbcosta authored and jhenrique-esl committed May 30, 2023
1 parent 10604f6 commit deb1fd6
Show file tree
Hide file tree
Showing 13 changed files with 360 additions and 277 deletions.
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.'
# 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",
}.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
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)
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
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

0 comments on commit deb1fd6

Please sign in to comment.