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.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.markdown +278 -98
  5. data/br_boleto.gemspec +5 -3
  6. data/lib/br_boleto/active_model_base.rb +1 -1
  7. data/lib/br_boleto/association/have_conta.rb +109 -0
  8. data/lib/br_boleto/association/have_pagador.rb +38 -0
  9. data/lib/br_boleto/association/have_pagamentos.rb +44 -0
  10. data/lib/br_boleto/boleto/base.rb +50 -379
  11. data/lib/br_boleto/boleto/caixa.rb +28 -143
  12. data/lib/br_boleto/boleto/sicoob.rb +24 -144
  13. data/lib/br_boleto/conta/base.rb +288 -0
  14. data/lib/br_boleto/conta/caixa.rb +109 -0
  15. data/lib/br_boleto/conta/sicoob.rb +64 -0
  16. data/lib/br_boleto/helper/default_codes.rb +33 -0
  17. data/lib/br_boleto/helper/format_value.rb +1 -0
  18. data/lib/br_boleto/helper/number.rb +30 -0
  19. data/lib/br_boleto/pagador.rb +82 -0
  20. data/lib/br_boleto/remessa/base.rb +28 -50
  21. data/lib/br_boleto/remessa/cnab240/base.rb +22 -131
  22. data/lib/br_boleto/remessa/cnab240/caixa.rb +16 -62
  23. data/lib/br_boleto/remessa/cnab240/helper/header_arquivo.rb +7 -7
  24. data/lib/br_boleto/remessa/cnab240/helper/header_lote.rb +6 -6
  25. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +22 -22
  26. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +16 -16
  27. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +3 -3
  28. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +3 -3
  29. data/lib/br_boleto/remessa/cnab240/helper/trailer_arquivo.rb +3 -3
  30. data/lib/br_boleto/remessa/cnab240/helper/trailer_lote.rb +3 -3
  31. data/lib/br_boleto/remessa/cnab240/sicoob.rb +36 -73
  32. data/lib/br_boleto/remessa/cnab400/base.rb +95 -0
  33. data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +136 -0
  34. data/lib/br_boleto/remessa/cnab400/helper/header.rb +114 -0
  35. data/lib/br_boleto/remessa/cnab400/helper/trailer.rb +50 -0
  36. data/lib/br_boleto/remessa/cnab400/sicoob.rb +249 -0
  37. data/lib/br_boleto/remessa/lote.rb +1 -23
  38. data/lib/br_boleto/remessa/pagamento.rb +188 -51
  39. data/lib/br_boleto/retorno/base.rb +9 -0
  40. data/lib/br_boleto/retorno/cnab240/base.rb +2 -10
  41. data/lib/br_boleto/retorno/cnab400/base.rb +48 -0
  42. data/lib/br_boleto/retorno/cnab400/sicoob.rb +42 -0
  43. data/lib/br_boleto/retorno/pagamento.rb +12 -6
  44. data/lib/br_boleto/string_methods.rb +8 -2
  45. data/lib/br_boleto/validations.rb +19 -0
  46. data/lib/br_boleto/version.rb +3 -3
  47. data/lib/br_boleto.rb +38 -8
  48. data/lib/config/locales/br-boleto-en.yml +89 -0
  49. data/lib/config/locales/br-boleto-pt-BR.yml +89 -0
  50. data/test/br_boleto/association/have_conta_test.rb +319 -0
  51. data/test/br_boleto/association/have_pagador_test.rb +110 -0
  52. data/test/br_boleto/association/have_pagamentos_test.rb +113 -0
  53. data/test/br_boleto/boleto/base_test.rb +127 -201
  54. data/test/br_boleto/boleto/caixa_test.rb +58 -72
  55. data/test/br_boleto/boleto/sicoob_test.rb +88 -147
  56. data/test/br_boleto/conta/base_test.rb +490 -0
  57. data/test/br_boleto/conta/caixa_test.rb +154 -0
  58. data/test/br_boleto/conta/sicoob_test.rb +144 -0
  59. data/test/br_boleto/helper/number_test.rb +29 -0
  60. data/test/br_boleto/pagador_test.rb +158 -0
  61. data/test/br_boleto/remessa/base_test.rb +37 -62
  62. data/test/br_boleto/remessa/cnab240/base_test.rb +75 -95
  63. data/test/br_boleto/remessa/cnab240/caixa_test.rb +61 -96
  64. data/test/br_boleto/remessa/cnab240/helper/header_arquivo_test.rb +11 -11
  65. data/test/br_boleto/remessa/cnab240/helper/header_lote_test.rb +8 -8
  66. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +17 -15
  67. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +13 -13
  68. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +2 -2
  69. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +3 -3
  70. data/test/br_boleto/remessa/cnab240/helper/trailer_arquivo_test.rb +1 -1
  71. data/test/br_boleto/remessa/cnab240/helper/trailer_lote_test.rb +1 -1
  72. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +136 -131
  73. data/test/br_boleto/remessa/cnab400/base_test.rb +263 -0
  74. data/test/br_boleto/remessa/cnab400/sicoob_test.rb +179 -0
  75. data/test/br_boleto/remessa/lote_test.rb +2 -41
  76. data/test/br_boleto/remessa/pagamento_test.rb +186 -188
  77. data/test/br_boleto/retorno/base_test.rb +0 -1
  78. data/test/br_boleto/retorno/cnab240/base_test.rb +12 -11
  79. data/test/br_boleto/retorno/cnab240/caixa_test.rb +11 -11
  80. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +11 -11
  81. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +227 -0
  82. data/test/br_boleto/retorno/pagamento_test.rb +6 -6
  83. data/test/factories/boleto/base.rb +9 -7
  84. data/test/factories/boleto/boleto_caixa.rb +2 -9
  85. data/test/factories/boleto/boleto_sicoob.rb +10 -8
  86. data/test/factories/conta/base.rb +10 -0
  87. data/test/factories/conta/caixa.rb +15 -0
  88. data/test/factories/conta/sicoob.rb +16 -0
  89. data/test/factories/pagador.rb +15 -0
  90. data/test/factories/remessa/base.rb +0 -6
  91. data/test/factories/remessa/cnab240/base.rb +0 -10
  92. data/test/factories/remessa/cnab240/caixa.rb +1 -6
  93. data/test/factories/remessa/cnab240/sicoob.rb +1 -10
  94. data/test/factories/remessa/cnab400/base.rb +8 -0
  95. data/test/factories/remessa/cnab400/sicoob.rb +8 -0
  96. data/test/factories/remessa/pagamento.rb +8 -7
  97. data/test/fixtures/remessa/cnab240/sicoob.rem +8 -0
  98. data/test/{files → fixtures}/retorno/cnab240/caixa.ret +0 -0
  99. data/test/{files → fixtures}/retorno/cnab240/padrao240.ret +0 -0
  100. data/test/fixtures/retorno/cnab400/sicoob.ret +7 -0
  101. data/test/inheritance/boleto_test.rb +4 -1
  102. data/test/inheritance/sicoob_test.rb +23 -7
  103. data/test/test_helper.rb +70 -0
  104. metadata +63 -6
