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