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