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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/Gemfile.lock +3 -3
- data/README.markdown +196 -11
- data/Rakefile +5 -0
- data/br_boleto.gemspec +1 -1
- data/lib/br_boleto.rb +30 -12
- data/lib/br_boleto/{core/boleto.rb → boleto/base.rb} +83 -5
- data/lib/br_boleto/boleto/sicoob.rb +211 -0
- data/lib/br_boleto/calculos/modulo11_fator3197.rb +5 -5
- data/lib/br_boleto/helper/cpf_cnpj.rb +60 -0
- data/lib/br_boleto/helper/number.rb +15 -0
- data/lib/br_boleto/remessa/base.rb +89 -0
- data/lib/br_boleto/remessa/cnab240/base.rb +328 -0
- data/lib/br_boleto/remessa/cnab240/helper/header_arquivo.rb +186 -0
- data/lib/br_boleto/remessa/cnab240/helper/header_lote.rb +180 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +349 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +206 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +261 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +193 -0
- data/lib/br_boleto/remessa/cnab240/helper/trailer_arquivo.rb +88 -0
- data/lib/br_boleto/remessa/cnab240/helper/trailer_lote.rb +75 -0
- data/lib/br_boleto/remessa/cnab240/sicoob.rb +246 -0
- data/lib/br_boleto/remessa/lote.rb +52 -0
- data/lib/br_boleto/remessa/pagamento.rb +238 -0
- data/lib/br_boleto/string_methods.rb +21 -0
- data/lib/br_boleto/version.rb +2 -2
- data/test/br_boleto/{core/boleto_test.rb → boleto/base_test.rb} +107 -11
- data/test/br_boleto/{core → boleto}/sicoob_test.rb +60 -2
- data/test/br_boleto/remessa/base_test.rb +80 -0
- data/test/br_boleto/remessa/cnab240/base_test.rb +405 -0
- data/test/br_boleto/remessa/cnab240/helper/header_arquivo_test.rb +208 -0
- data/test/br_boleto/remessa/cnab240/helper/header_lote_test.rb +200 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +390 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +223 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +260 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +217 -0
- data/test/br_boleto/remessa/cnab240/helper/trailer_arquivo_test.rb +82 -0
- data/test/br_boleto/remessa/cnab240/helper/trailer_lote_test.rb +67 -0
- data/test/br_boleto/remessa/cnab240/sicoob_test.rb +347 -0
- data/test/br_boleto/remessa/lote_test.rb +49 -0
- data/test/br_boleto/remessa/pagamento_test.rb +339 -0
- data/test/factories/{boleto.rb → boleto/base.rb} +1 -1
- data/test/factories/{boleto_sicoob.rb → boleto/boleto_sicoob.rb} +1 -1
- data/test/factories/remessa/base.rb +13 -0
- data/test/factories/remessa/cnab240/base.rb +18 -0
- data/test/factories/remessa/cnab240/sicoob.rb +18 -0
- data/test/factories/remessa/lote.rb +7 -0
- data/test/factories/remessa/pagamento.rb +16 -0
- data/test/inheritance/boleto_test.rb +1 -1
- data/test/inheritance/sicoob_test.rb +1 -1
- metadata +65 -13
- 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
|