br_boleto 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.travis.yml +1 -1
- data/Gemfile.lock +2 -2
- data/br_boleto.gemspec +2 -3
- data/lib/br_boleto/association/have_conta.rb +27 -25
- data/lib/br_boleto/association/have_pagador.rb +2 -0
- data/lib/br_boleto/boleto/base.rb +0 -4
- data/lib/br_boleto/boleto/bradesco.rb +80 -0
- data/lib/br_boleto/boleto/caixa.rb +10 -12
- data/lib/br_boleto/boleto/cecred.rb +76 -0
- data/lib/br_boleto/boleto/itau.rb +114 -0
- data/lib/br_boleto/boleto/sicredi.rb +101 -0
- data/lib/br_boleto/boleto/unicred.rb +21 -0
- data/lib/br_boleto/conta/base.rb +28 -3
- data/lib/br_boleto/conta/bradesco.rb +120 -0
- data/lib/br_boleto/conta/caixa.rb +22 -12
- data/lib/br_boleto/conta/cecred.rb +67 -0
- data/lib/br_boleto/conta/itau.rb +199 -0
- data/lib/br_boleto/conta/sicoob.rb +40 -11
- data/lib/br_boleto/conta/sicredi.rb +171 -0
- data/lib/br_boleto/conta/unicred.rb +38 -0
- data/lib/br_boleto/helper/default_codes.rb +535 -26
- data/lib/br_boleto/pagador.rb +4 -0
- data/lib/br_boleto/remessa/base.rb +2 -0
- data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
- data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
- data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
- data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
- data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
- data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
- data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
- data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
- data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
- data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
- data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
- data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
- data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
- data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
- data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
- data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
- data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
- data/lib/br_boleto/remessa/pagamento.rb +93 -43
- data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
- data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
- data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
- data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
- data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
- data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
- data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
- data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
- data/lib/br_boleto/retorno/pagamento.rb +18 -4
- data/lib/br_boleto/version.rb +2 -2
- data/lib/br_boleto.rb +28 -0
- data/lib/config/locales/br-boleto-en.yml +1 -0
- data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
- data/test/br_boleto/association/have_pagador_test.rb +24 -0
- data/test/br_boleto/boleto/bradesco_test.rb +125 -0
- data/test/br_boleto/boleto/caixa_test.rb +18 -18
- data/test/br_boleto/boleto/cecred_test.rb +115 -0
- data/test/br_boleto/boleto/itau_test.rb +160 -0
- data/test/br_boleto/boleto/sicredi_test.rb +136 -0
- data/test/br_boleto/boleto/unicred_test.rb +128 -0
- data/test/br_boleto/conta/base_test.rb +298 -3
- data/test/br_boleto/conta/bradesco_test.rb +142 -0
- data/test/br_boleto/conta/caixa_test.rb +7 -6
- data/test/br_boleto/conta/cecred_test.rb +119 -0
- data/test/br_boleto/conta/itau_test.rb +189 -0
- data/test/br_boleto/conta/sicoob_test.rb +32 -2
- data/test/br_boleto/conta/sicredi_test.rb +180 -0
- data/test/br_boleto/conta/unicred_test.rb +154 -0
- data/test/br_boleto/pagador_test.rb +22 -2
- data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
- data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
- data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
- data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
- data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
- data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
- data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
- data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
- data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
- data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
- data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
- data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
- data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
- data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
- data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
- data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
- data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
- data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
- data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
- data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
- data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
- data/test/br_boleto/retorno/pagamento_test.rb +7 -0
- data/test/factories/boleto/boleto_bradesco.rb +18 -0
- data/test/factories/boleto/boleto_cecred.rb +18 -0
- data/test/factories/boleto/boleto_itau.rb +18 -0
- data/test/factories/boleto/boleto_sicredi.rb +18 -0
- data/test/factories/boleto/boleto_unicred.rb +18 -0
- data/test/factories/conta/bradesco.rb +16 -0
- data/test/factories/conta/caixa.rb +2 -1
- data/test/factories/conta/cecred.rb +15 -0
- data/test/factories/conta/itau.rb +15 -0
- data/test/factories/conta/sicoob.rb +2 -1
- data/test/factories/conta/sicredi.rb +15 -0
- data/test/factories/conta/unicred.rb +15 -0
- data/test/factories/remessa/cnab240/bradesco.rb +9 -0
- data/test/factories/remessa/cnab240/cecred.rb +9 -0
- data/test/factories/remessa/cnab240/itau.rb +9 -0
- data/test/factories/remessa/cnab240/sicredi.rb +9 -0
- data/test/factories/remessa/cnab240/unicred.rb +9 -0
- data/test/factories/remessa/cnab400/bradesco.rb +8 -0
- data/test/factories/remessa/cnab400/itau.rb +8 -0
- data/test/factories/remessa/cnab400/sicredi.rb +8 -0
- data/test/factories/remessa/cnab400/unicred.rb +8 -0
- data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
- data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
- data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
- data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
- data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
- data/test/fixtures/retorno/cnab400/itau.ret +54 -0
- metadata +138 -3
data/lib/br_boleto/conta/base.rb
CHANGED
@@ -45,6 +45,12 @@ module BrBoleto
|
|
45
45
|
#
|
46
46
|
attr_accessor :carteira
|
47
47
|
|
48
|
+
# Cógigo da carteira / Tipo de Cobrança
|
49
|
+
# Código adotado pela FEBRABAN, para identificar a característica dos títulos dentro das modalidades
|
50
|
+
# de cobrança existentes no banco
|
51
|
+
#
|
52
|
+
attr_accessor :codigo_carteira
|
53
|
+
|
48
54
|
# Modalidade da carteira
|
49
55
|
# Alguns bancos utilizam campos separados para definir a modalidade e a carteira
|
50
56
|
# porém normalmente é utilizado a nomenclatura "MODALIDADE DA CARTEIRA". Quando utilizado essa
|
@@ -61,6 +67,8 @@ module BrBoleto
|
|
61
67
|
# Por isso foi criado um alias para que cada um utilize a nomenclatura que preferir.
|
62
68
|
attr_accessor :convenio
|
63
69
|
attr_accessor :convenio_dv
|
70
|
+
|
71
|
+
alias_attribute :codigo_empresa, :convenio
|
64
72
|
alias_attribute :codigo_cedente, :convenio
|
65
73
|
alias_attribute :codigo_cedente_dv, :convenio_dv
|
66
74
|
alias_attribute :codigo_beneficiario, :convenio
|
@@ -116,7 +124,13 @@ module BrBoleto
|
|
116
124
|
validates :carteira, custom_length: {maximum: :valid_carteira_maximum}, if: :valid_carteira_maximum
|
117
125
|
validates :carteira, presence: true, if: :valid_carteira_required
|
118
126
|
validates :carteira, custom_inclusion: {in: :valid_carteira_inclusion}, if: :valid_carteira_inclusion
|
119
|
-
|
127
|
+
|
128
|
+
# => COD. CARTEIRA / TIPO DE COBRANÇA
|
129
|
+
attr_accessor :valid_codigo_carteira_length
|
130
|
+
attr_accessor :valid_codigo_carteira_required
|
131
|
+
validates :codigo_carteira, custom_length: {is: :valid_codigo_carteira_length}, if: :valid_codigo_carteira_length
|
132
|
+
validates :codigo_carteira, presence: true, if: :valid_codigo_carteira_required
|
133
|
+
|
120
134
|
# => CONTA CORRENTE
|
121
135
|
attr_accessor :valid_conta_corrente_length
|
122
136
|
attr_accessor :valid_conta_corrente_minimum
|
@@ -231,9 +245,20 @@ module BrBoleto
|
|
231
245
|
# Agência, código do cedente ou nosso número.
|
232
246
|
# <b>Esse campo é específico para cada banco</b>.
|
233
247
|
#
|
234
|
-
# @return [String] - Corresponde aos campos "Agencia / Codigo do Cedente".
|
248
|
+
# @return [String] - Corresponde aos campos "Agencia / Codigo do Cedente-Digito Verificador".
|
235
249
|
def agencia_codigo_cedente
|
236
|
-
"#{agencia} / #{codigo_cedente}"
|
250
|
+
"#{agencia} / #{codigo_cedente}-#{codigo_cedente_dv}"
|
251
|
+
end
|
252
|
+
|
253
|
+
# Código da Carteira ou Tipo de Cobrança
|
254
|
+
# Código adotado pela FEBRABAN, para identificar a característica dos títulos dentro das
|
255
|
+
# modalidades de cobrança existentes no banco
|
256
|
+
def tipo_cobranca
|
257
|
+
if codigo_carteira.present?
|
258
|
+
codigo_carteira
|
259
|
+
elsif carteira.present?
|
260
|
+
carteira.first
|
261
|
+
end
|
237
262
|
end
|
238
263
|
|
239
264
|
# Embora o padrão seja mostrar o número da carteira no boleto,
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module BrBoleto
|
3
|
+
module Conta
|
4
|
+
class Bradesco < BrBoleto::Conta::Base
|
5
|
+
|
6
|
+
# MODALIDADE CARTEIRA:
|
7
|
+
# _______________________________________________
|
8
|
+
# | Carteira | Descrição |
|
9
|
+
# | 06 | Sem registro |
|
10
|
+
# | 09 | Com registro |
|
11
|
+
# | 19 | Com registro |
|
12
|
+
# | 21 | Cobrança Interna Com Registro |
|
13
|
+
# | 22 | Cobrança Interna Sem Registro |
|
14
|
+
# ------------------------------------------------
|
15
|
+
|
16
|
+
|
17
|
+
def default_values
|
18
|
+
super.merge({
|
19
|
+
carteira: '06',
|
20
|
+
valid_carteira_required: true, # <- Validação dinâmica que a modalidade é obrigatória
|
21
|
+
valid_carteira_length: 2, # <- Validação dinâmica que a modalidade deve ter 2 digitos
|
22
|
+
valid_carteira_inclusion: %w[06 09 19 21 22], # <- Validação dinâmica de valores aceitos para a modalidade
|
23
|
+
codigo_carteira: '1', # Cobrança Simples
|
24
|
+
valid_codigo_carteira_length: 1, # <- Validação dinâmica que a modalidade deve ter 1 digito
|
25
|
+
valid_conta_corrente_required: true, # <- Validação dinâmica que a conta_corrente é obrigatória
|
26
|
+
valid_conta_corrente_maximum: 7, # <- Validação que a conta_corrente deve ter no máximo 7 digitos
|
27
|
+
valid_convenio_required: true, # <- Validação que a convenio deve ter obrigatório
|
28
|
+
valid_convenio_maximum: 7, # <- Validação que a convenio deve ter no máximo 7 digitos
|
29
|
+
})
|
30
|
+
end
|
31
|
+
|
32
|
+
def codigo_banco
|
33
|
+
'237'
|
34
|
+
end
|
35
|
+
|
36
|
+
# Dígito do código do banco descrito na documentação
|
37
|
+
def codigo_banco_dv
|
38
|
+
'2'
|
39
|
+
end
|
40
|
+
|
41
|
+
def nome_banco
|
42
|
+
@nome_banco ||= 'BRADESCO'
|
43
|
+
end
|
44
|
+
|
45
|
+
def versao_layout_arquivo_cnab_240
|
46
|
+
'084'
|
47
|
+
end
|
48
|
+
|
49
|
+
def versao_layout_lote_cnab_240
|
50
|
+
'042'
|
51
|
+
end
|
52
|
+
|
53
|
+
def agencia_dv
|
54
|
+
# utilizando a agencia com 4 digitos
|
55
|
+
# para calcular o digito
|
56
|
+
@agencia_dv ||= BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.new(agencia).to_s
|
57
|
+
end
|
58
|
+
|
59
|
+
def conta_corrente_dv
|
60
|
+
@conta_corrente_dv ||= BrBoleto::Calculos::Modulo11FatorDe2a7.new(conta_corrente).to_s
|
61
|
+
end
|
62
|
+
|
63
|
+
# Campo Agência / Código do Cedente
|
64
|
+
# @return [String] Agência com 4 caracteres - digito da agência / Conta de Cobrança com 7 caracteres - Digito da Conta
|
65
|
+
# Exemplo: 9999-D / 9999999-D
|
66
|
+
def agencia_codigo_cedente
|
67
|
+
"#{agencia}-#{agencia_dv} / #{conta_corrente}-#{conta_corrente_dv}"
|
68
|
+
end
|
69
|
+
|
70
|
+
# Número da Carteira de Cobrança, que a empresa opera no Banco.
|
71
|
+
# 21 – Cobrança Interna Com Registro
|
72
|
+
# 22 – Cobrança Interna sem registro
|
73
|
+
# Para as demais carteiras, retornar o número da carteira.
|
74
|
+
def carteira_formatada
|
75
|
+
if cobranca_interna_formatada.present?
|
76
|
+
cobranca_interna_formatada
|
77
|
+
else
|
78
|
+
carteira
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Retorna a mensagem que devera aparecer no campo carteira para cobranca interna.
|
83
|
+
# @return [String]
|
84
|
+
def cobranca_interna_formatada
|
85
|
+
cobranca_interna = { '21' => '21 – Cobrança Interna Com Registro', '22' => '22 – Cobrança Interna sem registro' }
|
86
|
+
cobranca_interna[carteira.to_s]
|
87
|
+
end
|
88
|
+
|
89
|
+
# Espécie do Título
|
90
|
+
def equivalent_especie_titulo_400
|
91
|
+
super.merge(
|
92
|
+
# Padrão Código para
|
93
|
+
{# da GEM o Banco
|
94
|
+
'07' => '10' , # Letra de Câmbio
|
95
|
+
'17' => '05' , # Recibo
|
96
|
+
'19' => '11' , # Nota de Débito
|
97
|
+
'32' => '30' , # Boleto de Proposta
|
98
|
+
})
|
99
|
+
end
|
100
|
+
|
101
|
+
# Códigos de Movimento Remessa / Identificacao Ocorrência específicos do Banco
|
102
|
+
def equivalent_codigo_movimento_remessa_400
|
103
|
+
super.merge(
|
104
|
+
# Padrão Código para
|
105
|
+
{# da GEM o Banco
|
106
|
+
'10' => '18' , # Sustar protesto e baixar Título
|
107
|
+
'11' => '19' , # Sustar protesto e manter em carteira
|
108
|
+
'31' => '22' , # Transferência Cessão Crédito
|
109
|
+
'33' => '68' , # Acerto nos dados do rateio de Crédito
|
110
|
+
'43' => '23' , # Transferência entre Carteiras
|
111
|
+
'45' => '45' , # Pedido de Negativação
|
112
|
+
'46' => '46' , # Excluir Negativação com baixa
|
113
|
+
'47' => '47' , # Excluir negativação e manter pendente
|
114
|
+
'34' => '69' , # Cancelamento do rateio de crédito.
|
115
|
+
})
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -4,10 +4,13 @@ module BrBoleto
|
|
4
4
|
class Caixa < BrBoleto::Conta::Base
|
5
5
|
|
6
6
|
# MODALIDADE CARTEIRA
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
7
|
+
# Opcoes:
|
8
|
+
# 14: Cobrança Simples com registro
|
9
|
+
# 24: Cobrança Simples sem registro
|
10
|
+
#
|
11
|
+
# Carteira/Modalidade:
|
12
|
+
# 1/4 = Registrada / Emissão do boleto(4-Beneficiário)
|
13
|
+
# 2/4 = Sem Registro / Emissão do boleto(4-Beneficiário)
|
11
14
|
|
12
15
|
# versão do aplicativo da caixa
|
13
16
|
attr_accessor :versao_aplicativo
|
@@ -22,13 +25,15 @@ module BrBoleto
|
|
22
25
|
|
23
26
|
def default_values
|
24
27
|
super.merge({
|
25
|
-
carteira:
|
26
|
-
valid_carteira_required:
|
27
|
-
valid_carteira_length:
|
28
|
-
valid_carteira_inclusion:
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
carteira: '14', # Com registro
|
29
|
+
valid_carteira_required: true, # <- Validação dinâmica que a carteira é obrigatória
|
30
|
+
valid_carteira_length: 2, # <- Validação dinâmica que a carteira deve ter 2 digitos
|
31
|
+
valid_carteira_inclusion: %w[14 24], # <- Validação dinâmica de valores aceitos para a modalidade
|
32
|
+
codigo_carteira: '1', # Cobrança Simples
|
33
|
+
valid_codigo_carteira_length: 1, # <- Validação dinâmica que a carteira deve ter 1 digito
|
34
|
+
valid_convenio_required: true, # <- Validação que a convenio deve ter obrigatório
|
35
|
+
valid_convenio_maximum: 6, # <- Validação que a convenio deve ter no máximo 6 digitos
|
36
|
+
versao_aplicativo: '0',
|
32
37
|
})
|
33
38
|
end
|
34
39
|
|
@@ -71,7 +76,7 @@ module BrBoleto
|
|
71
76
|
"#{@versao_aplicativo}".rjust(4, '0') if @versao_aplicativo.present?
|
72
77
|
end
|
73
78
|
|
74
|
-
# Formata a carteira dependendo se ela é registrada ou não.
|
79
|
+
# Formata a carteira da carteira dependendo se ela é registrada ou não.
|
75
80
|
#
|
76
81
|
# Para cobrança COM registro usar: <b>RG</b>
|
77
82
|
# Para Cobrança SEM registro usar: <b>SR</b>
|
@@ -104,6 +109,11 @@ module BrBoleto
|
|
104
109
|
"#{agencia} / #{codigo_cedente}-#{codigo_cedente_dv}"
|
105
110
|
end
|
106
111
|
|
112
|
+
# Identificação da Distribuição exclusiva da CAIXA
|
113
|
+
def equivalent_distribuicao_boleto
|
114
|
+
super.merge({'0' => '0' }) # 0 = Postagem pelo Beneficiário
|
115
|
+
end
|
116
|
+
|
107
117
|
end
|
108
118
|
end
|
109
119
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module BrBoleto
|
3
|
+
module Conta
|
4
|
+
class Cecred < BrBoleto::Conta::Base
|
5
|
+
|
6
|
+
# MODALIDADE CARTEIRA:
|
7
|
+
# _________________________________________________________
|
8
|
+
# | Carteira | Descrição |
|
9
|
+
# | 1 | Com Cadastramento (Cobrança Registrada) |
|
10
|
+
# ---------------------------------------------------------
|
11
|
+
|
12
|
+
def default_values
|
13
|
+
super.merge({
|
14
|
+
carteira: '1',
|
15
|
+
valid_carteira_required: true, # <- Validação dinâmica que a modalidade é obrigatória
|
16
|
+
valid_carteira_length: 1, # <- Validação dinâmica que a modalidade deve ter 2 digitos
|
17
|
+
valid_carteira_inclusion: %w[1], # <- Validação dinâmica de valores aceitos para a modalidade
|
18
|
+
codigo_carteira: '1', # Cobrança Simples
|
19
|
+
valid_codigo_carteira_length: 1, # <- Validação dinâmica que a modalidade deve ter 1 digito
|
20
|
+
valid_conta_corrente_required: true, # <- Validação dinâmica que a conta_corrente é obrigatória
|
21
|
+
valid_conta_corrente_maximum: 7, # <- Validação que a conta_corrente deve ter no máximo 7 digitos
|
22
|
+
valid_convenio_required: true, # <- Validação que a convenio deve ter obrigatório
|
23
|
+
valid_convenio_maximum: 6, # <- Validação que a convenio deve ter no máximo 7 digitos
|
24
|
+
})
|
25
|
+
end
|
26
|
+
|
27
|
+
def codigo_banco
|
28
|
+
'085'
|
29
|
+
end
|
30
|
+
|
31
|
+
# Dígito do código do banco descrito na documentação
|
32
|
+
def codigo_banco_dv
|
33
|
+
'1'
|
34
|
+
end
|
35
|
+
|
36
|
+
def nome_banco
|
37
|
+
@nome_banco ||= 'CECRED'
|
38
|
+
end
|
39
|
+
|
40
|
+
def versao_layout_arquivo_cnab_240
|
41
|
+
'087'
|
42
|
+
end
|
43
|
+
|
44
|
+
def versao_layout_lote_cnab_240
|
45
|
+
'045'
|
46
|
+
end
|
47
|
+
|
48
|
+
def agencia_dv
|
49
|
+
# utilizando a agencia com 4 digitos
|
50
|
+
# para calcular o digito
|
51
|
+
@agencia_dv ||= BrBoleto::Calculos::Modulo11FatorDe2a9.new(agencia).to_s
|
52
|
+
end
|
53
|
+
|
54
|
+
def conta_corrente_dv
|
55
|
+
@conta_corrente_dv ||= BrBoleto::Calculos::Modulo11FatorDe2a9.new(conta_corrente).to_s
|
56
|
+
end
|
57
|
+
|
58
|
+
# Campo Agência / Código do Cedente
|
59
|
+
# @return [String] Agência com 4 caracteres - digito da agência / Conta de Cobrança com 7 caracteres - Digito da Conta
|
60
|
+
# Exemplo: 9999-D / 9999999-D
|
61
|
+
def agencia_codigo_cedente
|
62
|
+
"#{agencia}-#{agencia_dv} / #{conta_corrente}-#{conta_corrente_dv}"
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,199 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module BrBoleto
|
3
|
+
module Conta
|
4
|
+
class Itau < BrBoleto::Conta::Base
|
5
|
+
|
6
|
+
# MODALIDADE CARTEIRA:
|
7
|
+
# _______________________________________________________________________
|
8
|
+
# | Carteira | Descrição |
|
9
|
+
# | 104 | Escritural Eletrônica - Carnê |
|
10
|
+
# | 105 | Escritural Eletrônica - Dólar - Carnê |
|
11
|
+
# | 107 | Sem registro com emissão integral - 15 posições |
|
12
|
+
# | 108 | Direta eletrônica emissão integral – carnê |
|
13
|
+
# | 109 | Direta eletrônica sem emissão - simples |
|
14
|
+
# | 112 | Escritural eletrônica - simples/contratual |
|
15
|
+
# | 113 | Escritural Eletrônica - TR - Carnê |
|
16
|
+
# | 116 | Escritural Carnê com IOF 0,38% |
|
17
|
+
# | 117 | Escritural Carnê com IOF 2,38% |
|
18
|
+
# | 119 | Escritural Carnê com IOF 7,38% |
|
19
|
+
# | 121 | Direta eletrônica emissão parcial - simples/contratual |
|
20
|
+
# | 122 | Sem registro - 15 posições |
|
21
|
+
# | 126 | Direta Eletrônica Sem Emissão - Seguros |
|
22
|
+
# | 131 | Direta Eletrônica com Valor em Aberto |
|
23
|
+
# | 134 | Escritural com IOF 0,38% |
|
24
|
+
# | 135 | Escritural com IOF 2,38% |
|
25
|
+
# | 136 | Escritural com IOF 7,38% |
|
26
|
+
# | 142 | Sem registro - 15 posições |
|
27
|
+
# | 143 | Sem registro - 15 posições |
|
28
|
+
# | 146 | Direta eletrônica |
|
29
|
+
# | 147 | Escritural eletrônica – Dolar |
|
30
|
+
# | 150 | Direta eletrônica sem emissão - Dolar |
|
31
|
+
# | 168 | Direta eletrônica sem emissão - TR |
|
32
|
+
# | 169 | Sem registro emissão Parcial Seguros C/IOF 7% |
|
33
|
+
# | 174 | Sem registro emissão parcial com protesto borderô |
|
34
|
+
# | 175 | Sem registro sem emissão com protesto eletrônico |
|
35
|
+
# | 180 | Direta Eletrônica emissão integral - simples/contratual |
|
36
|
+
# | 191 | Duplicatas - Transferência de Desconto |
|
37
|
+
# | 196 | Sem registro com emissão e entrega – 15 posições |
|
38
|
+
# | 198 | Sem registro sem emissão 15 dígitos |
|
39
|
+
# ------------------------------------------------------------------------
|
40
|
+
|
41
|
+
def default_values
|
42
|
+
super.merge({
|
43
|
+
carteira: '109',
|
44
|
+
valid_carteira_required: true, # <- Validação dinâmica que a modalidade é obrigatória
|
45
|
+
valid_carteira_length: 3, # <- Validação dinâmica que a modalidade deve ter 2 digitos
|
46
|
+
valid_carteira_inclusion: carteiras_suportadas, # <- Validação dinâmica de valores aceitos para a modalidade
|
47
|
+
codigo_carteira: '1', # Cobrança Simples
|
48
|
+
valid_codigo_carteira_length: 1, # <- Validação dinâmica que a modalidade deve ter 1 digito
|
49
|
+
valid_conta_corrente_required: true, # <- Validação dinâmica que a conta_corrente é obrigatória
|
50
|
+
valid_conta_corrente_maximum: 5, # <- Validação que a conta_corrente deve ter no máximo 7 digitos
|
51
|
+
valid_convenio_required: true, # <- Validação que a convenio deve ter obrigatório
|
52
|
+
valid_convenio_maximum: 5, # <- Validação que a convenio deve ter no máximo 7 digitos
|
53
|
+
})
|
54
|
+
end
|
55
|
+
|
56
|
+
def codigo_banco
|
57
|
+
'341'
|
58
|
+
end
|
59
|
+
|
60
|
+
# Dígito do código do banco descrito na documentação
|
61
|
+
def codigo_banco_dv
|
62
|
+
'7'
|
63
|
+
end
|
64
|
+
|
65
|
+
def nome_banco
|
66
|
+
@nome_banco ||= 'ITAU'
|
67
|
+
end
|
68
|
+
|
69
|
+
def versao_layout_arquivo_cnab_240
|
70
|
+
'040'
|
71
|
+
end
|
72
|
+
|
73
|
+
def versao_layout_lote_cnab_240
|
74
|
+
'030'
|
75
|
+
end
|
76
|
+
|
77
|
+
def agencia_dv
|
78
|
+
@agencia_dv ||= BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.new(agencia).to_s
|
79
|
+
end
|
80
|
+
|
81
|
+
# Dígito da conta corrente calculado apartir do Modulo10.
|
82
|
+
def conta_corrente_dv
|
83
|
+
@conta_corrente_dv ||= BrBoleto::Calculos::Modulo10.new("#{agencia}#{conta_corrente}").to_s
|
84
|
+
end
|
85
|
+
|
86
|
+
# Campo Agência / Código do Cedente
|
87
|
+
# @return [String] Agência com 4 caracteres / Conta de Cobrança com 5 caracteres - Digito da Conta
|
88
|
+
# Exemplo: 9999 / 99999-D
|
89
|
+
def agencia_codigo_cedente
|
90
|
+
"#{agencia} / #{conta_corrente}-#{conta_corrente_dv}"
|
91
|
+
end
|
92
|
+
|
93
|
+
# Carteiras suportadas
|
94
|
+
def carteiras_suportadas
|
95
|
+
%w[104 105 107 108 109 112 113 116 117 119 121 122 126 131 134 135 136 142 143 146 147 150 168 169 174 175 180 191 196 198]
|
96
|
+
end
|
97
|
+
|
98
|
+
# As carteiras de cobrança 107, 122, 142, 143, 196 e 198 são carteiras especiais,
|
99
|
+
# na qual são utilizadas 15 posições numéricas para identificação do título
|
100
|
+
# liquidado (8 do Nosso Número e 7 do Seu Número).
|
101
|
+
def carteiras_especiais_codigo_barras
|
102
|
+
%w(107 122 142 143 196 198)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Carteiras que devem ser calculadas o módulo 10 usando carteira e número do documento.
|
106
|
+
def carteiras_especiais_nosso_numero_dv
|
107
|
+
%w(126 131 146 150 168)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Espécie do Título
|
111
|
+
def equivalent_especie_titulo_240
|
112
|
+
super.merge(
|
113
|
+
# Padrão Código para
|
114
|
+
{# da GEM o Banco
|
115
|
+
'02' => '01' , # DUPLICATA MERCANTIL
|
116
|
+
'12' => '02' , # NOTA PROMISSÓRIA
|
117
|
+
'16' => '03' , # NOTA DE SEGURO
|
118
|
+
'21' => '04' , # MENSALIDADE ESCOLAR
|
119
|
+
'17' => '05' , # RECIBO
|
120
|
+
'66' => '06' , # CONTRATO
|
121
|
+
'77' => '07' , # COSSEGUROS
|
122
|
+
'04' => '08' , # DUPLICATA DE SERVIÇO
|
123
|
+
'07' => '09' , # LETRA DE CÂMBIO
|
124
|
+
'19' => '13' , # NOTA DE DÉBITOS
|
125
|
+
'24' => '15' , # DOCUMENTO DE DÍVIDA
|
126
|
+
'30' => '16' , # ENCARGOS CONDOMINIAIS
|
127
|
+
'88' => '17' , # CONTA DE PRESTAÇÃO DE SERVIÇOS
|
128
|
+
'32' => '18' , # BOLETO DE PROPOSTA
|
129
|
+
})
|
130
|
+
end
|
131
|
+
def equivalent_especie_titulo_400
|
132
|
+
super.merge(
|
133
|
+
# Padrão Código para
|
134
|
+
{# da GEM o Banco
|
135
|
+
'02' => '01' , # DUPLICATA MERCANTIL
|
136
|
+
'12' => '02' , # NOTA PROMISSÓRIA
|
137
|
+
'16' => '03' , # NOTA DE SEGURO
|
138
|
+
'21' => '04' , # MENSALIDADE ESCOLAR
|
139
|
+
'17' => '05' , # RECIBO
|
140
|
+
'66' => '06' , # CONTRATO
|
141
|
+
'77' => '07' , # COSSEGUROS
|
142
|
+
'04' => '08' , # DUPLICATA DE SERVIÇO
|
143
|
+
'07' => '09' , # LETRA DE CÂMBIO
|
144
|
+
'19' => '13' , # NOTA DE DÉBITOS
|
145
|
+
'24' => '15' , # DOCUMENTO DE DÍVIDA
|
146
|
+
'30' => '16' , # ENCARGOS CONDOMINIAIS
|
147
|
+
'88' => '17' , # CONTA DE PRESTAÇÃO DE SERVIÇOS
|
148
|
+
'32' => '18' , # BOLETO DE PROPOSTA
|
149
|
+
})
|
150
|
+
end
|
151
|
+
|
152
|
+
# Códigos de Movimento Remessa / Identificacao Ocorrência específicos do Banco
|
153
|
+
def equivalent_codigo_movimento_remessa_240
|
154
|
+
super.merge(
|
155
|
+
# Padrão Código para
|
156
|
+
{# da GEM o Banco
|
157
|
+
'10' => '18' , # SUSTAR O PROTESTO
|
158
|
+
'38' => '38' , # BENEFICIÁRIO NÃO CONCORDA COM A ALEGAÇÃO DO PAGADOR CÓDIGO DA ALEGAÇÃO
|
159
|
+
'41' => '41' , # EXCLUSÃO DE SACADOR AVALISTA
|
160
|
+
'66' => '66' , # ENTRADA EM NEGATIVAÇÃO EXPRESSA
|
161
|
+
'67' => '67' , # NÃO NEGATIVAR (INIBE ENTRADA EM NEGATIVAÇÃO EXPRESSA
|
162
|
+
'68' => '68' , # EXCLUIR NEGATIVAÇÃO EXPRESSA (ATÉ 15 DIAS CORRIDOS APÓS A ENTRADA EM NEGATIVAÇÃO EXPRESSA)
|
163
|
+
'69' => '69' , # CANCELAR NEGATIVAÇÃO EXPRESSA (APÓS TÍTULO TER SIDO NEGATIVADO)
|
164
|
+
'93' => '93' , # DESCONTAR TÍTULOS ENCAMINHADOS NO DIA
|
165
|
+
})
|
166
|
+
end
|
167
|
+
|
168
|
+
# Código para Protesto
|
169
|
+
def equivalent_codigo_protesto
|
170
|
+
super.merge(
|
171
|
+
# Padrão Código para
|
172
|
+
{# da GEM o Banco
|
173
|
+
'0' => '0' , # Sem instrução
|
174
|
+
'07' => '07' , # Negativar (Dias Corridos)
|
175
|
+
})
|
176
|
+
end
|
177
|
+
|
178
|
+
# Código para Multa
|
179
|
+
def equivalent_codigo_multa
|
180
|
+
super.merge({ '0' => '0' }) # NÃO REGISTRA A MULTA
|
181
|
+
end
|
182
|
+
|
183
|
+
# Codigo da carteira de acordo com a documentacao o Itau (Pag. 18, Nota 5)
|
184
|
+
# se a carteira nao forem as testadas (147, 150 e 191 )
|
185
|
+
# retorna 'I' que é o codigo das carteiras restantes na documentacao
|
186
|
+
def get_codigo_carteira
|
187
|
+
equivalent_codigo_carteira[carteira] || 'I'
|
188
|
+
end
|
189
|
+
def equivalent_codigo_carteira
|
190
|
+
{
|
191
|
+
'147' => 'E', # ESCRITURAL ELETRÔNICA – DÓLAR
|
192
|
+
'150' => 'U', # DIRETA ELETRÔNICA SEM EMISSÃO – DÓLAR
|
193
|
+
'191' => '1', # DUPLICATAS - TRANSFERÊNCIA DE DESCONTO
|
194
|
+
}
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
@@ -13,17 +13,19 @@ module BrBoleto
|
|
13
13
|
|
14
14
|
def default_values
|
15
15
|
super.merge({
|
16
|
-
carteira:
|
17
|
-
modalidade:
|
18
|
-
valid_modalidade_required: true,
|
19
|
-
valid_modalidade_length: 2,
|
20
|
-
valid_modalidade_inclusion: %w[01 02 03]
|
21
|
-
valid_carteira_required: true,
|
22
|
-
valid_carteira_length: 1,
|
23
|
-
valid_carteira_inclusion: %w[1 3],
|
24
|
-
|
25
|
-
|
26
|
-
|
16
|
+
carteira: '1', # Simples
|
17
|
+
modalidade: '01', # Com registro
|
18
|
+
valid_modalidade_required: true, # <- Validação dinâmica que a modalidade é obrigatória
|
19
|
+
valid_modalidade_length: 2, # <- Validação dinâmica que a modalidade deve ter 2 digitos
|
20
|
+
valid_modalidade_inclusion: %w[01 02 03],# <- Validação dinâmica de valores aceitos para a modalidade
|
21
|
+
valid_carteira_required: true, # <- Validação dinâmica que a carteira é obrigatória
|
22
|
+
valid_carteira_length: 1, # <- Validação dinâmica que a carteira deve ter 1 digito
|
23
|
+
valid_carteira_inclusion: %w[1 3], # <- Validação dinâmica de valores aceitos para a carteira
|
24
|
+
codigo_carteira: '1', # Cobrança Simples
|
25
|
+
valid_codigo_carteira_length: 1, # <- Validação dinâmica que a carteira deve ter 1 digito
|
26
|
+
valid_conta_corrente_required: true, # <- Validação dinâmica que a conta_corrente é obrigatória
|
27
|
+
valid_conta_corrente_maximum: 8, # <- Validação que a conta_corrente deve ter no máximo 8 digitos
|
28
|
+
valid_codigo_cedente_maximum: 6, # <- Validação que a codigo_cedente/convênio deve ter no máximo 7 digitos
|
27
29
|
})
|
28
30
|
end
|
29
31
|
|
@@ -59,6 +61,33 @@ module BrBoleto
|
|
59
61
|
# para calcular o digito
|
60
62
|
@conta_corrente_dv ||= BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.new(conta_corrente).to_s
|
61
63
|
end
|
64
|
+
|
65
|
+
# Códigos de Movimento Remessa / Identificacao Ocorrência específicos do Banco
|
66
|
+
def equivalent_codigo_movimento_remessa_400
|
67
|
+
super.merge(
|
68
|
+
{
|
69
|
+
'23' => '12', # Alteração de Pagador
|
70
|
+
'46' => '34', # Baixa - Pagamento Direto ao Beneficiário
|
71
|
+
})
|
72
|
+
end
|
73
|
+
|
74
|
+
# Código que representa a isenção de juros e multa deve ser '0'
|
75
|
+
# Diferentemente do padrão da FEBRABAN que é '3'
|
76
|
+
# Ou seja, se passar o código 3 deve considerar '0'
|
77
|
+
#
|
78
|
+
def equivalent_codigo_juros
|
79
|
+
super.merge({'3' => '0', '0'=>'0'})
|
80
|
+
end
|
81
|
+
def equivalent_codigo_multa
|
82
|
+
super.merge({'3' => '0', '0'=>'0'})
|
83
|
+
end
|
84
|
+
|
85
|
+
def default_codigo_juros
|
86
|
+
'0'
|
87
|
+
end
|
88
|
+
def default_codigo_multa
|
89
|
+
'0'
|
90
|
+
end
|
62
91
|
end
|
63
92
|
end
|
64
93
|
end
|