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