br_boleto 0.1.0 → 1.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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/Gemfile.lock +3 -3
  4. data/README.markdown +196 -11
  5. data/Rakefile +5 -0
  6. data/br_boleto.gemspec +1 -1
  7. data/lib/br_boleto.rb +30 -12
  8. data/lib/br_boleto/{core/boleto.rb → boleto/base.rb} +83 -5
  9. data/lib/br_boleto/boleto/sicoob.rb +211 -0
  10. data/lib/br_boleto/calculos/modulo11_fator3197.rb +5 -5
  11. data/lib/br_boleto/helper/cpf_cnpj.rb +60 -0
  12. data/lib/br_boleto/helper/number.rb +15 -0
  13. data/lib/br_boleto/remessa/base.rb +89 -0
  14. data/lib/br_boleto/remessa/cnab240/base.rb +328 -0
  15. data/lib/br_boleto/remessa/cnab240/helper/header_arquivo.rb +186 -0
  16. data/lib/br_boleto/remessa/cnab240/helper/header_lote.rb +180 -0
  17. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +349 -0
  18. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +206 -0
  19. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +261 -0
  20. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +193 -0
  21. data/lib/br_boleto/remessa/cnab240/helper/trailer_arquivo.rb +88 -0
  22. data/lib/br_boleto/remessa/cnab240/helper/trailer_lote.rb +75 -0
  23. data/lib/br_boleto/remessa/cnab240/sicoob.rb +246 -0
  24. data/lib/br_boleto/remessa/lote.rb +52 -0
  25. data/lib/br_boleto/remessa/pagamento.rb +238 -0
  26. data/lib/br_boleto/string_methods.rb +21 -0
  27. data/lib/br_boleto/version.rb +2 -2
  28. data/test/br_boleto/{core/boleto_test.rb → boleto/base_test.rb} +107 -11
  29. data/test/br_boleto/{core → boleto}/sicoob_test.rb +60 -2
  30. data/test/br_boleto/remessa/base_test.rb +80 -0
  31. data/test/br_boleto/remessa/cnab240/base_test.rb +405 -0
  32. data/test/br_boleto/remessa/cnab240/helper/header_arquivo_test.rb +208 -0
  33. data/test/br_boleto/remessa/cnab240/helper/header_lote_test.rb +200 -0
  34. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +390 -0
  35. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +223 -0
  36. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +260 -0
  37. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +217 -0
  38. data/test/br_boleto/remessa/cnab240/helper/trailer_arquivo_test.rb +82 -0
  39. data/test/br_boleto/remessa/cnab240/helper/trailer_lote_test.rb +67 -0
  40. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +347 -0
  41. data/test/br_boleto/remessa/lote_test.rb +49 -0
  42. data/test/br_boleto/remessa/pagamento_test.rb +339 -0
  43. data/test/factories/{boleto.rb → boleto/base.rb} +1 -1
  44. data/test/factories/{boleto_sicoob.rb → boleto/boleto_sicoob.rb} +1 -1
  45. data/test/factories/remessa/base.rb +13 -0
  46. data/test/factories/remessa/cnab240/base.rb +18 -0
  47. data/test/factories/remessa/cnab240/sicoob.rb +18 -0
  48. data/test/factories/remessa/lote.rb +7 -0
  49. data/test/factories/remessa/pagamento.rb +16 -0
  50. data/test/inheritance/boleto_test.rb +1 -1
  51. data/test/inheritance/sicoob_test.rb +1 -1
  52. metadata +65 -13
  53. data/lib/br_boleto/core/sicoob.rb +0 -169
