br_boleto 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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