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.
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