br_boleto 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +1 -1
  4. data/Gemfile.lock +2 -2
  5. data/br_boleto.gemspec +2 -3
  6. data/lib/br_boleto/association/have_conta.rb +27 -25
  7. data/lib/br_boleto/association/have_pagador.rb +2 -0
  8. data/lib/br_boleto/boleto/base.rb +0 -4
  9. data/lib/br_boleto/boleto/bradesco.rb +80 -0
  10. data/lib/br_boleto/boleto/caixa.rb +10 -12
  11. data/lib/br_boleto/boleto/cecred.rb +76 -0
  12. data/lib/br_boleto/boleto/itau.rb +114 -0
  13. data/lib/br_boleto/boleto/sicredi.rb +101 -0
  14. data/lib/br_boleto/boleto/unicred.rb +21 -0
  15. data/lib/br_boleto/conta/base.rb +28 -3
  16. data/lib/br_boleto/conta/bradesco.rb +120 -0
  17. data/lib/br_boleto/conta/caixa.rb +22 -12
  18. data/lib/br_boleto/conta/cecred.rb +67 -0
  19. data/lib/br_boleto/conta/itau.rb +199 -0
  20. data/lib/br_boleto/conta/sicoob.rb +40 -11
  21. data/lib/br_boleto/conta/sicredi.rb +171 -0
  22. data/lib/br_boleto/conta/unicred.rb +38 -0
  23. data/lib/br_boleto/helper/default_codes.rb +535 -26
  24. data/lib/br_boleto/pagador.rb +4 -0
  25. data/lib/br_boleto/remessa/base.rb +2 -0
  26. data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
  27. data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
  28. data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
  29. data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
  30. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
  31. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
  32. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
  33. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
  34. data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
  35. data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
  36. data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
  37. data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
  38. data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
  39. data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
  40. data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
  41. data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
  42. data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
  43. data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
  44. data/lib/br_boleto/remessa/pagamento.rb +93 -43
  45. data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
  46. data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
  47. data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
  48. data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
  49. data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
  50. data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
  51. data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
  52. data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
  53. data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
  54. data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
  55. data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
  56. data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
  57. data/lib/br_boleto/retorno/pagamento.rb +18 -4
  58. data/lib/br_boleto/version.rb +2 -2
  59. data/lib/br_boleto.rb +28 -0
  60. data/lib/config/locales/br-boleto-en.yml +1 -0
  61. data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
  62. data/test/br_boleto/association/have_pagador_test.rb +24 -0
  63. data/test/br_boleto/boleto/bradesco_test.rb +125 -0
  64. data/test/br_boleto/boleto/caixa_test.rb +18 -18
  65. data/test/br_boleto/boleto/cecred_test.rb +115 -0
  66. data/test/br_boleto/boleto/itau_test.rb +160 -0
  67. data/test/br_boleto/boleto/sicredi_test.rb +136 -0
  68. data/test/br_boleto/boleto/unicred_test.rb +128 -0
  69. data/test/br_boleto/conta/base_test.rb +298 -3
  70. data/test/br_boleto/conta/bradesco_test.rb +142 -0
  71. data/test/br_boleto/conta/caixa_test.rb +7 -6
  72. data/test/br_boleto/conta/cecred_test.rb +119 -0
  73. data/test/br_boleto/conta/itau_test.rb +189 -0
  74. data/test/br_boleto/conta/sicoob_test.rb +32 -2
  75. data/test/br_boleto/conta/sicredi_test.rb +180 -0
  76. data/test/br_boleto/conta/unicred_test.rb +154 -0
  77. data/test/br_boleto/pagador_test.rb +22 -2
  78. data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
  79. data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
  80. data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
  81. data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
  82. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
  83. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
  84. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
  85. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
  86. data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
  87. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
  88. data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
  89. data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
  90. data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
  91. data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
  92. data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
  93. data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
  94. data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
  95. data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
  96. data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
  97. data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
  98. data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
  99. data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
  100. data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
  101. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
  102. data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
  103. data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
  104. data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
  105. data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
  106. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
  107. data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
  108. data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
  109. data/test/br_boleto/retorno/pagamento_test.rb +7 -0
  110. data/test/factories/boleto/boleto_bradesco.rb +18 -0
  111. data/test/factories/boleto/boleto_cecred.rb +18 -0
  112. data/test/factories/boleto/boleto_itau.rb +18 -0
  113. data/test/factories/boleto/boleto_sicredi.rb +18 -0
  114. data/test/factories/boleto/boleto_unicred.rb +18 -0
  115. data/test/factories/conta/bradesco.rb +16 -0
  116. data/test/factories/conta/caixa.rb +2 -1
  117. data/test/factories/conta/cecred.rb +15 -0
  118. data/test/factories/conta/itau.rb +15 -0
  119. data/test/factories/conta/sicoob.rb +2 -1
  120. data/test/factories/conta/sicredi.rb +15 -0
  121. data/test/factories/conta/unicred.rb +15 -0
  122. data/test/factories/remessa/cnab240/bradesco.rb +9 -0
  123. data/test/factories/remessa/cnab240/cecred.rb +9 -0
  124. data/test/factories/remessa/cnab240/itau.rb +9 -0
  125. data/test/factories/remessa/cnab240/sicredi.rb +9 -0
  126. data/test/factories/remessa/cnab240/unicred.rb +9 -0
  127. data/test/factories/remessa/cnab400/bradesco.rb +8 -0
  128. data/test/factories/remessa/cnab400/itau.rb +8 -0
  129. data/test/factories/remessa/cnab400/sicredi.rb +8 -0
  130. data/test/factories/remessa/cnab400/unicred.rb +8 -0
  131. data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
  132. data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
  133. data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
  134. data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
  135. data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
  136. data/test/fixtures/retorno/cnab400/itau.ret +54 -0
  137. metadata +138 -3
@@ -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
- # opcoes:
8
- # 11: título Registrado emissão CAIXA
9
- # 14: título Registrado emissão Cedente
10
- # 21: título Sem Registro emissão CAIXA
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: '14', # Com registro
26
- valid_carteira_required: true, # <- Validação dinâmica que a modalidade é obrigatória
27
- valid_carteira_length: 2, # <- Validação dinâmica que a modalidade deve ter 2 digitos
28
- valid_carteira_inclusion: %w[11 14 21], # <- Validação dinâmica de valores aceitos para a modalidade
29
- valid_convenio_required: true, # <- Validação que a convenio deve ter obrigatório
30
- valid_convenio_maximum: 6, # <- Validação que a convenio deve ter no máximo 6 digitos
31
- versao_aplicativo: '0',
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: '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
- valid_conta_corrente_required: true, # <- Validação dinâmica que a conta_corrente é obrigatória
25
- valid_conta_corrente_maximum: 8, # <- Validação que a conta_corrente deve ter no máximo 8 digitos
26
- valid_codigo_cedente_maximum: 6, # <- Validação que a codigo_cedente/convênio deve ter no máximo 7 digitos
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