@@ -1,68 +1,46 @@
1
1
  module BrBoleto
2
2
  module Remessa
3
3
  class Base < BrBoleto::ActiveModelBase
4
- # variavel que terá os lotes no qual será gerado o arquivo de remessa
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
- # aceite (A = ACEITO/N = NAO ACEITO)
32
- attr_accessor :aceite
14
+ # Data e hora da geração do arquivo
15
+ attr_accessor :data_hora_arquivo
33
16
 
34
- validates :nome_empresa, presence: true
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
- validates_each :lotes do |record, attr, value|
38
- record.errors.add(attr, 'não pode estar vazio.') if value.empty?
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
- # O atributo lotes sempre irá retornar umm Array
51
- def lotes
52
- @lotes = [@lotes].flatten
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
- def default_values
56
- {aceite: "N"}
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 persisted?
60
- false
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
- # Data e hora da geração do arquivo
53
- attr_accessor :data_hora_arquivo
54
-
55
- # modalidade da carteira
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.tamanho_forma_cadastramento
83
- 1
51
+ def self.class_for_lote
52
+ BrBoleto::Remessa::Lote
84
53
  end
85
54
 
86
- def self.tamanho_emissao_boleto
55
+ def pagamento_valid_emissao_boleto_length
87
56
  1
88
57
  end
89
58
 
90
- def self.tamanho_distribuicao_boleto
59
+ def pagamento_valid_distribuicao_boleto_length
91
60
  1
92
61
  end
93
62
 
94
- def self.tamanho_especie_titulo
95
- 2
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
- def convenio_obrigatorio?
99
- true
100
- end
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
- # modalidade da carteira
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
- def versao_layout_arquivo
43
- '050'
44
- end
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.to_s.rjust(6, '0')
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.rjust(5, '0')
99
- informacoes << digito_agencia
100
- informacoes << "#{convenio}".rjust(6, '0')
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}".rjust(6, '0')
85
+ complemento = "#{conta.convenio}".adjust_size_to(6, '0', :right)
132
86
  complemento << ''.rjust(11, '0')
133
- complemento << modalidade_carteira
134
- complemento << pagamento.nosso_numero.rjust(15, '0')
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.to_s.rjust(11, '0')
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.to_s.rjust(25, '0')
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
- tipo_inscricao
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
- BrBoleto::Helper::CpfCnpj.new(documento_cedente).sem_formatacao.rjust(14, '0')
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
- nome_empresa_formatada
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
- versao_layout_arquivo
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
- versao_layout_lote
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
- tipo_inscricao
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
- BrBoleto::Helper::CpfCnpj.new(documento_cedente).sem_formatacao.rjust(15, '0')
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
- nome_empresa_formatada
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.to_s.rjust(8, '0')
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 # forma de cadastro do titulo 1
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 # identificaco emissao 1
35
- segmento_p << segmento_p_posicao_062_a_062 # indentificacao entrega 1
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 # especie do titulo 2
42
- segmento_p << segmento_p_posicao_109_a_109 # aceite 1
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.to_s.rjust(5, '0')
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
- digito_agencia.to_s
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
- codigo_carteira
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.data_vencimento.strftime('%d%m%Y')
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.data_emissao.strftime('%d%m%Y')
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