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