br_boleto 2.1.0 → 2.2.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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.markdown +157 -8
  5. data/br_boleto.gemspec +1 -1
  6. data/lib/br_boleto.rb +12 -1
  7. data/lib/br_boleto/association/have_conta.rb +31 -27
  8. data/lib/br_boleto/boleto/banco_brasil.rb +130 -0
  9. data/lib/br_boleto/boleto/santander.rb +77 -0
  10. data/lib/br_boleto/conta/banco_brasil.rb +156 -0
  11. data/lib/br_boleto/conta/itau.rb +8 -3
  12. data/lib/br_boleto/conta/santander.rb +208 -0
  13. data/lib/br_boleto/remessa/cnab240/banco_brasil.rb +132 -0
  14. data/lib/br_boleto/remessa/cnab240/bradesco.rb +1 -3
  15. data/lib/br_boleto/remessa/cnab240/itau.rb +0 -6
  16. data/lib/br_boleto/remessa/cnab240/santander.rb +266 -0
  17. data/lib/br_boleto/remessa/cnab400/banco_brasil.rb +264 -0
  18. data/lib/br_boleto/remessa/cnab400/bradesco.rb +1 -1
  19. data/lib/br_boleto/remessa/cnab400/santander.rb +215 -0
  20. data/lib/br_boleto/retorno/cnab240/banco_brasil.rb +10 -0
  21. data/lib/br_boleto/retorno/cnab240/base.rb +3 -2
  22. data/lib/br_boleto/retorno/cnab240/caixa.rb +3 -2
  23. data/lib/br_boleto/retorno/cnab240/itau.rb +1 -2
  24. data/lib/br_boleto/retorno/cnab240/santander.rb +38 -0
  25. data/lib/br_boleto/retorno/cnab240/sicoob.rb +3 -2
  26. data/lib/br_boleto/retorno/cnab400/banco_brasil.rb +46 -0
  27. data/lib/br_boleto/retorno/cnab400/bradesco.rb +4 -3
  28. data/lib/br_boleto/retorno/cnab400/itau.rb +2 -2
  29. data/lib/br_boleto/retorno/cnab400/santander.rb +44 -0
  30. data/lib/br_boleto/retorno/cnab400/sicoob.rb +3 -2
  31. data/lib/br_boleto/retorno/cnab400/sicredi.rb +20 -6
  32. data/lib/br_boleto/retorno/pagamento.rb +28 -7
  33. data/lib/br_boleto/version.rb +1 -1
  34. data/test/br_boleto/boleto/banco_brasil_test.rb +183 -0
  35. data/test/br_boleto/boleto/santander_test.rb +122 -0
  36. data/test/br_boleto/conta/banco_brasil_test.rb +209 -0
  37. data/test/br_boleto/conta/santantader_test.rb +222 -0
  38. data/test/br_boleto/remessa/cnab240/banco_brasil_test.rb +187 -0
  39. data/test/br_boleto/remessa/cnab240/itau_test.rb +4 -0
  40. data/test/br_boleto/remessa/cnab240/santander_test.rb +144 -0
  41. data/test/br_boleto/remessa/cnab400/banco_brasil_test.rb +285 -0
  42. data/test/br_boleto/remessa/cnab400/bradesco_test.rb +7 -0
  43. data/test/br_boleto/remessa/cnab400/santander_test.rb +174 -0
  44. data/test/br_boleto/retorno/cnab240/banco_brasil_test.rb +271 -0
  45. data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
  46. data/test/br_boleto/retorno/cnab240/bradesco_test.rb +15 -15
  47. data/test/br_boleto/retorno/cnab240/caixa_test.rb +10 -10
  48. data/test/br_boleto/retorno/cnab240/cecred_test.rb +55 -138
  49. data/test/br_boleto/retorno/cnab240/itau_test.rb +15 -15
  50. data/test/br_boleto/retorno/cnab240/santander_test.rb +282 -0
  51. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +25 -15
  52. data/test/br_boleto/retorno/cnab240/sicredi_test.rb +15 -15
  53. data/test/br_boleto/retorno/cnab240/unicred_test.rb +15 -15
  54. data/test/br_boleto/retorno/cnab400/banco_brasil_test.rb +7 -0
  55. data/test/br_boleto/retorno/cnab400/bradesco_test.rb +24 -12
  56. data/test/br_boleto/retorno/cnab400/itau_test.rb +6 -4
  57. data/test/br_boleto/retorno/cnab400/santander_test.rb +7 -0
  58. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +20 -10
  59. data/test/br_boleto/retorno/cnab400/sicredi_test.rb +97 -1
  60. data/test/br_boleto/retorno/cnab400/unicred.rb +18 -18
  61. data/test/br_boleto/retorno/pagamento_test.rb +2 -2
  62. data/test/factories/boleto/boleto_banco_brasil.rb +18 -0
  63. data/test/factories/boleto/boleto_santander.rb +18 -0
  64. data/test/factories/conta/banco_brasil.rb +16 -0
  65. data/test/factories/conta/santander.rb +15 -0
  66. data/test/factories/remessa/cnab240/banco_brasil.rb +9 -0
  67. data/test/factories/remessa/cnab240/santander.rb +9 -0
  68. data/test/factories/remessa/cnab400/banco_brasil.rb +8 -0
  69. data/test/factories/remessa/cnab400/santander.rb +8 -0
  70. data/test/fixtures/retorno/cnab240/banco_brasil.ret +74 -0
  71. data/test/fixtures/retorno/cnab240/cecred.ret +10 -0
  72. data/test/fixtures/retorno/cnab240/santander.ret +16 -0
  73. data/test/fixtures/retorno/cnab400/sicredi.ret +4 -0
  74. metadata +64 -7
