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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/Gemfile.lock +1 -1
- data/README.markdown +157 -8
- data/br_boleto.gemspec +1 -1
- data/lib/br_boleto.rb +12 -1
- data/lib/br_boleto/association/have_conta.rb +31 -27
- data/lib/br_boleto/boleto/banco_brasil.rb +130 -0
- data/lib/br_boleto/boleto/santander.rb +77 -0
- data/lib/br_boleto/conta/banco_brasil.rb +156 -0
- data/lib/br_boleto/conta/itau.rb +8 -3
- data/lib/br_boleto/conta/santander.rb +208 -0
- data/lib/br_boleto/remessa/cnab240/banco_brasil.rb +132 -0
- data/lib/br_boleto/remessa/cnab240/bradesco.rb +1 -3
- data/lib/br_boleto/remessa/cnab240/itau.rb +0 -6
- data/lib/br_boleto/remessa/cnab240/santander.rb +266 -0
- data/lib/br_boleto/remessa/cnab400/banco_brasil.rb +264 -0
- data/lib/br_boleto/remessa/cnab400/bradesco.rb +1 -1
- data/lib/br_boleto/remessa/cnab400/santander.rb +215 -0
- data/lib/br_boleto/retorno/cnab240/banco_brasil.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/base.rb +3 -2
- data/lib/br_boleto/retorno/cnab240/caixa.rb +3 -2
- data/lib/br_boleto/retorno/cnab240/itau.rb +1 -2
- data/lib/br_boleto/retorno/cnab240/santander.rb +38 -0
- data/lib/br_boleto/retorno/cnab240/sicoob.rb +3 -2
- data/lib/br_boleto/retorno/cnab400/banco_brasil.rb +46 -0
- data/lib/br_boleto/retorno/cnab400/bradesco.rb +4 -3
- data/lib/br_boleto/retorno/cnab400/itau.rb +2 -2
- data/lib/br_boleto/retorno/cnab400/santander.rb +44 -0
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +3 -2
- data/lib/br_boleto/retorno/cnab400/sicredi.rb +20 -6
- data/lib/br_boleto/retorno/pagamento.rb +28 -7
- data/lib/br_boleto/version.rb +1 -1
- data/test/br_boleto/boleto/banco_brasil_test.rb +183 -0
- data/test/br_boleto/boleto/santander_test.rb +122 -0
- data/test/br_boleto/conta/banco_brasil_test.rb +209 -0
- data/test/br_boleto/conta/santantader_test.rb +222 -0
- data/test/br_boleto/remessa/cnab240/banco_brasil_test.rb +187 -0
- data/test/br_boleto/remessa/cnab240/itau_test.rb +4 -0
- data/test/br_boleto/remessa/cnab240/santander_test.rb +144 -0
- data/test/br_boleto/remessa/cnab400/banco_brasil_test.rb +285 -0
- data/test/br_boleto/remessa/cnab400/bradesco_test.rb +7 -0
- data/test/br_boleto/remessa/cnab400/santander_test.rb +174 -0
- data/test/br_boleto/retorno/cnab240/banco_brasil_test.rb +271 -0
- data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/bradesco_test.rb +15 -15
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +10 -10
- data/test/br_boleto/retorno/cnab240/cecred_test.rb +55 -138
- data/test/br_boleto/retorno/cnab240/itau_test.rb +15 -15
- data/test/br_boleto/retorno/cnab240/santander_test.rb +282 -0
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +25 -15
- data/test/br_boleto/retorno/cnab240/sicredi_test.rb +15 -15
- data/test/br_boleto/retorno/cnab240/unicred_test.rb +15 -15
- data/test/br_boleto/retorno/cnab400/banco_brasil_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/bradesco_test.rb +24 -12
- data/test/br_boleto/retorno/cnab400/itau_test.rb +6 -4
- data/test/br_boleto/retorno/cnab400/santander_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +20 -10
- data/test/br_boleto/retorno/cnab400/sicredi_test.rb +97 -1
- data/test/br_boleto/retorno/cnab400/unicred.rb +18 -18
- data/test/br_boleto/retorno/pagamento_test.rb +2 -2
- data/test/factories/boleto/boleto_banco_brasil.rb +18 -0
- data/test/factories/boleto/boleto_santander.rb +18 -0
- data/test/factories/conta/banco_brasil.rb +16 -0
- data/test/factories/conta/santander.rb +15 -0
- data/test/factories/remessa/cnab240/banco_brasil.rb +9 -0
- data/test/factories/remessa/cnab240/santander.rb +9 -0
- data/test/factories/remessa/cnab400/banco_brasil.rb +8 -0
- data/test/factories/remessa/cnab400/santander.rb +8 -0
- data/test/fixtures/retorno/cnab240/banco_brasil.ret +74 -0
- data/test/fixtures/retorno/cnab240/cecred.ret +10 -0
- data/test/fixtures/retorno/cnab240/santander.ret +16 -0
- data/test/fixtures/retorno/cnab400/sicredi.ret +4 -0
- 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
|