br_boleto 1.2.2 → 2.0.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/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/README.markdown +278 -98
- data/br_boleto.gemspec +5 -3
- data/lib/br_boleto/active_model_base.rb +1 -1
- data/lib/br_boleto/association/have_conta.rb +109 -0
- data/lib/br_boleto/association/have_pagador.rb +38 -0
- data/lib/br_boleto/association/have_pagamentos.rb +44 -0
- data/lib/br_boleto/boleto/base.rb +50 -379
- data/lib/br_boleto/boleto/caixa.rb +28 -143
- data/lib/br_boleto/boleto/sicoob.rb +24 -144
- data/lib/br_boleto/conta/base.rb +288 -0
- data/lib/br_boleto/conta/caixa.rb +109 -0
- data/lib/br_boleto/conta/sicoob.rb +64 -0
- data/lib/br_boleto/helper/default_codes.rb +33 -0
- data/lib/br_boleto/helper/format_value.rb +1 -0
- data/lib/br_boleto/helper/number.rb +30 -0
- data/lib/br_boleto/pagador.rb +82 -0
- data/lib/br_boleto/remessa/base.rb +28 -50
- data/lib/br_boleto/remessa/cnab240/base.rb +22 -131
- data/lib/br_boleto/remessa/cnab240/caixa.rb +16 -62
- data/lib/br_boleto/remessa/cnab240/helper/header_arquivo.rb +7 -7
- data/lib/br_boleto/remessa/cnab240/helper/header_lote.rb +6 -6
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +22 -22
- data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +16 -16
- data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/helper/trailer_arquivo.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/helper/trailer_lote.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/sicoob.rb +36 -73
- data/lib/br_boleto/remessa/cnab400/base.rb +95 -0
- data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +136 -0
- data/lib/br_boleto/remessa/cnab400/helper/header.rb +114 -0
- data/lib/br_boleto/remessa/cnab400/helper/trailer.rb +50 -0
- data/lib/br_boleto/remessa/cnab400/sicoob.rb +249 -0
- data/lib/br_boleto/remessa/lote.rb +1 -23
- data/lib/br_boleto/remessa/pagamento.rb +188 -51
- data/lib/br_boleto/retorno/base.rb +9 -0
- data/lib/br_boleto/retorno/cnab240/base.rb +2 -10
- data/lib/br_boleto/retorno/cnab400/base.rb +48 -0
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +42 -0
- data/lib/br_boleto/retorno/pagamento.rb +12 -6
- data/lib/br_boleto/string_methods.rb +8 -2
- data/lib/br_boleto/validations.rb +19 -0
- data/lib/br_boleto/version.rb +3 -3
- data/lib/br_boleto.rb +38 -8
- data/lib/config/locales/br-boleto-en.yml +89 -0
- data/lib/config/locales/br-boleto-pt-BR.yml +89 -0
- data/test/br_boleto/association/have_conta_test.rb +319 -0
- data/test/br_boleto/association/have_pagador_test.rb +110 -0
- data/test/br_boleto/association/have_pagamentos_test.rb +113 -0
- data/test/br_boleto/boleto/base_test.rb +127 -201
- data/test/br_boleto/boleto/caixa_test.rb +58 -72
- data/test/br_boleto/boleto/sicoob_test.rb +88 -147
- data/test/br_boleto/conta/base_test.rb +490 -0
- data/test/br_boleto/conta/caixa_test.rb +154 -0
- data/test/br_boleto/conta/sicoob_test.rb +144 -0
- data/test/br_boleto/helper/number_test.rb +29 -0
- data/test/br_boleto/pagador_test.rb +158 -0
- data/test/br_boleto/remessa/base_test.rb +37 -62
- data/test/br_boleto/remessa/cnab240/base_test.rb +75 -95
- data/test/br_boleto/remessa/cnab240/caixa_test.rb +61 -96
- data/test/br_boleto/remessa/cnab240/helper/header_arquivo_test.rb +11 -11
- data/test/br_boleto/remessa/cnab240/helper/header_lote_test.rb +8 -8
- data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +17 -15
- data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +13 -13
- data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +2 -2
- data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +3 -3
- data/test/br_boleto/remessa/cnab240/helper/trailer_arquivo_test.rb +1 -1
- data/test/br_boleto/remessa/cnab240/helper/trailer_lote_test.rb +1 -1
- data/test/br_boleto/remessa/cnab240/sicoob_test.rb +136 -131
- data/test/br_boleto/remessa/cnab400/base_test.rb +263 -0
- data/test/br_boleto/remessa/cnab400/sicoob_test.rb +179 -0
- data/test/br_boleto/remessa/lote_test.rb +2 -41
- data/test/br_boleto/remessa/pagamento_test.rb +186 -188
- data/test/br_boleto/retorno/base_test.rb +0 -1
- data/test/br_boleto/retorno/cnab240/base_test.rb +12 -11
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +11 -11
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +11 -11
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +227 -0
- data/test/br_boleto/retorno/pagamento_test.rb +6 -6
- data/test/factories/boleto/base.rb +9 -7
- data/test/factories/boleto/boleto_caixa.rb +2 -9
- data/test/factories/boleto/boleto_sicoob.rb +10 -8
- data/test/factories/conta/base.rb +10 -0
- data/test/factories/conta/caixa.rb +15 -0
- data/test/factories/conta/sicoob.rb +16 -0
- data/test/factories/pagador.rb +15 -0
- data/test/factories/remessa/base.rb +0 -6
- data/test/factories/remessa/cnab240/base.rb +0 -10
- data/test/factories/remessa/cnab240/caixa.rb +1 -6
- data/test/factories/remessa/cnab240/sicoob.rb +1 -10
- data/test/factories/remessa/cnab400/base.rb +8 -0
- data/test/factories/remessa/cnab400/sicoob.rb +8 -0
- data/test/factories/remessa/pagamento.rb +8 -7
- data/test/fixtures/remessa/cnab240/sicoob.rem +8 -0
- data/test/{files → fixtures}/retorno/cnab240/caixa.ret +0 -0
- data/test/{files → fixtures}/retorno/cnab240/padrao240.ret +0 -0
- data/test/fixtures/retorno/cnab400/sicoob.ret +7 -0
- data/test/inheritance/boleto_test.rb +4 -1
- data/test/inheritance/sicoob_test.rb +23 -7
- data/test/test_helper.rb +70 -0
- metadata +63 -6
|
@@ -1,68 +1,46 @@
|
|
|
1
1
|
module BrBoleto
|
|
2
2
|
module Remessa
|
|
3
3
|
class Base < BrBoleto::ActiveModelBase
|
|
4
|
-
|
|
5
|
-
# um lote deve conter no minimo 1 pagamento
|
|
6
|
-
# Pode haver 1 ou vários lotes para o mesmo arquivo
|
|
7
|
-
attr_accessor :lotes
|
|
8
|
-
|
|
9
|
-
def self.class_for_lote
|
|
10
|
-
BrBoleto::Remessa::Lote
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# Razão social da empresa
|
|
14
|
-
attr_accessor :nome_empresa
|
|
15
|
-
|
|
16
|
-
# agencia (sem digito verificador)
|
|
17
|
-
attr_accessor :agencia
|
|
18
|
-
|
|
19
|
-
# numero da conta corrente
|
|
20
|
-
attr_accessor :conta_corrente
|
|
21
|
-
|
|
22
|
-
# digito verificador da conta corrente
|
|
23
|
-
attr_accessor :digito_conta
|
|
24
|
-
|
|
25
|
-
# carteira do cedente
|
|
26
|
-
attr_accessor :carteira
|
|
4
|
+
include BrBoleto::HaveConta
|
|
27
5
|
|
|
6
|
+
def pagamento_valid_tipo_impressao_required; end
|
|
7
|
+
def pagamento_valid_cod_desconto_length; end
|
|
8
|
+
def pagamento_valid_emissao_boleto_length; end
|
|
9
|
+
def pagamento_valid_distribuicao_boleto_length; end
|
|
10
|
+
|
|
28
11
|
# sequencial remessa (num. sequencial que nao pode ser repetido nem zerado)
|
|
29
12
|
attr_accessor :sequencial_remessa
|
|
30
13
|
|
|
31
|
-
#
|
|
32
|
-
attr_accessor :
|
|
14
|
+
# Data e hora da geração do arquivo
|
|
15
|
+
attr_accessor :data_hora_arquivo
|
|
33
16
|
|
|
34
|
-
validates :
|
|
35
|
-
validates :aceite, inclusion: { in: %w(A a n N), message: "valor deve ser A(aceito) ou N(não ceito)" }
|
|
17
|
+
validates :sequencial_remessa, presence: true
|
|
36
18
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
value.each do |lote|
|
|
40
|
-
if lote.is_a? record.class.class_for_lote
|
|
41
|
-
if lote.invalid?
|
|
42
|
-
lote.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
|
43
|
-
end
|
|
44
|
-
else
|
|
45
|
-
record.errors.add(attr, 'cada item deve ser um objeto Lote.')
|
|
46
|
-
end
|
|
47
|
-
end
|
|
19
|
+
def persisted?
|
|
20
|
+
false
|
|
48
21
|
end
|
|
49
22
|
|
|
50
|
-
#
|
|
51
|
-
|
|
52
|
-
|
|
23
|
+
# Data de geracao do arquivo
|
|
24
|
+
#
|
|
25
|
+
# @return [String]
|
|
26
|
+
#
|
|
27
|
+
def data_geracao(formato = '%d%m%Y')
|
|
28
|
+
data_hora_arquivo.to_date.strftime(formato)
|
|
53
29
|
end
|
|
54
30
|
|
|
55
|
-
|
|
56
|
-
|
|
31
|
+
# Hora de geracao do arquivo
|
|
32
|
+
#
|
|
33
|
+
# @return [String]
|
|
34
|
+
#
|
|
35
|
+
def hora_geracao(formato = '%H%M%S')
|
|
36
|
+
data_hora_arquivo.strftime(formato)
|
|
57
37
|
end
|
|
58
|
-
|
|
59
|
-
def
|
|
60
|
-
|
|
38
|
+
|
|
39
|
+
def data_hora_arquivo
|
|
40
|
+
@data_hora_arquivo.to_time
|
|
41
|
+
rescue
|
|
42
|
+
return Time.current
|
|
61
43
|
end
|
|
62
|
-
|
|
63
|
-
def nome_empresa_formatada
|
|
64
|
-
"#{nome_empresa}".adjust_size_to(30)
|
|
65
|
-
end
|
|
66
44
|
end
|
|
67
45
|
end
|
|
68
46
|
end
|
|
@@ -37,114 +37,45 @@ module BrBoleto
|
|
|
37
37
|
# Utilizado para montar o trailer do arquivo
|
|
38
38
|
include BrBoleto::Remessa::Cnab240::Helper::TrailerArquivo
|
|
39
39
|
|
|
40
|
-
# documento do cedente (CPF/CNPJ)
|
|
41
|
-
attr_accessor :documento_cedente
|
|
42
|
-
|
|
43
|
-
# convenio do cedente
|
|
44
|
-
attr_accessor :convenio
|
|
45
|
-
|
|
46
40
|
# mensagem 1
|
|
47
41
|
attr_accessor :mensagem_1
|
|
48
42
|
|
|
49
43
|
# mensagem 2
|
|
50
44
|
attr_accessor :mensagem_2
|
|
51
45
|
|
|
52
|
-
#
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
# opcoes:
|
|
57
|
-
# 11: título Registrado emissão CAIXA
|
|
58
|
-
# 14: título Registrado emissão Cedente
|
|
59
|
-
# 21: título Sem Registro emissão CAIXA
|
|
60
|
-
attr_accessor :codigo_carteira
|
|
61
|
-
|
|
62
|
-
# forma de cadastramento dos titulos (campo nao tratado pelo Banco do Brasil)
|
|
63
|
-
# opcoes:
|
|
64
|
-
# 1 - com cadastramento (cobrança registrada)
|
|
65
|
-
# 2 - sem cadastramento (cobrança sem registro)
|
|
66
|
-
attr_accessor :forma_cadastramento
|
|
67
|
-
|
|
68
|
-
# identificacao da emissao do boleto (verificar opcoes nas classes referentes aos bancos)
|
|
69
|
-
attr_accessor :emissao_boleto
|
|
70
|
-
|
|
71
|
-
# identificacao da distribuicao do boleto (verificar opcoes nas classes referentes aos bancos)
|
|
72
|
-
attr_accessor :distribuicao_boleto
|
|
73
|
-
|
|
74
|
-
# especie do titulo (verificar o padrao nas classes referentes aos bancos)
|
|
75
|
-
attr_accessor :especie_titulo
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
def self.tamanho_codigo_carteira
|
|
79
|
-
1
|
|
80
|
-
end
|
|
46
|
+
# variavel que terá os lotes no qual será gerado o arquivo de remessa
|
|
47
|
+
# um lote deve conter no minimo 1 pagamento
|
|
48
|
+
# Pode haver 1 ou vários lotes para o mesmo arquivo
|
|
49
|
+
attr_accessor :lotes
|
|
81
50
|
|
|
82
|
-
def self.
|
|
83
|
-
|
|
51
|
+
def self.class_for_lote
|
|
52
|
+
BrBoleto::Remessa::Lote
|
|
84
53
|
end
|
|
85
54
|
|
|
86
|
-
def
|
|
55
|
+
def pagamento_valid_emissao_boleto_length
|
|
87
56
|
1
|
|
88
57
|
end
|
|
89
58
|
|
|
90
|
-
def
|
|
59
|
+
def pagamento_valid_distribuicao_boleto_length
|
|
91
60
|
1
|
|
92
61
|
end
|
|
93
62
|
|
|
94
|
-
|
|
95
|
-
|
|
63
|
+
validates_each :lotes do |record, attr, value|
|
|
64
|
+
record.errors.add(attr, :blank) if value.empty?
|
|
65
|
+
value.each do |lote|
|
|
66
|
+
lote.pagamento_valid_tipo_impressao_required = record.pagamento_valid_tipo_impressao_required
|
|
67
|
+
lote.pagamento_valid_cod_desconto_length = record.pagamento_valid_cod_desconto_length
|
|
68
|
+
lote.pagamento_valid_emissao_boleto_length = record.pagamento_valid_emissao_boleto_length
|
|
69
|
+
lote.pagamento_valid_distribuicao_boleto_length = record.pagamento_valid_distribuicao_boleto_length
|
|
70
|
+
if lote.invalid?
|
|
71
|
+
lote.errors.full_messages.each { |msg| record.errors.add(:base, msg) }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
96
74
|
end
|
|
97
75
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
validates :convenio, presence: true, if: :convenio_obrigatorio?
|
|
103
|
-
validates :documento_cedente, presence: true
|
|
104
|
-
|
|
105
|
-
validates :codigo_carteira, length: {is: tamanho_codigo_carteira, message: "deve ter #{tamanho_codigo_carteira} dígito."}
|
|
106
|
-
validates :forma_cadastramento, length: {is: tamanho_forma_cadastramento, message: "deve ter #{tamanho_forma_cadastramento} dígito."}
|
|
107
|
-
validates :emissao_boleto, length: {is: tamanho_emissao_boleto, message: "deve ter #{tamanho_emissao_boleto} dígito."}
|
|
108
|
-
validates :distribuicao_boleto, length: {is: tamanho_distribuicao_boleto, message: "deve ter #{tamanho_distribuicao_boleto} dígito."}
|
|
109
|
-
validates :especie_titulo, length: {is: tamanho_especie_titulo, message: "deve ter #{tamanho_especie_titulo} dígitos."}
|
|
110
|
-
|
|
111
|
-
def default_values
|
|
112
|
-
super.merge({
|
|
113
|
-
codigo_carteira: '1',
|
|
114
|
-
forma_cadastramento: '1'
|
|
115
|
-
})
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
# Tipo de inscricao do cedente
|
|
119
|
-
# (pessoa fisica ou juridica)
|
|
120
|
-
#
|
|
121
|
-
# @return [String]
|
|
122
|
-
#
|
|
123
|
-
def tipo_inscricao
|
|
124
|
-
# Retorna 1 se CPF e 2 se CNPJ
|
|
125
|
-
BrBoleto::Helper::CpfCnpj.new(documento_cedente).tipo_documento(1)
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
# Data de geracao do arquivo
|
|
129
|
-
#
|
|
130
|
-
# @return [String]
|
|
131
|
-
#
|
|
132
|
-
def data_geracao
|
|
133
|
-
data_hora_arquivo.to_date.strftime('%d%m%Y')
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
# Hora de geracao do arquivo
|
|
137
|
-
#
|
|
138
|
-
# @return [String]
|
|
139
|
-
#
|
|
140
|
-
def hora_geracao
|
|
141
|
-
data_hora_arquivo.strftime('%H%M%S')
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def data_hora_arquivo
|
|
145
|
-
@data_hora_arquivo.to_time
|
|
146
|
-
rescue
|
|
147
|
-
return Time.current
|
|
76
|
+
# O atributo lotes sempre irá retornar umm Array
|
|
77
|
+
def lotes
|
|
78
|
+
@lotes = [@lotes].flatten.compact.select{|l| l.is_a?(self.class.class_for_lote) }
|
|
148
79
|
end
|
|
149
80
|
|
|
150
81
|
# Monta um lote para o arquivo
|
|
@@ -244,22 +175,6 @@ module BrBoleto
|
|
|
244
175
|
raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
245
176
|
end
|
|
246
177
|
|
|
247
|
-
# Numero da versao do layout do arquivo
|
|
248
|
-
#
|
|
249
|
-
# Este metodo deve ser sobrescrevido na classe do banco
|
|
250
|
-
#
|
|
251
|
-
def versao_layout_arquivo
|
|
252
|
-
raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
# Numero da versao do layout do lote
|
|
256
|
-
#
|
|
257
|
-
# Este metodo deve ser sobrescrevido na classe do banco
|
|
258
|
-
#
|
|
259
|
-
def versao_layout_lote
|
|
260
|
-
raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
261
|
-
end
|
|
262
|
-
|
|
263
178
|
# Informacoes do convenio para o lote
|
|
264
179
|
#
|
|
265
180
|
# Este metodo deve ser sobrescrevido na classe do banco
|
|
@@ -268,22 +183,6 @@ module BrBoleto
|
|
|
268
183
|
raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
269
184
|
end
|
|
270
185
|
|
|
271
|
-
# Nome do banco
|
|
272
|
-
#
|
|
273
|
-
# Este metodo deve ser sobrescrevido na classe do banco
|
|
274
|
-
#
|
|
275
|
-
def nome_banco
|
|
276
|
-
raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
277
|
-
end
|
|
278
|
-
|
|
279
|
-
# Codigo do banco
|
|
280
|
-
#
|
|
281
|
-
# Este metodo deve ser sobrescrevido na classe do banco
|
|
282
|
-
#
|
|
283
|
-
def codigo_banco
|
|
284
|
-
raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
285
|
-
end
|
|
286
|
-
|
|
287
186
|
# Informacoes da conta do cedente
|
|
288
187
|
#
|
|
289
188
|
# Este metodo deve ser sobrescrevido na classe do banco
|
|
@@ -300,14 +199,6 @@ module BrBoleto
|
|
|
300
199
|
raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
301
200
|
end
|
|
302
201
|
|
|
303
|
-
# Digito verificado da agência
|
|
304
|
-
# Normalmente calculado pelo Modulo 11
|
|
305
|
-
# Deve ser sobrescrito na classe do banco
|
|
306
|
-
#
|
|
307
|
-
def digito_agencia
|
|
308
|
-
raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
309
|
-
end
|
|
310
|
-
|
|
311
202
|
# Complemento do segmento P
|
|
312
203
|
# Recebe um objeto da classe BrBoleto::Remessa::Pagamento
|
|
313
204
|
# Composto por 34 digitos
|
|
@@ -3,61 +3,15 @@ module BrBoleto
|
|
|
3
3
|
module Remessa
|
|
4
4
|
module Cnab240
|
|
5
5
|
class Caixa < BrBoleto::Remessa::Cnab240::Base
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# opcoes:
|
|
9
|
-
# 11: título Registrado emissão CAIXA
|
|
10
|
-
# 14: título Registrado emissão Cedente
|
|
11
|
-
# 21: título Sem Registro emissão CAIXA
|
|
12
|
-
attr_accessor :modalidade_carteira
|
|
13
|
-
|
|
14
|
-
# versão do aplicativo da caixa
|
|
15
|
-
attr_accessor :versao_aplicativo
|
|
16
|
-
|
|
17
|
-
validates :modalidade_carteira, :agencia, :versao_aplicativo, presence: true
|
|
18
|
-
validates :convenio, length: {maximum: 6, message: 'deve ter no máximo 6 dígitos.'}
|
|
19
|
-
validates :versao_aplicativo, length: {maximum: 4, message: 'deve ter no máximo 4 dígitos.'}
|
|
20
|
-
validates :agencia, length: {maximum: 5, message: 'deve ter no máximo 5 dígitos.'}
|
|
21
|
-
validates :modalidade_carteira, length: {is: 2, message: 'deve ter 2 dígitos.'}
|
|
22
|
-
|
|
23
|
-
def default_values
|
|
24
|
-
super.merge({
|
|
25
|
-
emissao_boleto: '2',
|
|
26
|
-
distribuicao_boleto: '2',
|
|
27
|
-
especie_titulo: '02', # 02 = DM Duplicata mercantil
|
|
28
|
-
modalidade_carteira: '14',
|
|
29
|
-
forma_cadastramento: '0',
|
|
30
|
-
versao_aplicativo: '0'
|
|
31
|
-
})
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def codigo_banco
|
|
35
|
-
'104'
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def nome_banco
|
|
39
|
-
'CAIXA ECONOMICA FEDERAL'.ljust(30, ' ')
|
|
6
|
+
def conta_class
|
|
7
|
+
BrBoleto::Conta::Caixa
|
|
40
8
|
end
|
|
41
9
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def versao_layout_lote
|
|
47
|
-
'030'
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def versao_aplicativo
|
|
51
|
-
"#{@versao_aplicativo}".rjust(4, '0') if @versao_aplicativo.present?
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def digito_agencia
|
|
55
|
-
# utilizando a agencia com 5 digitos
|
|
56
|
-
# para calcular o digito
|
|
57
|
-
BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.new(agencia).to_s
|
|
58
|
-
end
|
|
10
|
+
#########################################################################
|
|
11
|
+
########## VALIDAÇÕES ESPECÍFICAS DA DESTE OBJETO PARA A CONTA ##########
|
|
12
|
+
def valid_versao_aplicativo_required; true end # <= Vero do aplicativo é obrigatória
|
|
13
|
+
#########################################################################
|
|
59
14
|
|
|
60
|
-
|
|
61
15
|
# Uso exclusivo caixa
|
|
62
16
|
# CAMPO TAMANHO
|
|
63
17
|
# ---------------------------------------------------------
|
|
@@ -78,7 +32,7 @@ module BrBoleto
|
|
|
78
32
|
# TOTAL = 20 posições
|
|
79
33
|
#
|
|
80
34
|
def convenio_lote(lote)
|
|
81
|
-
conv_lote = convenio.
|
|
35
|
+
conv_lote = "#{conta.convenio}".adjust_size_to(6, '0', :right)
|
|
82
36
|
conv_lote << ''.to_s.rjust(14, '0') #Padrão '0'
|
|
83
37
|
conv_lote
|
|
84
38
|
end
|
|
@@ -95,9 +49,9 @@ module BrBoleto
|
|
|
95
49
|
# TOTAL = 20 posições
|
|
96
50
|
#
|
|
97
51
|
def informacoes_da_conta
|
|
98
|
-
informacoes = agencia.
|
|
99
|
-
informacoes <<
|
|
100
|
-
informacoes << "#{convenio}".
|
|
52
|
+
informacoes = "#{conta.agencia}".adjust_size_to(5, '0', :right)
|
|
53
|
+
informacoes << conta.agencia_dv
|
|
54
|
+
informacoes << "#{conta.convenio}".adjust_size_to(6, '0', :right)
|
|
101
55
|
informacoes << ''.rjust(7, '0')
|
|
102
56
|
informacoes << '0'
|
|
103
57
|
informacoes
|
|
@@ -112,7 +66,7 @@ module BrBoleto
|
|
|
112
66
|
# TOTAL = 29 posições
|
|
113
67
|
#
|
|
114
68
|
def complemento_header_arquivo
|
|
115
|
-
complemento = "#{versao_aplicativo}".rjust(4, '0') # 04 digitos já ajustado no método
|
|
69
|
+
complemento = "#{conta.versao_aplicativo}".rjust(4, '0') # 04 digitos já ajustado no método
|
|
116
70
|
complemento << ''.rjust(25, ' ')
|
|
117
71
|
complemento
|
|
118
72
|
end
|
|
@@ -128,10 +82,10 @@ module BrBoleto
|
|
|
128
82
|
# TOTAL = 34 posições
|
|
129
83
|
#
|
|
130
84
|
def complemento_p(pagamento)
|
|
131
|
-
complemento = "#{convenio}".
|
|
85
|
+
complemento = "#{conta.convenio}".adjust_size_to(6, '0', :right)
|
|
132
86
|
complemento << ''.rjust(11, '0')
|
|
133
|
-
complemento <<
|
|
134
|
-
complemento << pagamento.nosso_numero.
|
|
87
|
+
complemento << "#{conta.carteira}".adjust_size_to(conta.valid_carteira_length, '1', :right)
|
|
88
|
+
complemento << pagamento.nosso_numero.adjust_size_to(15, '0', :right)
|
|
135
89
|
complemento
|
|
136
90
|
end
|
|
137
91
|
|
|
@@ -144,7 +98,7 @@ module BrBoleto
|
|
|
144
98
|
# TOTAL = 15 posições
|
|
145
99
|
#
|
|
146
100
|
def segmento_p_numero_do_documento(pagamento)
|
|
147
|
-
complemento = pagamento.numero_documento.
|
|
101
|
+
complemento = "#{pagamento.numero_documento}".adjust_size_to(11, '0', :right)
|
|
148
102
|
complemento << ''.rjust(4, ' ')
|
|
149
103
|
complemento
|
|
150
104
|
end
|
|
@@ -165,7 +119,7 @@ module BrBoleto
|
|
|
165
119
|
# TOTAL = 25 posições
|
|
166
120
|
#
|
|
167
121
|
def segmento_p_posicao_196_a_220(pagamento)
|
|
168
|
-
pagamento.numero_documento.
|
|
122
|
+
"#{pagamento.numero_documento}".adjust_size_to(25, '0', :right)
|
|
169
123
|
end
|
|
170
124
|
|
|
171
125
|
def segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2(pagamento)
|
|
@@ -36,7 +36,7 @@ module BrBoleto
|
|
|
36
36
|
# 3 posições
|
|
37
37
|
#
|
|
38
38
|
def header_arquivo_posicao_001_a_003
|
|
39
|
-
codigo_banco
|
|
39
|
+
conta.codigo_banco
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
# Lote de serviço
|
|
@@ -64,21 +64,21 @@ module BrBoleto
|
|
|
64
64
|
# 1 posição
|
|
65
65
|
#
|
|
66
66
|
def header_arquivo_posicao_018_a_018
|
|
67
|
-
|
|
67
|
+
conta.tipo_cpf_cnpj(1)
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
# Número de Inscrição da Empresa (CPF/CNPJ)
|
|
71
71
|
# 14 Posições
|
|
72
72
|
#
|
|
73
73
|
def header_arquivo_posicao_019_a_032
|
|
74
|
-
|
|
74
|
+
"#{conta.cpf_cnpj}".adjust_size_to(14, '0', :right)
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
# Código do Convênio no Banco
|
|
78
78
|
# 20 posições
|
|
79
79
|
#
|
|
80
80
|
def header_arquivo_posicao_033_a_052
|
|
81
|
-
codigo_convenio
|
|
81
|
+
"#{codigo_convenio}".adjust_size_to(20)
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
# Informações da conta bancária
|
|
@@ -100,14 +100,14 @@ module BrBoleto
|
|
|
100
100
|
# 30 posições
|
|
101
101
|
#
|
|
102
102
|
def header_arquivo_posicao_073_a_102
|
|
103
|
-
|
|
103
|
+
"#{conta.razao_social}".adjust_size_to(30)
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
# Nome do Banco
|
|
107
107
|
# 30 posições
|
|
108
108
|
#
|
|
109
109
|
def header_arquivo_posicao_103_a_132
|
|
110
|
-
nome_banco
|
|
110
|
+
"#{conta.nome_banco}".adjust_size_to(30)
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
# Uso Exclusivo FEBRABAN / CNAB
|
|
@@ -149,7 +149,7 @@ module BrBoleto
|
|
|
149
149
|
# 3 posições
|
|
150
150
|
#
|
|
151
151
|
def header_arquivo_posicao_164_a_166
|
|
152
|
-
|
|
152
|
+
"#{conta.versao_layout_arquivo_cnab_240}".adjust_size_to(3, '0', :right)
|
|
153
153
|
end
|
|
154
154
|
|
|
155
155
|
# Densidade de Gravação do Arquivo
|
|
@@ -37,7 +37,7 @@ module BrBoleto
|
|
|
37
37
|
# 3 posições
|
|
38
38
|
#
|
|
39
39
|
def header_lote_posicao_001_a_003
|
|
40
|
-
codigo_banco
|
|
40
|
+
conta.codigo_banco
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
# Lote de Serviço
|
|
@@ -88,7 +88,7 @@ module BrBoleto
|
|
|
88
88
|
# 3 posições
|
|
89
89
|
#
|
|
90
90
|
def header_lote_posicao_014_a_016
|
|
91
|
-
|
|
91
|
+
"#{conta.versao_layout_lote_cnab_240}".adjust_size_to(3, '0', :right)
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
# Uso Exclusivo da FEBRABAN/CNAB
|
|
@@ -102,14 +102,14 @@ module BrBoleto
|
|
|
102
102
|
# 1 posição
|
|
103
103
|
#
|
|
104
104
|
def header_lote_posicao_018_a_018
|
|
105
|
-
|
|
105
|
+
conta.tipo_cpf_cnpj(1)
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
# Número de Inscrição da Empresa
|
|
109
109
|
# 15 posições
|
|
110
110
|
#
|
|
111
111
|
def header_lote_posicao_019_a_033
|
|
112
|
-
|
|
112
|
+
"#{conta.cpf_cnpj}".adjust_size_to(15, '0', :right)
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
# Convenio -> Código do Cedente no Banco
|
|
@@ -138,7 +138,7 @@ module BrBoleto
|
|
|
138
138
|
# 30 posições
|
|
139
139
|
#
|
|
140
140
|
def header_lote_posicao_074_a_103
|
|
141
|
-
|
|
141
|
+
"#{conta.razao_social}".adjust_size_to(30)
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
# Mensagem 1
|
|
@@ -159,7 +159,7 @@ module BrBoleto
|
|
|
159
159
|
# 8 posições
|
|
160
160
|
#
|
|
161
161
|
def header_lote_posicao_184_a_191
|
|
162
|
-
sequencial_remessa.
|
|
162
|
+
"#{sequencial_remessa}".adjust_size_to(8, '0', :right)
|
|
163
163
|
end
|
|
164
164
|
|
|
165
165
|
# Data de Gravação Remessa/Retorno
|
|
@@ -29,17 +29,17 @@ module BrBoleto
|
|
|
29
29
|
segmento_p << segmento_p_posicao_023_a_023 # dv agencia 1
|
|
30
30
|
segmento_p << segmento_p_posicao_024_a_057(pagamento) # informacoes da conta 34
|
|
31
31
|
segmento_p << segmento_p_posicao_058_a_058 # codigo da carteira 1
|
|
32
|
-
segmento_p << segmento_p_posicao_059_a_059
|
|
32
|
+
segmento_p << segmento_p_posicao_059_a_059(pagamento) # forma de cadastro do titulo 1
|
|
33
33
|
segmento_p << segmento_p_posicao_060_a_060 # tipo de documento 1
|
|
34
|
-
segmento_p << segmento_p_posicao_061_a_061
|
|
35
|
-
segmento_p << segmento_p_posicao_062_a_062
|
|
34
|
+
segmento_p << segmento_p_posicao_061_a_061(pagamento) # identificaco emissao 1
|
|
35
|
+
segmento_p << segmento_p_posicao_062_a_062(pagamento) # indentificacao entrega 1
|
|
36
36
|
segmento_p << segmento_p_posicao_063_a_077(pagamento) # numro do documento 15
|
|
37
37
|
segmento_p << segmento_p_posicao_078_a_085(pagamento) # data de venc. 8
|
|
38
38
|
segmento_p << segmento_p_posicao_086_a_100(pagamento) # valor documento 15
|
|
39
39
|
segmento_p << segmento_p_posicao_101_a_105 # agencia cobradora 5
|
|
40
40
|
segmento_p << segmento_p_posicao_106_a_106 # dv agencia cobradora 1
|
|
41
|
-
segmento_p << segmento_p_posicao_107_a_108
|
|
42
|
-
segmento_p << segmento_p_posicao_109_a_109
|
|
41
|
+
segmento_p << segmento_p_posicao_107_a_108(pagamento) # especie do titulo 2
|
|
42
|
+
segmento_p << segmento_p_posicao_109_a_109(pagamento) # aceite 1
|
|
43
43
|
segmento_p << segmento_p_posicao_110_a_117(pagamento) # data de emissao titulo 8
|
|
44
44
|
segmento_p << segmento_p_posicao_118_a_118(pagamento) # cod. do juros 1 *
|
|
45
45
|
segmento_p << segmento_p_posicao_119_a_126(pagamento) # data juros 8 *
|
|
@@ -61,7 +61,7 @@ module BrBoleto
|
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
def segmento_p_posicao_001_a_003
|
|
64
|
-
codigo_banco
|
|
64
|
+
conta.codigo_banco
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
# Lote de Serviço: Número seqüencial para identificar univocamente um lote de serviço.
|
|
@@ -116,14 +116,14 @@ module BrBoleto
|
|
|
116
116
|
# 5 posições
|
|
117
117
|
#
|
|
118
118
|
def segmento_p_posicao_018_a_022
|
|
119
|
-
agencia.
|
|
119
|
+
"#{conta.agencia}".adjust_size_to(5, '0', :right)
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
# Dígito Verificador da Agência
|
|
123
123
|
# 1 posição
|
|
124
124
|
#
|
|
125
125
|
def segmento_p_posicao_023_a_023
|
|
126
|
-
|
|
126
|
+
"#{conta.agencia_dv}".adjust_size_to(1, '0')
|
|
127
127
|
end
|
|
128
128
|
|
|
129
129
|
# O padrão da FEBRABAN é:
|
|
@@ -142,14 +142,14 @@ module BrBoleto
|
|
|
142
142
|
# 1 posição
|
|
143
143
|
#
|
|
144
144
|
def segmento_p_posicao_058_a_058
|
|
145
|
-
|
|
145
|
+
conta.carteira
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
# Forma de Cadastr. do Título no Banco
|
|
149
149
|
# 1 posição
|
|
150
150
|
#
|
|
151
|
-
def segmento_p_posicao_059_a_059
|
|
152
|
-
forma_cadastramento
|
|
151
|
+
def segmento_p_posicao_059_a_059(pagamento)
|
|
152
|
+
"#{pagamento.forma_cadastramento}".adjust_size_to(1,'1')
|
|
153
153
|
end
|
|
154
154
|
|
|
155
155
|
# Tipo de Documento
|
|
@@ -162,15 +162,15 @@ module BrBoleto
|
|
|
162
162
|
# Identificação da Emissão do Bloqueto
|
|
163
163
|
# 1 posição
|
|
164
164
|
#
|
|
165
|
-
def segmento_p_posicao_061_a_061
|
|
166
|
-
emissao_boleto
|
|
165
|
+
def segmento_p_posicao_061_a_061(pagamento)
|
|
166
|
+
pagamento.emissao_boleto
|
|
167
167
|
end
|
|
168
168
|
|
|
169
169
|
# Identificação da Distribuição
|
|
170
170
|
# 1 posição
|
|
171
171
|
#
|
|
172
|
-
def segmento_p_posicao_062_a_062
|
|
173
|
-
distribuicao_boleto
|
|
172
|
+
def segmento_p_posicao_062_a_062(pagamento)
|
|
173
|
+
pagamento.distribuicao_boleto
|
|
174
174
|
end
|
|
175
175
|
|
|
176
176
|
# Número do Documento de Cobrança
|
|
@@ -185,7 +185,7 @@ module BrBoleto
|
|
|
185
185
|
# 8 posições
|
|
186
186
|
#
|
|
187
187
|
def segmento_p_posicao_078_a_085(pagamento)
|
|
188
|
-
pagamento.
|
|
188
|
+
pagamento.data_vencimento_formatado('%d%m%Y')
|
|
189
189
|
end
|
|
190
190
|
|
|
191
191
|
# Valor Nominal do Título
|
|
@@ -212,22 +212,22 @@ module BrBoleto
|
|
|
212
212
|
# Espécie do Título
|
|
213
213
|
# 2 posições
|
|
214
214
|
#
|
|
215
|
-
def segmento_p_posicao_107_a_108
|
|
216
|
-
especie_titulo
|
|
215
|
+
def segmento_p_posicao_107_a_108(pagamento)
|
|
216
|
+
"#{pagamento.especie_titulo}".adjust_size_to(2, '0', :right)
|
|
217
217
|
end
|
|
218
218
|
|
|
219
219
|
# Identific. de Título Aceito/Não Aceito (A ou N)
|
|
220
220
|
# 1 posição
|
|
221
221
|
#
|
|
222
|
-
def segmento_p_posicao_109_a_109
|
|
223
|
-
aceite
|
|
222
|
+
def segmento_p_posicao_109_a_109(pagamento)
|
|
223
|
+
pagamento.aceite ? 'A' : 'N'
|
|
224
224
|
end
|
|
225
225
|
|
|
226
226
|
# Data da Emissão do Título
|
|
227
227
|
# 8 posições
|
|
228
228
|
#
|
|
229
229
|
def segmento_p_posicao_110_a_117(pagamento)
|
|
230
|
-
pagamento.
|
|
230
|
+
pagamento.data_emissao_formatado('%d%m%Y')
|
|
231
231
|
end
|
|
232
232
|
|
|
233
233
|
# Código do Juros de Mora
|
|
@@ -257,7 +257,7 @@ module BrBoleto
|
|
|
257
257
|
# 1 posição
|
|
258
258
|
#
|
|
259
259
|
def segmento_p_posicao_142_a_142(pagamento)
|
|
260
|
-
pagamento.cod_desconto
|
|
260
|
+
"#{pagamento.cod_desconto}".adjust_size_to(1)
|
|
261
261
|
end
|
|
262
262
|
|
|
263
263
|
# Data do Desconto 1
|