@@ -0,0 +1,132 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab240
5
+ class BancoBrasil < BrBoleto::Remessa::Cnab240::Base
6
+ def conta_class
7
+ BrBoleto::Conta::BancoBrasil
8
+ end
9
+
10
+ ########## VALIDAÇÕES ESPECÍFICAS DESTE OBJETO PARA A CONTA ############
11
+ def valid_variacao_carteira_required; true end # <= Variacao da carteira é obrigatória
12
+
13
+ ########################### HEADER ARQUIVO #############################
14
+ #
15
+ # Código do Convênio no Banco
16
+ # 20 posições
17
+ def header_arquivo_posicao_033_a_052
18
+ codigo_convenio
19
+ end
20
+
21
+ # DESCRIÇÃO TAMANHO POSIÇÃO
22
+ # ---------------------------------------------------------
23
+ # Cod. Convênio 09 33 - 41
24
+ # Cobrança Cedente 04 42 - 45
25
+ # Carteira 02 46 - 47
26
+ # Variacao carteira 03 48 - 50
27
+ # Brancos 02 51 - 52
28
+ def codigo_convenio
29
+ cod = "#{conta.convenio}".adjust_size_to(9, '0', :right)
30
+ cod << '0014'
31
+ cod << "#{conta.carteira}".adjust_size_to(2, '0', :right)
32
+ cod << "#{conta.variacao_carteira}".adjust_size_to(3, '0', :right)
33
+ cod << ''.adjust_size_to(2)
34
+ cod
35
+ end
36
+
37
+ # Informação da conta
38
+ # DESCRIÇÃO TAMANHO POSIÇÃO
39
+ # ---------------------------------------------------------
40
+ # agencia 05 54 - 58
41
+ # digito Verif. agencia 01 59 - 59
42
+ # Número da Conta Corrente 12 60 - 71
43
+ # DV da Conta 01 72 - 72
44
+ # DV da Ag/Conta 01 73 - 73
45
+ #
46
+ # TOTAL = 20 posições
47
+ def informacoes_da_conta
48
+ informacoes = "#{conta.agencia}".adjust_size_to(5, '0', :right)
49
+ informacoes << "#{conta.agencia_dv}"
50
+ informacoes << "#{conta.conta_corrente}".adjust_size_to(12, '0', :right)
51
+ informacoes << "#{conta.conta_corrente_dv}".adjust_size_to(2)
52
+ informacoes
53
+ end
54
+
55
+ # Posição 212 a 240 do Header do Arquivo
56
+ # Para o Banco do Brasil esse espaço deve ter 'Brancos'
57
+ # TOTAL = 29 posições
58
+ def complemento_header_arquivo
59
+ ''.adjust_size_to(29)
60
+ end
61
+
62
+ ########################### HEADER LOTE #############################
63
+ #
64
+ # Forma de Lançamento
65
+ # Informar 'brancos' (espaços)
66
+ # 2 posições
67
+ def header_lote_posicao_012_a_013
68
+ ''.adjust_size_to(2)
69
+ end
70
+
71
+ # DESCRIÇÃO TAMANHO POSIÇÃO
72
+ # ---------------------------------------------------------
73
+ # Cód. Cedente (convênio) 20 34-53
74
+ # TOTAL = 20 posições
75
+ def convenio_lote(lote)
76
+ codigo_convenio
77
+ end
78
+
79
+ ######################### SEGMENTO P #############################
80
+ #
81
+ # segmento_p_posicao_024_a_057
82
+ # DESCRIÇÃO TAMANHO POSIÇÃO
83
+ # ---------------------------------------------------------
84
+ # Número da Conta Corrente 12 24 - 35
85
+ # DV da Conta 01 36 - 36
86
+ # DV da Ag/Conta 01 37 - 37
87
+ # Nosso Número 20 38 - 57
88
+ #
89
+ # TOTAL = 34 posições
90
+ def complemento_p(pagamento)
91
+ complemento = ''
92
+ complemento << "#{conta.conta_corrente}".adjust_size_to(12, '0', :right)
93
+ complemento << "#{conta.conta_corrente_dv}".adjust_size_to(2)
94
+ complemento << "#{pagamento.nosso_numero}".adjust_size_to(20)
95
+ complemento
96
+ end
97
+
98
+ # segmento_p_posicao_063_a_077
99
+ # DESCRIÇÃO TAMANHO POSIÇÃO
100
+ # ---------------------------------------------------------
101
+ # Número Doc. 10 63 - 77
102
+ # TOTAL = 15 posições
103
+ def segmento_p_numero_do_documento(pagamento)
104
+ segmento = "#{pagamento.numero_documento}".adjust_size_to(15)
105
+ end
106
+
107
+ ######################### SEGMENTO S #############################
108
+
109
+ # Numero da Linha a ser impressa
110
+ # Campo não tratado pelo Banco do Brasil, informar 'zeros'.
111
+ def segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2(pagamento)
112
+ '00'
113
+ end
114
+
115
+ # Tipo de caractere a ser impresso
116
+ # Campo não tratado pelo Banco do Brasil, informar 'zeros'.
117
+ def segmento_s_posicao_161_a_162_tipo_impressao_1_ou_2(pagamento)
118
+ '00'
119
+ end
120
+
121
+ ######################### TRAILER LOTE #############################
122
+ #
123
+ # trailer_lote_posicao_024_a_240(lote, nr_lote)
124
+ # TOTAL = 217 posições
125
+ def complemento_trailer_lote(lote, nr_lote)
126
+ complemento = ''.rjust(217, ' ') # USO EXCLUSIVO FEBRABAN
127
+ end
128
+
129
+ end
130
+ end
131
+ end
132
+ end
@@ -104,9 +104,7 @@ module BrBoleto
104
104
  # Zeros 05 73 - 77
