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,186 @@
|
|
1
|
+
module BrBoleto
|
2
|
+
module Remessa
|
3
|
+
module Cnab240
|
4
|
+
module Helper
|
5
|
+
module HeaderArquivo
|
6
|
+
# Monta o registro header do arquivo
|
7
|
+
#
|
8
|
+
# @return [String]
|
9
|
+
#
|
10
|
+
def monta_header_arquivo
|
11
|
+
header_arquivo = '' # CAMPO TAMANHO
|
12
|
+
header_arquivo << header_arquivo_posicao_001_a_003 # codigo do banco 3
|
13
|
+
header_arquivo << header_arquivo_posicao_004_a_007 # lote do servico 4
|
14
|
+
header_arquivo << header_arquivo_posicao_008_a_008 # tipo de registro 1
|
15
|
+
header_arquivo << header_arquivo_posicao_009_a_017 # uso exclusivo FEBRABAN 9
|
16
|
+
header_arquivo << header_arquivo_posicao_018_a_018 # tipo inscricao 1
|
17
|
+
header_arquivo << header_arquivo_posicao_019_a_032 # numero de inscricao 14
|
18
|
+
header_arquivo << header_arquivo_posicao_033_a_052 # codigo do convenio no banco 20
|
19
|
+
header_arquivo << header_arquivo_posicao_053_a_072 # informacoes da conta 20
|
20
|
+
header_arquivo << header_arquivo_posicao_073_a_102 # nome da empresa 30
|
21
|
+
header_arquivo << header_arquivo_posicao_103_a_132 # nome do banco 30
|
22
|
+
header_arquivo << header_arquivo_posicao_133_a_142 # uso exclusivo FEBRABAN 10
|
23
|
+
header_arquivo << header_arquivo_posicao_143_a_143 # codigo remessa 1
|
24
|
+
header_arquivo << header_arquivo_posicao_144_a_151 # data geracao 8
|
25
|
+
header_arquivo << header_arquivo_posicao_152_a_157 # hora geracao 6
|
26
|
+
header_arquivo << header_arquivo_posicao_158_a_163 # numero seq. arquivo 6
|
27
|
+
header_arquivo << header_arquivo_posicao_164_a_166 # num. versao 3
|
28
|
+
header_arquivo << header_arquivo_posicao_167_a_171 # densidade gravacao 5
|
29
|
+
header_arquivo << header_arquivo_posicao_172_a_191 # Para Uso Reservado do Banco 20
|
30
|
+
header_arquivo << header_arquivo_posicao_192_a_211 # Para Uso Reservado da Empresa 20
|
31
|
+
header_arquivo << header_arquivo_posicao_212_a_240 # complemento do arquivo 29
|
32
|
+
header_arquivo.upcase
|
33
|
+
end
|
34
|
+
|
35
|
+
# Código do banco
|
36
|
+
# 3 posições
|
37
|
+
#
|
38
|
+
def header_arquivo_posicao_001_a_003
|
39
|
+
codigo_banco
|
40
|
+
end
|
41
|
+
|
42
|
+
# Lote de serviço
|
43
|
+
# 4 posições
|
44
|
+
#
|
45
|
+
def header_arquivo_posicao_004_a_007
|
46
|
+
'0000'
|
47
|
+
end
|
48
|
+
|
49
|
+
# Tipo do registro
|
50
|
+
# 1 posição
|
51
|
+
#
|
52
|
+
def header_arquivo_posicao_008_a_008
|
53
|
+
'0'
|
54
|
+
end
|
55
|
+
|
56
|
+
# Uso Exclusivo FEBRABAN / CNAB
|
57
|
+
# 09 posições
|
58
|
+
#
|
59
|
+
def header_arquivo_posicao_009_a_017
|
60
|
+
''.rjust(9, ' ')
|
61
|
+
end
|
62
|
+
|
63
|
+
# Tipo de Inscrição da Empresa
|
64
|
+
# 1 posição
|
65
|
+
#
|
66
|
+
def header_arquivo_posicao_018_a_018
|
67
|
+
tipo_inscricao
|
68
|
+
end
|
69
|
+
|
70
|
+
# Número de Inscrição da Empresa (CPF/CNPJ)
|
71
|
+
# 14 Posições
|
72
|
+
#
|
73
|
+
def header_arquivo_posicao_019_a_032
|
74
|
+
documento_cedente.to_s.rjust(14, '0')
|
75
|
+
end
|
76
|
+
|
77
|
+
# Código do Convênio no Banco
|
78
|
+
# 20 posições
|
79
|
+
#
|
80
|
+
def header_arquivo_posicao_033_a_052
|
81
|
+
codigo_convenio
|
82
|
+
end
|
83
|
+
|
84
|
+
# Informações da conta bancária
|
85
|
+
# O padrão da FEBRABAN é:
|
86
|
+
# Posição de 53 até 57 com 05 posições = Agência Mantenedora da Conta
|
87
|
+
# Posição de 58 até 58 com 01 posições = DV -> Dígito Verificador da Agência
|
88
|
+
# Posição de 59 até 70 com 12 posições = Conta -> Número Número da Conta Corrente
|
89
|
+
# Posição de 71 até 71 com 01 posições = DV -> Dígito Verificador da Conta
|
90
|
+
# Posição de 72 até 72 com 01 posições = DV -> Dígito Verificador da Ag/Conta
|
91
|
+
#
|
92
|
+
# Porém como no Brasil os bancos não conseguem seguir um padrão, cada banco faz da sua maneira
|
93
|
+
# 20 posições
|
94
|
+
#
|
95
|
+
def header_arquivo_posicao_053_a_072
|
96
|
+
informacoes_da_conta
|
97
|
+
end
|
98
|
+
|
99
|
+
# Nome da Empresa
|
100
|
+
# 30 posições
|
101
|
+
#
|
102
|
+
def header_arquivo_posicao_073_a_102
|
103
|
+
nome_empresa_formatada
|
104
|
+
end
|
105
|
+
|
106
|
+
# Nome do Banco
|
107
|
+
# 30 posições
|
108
|
+
#
|
109
|
+
def header_arquivo_posicao_103_a_132
|
110
|
+
nome_banco
|
111
|
+
end
|
112
|
+
|
113
|
+
# Uso Exclusivo FEBRABAN / CNAB
|
114
|
+
# 10 posições
|
115
|
+
#
|
116
|
+
def header_arquivo_posicao_133_a_142
|
117
|
+
''.rjust(10, ' ')
|
118
|
+
end
|
119
|
+
|
120
|
+
# Código Remessa / Retorno (1 para remessa)
|
121
|
+
# 1 posição
|
122
|
+
#
|
123
|
+
def header_arquivo_posicao_143_a_143
|
124
|
+
'1'
|
125
|
+
end
|
126
|
+
|
127
|
+
# Data de Geração do Arquivo no formato (DDMMYYYY)
|
128
|
+
# 8 posições
|
129
|
+
#
|
130
|
+
def header_arquivo_posicao_144_a_151
|
131
|
+
data_geracao
|
132
|
+
end
|
133
|
+
|
134
|
+
# Hora de Geração do Arquivo no formato (HHMMSS)
|
135
|
+
# 6 posições
|
136
|
+
#
|
137
|
+
def header_arquivo_posicao_152_a_157
|
138
|
+
hora_geracao
|
139
|
+
end
|
140
|
+
|
141
|
+
# Número Seqüencial do Arquivo
|
142
|
+
# 6 posições
|
143
|
+
#
|
144
|
+
def header_arquivo_posicao_158_a_163
|
145
|
+
"#{sequencial_remessa}".rjust(6, '0')
|
146
|
+
end
|
147
|
+
|
148
|
+
# Numero da Versão do Layout do Arquivo
|
149
|
+
# 3 posições
|
150
|
+
#
|
151
|
+
def header_arquivo_posicao_164_a_166
|
152
|
+
versao_layout_arquivo
|
153
|
+
end
|
154
|
+
|
155
|
+
# Densidade de Gravação do Arquivo
|
156
|
+
# 5 posições
|
157
|
+
#
|
158
|
+
def header_arquivo_posicao_167_a_171
|
159
|
+
''.rjust(5, '0')
|
160
|
+
end
|
161
|
+
|
162
|
+
# Espaço reservado para o Banco
|
163
|
+
# 20 posições
|
164
|
+
#
|
165
|
+
def header_arquivo_posicao_172_a_191
|
166
|
+
''.rjust(20, '0')
|
167
|
+
end
|
168
|
+
|
169
|
+
# Espaço reservado para a Empresa
|
170
|
+
# 20 posições
|
171
|
+
#
|
172
|
+
def header_arquivo_posicao_192_a_211
|
173
|
+
''.rjust(20, '0')
|
174
|
+
end
|
175
|
+
|
176
|
+
# Para Uso Exclusivo FEBRABAN / CNAB
|
177
|
+
# 29 posições
|
178
|
+
#
|
179
|
+
def header_arquivo_posicao_212_a_240
|
180
|
+
complemento_header
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
module BrBoleto
|
2
|
+
module Remessa
|
3
|
+
module Cnab240
|
4
|
+
module Helper
|
5
|
+
module HeaderLote
|
6
|
+
# Monta o registro header do lote
|
7
|
+
#
|
8
|
+
# @param nro_lote [Integer]
|
9
|
+
# numero do lote no arquivo (iterar a cada novo lote)
|
10
|
+
#
|
11
|
+
# @return [String]
|
12
|
+
#
|
13
|
+
def monta_header_lote(lote, nr_lote)
|
14
|
+
header_lote = '' # CAMPO TAMANHO
|
15
|
+
header_lote << header_lote_posicao_001_a_003 # codigo banco 3
|
16
|
+
header_lote << header_lote_posicao_004_a_007(nr_lote)# lote servico 4
|
17
|
+
header_lote << header_lote_posicao_008_a_008 # tipo de registro 1
|
18
|
+
header_lote << header_lote_posicao_009_a_009 # tipo de operacao 1
|
19
|
+
header_lote << header_lote_posicao_010_a_011 # tipo de servico 2
|
20
|
+
header_lote << header_lote_posicao_012_a_013 # uso exclusivo 2
|
21
|
+
header_lote << header_lote_posicao_014_a_016 # versao layout do lote 3
|
22
|
+
header_lote << header_lote_posicao_017_a_017 # uso exclusivo 1
|
23
|
+
header_lote << header_lote_posicao_018_a_018 # tipo de inscricao 1
|
24
|
+
header_lote << header_lote_posicao_019_a_033 # inscricao cedente 15
|
25
|
+
header_lote << header_lote_posicao_034_a_053(lote) # codigo do convenio 20
|
26
|
+
header_lote << header_lote_posicao_054_a_073 # informacoes conta 20
|
27
|
+
header_lote << header_lote_posicao_074_a_103 # nome empresa 30
|
28
|
+
header_lote << header_lote_posicao_104_a_143 # 1a mensagem 40
|
29
|
+
header_lote << header_lote_posicao_144_a_183 # 2a mensagem 40
|
30
|
+
header_lote << header_lote_posicao_184_a_191 # numero remessa 8
|
31
|
+
header_lote << header_lote_posicao_192_a_199 # data gravacao 8
|
32
|
+
header_lote << header_lote_posicao_200_a_207 # data do credito 8
|
33
|
+
header_lote << header_lote_posicao_208_a_240 # complemento 33
|
34
|
+
header_lote.upcase
|
35
|
+
end
|
36
|
+
# Código do Banco na Compensação
|
37
|
+
# 3 posições
|
38
|
+
#
|
39
|
+
def header_lote_posicao_001_a_003
|
40
|
+
codigo_banco
|
41
|
+
end
|
42
|
+
|
43
|
+
# Lote de Serviço
|
44
|
+
# 4 posições
|
45
|
+
#
|
46
|
+
def header_lote_posicao_004_a_007(numero_do_lote)
|
47
|
+
"#{numero_do_lote}".rjust(4, '0')
|
48
|
+
end
|
49
|
+
|
50
|
+
# Tipo de Registro
|
51
|
+
# 1 posição
|
52
|
+
#
|
53
|
+
def header_lote_posicao_008_a_008
|
54
|
+
'1'
|
55
|
+
end
|
56
|
+
|
57
|
+
# Tipo da Operação
|
58
|
+
# 1 posição
|
59
|
+
#
|
60
|
+
def header_lote_posicao_009_a_009
|
61
|
+
'R'
|
62
|
+
end
|
63
|
+
|
64
|
+
# Tipo do Serviço
|
65
|
+
# 2 posições
|
66
|
+
#
|
67
|
+
def header_lote_posicao_010_a_011
|
68
|
+
'01'
|
69
|
+
end
|
70
|
+
|
71
|
+
# Forma de Lançamento
|
72
|
+
# 2 posições
|
73
|
+
#
|
74
|
+
def header_lote_posicao_012_a_013
|
75
|
+
'00'
|
76
|
+
end
|
77
|
+
|
78
|
+
# Nº da Versão do Layout do Lote
|
79
|
+
# 3 posições
|
80
|
+
#
|
81
|
+
def header_lote_posicao_014_a_016
|
82
|
+
versao_layout_lote
|
83
|
+
end
|
84
|
+
|
85
|
+
# Uso Exclusivo da FEBRABAN/CNAB
|
86
|
+
# 1 posição
|
87
|
+
#
|
88
|
+
def header_lote_posicao_017_a_017
|
89
|
+
' '
|
90
|
+
end
|
91
|
+
|
92
|
+
# Tipo de Inscrição da Empresa
|
93
|
+
# 1 posição
|
94
|
+
#
|
95
|
+
def header_lote_posicao_018_a_018
|
96
|
+
tipo_inscricao
|
97
|
+
end
|
98
|
+
|
99
|
+
# Número de Inscrição da Empresa
|
100
|
+
# 15 posições
|
101
|
+
#
|
102
|
+
def header_lote_posicao_019_a_033
|
103
|
+
documento_cedente.to_s.rjust(15, '0')
|
104
|
+
end
|
105
|
+
|
106
|
+
# Convenio -> Código do Cedente no Banco
|
107
|
+
# 20 posições
|
108
|
+
#
|
109
|
+
def header_lote_posicao_034_a_053(lote)
|
110
|
+
convenio_lote(lote)
|
111
|
+
end
|
112
|
+
|
113
|
+
# Informações da conta bancária
|
114
|
+
# O padrão da FEBRABAN é:
|
115
|
+
# Posição de 54 até 58 com 05 posições = Agência Mantenedora da Conta
|
116
|
+
# Posição de 59 até 59 com 01 posições = DV -> Dígito Verificador da Agência
|
117
|
+
# Posição de 60 até 71 com 12 posições = Conta -> Número Número da Conta Corrente
|
118
|
+
# Posição de 72 até 72 com 01 posições = DV -> Dígito Verificador da Conta
|
119
|
+
# Posição de 73 até 73 com 01 posições = DV -> Dígito Verificador da Ag/Conta
|
120
|
+
#
|
121
|
+
# Porém como no Brasil os bancos não conseguem seguir um padrão, cada banco faz da sua maneira
|
122
|
+
# 20 posições
|
123
|
+
#
|
124
|
+
def header_lote_posicao_054_a_073
|
125
|
+
informacoes_da_conta
|
126
|
+
end
|
127
|
+
|
128
|
+
# Nome da Empresa
|
129
|
+
# 30 posições
|
130
|
+
#
|
131
|
+
def header_lote_posicao_074_a_103
|
132
|
+
nome_empresa_formatada
|
133
|
+
end
|
134
|
+
|
135
|
+
# Mensagem 1
|
136
|
+
# 40 posições
|
137
|
+
#
|
138
|
+
def header_lote_posicao_104_a_143
|
139
|
+
mensagem_1.to_s.adjust_size_to(40)
|
140
|
+
end
|
141
|
+
|
142
|
+
# Mensagem 2
|
143
|
+
# 40 posições
|
144
|
+
#
|
145
|
+
def header_lote_posicao_144_a_183
|
146
|
+
mensagem_2.to_s.adjust_size_to(40)
|
147
|
+
end
|
148
|
+
|
149
|
+
# Número Remessa/Retorno
|
150
|
+
# 8 posições
|
151
|
+
#
|
152
|
+
def header_lote_posicao_184_a_191
|
153
|
+
sequencial_remessa.to_s.rjust(8, '0')
|
154
|
+
end
|
155
|
+
|
156
|
+
# Data de Gravação Remessa/Retorno
|
157
|
+
# 8 posições
|
158
|
+
#
|
159
|
+
def header_lote_posicao_192_a_199
|
160
|
+
data_geracao
|
161
|
+
end
|
162
|
+
|
163
|
+
# Data do Crédito
|
164
|
+
# 8 posições
|
165
|
+
#
|
166
|
+
def header_lote_posicao_200_a_207
|
167
|
+
''.rjust(8, '0')
|
168
|
+
end
|
169
|
+
|
170
|
+
# Uso Exclusivo FEBRABAN/CNAB
|
171
|
+
# 33 posições
|
172
|
+
#
|
173
|
+
def header_lote_posicao_208_a_240
|
174
|
+
''.rjust(33, ' ')
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
@@ -0,0 +1,349 @@
|
|
1
|
+
module BrBoleto
|
2
|
+
module Remessa
|
3
|
+
module Cnab240
|
4
|
+
module Helper
|
5
|
+
module SegmentoP
|
6
|
+
# Monta o registro segmento P 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_p(pagamento, nr_lote, sequencial)
|
18
|
+
# campos com * na frente nao foram implementados
|
19
|
+
# # DESCRICAO TAMANHO
|
20
|
+
segmento_p = ''
|
21
|
+
segmento_p << segmento_p_posicao_001_a_003 # codigo banco 3
|
22
|
+
segmento_p << segmento_p_posicao_004_a_007(nr_lote) # lote de servico 4
|
23
|
+
segmento_p << segmento_p_posicao_008_a_008 # tipo de registro 1
|
24
|
+
segmento_p << segmento_p_posicao_009_a_013(sequencial) # num. sequencial do registro no lote 5
|
25
|
+
segmento_p << segmento_p_posicao_014_a_014 # cod. segmento 1
|
26
|
+
segmento_p << segmento_p_posicao_015_a_015 # uso exclusivo 1
|
27
|
+
segmento_p << segmento_p_posicao_016_a_017 # cod. movimento remessa 2
|
28
|
+
segmento_p << segmento_p_posicao_018_a_022 # agencia 5
|
29
|
+
segmento_p << segmento_p_posicao_023_a_023 # dv agencia 1
|
30
|
+
segmento_p << segmento_p_posicao_024_a_057(pagamento) # informacoes da conta 34
|
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
|
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
|
36
|
+
segmento_p << segmento_p_posicao_063_a_077(pagamento) # numro do documento 15
|
37
|
+
segmento_p << segmento_p_posicao_078_a_085(pagamento) # data de venc. 8
|
38
|
+
segmento_p << segmento_p_posicao_086_a_100(pagamento) # valor documento 15
|
39
|
+
segmento_p << segmento_p_posicao_101_a_105 # agencia cobradora 5
|
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
|
43
|
+
segmento_p << segmento_p_posicao_110_a_117(pagamento) # data de emissao titulo 8
|
44
|
+
segmento_p << segmento_p_posicao_118_a_118 # cod. do juros 1 *
|
45
|
+
segmento_p << segmento_p_posicao_119_a_126 # data juros 8 *
|
46
|
+
segmento_p << segmento_p_posicao_127_a_141 # valor juros 15 *
|
47
|
+
segmento_p << segmento_p_posicao_142_a_142(pagamento) # cod. do desconto 1
|
48
|
+
segmento_p << segmento_p_posicao_143_a_150(pagamento) # data desconto 8
|
49
|
+
segmento_p << segmento_p_posicao_151_a_165(pagamento) # valor desconto 15
|
50
|
+
segmento_p << segmento_p_posicao_166_a_180(pagamento) # valor IOF 15
|
51
|
+
segmento_p << segmento_p_posicao_181_a_195(pagamento) # valor abatimento 15
|
52
|
+
segmento_p << segmento_p_posicao_196_a_220 # identificacao titulo empresa 25 *
|
53
|
+
segmento_p << segmento_p_posicao_221_a_221 # cod. para protesto 1 *
|
54
|
+
segmento_p << segmento_p_posicao_222_a_223 # dias para protesto 2 *
|
55
|
+
segmento_p << segmento_p_posicao_224_a_224 # cod. para baixa 1 *
|
56
|
+
segmento_p << segmento_p_posicao_225_a_227 # dias para baixa 2 *
|
57
|
+
segmento_p << segmento_p_posicao_228_a_229 # cod. da moeda 2
|
58
|
+
segmento_p << segmento_p_posicao_230_a_239 # uso exclusivo 10
|
59
|
+
segmento_p << segmento_p_posicao_240_a_240 # uso exclusivo 1
|
60
|
+
segmento_p.upcase
|
61
|
+
end
|
62
|
+
|
63
|
+
def segmento_p_posicao_001_a_003
|
64
|
+
codigo_banco
|
65
|
+
end
|
66
|
+
|
67
|
+
# Lote de Serviço: Número seqüencial para identificar univocamente um lote de serviço.
|
68
|
+
# Criado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo.
|
69
|
+
# Preencher com '0001' para o primeiro lote do arquivo.
|
70
|
+
# Para os demais: número do lote anterior acrescido de 1. O número não poderá ser repetido dentro do arquivo.
|
71
|
+
# 4 posições
|
72
|
+
#
|
73
|
+
def segmento_p_posicao_004_a_007(numero_do_lote)
|
74
|
+
numero_do_lote.to_s.rjust(4, '0')
|
75
|
+
end
|
76
|
+
|
77
|
+
# Tipo do registro -> Padrão 3
|
78
|
+
# 1 posição
|
79
|
+
#
|
80
|
+
def segmento_p_posicao_008_a_008
|
81
|
+
'3'
|
82
|
+
end
|
83
|
+
|
84
|
+
# Nº Sequencial do Registro no Lote:
|
85
|
+
# Número adotado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo,
|
86
|
+
# para identificar a seqüência de registros encaminhados no lote.
|
87
|
+
# Deve ser inicializado sempre em '1', em cada novo lote.
|
88
|
+
# 5 posições
|
89
|
+
#
|
90
|
+
def segmento_p_posicao_009_a_013(sequencial)
|
91
|
+
sequencial.to_s.rjust(5, '0')
|
92
|
+
end
|
93
|
+
|
94
|
+
# Cód. Segmento do Registro - Default: "P"
|
95
|
+
# 1 posição
|
96
|
+
#
|
97
|
+
def segmento_p_posicao_014_a_014
|
98
|
+
"P"
|
99
|
+
end
|
100
|
+
|
101
|
+
# Uso Exclusivo FEBRABAN/CNAB
|
102
|
+
# 1 posição
|
103
|
+
#
|
104
|
+
def segmento_p_posicao_015_a_015
|
105
|
+
' '
|
106
|
+
end
|
107
|
+
|
108
|
+
# cod. movimento remessa -> Padrão 01 = Entrada de Titulos
|
109
|
+
# 2 posições
|
110
|
+
#
|
111
|
+
def segmento_p_posicao_016_a_017
|
112
|
+
'01'
|
113
|
+
end
|
114
|
+
|
115
|
+
# Agência Mantenedora da Conta
|
116
|
+
# 5 posições
|
117
|
+
#
|
118
|
+
def segmento_p_posicao_018_a_022
|
119
|
+
agencia.to_s.rjust(5, '0')
|
120
|
+
end
|
121
|
+
|
122
|
+
# Dígito Verificador da Agência
|
123
|
+
# 1 posição
|
124
|
+
#
|
125
|
+
def segmento_p_posicao_023_a_023
|
126
|
+
digito_agencia.to_s
|
127
|
+
end
|
128
|
+
|
129
|
+
# O padrão da FEBRABAN é:
|
130
|
+
# Posição de 24 até 35 com 12 posições = Número da Conta Corrente
|
131
|
+
# Posição de 36 até 36 com 01 posições = DV -> Dígito Verificador da Conta
|
132
|
+
# Posição de 37 até 37 com 01 posições = DV -> Dígito Verificador da Ag/Conta
|
133
|
+
# Posição de 38 até 57 com 20 posições = Nosso Número -> Identificação do Título no Banco
|
134
|
+
# Mas cada banco tem seu padrão
|
135
|
+
# 34 posições
|
136
|
+
#
|
137
|
+
def segmento_p_posicao_024_a_057(pagamento)
|
138
|
+
complemento_p(pagamento)
|
139
|
+
end
|
140
|
+
|
141
|
+
# Código da carteira
|
142
|
+
# 1 posição
|
143
|
+
#
|
144
|
+
def segmento_p_posicao_058_a_058
|
145
|
+
codigo_carteira
|
146
|
+
end
|
147
|
+
|
148
|
+
# Forma de Cadastr. do Título no Banco
|
149
|
+
# 1 posição
|
150
|
+
#
|
151
|
+
def segmento_p_posicao_059_a_059
|
152
|
+
forma_cadastramento
|
153
|
+
end
|
154
|
+
|
155
|
+
# Tipo de Documento
|
156
|
+
# 1 posição
|
157
|
+
#
|
158
|
+
def segmento_p_posicao_060_a_060
|
159
|
+
'2'
|
160
|
+
end
|
161
|
+
|
162
|
+
# Identificação da Emissão do Bloqueto
|
163
|
+
# 1 posição
|
164
|
+
#
|
165
|
+
def segmento_p_posicao_061_a_061
|
166
|
+
emissao_boleto
|
167
|
+
end
|
168
|
+
|
169
|
+
# Identificação da Distribuição
|
170
|
+
# 1 posição
|
171
|
+
#
|
172
|
+
def segmento_p_posicao_062_a_062
|
173
|
+
distribuicao_boleto
|
174
|
+
end
|
175
|
+
|
176
|
+
# Número do Documento de Cobrança
|
177
|
+
# Cada banco tem seu padrão
|
178
|
+
# 15 Posições
|
179
|
+
#
|
180
|
+
def segmento_p_posicao_063_a_077(pagamento)
|
181
|
+
segmento_p_numero_do_documento(pagamento)
|
182
|
+
end
|
183
|
+
|
184
|
+
# Data de Vencimento do Título
|
185
|
+
# 8 posições
|
186
|
+
#
|
187
|
+
def segmento_p_posicao_078_a_085(pagamento)
|
188
|
+
pagamento.data_vencimento.strftime('%d%m%Y')
|
189
|
+
end
|
190
|
+
|
191
|
+
# Valor Nominal do Título
|
192
|
+
# 15 posições (13 posições para valor inteiro e 2 posições para valor quebrado)
|
193
|
+
#
|
194
|
+
def segmento_p_posicao_086_a_100(pagamento)
|
195
|
+
pagamento.valor_documento_formatado(15)
|
196
|
+
end
|
197
|
+
|
198
|
+
# Agencia cobradora
|
199
|
+
# 5 posições
|
200
|
+
#
|
201
|
+
def segmento_p_posicao_101_a_105
|
202
|
+
''.rjust(5, '0')
|
203
|
+
end
|
204
|
+
|
205
|
+
# Dígito Verificador da Agência cobradora
|
206
|
+
# 1 posição
|
207
|
+
#
|
208
|
+
def segmento_p_posicao_106_a_106
|
209
|
+
' '
|
210
|
+
end
|
211
|
+
|
212
|
+
# Espécie do Título
|
213
|
+
# 2 posições
|
214
|
+
#
|
215
|
+
def segmento_p_posicao_107_a_108
|
216
|
+
especie_titulo
|
217
|
+
end
|
218
|
+
|
219
|
+
# Identific. de Título Aceito/Não Aceito (A ou N)
|
220
|
+
# 1 posição
|
221
|
+
#
|
222
|
+
def segmento_p_posicao_109_a_109
|
223
|
+
aceite
|
224
|
+
end
|
225
|
+
|
226
|
+
# Data da Emissão do Título
|
227
|
+
# 8 posições
|
228
|
+
#
|
229
|
+
def segmento_p_posicao_110_a_117(pagamento)
|
230
|
+
pagamento.data_emissao.strftime('%d%m%Y')
|
231
|
+
end
|
232
|
+
|
233
|
+
# Código do Juros de Mora
|
234
|
+
# 1 posição
|
235
|
+
#
|
236
|
+
def segmento_p_posicao_118_a_118
|
237
|
+
'0'
|
238
|
+
end
|
239
|
+
|
240
|
+
# Data do Juros de Mora
|
241
|
+
# 8 posições
|
242
|
+
#
|
243
|
+
def segmento_p_posicao_119_a_126
|
244
|
+
''.rjust(8, '0')
|
245
|
+
end
|
246
|
+
|
247
|
+
# Juros de Mora por Dia/Taxa
|
248
|
+
# 15 posições
|
249
|
+
#
|
250
|
+
def segmento_p_posicao_127_a_141
|
251
|
+
''.rjust(15, '0')
|
252
|
+
end
|
253
|
+
|
254
|
+
# Código do Desconto 1
|
255
|
+
# 1 posição
|
256
|
+
#
|
257
|
+
def segmento_p_posicao_142_a_142(pagamento)
|
258
|
+
pagamento.cod_desconto
|
259
|
+
end
|
260
|
+
|
261
|
+
# Data do Desconto 1
|
262
|
+
# 8 posições
|
263
|
+
#
|
264
|
+
def segmento_p_posicao_143_a_150(pagamento)
|
265
|
+
pagamento.data_desconto_formatado('%d%m%Y')
|
266
|
+
end
|
267
|
+
|
268
|
+
# Valor/Percentual a ser Concedido
|
269
|
+
# 15 posições
|
270
|
+
#
|
271
|
+
def segmento_p_posicao_151_a_165(pagamento)
|
272
|
+
pagamento.valor_desconto_formatado(15)
|
273
|
+
end
|
274
|
+
|
275
|
+
# Valor do IOF a ser Recolhido
|
276
|
+
# 15 posições
|
277
|
+
#
|
278
|
+
def segmento_p_posicao_166_a_180(pagamento)
|
279
|
+
pagamento.valor_iof_formatado(15)
|
280
|
+
end
|
281
|
+
|
282
|
+
# Valor do Abatimento
|
283
|
+
# 15 posições
|
284
|
+
#
|
285
|
+
def segmento_p_posicao_181_a_195(pagamento)
|
286
|
+
pagamento.valor_abatimento_formatado(15)
|
287
|
+
end
|
288
|
+
|
289
|
+
# Identificação do Título na Empresa
|
290
|
+
# 25 posições
|
291
|
+
#
|
292
|
+
def segmento_p_posicao_196_a_220
|
293
|
+
''.rjust(25, ' ')
|
294
|
+
end
|
295
|
+
|
296
|
+
# Código para Protesto
|
297
|
+
# 1 posição
|
298
|
+
#
|
299
|
+
def segmento_p_posicao_221_a_221
|
300
|
+
'1'
|
301
|
+
end
|
302
|
+
|
303
|
+
# Número de Dias para Protesto
|
304
|
+
# 2 posições
|
305
|
+
#
|
306
|
+
def segmento_p_posicao_222_a_223
|
307
|
+
'00'
|
308
|
+
end
|
309
|
+
|
310
|
+
# Código para Baixa/Devolução
|
311
|
+
# 1 posição
|
312
|
+
#
|
313
|
+
def segmento_p_posicao_224_a_224
|
314
|
+
'0'
|
315
|
+
end
|
316
|
+
|
317
|
+
# Número de Dias para Baixa/Devolução
|
318
|
+
# 3 posoções
|
319
|
+
#
|
320
|
+
def segmento_p_posicao_225_a_227
|
321
|
+
'000'
|
322
|
+
end
|
323
|
+
|
324
|
+
# Código da Moeda (09 para real)
|
325
|
+
# 2 posições
|
326
|
+
#
|
327
|
+
def segmento_p_posicao_228_a_229
|
328
|
+
'09'
|
329
|
+
end
|
330
|
+
|
331
|
+
# Nº do Contrato da Operação de Crédito (Uso do banco)
|
332
|
+
# 10 posições
|
333
|
+
#
|
334
|
+
def segmento_p_posicao_230_a_239
|
335
|
+
''.rjust(10, '0')
|
336
|
+
end
|
337
|
+
|
338
|
+
# Uso livre banco/empresa ou autorização de pagamento parcial
|
339
|
+
# 1 posição
|
340
|
+
#
|
341
|
+
def segmento_p_posicao_240_a_240
|
342
|
+
' '
|
343
|
+
end
|
344
|
+
|
345
|
+
end
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|