@@ -0,0 +1,193 @@
1
+ module BrBoleto
2
+ module Remessa
3
+ module Cnab240
4
+ module Helper
5
+ module SegmentoS
6
+ # Monta o registro segmento S do arquivo
7
+ #
8
+ # @param pagamento [BrBoleto::Remessa::Pagamento]
9
+ # objeto contendo os detalhes do boleto (valor, vencimento, sacado, etc)
10
+ # @param nr_lote [Integer]
11
+ # numero do lote que o segmento esta inserido
12
+ # @param sequencial [Integer]
13
+ # numero sequencial do registro no lote
14
+ #
15
+ # @return [String]
16
+ #
17
+ def monta_segmento_s(pagamento, nr_lote, sequencial)
18
+ segmento_s = ''
19
+ segmento_s << segmento_s_posicao_001_a_003
20
+ segmento_s << segmento_s_posicao_004_a_007(nr_lote)
21
+ segmento_s << segmento_s_posicao_008_a_008
22
+ segmento_s << segmento_s_posicao_009_a_013(sequencial)
23
+ segmento_s << segmento_s_posicao_014_a_014
24
+ segmento_s << segmento_s_posicao_015_a_015
25
+ segmento_s << segmento_s_posicao_016_a_017
26
+ segmento_s << segmento_s_posicao_018_a_018(pagamento)
27
+ if pagamento.tipo_impressao == '3'
28
+ segmento_s << segmento_s_tipo_impressao_3(pagamento)
29
+ else
30
+ segmento_s << segmento_s_tipo_impressao_1_ou_2(pagamento)
31
+ end
32
+ segmento_s.upcase
33
+ end
34
+
35
+ # Código do banco
36
+ # 3 posições
37
+ #
38
+ def segmento_s_posicao_001_a_003
39
+ codigo_banco
40
+ end
41
+
42
+ # Lote de Serviço: Número seqüencial para identificar univocamente um lote de serviço.
43
+ # Criado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo.
44
+ # Preencher com '0001' para o primeiro lote do arquivo.
45
+ # Para os demais: número do lote anterior acrescido de 1. O número não poderá ser repetido dentro do arquivo.
46
+ # 4 posições
47
+ #
48
+ def segmento_s_posicao_004_a_007(numero_do_lote)
49
+ numero_do_lote.to_s.rjust(4, '0')
50
+ end
51
+
52
+ # Tipo do registro -> Padrão 3
53
+ # 1 posição
54
+ #
55
+ def segmento_s_posicao_008_a_008
56
+ '3'
57
+ end
58
+
59
+ # Nº Sequencial do Registro no Lote
60
+ # 5 posições
61
+ #
62
+ def segmento_s_posicao_009_a_013(sequencial)
63
+ sequencial.to_s.rjust(5, '0')
64
+ end
65
+
66
+ # Cód. Segmento do Registro Detalhe
67
+ # 1 posição
68
+ #
69
+ def segmento_s_posicao_014_a_014
70
+ 'S'
71
+ end
72
+
73
+ # Uso Exclusivo FEBRABAN/CNAB
74
+ # 1 posição
75
+ #
76
+ def segmento_s_posicao_015_a_015
77
+ ' '
78
+ end
79
+
80
+ # Código de Movimento Remessa - 01 = Entrada de Titulos
81
+ # 2 posições
82
+ #
83
+ def segmento_s_posicao_016_a_017
84
+ '01'
85
+ end
86
+
87
+ # Tipo de impressão
88
+ # 1 - Frente do Bloqueto
89
+ # 2 - Verso do Bloauqto
90
+ # 3 - Corpo de instruções da Ficha de Complansação
91
+ # 1 posição
92
+ #
93
+ def segmento_s_posicao_018_a_018(pagamento)
94
+ "#{pagamento.tipo_impressao}".adjust_size_to(1)
95
+ end
96
+
97
+ ########### TIPO DE IMPRESÃO 1 OU 2 ################
98
+ def segmento_s_tipo_impressao_1_ou_2(pagamento)
99
+ segmento = ''
100
+ segmento << segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2(pagamento)
101
+ segmento << segmento_s_posicao_021_a_160_tipo_impressao_1_ou_2(pagamento)
102
+ segmento << segmento_s_posicao_161_a_162_tipo_impressao_1_ou_2(pagamento)
103
+ segmento << segmento_s_posicao_163_a_240_tipo_impressao_1_ou_2
104
+ segmento
105
+ end
106
+ # Numero da Linha a ser impressa
107
+ # 2 posições
108
+ #
109
+ def segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2(pagamento)
110
+ '01'
111
+ end
112
+ # Mensagem a ser impresas
113
+ # 140 posições
114
+ #
115
+ def segmento_s_posicao_021_a_160_tipo_impressao_1_ou_2(pagamento)
116
+ ''.rjust(140, ' ')
117
+ end
118
+
119
+ # Tipo de caractere a ser impresso
120
+ # '01' = Normal
121
+ # '02' = Itálico
122
+ # '03' = Normal Negrito
123
+ # '04' = Itálico Negrito
124
+ # 2 posições
125
+ def segmento_s_posicao_161_a_162_tipo_impressao_1_ou_2(pagamento)
126
+ '01'
127
+ end
128
+
129
+ # Uso exclusivo
130
+ # 78 posições
131
+ def segmento_s_posicao_163_a_240_tipo_impressao_1_ou_2
132
+ ''.rjust(78, ' ')
133
+ end
134
+
135
+ ########################################################
136
+ ############## TIPO DE IMPRESSÃO 3 #####################
137
+ def segmento_s_tipo_impressao_3(pagamento)
138
+ segmento = ''
139
+ segmento << segmento_s_posicao_019_a_058_tipo_impressao_3(pagamento)
140
+ segmento << segmento_s_posicao_059_a_098_tipo_impressao_3(pagamento)
141
+ segmento << segmento_s_posicao_099_a_138_tipo_impressao_3(pagamento)
142
+ segmento << segmento_s_posicao_139_a_178_tipo_impressao_3(pagamento)
143
+ segmento << segmento_s_posicao_179_a_218_tipo_impressao_3(pagamento)
144
+ segmento << segmento_s_posicao_219_a_240_tipo_impressao_3
145
+ segmento
146
+ end
147
+ # Informação 5
148
+ # 40 posições
149
+ #
150
+ def segmento_s_posicao_019_a_058_tipo_impressao_3(pagamento)
151
+ ''.rjust(40, ' ')
152
+ end
153
+
154
+ # Informação 6
155
+ # 40 posições
156
+ #
157
+ def segmento_s_posicao_059_a_098_tipo_impressao_3(pagamento)
158
+ ''.rjust(40, ' ')
159
+ end
160
+
161
+ # Informação 7
162
+ # 40 posições
163
+ #
164
+ def segmento_s_posicao_099_a_138_tipo_impressao_3(pagamento)
165
+ ''.rjust(40, ' ')
166
+ end
167
+
168
+ # Informação 8
169
+ # 40 posições
170
+ #
171
+ def segmento_s_posicao_139_a_178_tipo_impressao_3(pagamento)
172
+ ''.rjust(40, ' ')
173
+ end
174
+
175
+ # Informação 9
176
+ # 40 posições
177
+ #
178
+ def segmento_s_posicao_179_a_218_tipo_impressao_3(pagamento)
179
+ ''.rjust(40, ' ')
180
+ end
181
+
182
+ # Uso exclusivo
183
+ # 78 posições
184
+ def segmento_s_posicao_219_a_240_tipo_impressao_3
185
+ ''.rjust(22, ' ')
186
+ end
187
+ ########################################################
188
+
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,88 @@
1
+ module BrBoleto
2
+ module Remessa
3
+ module Cnab240
4
+ module Helper
5
+ module TrailerArquivo
6
+
7
+ # Monta o registro trailer do arquivo
8
+ #
9
+ # @param nro_lotes [Integer]
10
+ # numero de lotes no arquivo
11
+ # @param sequencial [Integer]
12
+ # numero de registros(linhas) no arquivo
13
+ #
14
+ # @return [String]
15
+ #
16
+ def monta_trailer_arquivo(nro_lotes, sequencial)
17
+ trailer_arquivo = '' # CAMPO TAMANHO
18
+ trailer_arquivo << trailer_arquivo_posicao_001_a_003 # Código banco 3
19
+ trailer_arquivo << trailer_arquivo_posicao_004_a_007(nro_lotes) # Lote Serviço 4
20
+ trailer_arquivo << trailer_arquivo_posicao_008_a_008 # Tipo registro 1
21
+ trailer_arquivo << trailer_arquivo_posicao_009_a_017 # Exclusivo 9
22
+ trailer_arquivo << trailer_arquivo_posicao_018_a_023(nro_lotes) # Qtd. Lotes 6
23
+ trailer_arquivo << trailer_arquivo_posicao_024_a_029(sequencial) # Qtd. Registros 6
24
+ trailer_arquivo << trailer_arquivo_posicao_030_a_035 # Qtde Contas 6
25
+ trailer_arquivo << trailer_arquivo_posicao_036_a_240 # Exclusivo 205
26
+ trailer_arquivo.upcase
27
+ end
28
+
29
+ # Código do banco
30
+ # 3 posições
31
+ #
32
+ def trailer_arquivo_posicao_001_a_003
33
+ codigo_banco
34
+ end
35
+
36
+ # Lote de Serviço -> Padrão 9999
37
+ # 4 posições
38
+ #
39
+ def trailer_arquivo_posicao_004_a_007(nro_lotes)
40
+ '9999'
41
+ end
42
+
43
+ # Tipo do registro -> Padrão 9
44
+ # 1 posição
45
+ #
46
+ def trailer_arquivo_posicao_008_a_008
47
+ '9'
48
+ end
49
+
50
+ # Uso Exclusivo FEBRABAN/CNAB
51
+ # 9 posições
52
+ #
53
+ def trailer_arquivo_posicao_009_a_017
54
+ ''.rjust(9, ' ')
55
+ end
56
+
57
+ # Quantidade de Lotes do Arquivo
58
+ # 6 posições
59
+ #
60
+ def trailer_arquivo_posicao_018_a_023(nro_lotes)
61
+ nro_lotes.to_s.rjust(6, '0')
62
+ end
63
+
64
+ # Quantidade de Registros do Arquivo
65
+ # 6 posições
66
+ #
67
+ def trailer_arquivo_posicao_024_a_029(sequencial)
68
+ sequencial.to_s.rjust(6, '0')
69
+ end
70
+
71
+ # Qtde de Contas p/ Conc. (Lotes)
72
+ # 6 posições
73
+ #
74
+ def trailer_arquivo_posicao_030_a_035
75
+ ''.rjust(6, ' ')
76
+ end
77
+
78
+ # Uso Exclusivo FEBRABAN/CNAB
79
+ # 205 posições
80
+ #
81
+ def trailer_arquivo_posicao_036_a_240
82
+ ''.rjust(205, ' ')
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,75 @@
1
+ module BrBoleto
2
+ module Remessa
3
+ module Cnab240
4
+ module Helper
5
+ module TrailerLote
6
+ # Monta o registro trailer do lote
7
+ #
8
+ # @param nr_lote [Integer]
9
+ # numero do lote no arquivo (iterar a cada novo lote)
10
+ #
11
+ # @param nro_registros [Integer]
12
+ # numero de registros(linhas) no lote (contando header e trailer)
13
+ #
14
+ # @return [String]
15
+ #
16
+ def monta_trailer_lote(lote, nr_lote, nro_registros)
17
+ trailer_lote = '' # CAMPO # TAMANHO
18
+ trailer_lote << trailer_lote_posicao_001_a_003 # codigo banco 3
19
+ trailer_lote << trailer_lote_posicao_004_a_007(nr_lote) # lote de servico 4
20
+ trailer_lote << trailer_lote_posicao_008_a_008 # tipo de servico 1
21
+ trailer_lote << trailer_lote_posicao_009_a_017 # uso exclusivo 9
22
+ trailer_lote << trailer_lote_posicao_018_a_023(nro_registros)# qtde de registros lote 6
23
+ trailer_lote << trailer_lote_posicao_024_a_240(lote, nr_lote)# 217
24
+ trailer_lote.upcase
25
+ end
26
+
27
+ # Código do banco
28
+ # 3 posições
29
+ #
30
+ def trailer_lote_posicao_001_a_003
31
+ codigo_banco
32
+ end
33
+
34
+ # Lote de Serviço: Número seqüencial para identificar univocamente um lote de serviço.
35
+ # Criado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo.
36
+ # Preencher com '0001' para o primeiro lote do arquivo.
37
+ # Para os demais: número do lote anterior acrescido de 1. O número não poderá ser repetido dentro do arquivo.
38
+ # 4 posições
39
+ #
40
+ def trailer_lote_posicao_004_a_007(numero_do_lote)
41
+ numero_do_lote.to_s.rjust(4, '0')
42
+ end
43
+
44
+ # Tipo do registro -> Padrão 5
45
+ # 1 posição
46
+ #
47
+ def trailer_lote_posicao_008_a_008
48
+ '5'
49
+ end
50
+
51
+ # Uso Exclusivo FEBRABAN/CNAB
52
+ # 9 posições
53
+ #
54
+ def trailer_lote_posicao_009_a_017
55
+ ''.rjust(9, ' ')
56
+ end
57
+
58
+ # Quantidade de Registros no Lote
59
+ # 6 posições
60
+ #
61
+ def trailer_lote_posicao_018_a_023(nro_registros)
62
+ nro_registros.to_s.rjust(6, '0')
63
+ end
64
+
65
+ # Complemento trailer diferente para cada banco
66
+ # 217 posições
67
+ #
68
+ def trailer_lote_posicao_024_a_240(lote, nr_lote)
69
+ complemento_trailer_lote(lote, nr_lote)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,246 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab240
5
+ class Sicoob < BrBoleto::Remessa::Cnab240::Base
6
+
7
+ #O banco siccob utiliza a combinação da carteira e modalidade para
8
+ # saber se é um pagamento com registro, sem registrou ou caucionada.
9
+ # Carteira / Modalidade = Tipo de pagamento
10
+ # 1 / 01 = Simples com Registro
11
+ # 1 / 02 = Simples sem Registro
12
+ # 3 / 03 = Garantia caicionada
13
+ #
14
+ attr_accessor :modalidade_carteira
15
+
16
+
17
+ attr_accessor :tipo_formulario
18
+ # Tipo Formulário - 01 posição (15 a 15):
19
+ # "1" -auto-copiativo
20
+ # "3" -auto-envelopável
21
+ # "4" -A4 sem envelopamento
22
+ # "6" -A4 sem envelopamento 3 vias
23
+
24
+ attr_accessor :parcela
25
+ # Parcela - 02 posições (11 a 12) - "01" se parcela única
26
+
27
+ def convenio_obrigatorio?
28
+ false
29
+ end
30
+
31
+ validates :modalidade_carteira, :tipo_formulario, :conta_corrente, :parcela, presence: true
32
+ # Remessa 400 - 8 digitos
33
+ # Remessa 240 - 12 digitos
34
+ validates :conta_corrente, length: {maximum: 12, message: 'deve ter no máximo 12 dígitos.'}
35
+ validates :agencia, length: {is: 4, message: 'deve ter 4 dígitos.'}
36
+ validates :modalidade_carteira, length: {is: 2, message: 'deve ter 2 dígitos.'}
37
+
38
+ def default_values
39
+ super.merge({
40
+ emissao_boleto: '2',
41
+ distribuicao_boleto: '2',
42
+ especie_titulo: '02', # 02 = DM Duplicata mercantil
43
+ tipo_formulario: '4',
44
+ parcela: '01',
45
+ modalidade_carteira: '01',
46
+ forma_cadastramento: '0'
47
+ })
48
+ end
49
+
50
+ def convenio
51
+ "#{@convenio}".adjust_size_to(20)
52
+ end
53
+
54
+ def codigo_banco
55
+ '756'
56
+ end
57
+
58
+ def nome_banco
59
+ 'SICOOB'.ljust(30, ' ')
60
+ end
61
+
62
+ def versao_layout_arquivo
63
+ '081'
64
+ end
65
+
66
+ def versao_layout_lote
67
+ '040'
68
+ end
69
+
70
+ def digito_agencia
71
+ # utilizando a agencia com 4 digitos
72
+ # para calcular o digito
73
+ BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.new(agencia).to_s
74
+ end
75
+
76
+ def digito_conta
77
+ # utilizando a conta corrente com 5 digitos
78
+ # para calcular o digito
79
+ BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.new(conta_corrente).to_s
80
+ end
81
+
82
+ def codigo_convenio
83
+ # CAMPO TAMANHO
84
+ # num. convenio 20 BRANCOS
85
+ ''.rjust(20, ' ')
86
+ end
87
+
88
+ def convenio_lote(lote)
89
+ codigo_convenio
90
+ end
91
+
92
+ def informacoes_da_conta
93
+ # CAMPO TAMANHO
94
+ # agencia 5
95
+ # digito agencia 1
96
+ # conta corrente 12
97
+ # digito conta 1
98
+ # digito agencia/conta 1
99
+ "#{agencia.rjust(5, '0')}#{digito_agencia}#{conta_corrente.rjust(12, '0')}#{digito_conta}".adjust_size_to(20)
100
+ end
101
+
102
+ def complemento_header
103
+ ''.rjust(29, ' ')
104
+ end
105
+
106
+ def complemento_p(pagamento)
107
+ # CAMPO TAMANHO
108
+ # conta corrente 12
109
+ # digito conta 1
110
+ # digito agencia/conta 1
111
+ # ident. titulo no banco 20
112
+ "#{conta_corrente.to_s.rjust(12, '0')}#{digito_conta} #{formata_nosso_numero(pagamento.nosso_numero)}"
113
+ end
114
+
115
+ # Tipo de cobrança
116
+ # Ex: :simples, :caucionada
117
+ #
118
+ # Obs: O VALOR DESSE METODO NÃO INFLUÊNCIA NA GERAÇÃO DO BOLETO
119
+ # É APENAS PARA QUESTÃO DE INFORMAÇÃO CASO PRECISE PARA OUTRAS COISAS.
120
+ #
121
+ def tipo_cobranca
122
+ case "#{modalidade_carteira}".rjust(2, "0")
123
+ when '01', '02'
124
+ :simples
125
+ when '03'
126
+ :caucionada
127
+ end
128
+ end
129
+
130
+ # Retorna o nosso numero
131
+ #
132
+ # @return [String]
133
+ #
134
+ # Nosso Número:
135
+ # - Se emissão a cargo do Cedente (vide planilha "Capa" deste arquivo):
136
+ # NumTitulo - 10 posições (1 a 10)
137
+ # Parcela - 02 posições (11 a 12) - "01" se parcela única
138
+ # Modalidade - 02 posições (13 a 14) - vide planilha "Capa" deste arquivo
139
+ # Tipo Formulário - 01 posição (15 a 15):
140
+ # "1" -auto-copiativo
141
+ # "3" -auto-envelopável
142
+ # "4" -A4 sem envelopamento
143
+ # "6" -A4 sem envelopamento 3 vias
144
+ # Em branco - 05 posições (16 a 20)
145
+ def formata_nosso_numero(nosso_numero)
146
+ "#{nosso_numero.to_s.rjust(10, '0')}#{parcela}#{modalidade_carteira}#{tipo_formulario}".adjust_size_to(20)
147
+ end
148
+
149
+ def complemento_trailer_lote(lote, nr_lote)
150
+ complemento = ''
151
+ complemento << complemento_trailer_lote_posicao_024_a_029(lote)
152
+ complemento << complemento_trailer_lote_posicao_030_a_046(lote)
153
+ complemento << complemento_trailer_lote_posicao_047_a_052(lote)
154
+ complemento << complemento_trailer_lote_posicao_053_a_069(lote)
155
+ complemento << complemento_trailer_lote_posicao_070_a_075(lote)
156
+ complemento << complemento_trailer_lote_posicao_076_a_092(lote)
157
+ complemento << complemento_trailer_lote_posicao_093_a_098(lote)
158
+ complemento << complemento_trailer_lote_posicao_099_a_115(lote)
159
+ complemento << complemento_trailer_lote_posicao_116_a_123(lote)
160
+ complemento << complemento_trailer_lote_posicao_124_a_240
161
+ complemento.upcase
162
+ end
163
+
164
+ # Quantidade de titulos de cobrança simples
165
+ # 6 posições
166
+ #
167
+ def complemento_trailer_lote_posicao_024_a_029(lote)
168
+ tipo_cobranca == :simples ? lote.pagamentos.count.to_s.rjust(6, '0') : ''.rjust(6, '0')
169
+ end
170
+
171
+ # Valor total dos titulos de cobrança simples
172
+ # 17 posições
173
+ #
174
+ def complemento_trailer_lote_posicao_030_a_046(lote)
175
+ if tipo_cobranca == :simples
176
+ BrBoleto::Helper::Number.new(lote.pagamentos.map(&:valor_documento).sum).formata_valor_monetario(17)
177
+ else
178
+ ''.rjust(17, '0')
179
+ end
180
+ end
181
+
182
+ # Quantidade de titulos de cobrança Vinculada
183
+ # 6 posições
184
+ #
185
+ def complemento_trailer_lote_posicao_047_a_052(lote)
186
+ ''.rjust(6, '0')
187
+ end
188
+
189
+ # Valor total dos titulos de cobrança Vinculada
190
+ # 17 posições
191
+ #
192
+ def complemento_trailer_lote_posicao_053_a_069(lote)
193
+ ''.rjust(17, '0')
194
+ end
195
+
196
+
197
+ # Quantidade de titulos de cobrança Caucionada
198
+ # 6 posições
199
+ #
200
+ def complemento_trailer_lote_posicao_070_a_075(lote)
201
+ tipo_cobranca == :caucionada ? lote.pagamentos.count.to_s.rjust(6, '0') : ''.rjust(6, '0')
202
+ end
203
+
204
+ # Valor total dos titulos de cobrança Caucionada
205
+ # 17 posições
206
+ #
207
+ def complemento_trailer_lote_posicao_076_a_092(lote)
208
+ if tipo_cobranca == :caucionada
209
+ BrBoleto::Helper::Number.new(lote.pagamentos.map(&:valor_documento).sum).formata_valor_monetario(17)
210
+ else
211
+ ''.rjust(17, '0')
212
+ end
213
+ end
214
+
215
+ # Quantidade de titulos de cobrança Descontada
216
+ # 6 posições
217
+ #
218
+ def complemento_trailer_lote_posicao_093_a_098(lote)
219
+ ''.rjust(6, '0')
220
+ end
221
+
222
+ # Valor total dos titulos de cobrança Descontada
223
+ # 17 posições
224
+ #
225
+ def complemento_trailer_lote_posicao_099_a_115(lote)
226
+ ''.rjust(17, '0')
227
+ end
228
+
229
+ # Número do aviso de lançamento
230
+ # 8 posições
231
+ #
232
+ def complemento_trailer_lote_posicao_116_a_123(lote)
233
+ ''.rjust(8, ' ')
234
+ end
235
+
236
+ # Exclusivo FEBRABAN
237
+ # 117 posições
238
+ #
239
+ def complemento_trailer_lote_posicao_124_a_240
240
+ ''.rjust(117, ' ')
241
+ end
242
+
243
+ end
244
+ end
245
+ end
246
+ end