105
105
  # TOTAL = 15 posições
106
106
  def segmento_p_numero_do_documento(pagamento)
107
- segmento = ''
108
- segmento << "#{pagamento.numero_documento}".adjust_size_to(15, '0', :right)
109
- segmento
107
+ segmento = "#{pagamento.numero_documento}".adjust_size_to(15, '0', :right)
110
108
  end
111
109
 
112
110
  ######################### TRAILER LOTE #############################
@@ -151,12 +151,6 @@ module BrBoleto
151
151
  '00'
152
152
  end
153
153
 
154
- ######################### SEGMENTO R #############################
155
- # Codigo da multa
156
- def segmento_r_posicao_066_a_066(pagamento)
157
- "#{conta.get_codigo_multa('0')}".adjust_size_to(1, '0')
158
- end
159
-
160
154
  ######################### TRAILER LOTE #############################
161
155
  #
162
156
  # trailer_lote_posicao_024_a_240(lote, nr_lote)
@@ -0,0 +1,266 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab240
5
+ class Santander < BrBoleto::Remessa::Cnab240::Base
6
+ def conta_class
7
+ BrBoleto::Conta::Santander
8
+ end
9
+
10
+ ########################### HEADER ARQUIVO ##########################
11
+ #
12
+ # DESCRIÇÃO TAMANHO POSIÇÃO
13
+ # --------------------------------------------------
14
+ # Cód. de Transmissão 15 33-47
15
+ #
16
+ # TOTAL = 15 posições
17
+ def header_arquivo_posicao_033_a_47
18
+ "#{conta.convenio}".adjust_size_to(15, '0', :right)
19
+ end
20
+ def header_arquivo_posicao_033_a_052
21
+ header_arquivo_posicao_033_a_47
22
+ end
23
+
24
+ # Informação da conta
25
+ # DESCRIÇÃO TAMANHO POSIÇÃO
26
+ # -------------------------------------------------
27
+ # Reservado (uso Banco) 25 48-72
28
+ #
29
+ # TOTAL = 25 posições
30
+ def informacoes_da_conta
31
+ ''.adjust_size_to(25)
32
+ end
33
+
34
+ # Reservado (uso Banco)
35
+ # Para o Santander esse espaço deve ter 'Brancos'
36
+ def header_arquivo_posicao_152_a_157
37
+ ''.adjust_size_to(6)
38
+ end
39
+
40
+ # Posição 167 a 240 do Header do Arquivo
41
+ # Para o Santander esse espaço deve ter 'Brancos'
42
+ # TOTAL = 74 posições
43
+ def header_arquivo_posicao_167_a_240
44
+ ''.adjust_size_to(74)
45
+ end
46
+ def header_arquivo_posicao_167_a_171
47
+ header_arquivo_posicao_167_a_240
48
+ end
49
+ def header_arquivo_posicao_172_a_191
50
+ ''
51
+ end
52
+ def header_arquivo_posicao_192_a_211
53
+ ''
54
+ end
55
+ def complemento_header_arquivo
56
+ ''
57
+ end
58
+
59
+ ########################### HEADER LOTE #############################
60
+ #
61
+ # Reservado (uso Banco)
62
+ # 2 posições
63
+ def header_lote_posicao_012_a_013
64
+ ''.adjust_size_to(2)
65
+ end
66
+
67
+ # Reservado (uso Banco)
68
+ # TOTAL = 20 posições
69
+ def convenio_lote(lote)
70
+ ''.adjust_size_to(20)
71
+ end
72
+
73
+
74
+ # Cód. de Transmissão (15 posições) + Uso Banco (5 posições)
75
+ # TOTAL = 20 posições
76
+ def header_arquivo_posicao_054_a_68
77
+ "#{conta.convenio}".adjust_size_to(15, '0', :right)
78
+ end
79
+ def header_lote_posicao_054_a_073
80
+ "#{header_arquivo_posicao_054_a_68}".adjust_size_to(20)
81
+ end
82
+
83
+ # Reservado (uso Banco)
84
+ # TOTAL = 41 posições
85
+ def header_lote_posicao_200_a_240
86
+ ''.adjust_size_to(41)
87
+ end
88
+ def header_lote_posicao_200_a_207
89
+ header_lote_posicao_200_a_240
90
+ end
91
+ def header_lote_posicao_208_a_240
92
+ ''
93
+ end
94
+
95
+ ######################### SEGMENTO P ################################
96
+ #
97
+ # Agência Mantenedora da Conta
98
+ # TOTAL = 4 posições
99
+ def segmento_p_posicao_018_a_021
100
+ "#{conta.agencia}".adjust_size_to(4, '0', :right)
101
+ end
102
+ def segmento_p_posicao_018_a_022
103
+ segmento_p_posicao_018_a_021
104
+ end
105
+
106
+ # Dígito Verificador da Agência
107
+ # TOTAL = 1 posição
108
+ def segmento_p_posicao_022_a_022
109
+ "#{conta.agencia_dv}".adjust_size_to(1, '0')
110
+ end
111
+ def segmento_p_posicao_023_a_023
112
+ segmento_p_posicao_022_a_022
113
+ end
114
+
115
+ # segmento_p_posicao_023_a_057
116
+ # DESCRIÇÃO TAMANHO POSIÇÃO
117
+ # ---------------------------------------------------------
118
+ # Número da Conta Corrente 09 023 - 031
119
+ # DV da Conta 01 032 – 032
120
+ # Conta cobrança 09 033 - 041
121
+ # DV da conta cobrança 01 042 - 042
122
+ # Reservado (uso Banco) 02 043 - 044
123
+ # Nosso Número 13 045 - 057
124
+ #
125
+ # TOTAL = 35 posições
126
+ def complemento_p(pagamento)
127
+ complemento = ''
128
+ complemento << "#{conta.conta_corrente}".adjust_size_to(9, '0', :right)
129
+ complemento << "#{conta.conta_corrente_dv}".adjust_size_to(1)
130
+
131
+ complemento << ''.adjust_size_to(9, '0', :right)
132
+ complemento << ''.adjust_size_to(1, '0', :right)
133
+
134
+ complemento << ''.adjust_size_to(2)
135
+ complemento << "#{pagamento.nosso_numero}".adjust_size_to(13, '0', :right)
136
+ complemento
137
+ end
138
+
139
+ # Reservado (uso Banco)
140
+ # TOTAL = 1 posição
141
+ def segmento_p_posicao_061_a_061(pagamento)
142
+ ''.adjust_size_to(1)
143
+ end
144
+
145
+ # Reservado (uso Banco)
146
+ # TOTAL = 1 posição
147
+ def segmento_p_posicao_062_a_062(pagamento)
148
+ ''.adjust_size_to(1)
149
+ end
150
+
151
+ # segmento_p_posicao_063_a_077
152
+ # DESCRIÇÃO TAMANHO POSIÇÃO
153
+ # ---------------------------------------------------------
154
+ # Número Doc. 15 63 - 77
155
+ # TOTAL = 15 posições
156
+ def segmento_p_numero_do_documento(pagamento)
157
+ "#{pagamento.numero_documento}".adjust_size_to(15, '0', :right)
158
+ end
159
+
160
+ # Nº do Contrato da Operação de Crédito (Uso do banco)
161
+ # TOTAL = 10 posições
162
+ def segmento_p_posicao_230_a_239
163
+ ''.adjust_size_to(10)
164
+ end
165
+
166
+ ######################### SEGMENTO R ###############################
167
+
168
+ # Reservado (uso Banco)
169
+ def segmento_r_posicao_042_a_065
170
+ ''.adjust_size_to(24)
171
+ end
172
+ def segmento_r_posicao_042_a_042(pagamento)
173
+ segmento_r_posicao_042_a_065
174
+ end
175
+ def segmento_r_posicao_043_a_050(pagamento)
176
+ ''
177
+ end
178
+ def segmento_r_posicao_051_a_065(pagamento)
179
+ ''
180
+ end
181
+
182
+ # Reservado
183
+ def segmento_r_posicao_180_a_240
184
+ ''.adjust_size_to(61)
185
+ end
186
+ def segmento_r_posicao_180_a_199
187
+ segmento_r_posicao_180_a_240
188
+ end
189
+ def segmento_r_posicao_200_a_207
190
+ ''
191
+ end
192
+ def segmento_r_posicao_208_a_210
193
+ ''
194
+ end
195
+ def segmento_r_posicao_211_a_215
196
+ ''
197
+ end
198
+ def segmento_r_posicao_216_a_216
199
+ ''
200
+ end
201
+ def segmento_r_posicao_217_a_228
202
+ ''
203
+ end
204
+ def segmento_r_posicao_229_a_229
205
+ ''
206
+ end
207
+ def segmento_r_posicao_230_a_230
208
+ ''
209
+ end
210
+ def segmento_r_posicao_231_a_231
211
+ ''
212
+ end
213
+ def segmento_r_posicao_232_a_240
214
+ ''
215
+ end
216
+
217
+ ######################### SEGMENTO S ###############################
218
+ #
219
+ # segmento_s_posicao_021_a_240_tipo_impressao_1_ou_2
220
+ # DESCRIÇÃO TAMANHO POSIÇÃO
221
+ # ----------------------------------------------------------------
222
+ # Mensagem para recibo do sacado 001 021 - 021
223
+ # Mensagem a ser impressa 100 022 - 121
224
+ # Reservado (uso Banco) 119 122 - 240
225
+ #
226
+ # TOTAL = 120 posições
227
+ #
228
+ def segmento_s_posicao_021_a_240_tipo_impressao_1_ou_2
229
+ segmento = ''
230
+ segmento << '4'
231
+ segmento << ''.adjust_size_to(100)
232
+ segmento << ''.adjust_size_to(119)
233
+ segmento
234
+ end
235
+ def segmento_s_posicao_021_a_160_tipo_impressao_1_ou_2(pagamento)
236
+ segmento_s_posicao_021_a_240_tipo_impressao_1_ou_2
237
+ end
238
+ def segmento_s_posicao_161_a_162_tipo_impressao_1_ou_2(pagamento)
239
+ ''
240
+ end
241
+ def segmento_s_posicao_163_a_240_tipo_impressao_1_ou_2
242
+ ''
243
+ end
244
+
245
+ ######################### TRAILER LOTE #############################
246
+ #
247
+ # trailer_lote_posicao_024_a_240(lote, nr_lote)
248
+ # DESCRIÇÃO TAMANHO POSIÇÃO
249
+ # ----------------------------------------------------------------
250
+ # Reservado (uso Banco) 217 024 - 240
251
+ #
252
+ # TOTAL = 217 posições
253
+ def complemento_trailer_lote(lote, nr_lote)
254
+ ''.adjust_size_to(217)
255
+ end
256
+
257
+ ######################### TRAILER ARQUIVO ##########################
258
+ #
259
+ # Reservado (uso Banco)
260
+ def trailer_arquivo_posicao_030_a_035
261
+ ''.adjust_size_to(6)
262
+ end
263
+ end
264
+ end
265
+ end
266
+ end
@@ -0,0 +1,264 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab400
5
+ class BancoBrasil < BrBoleto::Remessa::Cnab400::Base
6
+ def conta_class
7
+ BrBoleto::Conta::BancoBrasil
8
+ end
9
+
10
+ ############################## HEADER ######################################
11
+
12
+ # Código da remessa
13
+ # Tipo: Numérico
14
+ # Tamanho: 001
15
+ def header_posicao_002_a_002
16
+ '1'
17
+ end
18
+
19
+ # Complemento do registro
20
+ # Posição: 101 até 394
21
+ # POSIÇÂO TAM. Descrição
22
+ # 101 a 107 007 No Seqüencial de Remessa (deve iniciar de 0000001 e incrementado de + 1 a cada NOVO Arquivo Remessa)
23
+ # 108 a 129 022 Branco
24
+ # 130 a 136 007 Convênio Lider (Opcional)
25
+ # 137 a 394 258 Branco
26
+ # Tamanho total: 294
27
+ def complemento_registro
28
+ info = "#{sequencial_remessa}".adjust_size_to(7, '0', :right)
29
+ info << ''.adjust_size_to(22)
30
+ info << "#{conta.convenio}".adjust_size_to(7, '0', :right)
31
+ info << ''.adjust_size_to(258)
32
+ info
33
+ end
34
+
35
+ ############################# DETALHE #################################
36
+
37
+ # Identificação do Registro Detalhe
38
+ def detalhe_posicao_001_001
39
+ '7'
40
+ end
41
+
42
+ # Informações da conta <- Específico para cada banco
43
+ # Posição: 018 até 037 (Detalhe)
44
+ # Posição: 027 até 046 (Header)
45
+ # Tamanho: 020
46
+ def informacoes_da_conta(local)
47
+
48
+ # POSIÇÂO:
49
+ # Detalhe | Header TAM. Descrição
50
+ # 18 a 21 27 a 30 004 Agência
51
+ # 22 a 22 31 a 31 001 Agência DV
52
+ # 23 a 30 32 a 39 008 Conta Corrente
53
+ # 31 a 31 40 a 40 001 Conta Corrente DV
54
+
55
+ info = "#{conta.agencia}".adjust_size_to(4, '0', :right)
56
+ info << "#{conta.agencia_dv}".adjust_size_to(1, '0', :right)
57
+ info << "#{conta.conta_corrente}".adjust_size_to(8, '0', :right)
58
+ info << "#{conta.conta_corrente_dv}".adjust_size_to(1, '0', :right)
59
+
60
+ if local == :detalhe
61
+ # POSIÇÂO TAM. Descrição
62
+ # -------------------------------
63
+ # 032 a 038 007 Código Convênio
64
+ info << "#{conta.convenio}".adjust_size_to(7, '0', :right)
65
+
66
+ elsif local == :header
67
+ # POSIÇÂO TAM. Descrição
68
+ # -------------------------------
69
+ # 041 a 046 006 Brancos
70
+ info << ''.adjust_size_to(6, "0")
71
+ end
72
+
73
+ info
74
+ end
75
+
76
+ # Nosso numero do pagamento e outras informações
77
+ # Posição: 063 até 108
78
+ # POSIÇÂO TAM. Descrição
79
+ # -----------------------------------------------------
80
+ # 039 a 063 025 Cod. Controle da Empresa (Brancos)
81
+ # 064 a 080 017 Nosso Número
82
+ # 081 a 082 002 Número da Prestação (Zeros)
83
+ # 083 a 084 002 Grupo de Valor (Zeros)
84
+ # 085 a 087 003 Complemento do Registro (Brancos)
85
+ # 088 a 088 001 Indicativo de Mensagem ou Sacador/Avalista
86
+ # 089 a 091 003 Prefixo do Título (Brancos)
87
+ # 092 a 094 003 Variação da Carteira
88
+ # 095 a 095 001 Conta Caução (Zero)
89
+ # 096 a 101 006 Número do Borderô (Zeros)
90
+ # 102 a 106 005 Tipo de Cobrança
91
+ # 107 a 108 002 Carteira
92
+ #
93
+ # Tamanho: 70
94
+ def detalhe_posicao_038_062(pagamento)
95
+ detalhe_posicao_039_108(pagamento)
96
+ end
97
+ def detalhe_posicao_063_076(pagamento, sequencial)
98
+ ''
99
+ end
100
+ def detalhe_posicao_077_108(pagamento, sequencial)
101
+ ''
102
+ end
103
+ def detalhe_posicao_039_108(pagamento)
104
+ detalhe = ''.adjust_size_to(25)
105
+ detalhe << "#{pagamento.nosso_numero}".adjust_size_to(17, '0', :right)
106
+ detalhe << ''.adjust_size_to(2, "0")
107
+ detalhe << ''.adjust_size_to(2, "0")
108
+ detalhe << ''.adjust_size_to(3)
109
+ detalhe << ''.adjust_size_to(1)
110
+ detalhe << ''.adjust_size_to(3)
111
+ detalhe << "#{conta.variacao_carteira}".adjust_size_to(3, '0', :right)
112
+ detalhe << '0'
113
+ detalhe << ''.adjust_size_to(6, "0")
114
+ detalhe << "#{tipo_cobranca}".adjust_size_to(5)
115
+ detalhe << "#{conta.carteira}".adjust_size_to(2, '0', :right)
116
+ detalhe
117
+ end
118
+
119
+ # TIPO DE COBRANÇA
120
+ # a) Carteiras 11 ou 17:
121
+ # - '04DSC': Solicitação de registro na Modalidade Descontada
122
+ # - '08VDR': Solicitação de registro na Modalidade BBVendor
123
+ # - '02VIN': solicitação de registro na Modalidade Caucionada/Vinculada
124
+ # - BRANCOS: Registro na Modalidade Simples
125
+ # b) Demais Carteiras:
126
+ # - Brancos
127
+ def tipo_cobranca
128
+ if conta.carteira.to_i == 11 || conta.carteira.to_i == 17
129
+ case conta.get_tipo_cobranca(conta.codigo_carteira, 400).to_i
130
+ when 3
131
+ '02VIN'
132
+ when 4
133
+ '04DSC'
134
+ when 7
135
+ '08VDR'
136
+ else
137
+ ''.adjust_size_to(5)
138
+ end
139
+
140
+ else
141
+ ''.adjust_size_to(5)
142
+ end
143
+ end
144
+
145
+
146
+ # Informações referente ao pagamento
147
+ # Posição 121 até 160
148
+ # POSIÇÂO TAM. Descrição
149
+ # 121 a 126 006 Data do Vencimento do Título
150
+ # 127 a 139 013 Valor do Título
151
+ # 140 a 142 003 Banco Encarregado da Cobrança
152
+ # 143 a 147 005 Agência Depositária (preencher com zeros)
153
+ # 148 a 149 002 Espécie de Título
154
+ # 150 a 150 001 Identificação (Sempre 'N')
155
+ # 151 a 156 006 Data da emissão do Título
156
+ # 157 a 158 002 1a instrução
157
+ # 159 a 160 002 2a instrução
158
+ # Tamanho: 40
159
+ def informacoes_do_pagamento(pagamento, sequencial)
160
+ dados = ''
161
+ dados << pagamento.data_vencimento_formatado('%d%m%y')
162
+ dados << pagamento.valor_documento_formatado(13)
163
+ dados << "#{conta.codigo_banco}".adjust_size_to(3,'0', :right)
164
+ dados << ''.adjust_size_to(5,'0', :right)
165
+ dados << "#{conta.get_especie_titulo(pagamento.especie_titulo, 400)}".adjust_size_to(2, '0', :right)
166
+ dados << 'N'
167
+ dados << pagamento.data_emissao_formatado('%d%m%y')
168
+
169
+ # 1a / 2a Instrução, conforme documentação (pag. 11, Nota 09):
170
+ dados << ''.adjust_size_to(2,'0', :right) # 1a Instrução
171
+ dados << ''.adjust_size_to(2,'0', :right) # 2a Instrução
172
+ dados
173
+
174
+ end
175
+
176
+ # Informações referente aos juros e multas do pagamento
177
+ # Posição: 161 a 218
178
+ # POSIÇÂO TAM. Descrição
179
+ # 161 a 173 013 Valor a ser cobrado por Dia de Atraso
180
+ # 174 a 179 006 Data Limite P/Concessão de Desconto
181
+ # 180 a 192 013 Valor do Desconto
182
+ # 193 a 205 013 Valor do IOF
183
+ # 206 a 218 013 Valor do Abatimento a ser concedido ou cancelado
184
+ # Tamanho: 58
185
+ def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
186
+ detalhe = ''
187
+ detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
188
+ detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
189
+ detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
190
+ detalhe << "#{pagamento.valor_iof_formatado}".adjust_size_to(13,'0', :right )
191
+ detalhe << "#{pagamento.valor_abatimento_formatado}".adjust_size_to(13,'0', :right )
192
+ detalhe
193
+ end
194
+
195
+ # Informações referente aos dados do sacado/pagador
196
+ # Posição: 219 a 394
197
+ # POSIÇÂO TAM. Descrição
198
+ # 219 a 220 002 Identificação do Tipo de Inscrição do Pagador
199
+ # 221 a 234 014 No Inscrição do Pagador
200
+ # 235 a 264 030 Nome do Pagador
201
+ # 265 a 274 010 Complemento Registro (Brancos)
202
+ # 275 a 314 040 Endereço Pagador
203
+ # 315 a 326 012 Bairro Pagador
204
+ # 327 a 331 005 CEP
205
+ # 332 a 334 003 Sufixo do CEP
206
+ # 335 a 349 015 Cidade Pagador
207
+ # 350 a 351 002 UF Pagador
208
+ # 352 a 391 040 Observações/Mensagem ou Sacador/Avalista *
209
+ # 292 a 293 002 Número de Dias Para Protesto
210
+ # 294 a 294 001 Complemento Registro (Branco)
211
+ #
212
+ # Tamanho: 176
213
+ def informacoes_do_sacado(pagamento, sequencial)
214
+ info = ''
215
+ # Tipo de Inscrição do Pagador: "01" = CPF , "02" = CNPJ , "03" = PIS/PASEP , "98" = Não tem , "99" = Outros
216
+ info << "#{pagamento.pagador.tipo_cpf_cnpj}".adjust_size_to(2, '0', :right)
217
+ info << "#{pagamento.pagador.cpf_cnpj}".adjust_size_to(14, '0', :right)
218
+ info << "#{pagamento.pagador.nome}".adjust_size_to(30)
219
+ info << ''.adjust_size_to(10) # Complemento Registro (Brancos)
220
+ info << "#{pagamento.pagador.endereco}".adjust_size_to(40)
221
+ info << "#{pagamento.pagador.bairro}".adjust_size_to(12)
222
+ info << "#{pagamento.pagador.cep}".adjust_size_to(8, '0', :right) # CEP + Sufixo do CEP
223
+ info << "#{pagamento.pagador.cidade}".adjust_size_to(15)
224
+ info << "#{pagamento.pagador.uf}".adjust_size_to(2)
225
+ info << "#{sacador_avalista(pagamento)}".adjust_size_to(40) # Observações/Mensagem ou Sacador/Avalista *
226
+ info << ''.adjust_size_to(2) # Quantidade de dias para Protesto
227
+ info << ''.adjust_size_to(1) # Complemento Registro (Brancos)
228
+ info
229
+ end
230
+
231
+ # * Composição dados Sacador/Avalista
232
+ # Para CNPJ:
233
+ # Posição 352 à 372 - Preencher com o nome do Sacador/Avalista.
234
+ # Posição 373 - Preencher com "espaço"
235
+ # Posição 374 à 377 - Preencher com o literal "CNPJ"
236
+ # Posição 378 à 391 - Preencher com o número do CNPJ do Sacador/Avalista
237
+ #
238
+ # Para CPF:
239
+ # Posição 352 à 376 - Preencher com o nome do Sacador/Avalista.
240
+ # Posição 377 - Preencher com "espaço"
241
+ # Posição 378 à 380 - Preencher com o literal "CPF"
242
+ # Posição 381 à 391 - Preencher com o número do CPF do Sacador/Avalista
243
+ #
244
+ # Tamanho: 40
245
+ def sacador_avalista(pagamento)
246
+ info = ''
247
+ if "#{pagamento.pagador.tipo_documento_avalista}".to_i == 2
248
+ info << "#{pagamento.pagador.nome_avalista}".adjust_size_to(21) # Sacador/Avalista (Nome)
249
+ info << ''.adjust_size_to(1) # Complemento Registro (Branco)
250
+ info << "CNPJ" # CNPJ
251
+ info << "#{pagamento.pagador.documento_avalista}".adjust_size_to(14) # Sacador/Avalista (CNPJ)
252
+ elsif "#{pagamento.pagador.tipo_documento_avalista}".to_i == 1
253
+ info << "#{pagamento.pagador.nome_avalista}".adjust_size_to(25) # Sacador/Avalista (Nome)
254
+ info << ''.adjust_size_to(1) # Complemento Registro (Branco)
255
+ info << "CPF" # CPF
256
+ info << "#{pagamento.pagador.documento_avalista}".adjust_size_to(11) # Sacador/Avalista (CPF)
257
+ end
258
+ info
259
+ end
260
+
261
+ end
262
+ end
263
+ end
264
+ end