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,208 @@
1
+ module Helper
2
+ module HeaderArquivoTest
3
+ def test_HeaderArquivoTest_metodo_monta_header_arquivo_deve_ter_o_conteudo_dos_metodos_na_sequencia
4
+ subject.stubs(:header_arquivo_posicao_001_a_003).returns(" 001_a_003")
5
+ subject.stubs(:header_arquivo_posicao_004_a_007).returns(" 004_a_007")
6
+ subject.stubs(:header_arquivo_posicao_008_a_008).returns(" 008_a_008")
7
+ subject.stubs(:header_arquivo_posicao_009_a_017).returns(" 009_a_017")
8
+ subject.stubs(:header_arquivo_posicao_018_a_018).returns(" 018_a_018")
9
+ subject.stubs(:header_arquivo_posicao_019_a_032).returns(" 019_a_032")
10
+ subject.stubs(:header_arquivo_posicao_033_a_052).returns(" 033_a_052")
11
+ subject.stubs(:header_arquivo_posicao_053_a_072).returns(" 053_a_072")
12
+ subject.stubs(:header_arquivo_posicao_073_a_102).returns(" 073_a_102")
13
+ subject.stubs(:header_arquivo_posicao_103_a_132).returns(" 103_a_132")
14
+ subject.stubs(:header_arquivo_posicao_133_a_142).returns(" 133_a_142")
15
+ subject.stubs(:header_arquivo_posicao_143_a_143).returns(" 143_a_143")
16
+ subject.stubs(:header_arquivo_posicao_144_a_151).returns(" 144_a_151")
17
+ subject.stubs(:header_arquivo_posicao_152_a_157).returns(" 152_a_157")
18
+ subject.stubs(:header_arquivo_posicao_158_a_163).returns(" 158_a_163")
19
+ subject.stubs(:header_arquivo_posicao_164_a_166).returns(" 164_a_166")
20
+ subject.stubs(:header_arquivo_posicao_167_a_171).returns(" 167_a_171")
21
+ subject.stubs(:header_arquivo_posicao_172_a_191).returns(" 172_a_191")
22
+ subject.stubs(:header_arquivo_posicao_192_a_211).returns(" 192_a_211")
23
+ subject.stubs(:header_arquivo_posicao_212_a_240).returns(" 212_a_240")
24
+ # Deve dar um upcase
25
+ subject.monta_header_arquivo.must_equal(" 001_A_003 004_A_007 008_A_008 009_A_017 018_A_018 019_A_032 033_A_052 053_A_072 073_A_102 103_A_132 133_A_142 143_A_143 144_A_151 152_A_157 158_A_163 164_A_166 167_A_171 172_A_191 192_A_211 212_A_240")
26
+ end
27
+
28
+ # Código do banco
29
+ # 3 posições
30
+ # Por padrão deve retornar o "codigo_banco"
31
+ #
32
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_001_a_003
33
+ subject.expects(:codigo_banco).returns("669")
34
+ subject.header_arquivo_posicao_001_a_003.must_equal("669")
35
+ end
36
+
37
+ # Lote de serviço
38
+ # 4 posições
39
+ # Por padrão retorna 0000
40
+ #
41
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_004_a_007
42
+ subject.header_arquivo_posicao_004_a_007.must_equal('0000')
43
+ end
44
+
45
+ # Tipo do registro
46
+ # 1 posição
47
+ # Por padrão retorna '0'
48
+ #
49
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_008_a_008
50
+ subject.header_arquivo_posicao_008_a_008.must_equal('0')
51
+ end
52
+
53
+ # Uso Exclusivo FEBRABAN / CNAB
54
+ # 09 posições
55
+ # Por padrão retorna 9 posições em branco
56
+ #
57
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_009_a_017
58
+ subject.header_arquivo_posicao_009_a_017.must_equal( ''.rjust(9, ' ') )
59
+ end
60
+
61
+ # Tipo de Inscrição da Empresa
62
+ # 1 posição
63
+ # retorna o valor do metodo "tipo_inscricao"
64
+ #
65
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_018_a_018
66
+ subject.expects(:tipo_inscricao).returns("5")
67
+ subject.header_arquivo_posicao_018_a_018.must_equal("5")
68
+ end
69
+
70
+ # Número de Inscrição da Empresa (CPF/CNPJ)
71
+ # 14 Posições
72
+ # Retorna o documento_cedente com 14 posições preenchendo com zeros
73
+ #
74
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_019_a_032
75
+ subject.expects(:documento_cedente).returns("1234567890")
76
+ subject.header_arquivo_posicao_019_a_032.must_equal("00001234567890")
77
+ end
78
+
79
+ # Código do Convênio no Banco
80
+ # 20 posições
81
+ # Deve retornar o valor do metodo "codigo_convenio"
82
+ #
83
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_033_a_052
84
+ subject.expects(:codigo_convenio).returns("1345646432132")
85
+ subject.header_arquivo_posicao_033_a_052.must_equal("1345646432132")
86
+ end
87
+
88
+ # Informações da conta bancária
89
+ # O padrão da FEBRABAN é:
90
+ # Posição de 53 até 57 com 05 posições = Agência Mantenedora da Conta
91
+ # Posição de 58 até 58 com 01 posições = DV -> Dígito Verificador da Agência
92
+ # Posição de 59 até 70 com 12 posições = Conta -> Número Número da Conta Corrente
93
+ # Posição de 71 até 71 com 01 posições = DV -> Dígito Verificador da Conta
94
+ # Posição de 72 até 72 com 01 posições = DV -> Dígito Verificador da Ag/Conta
95
+ #
96
+ # Porém como no Brasil os bancos não conseguem seguir um padrão, cada banco faz da sua maneira
97
+ # 20 posições
98
+ # Retorna o valor contido no metodo "informacoes_da_conta"
99
+ #
100
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_053_a_072
101
+ subject.expects(:informacoes_da_conta).returns("INFO_CONTA")
102
+ subject.header_arquivo_posicao_053_a_072.must_equal("INFO_CONTA")
103
+ end
104
+
105
+ # Nome da Empresa
106
+ # 30 posições
107
+ # retorna o valor do metodo "nome_empresa_formatada"
108
+ #
109
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_073_a_102
110
+ subject.expects(:nome_empresa_formatada).returns("EMPRESA")
111
+ subject.header_arquivo_posicao_073_a_102.must_equal("EMPRESA")
112
+ end
113
+
114
+ # Nome do Banco
115
+ # 30 posições
116
+ # retorna o valor do metodo "nome_banco"
117
+ #
118
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_103_a_132
119
+ subject.expects(:nome_banco).returns("nome_banco")
120
+ subject.header_arquivo_posicao_103_a_132.must_equal('nome_banco')
121
+ end
122
+
123
+ # Uso Exclusivo FEBRABAN / CNAB
124
+ # 10 posições
125
+ # Valores em branco
126
+ #
127
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_133_a_142
128
+ subject.header_arquivo_posicao_133_a_142.must_equal(''.rjust(10, ' '))
129
+ end
130
+
131
+ # Código Remessa / Retorno (1 para remessa)
132
+ # 1 posição
133
+ # Padrão retorna o valor 1
134
+ #
135
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_143_a_143
136
+ subject.header_arquivo_posicao_143_a_143.must_equal("1")
137
+ end
138
+
139
+ # Data de Geração do Arquivo no formato (DDMMYYYY)
140
+ # 8 posições
141
+ # Deve pegar o valor contido no metodo "data_geracao"
142
+ #
143
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_144_a_151
144
+ subject.expects(:data_geracao).returns("data_geracao")
145
+ subject.header_arquivo_posicao_144_a_151.must_equal("data_geracao")
146
+ end
147
+
148
+ # Hora de Geração do Arquivo no formato (HHMMSS)
149
+ # 6 posições
150
+ # Deve pegar o valor contido no metodo "hora_geracao"
151
+ #
152
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_152_a_157
153
+ subject.expects(:hora_geracao).returns("hora_geracao")
154
+ subject.header_arquivo_posicao_152_a_157.must_equal("hora_geracao")
155
+ end
156
+
157
+ # Número Seqüencial do Arquivo
158
+ # 6 posições
159
+ # Por padrão pega o valor contido no metodo "sequencial_remessa" ajsutando para 6 posições
160
+ #
161
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_158_a_163
162
+ subject.expects(:sequencial_remessa).returns("1234")
163
+ subject.header_arquivo_posicao_158_a_163.must_equal("001234")
164
+ end
165
+
166
+ # Numero da Versão do Layout do Arquivo
167
+ # 3 posições
168
+ # Deve pegar o valor contido no metodo "versao_layout_arquivo"
169
+ #
170
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_164_a_166
171
+ subject.expects(:versao_layout_arquivo).returns("123")
172
+ subject.header_arquivo_posicao_164_a_166.must_equal("123")
173
+ end
174
+
175
+ # Densidade de Gravação do Arquivo
176
+ # 5 posições
177
+ # Por padrão retorna 5 zeros
178
+ #
179
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_167_a_171
180
+ subject.header_arquivo_posicao_167_a_171.must_equal(''.rjust(5, '0'))
181
+ end
182
+
183
+ # Espaço reservado para o Banco
184
+ # 20 posições
185
+ # Por padrão retorna 20 zeros
186
+ #
187
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_172_a_191
188
+ subject.header_arquivo_posicao_172_a_191.must_equal(''.rjust(20, '0'))
189
+ end
190
+
191
+ # Espaço reservado para a Empresa
192
+ # 20 posições
193
+ # Por padrão retorna 20 zeros
194
+ #
195
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_192_a_211
196
+ subject.header_arquivo_posicao_192_a_211.must_equal(''.rjust(20, '0'))
197
+ end
198
+
199
+ # Para Uso Exclusivo FEBRABAN / CNAB
200
+ # 29 posições
201
+ # Padrão pega o valor do metodo "complemento_header"
202
+ #
203
+ def test_HeaderArquivoTest_metodo_header_arquivo_posicao_212_a_240
204
+ subject.expects(:complemento_header).returns("123456")
205
+ subject.header_arquivo_posicao_212_a_240.must_equal("123456")
206
+ end
207
+ end
208
+ end
@@ -0,0 +1,200 @@
1
+ module Helper
2
+ module HeaderLoteTest
3
+ def test_HeaderLoteTest_metodo_monta_header_lote_deve_ter_o_conteudo_dos_metodos_na_sequencia
4
+ subject.stubs(:header_lote_posicao_001_a_003).returns(" 001_a_003")
5
+ subject.stubs(:header_lote_posicao_004_a_007).with(1).returns(" 004_a_007")
6
+ subject.stubs(:header_lote_posicao_008_a_008).returns(" 008_a_008")
7
+ subject.stubs(:header_lote_posicao_009_a_009).returns(" 009_a_009")
8
+ subject.stubs(:header_lote_posicao_010_a_011).returns(" 010_a_011")
9
+ subject.stubs(:header_lote_posicao_012_a_013).returns(" 012_a_013")
10
+ subject.stubs(:header_lote_posicao_014_a_016).returns(" 014_a_016")
11
+ subject.stubs(:header_lote_posicao_017_a_017).returns(" 017_a_017")
12
+ subject.stubs(:header_lote_posicao_018_a_018).returns(" 018_a_018")
13
+ subject.stubs(:header_lote_posicao_019_a_033).returns(" 019_a_033")
14
+ subject.stubs(:header_lote_posicao_034_a_053).with(lote).returns(" 034_a_053")
15
+ subject.stubs(:header_lote_posicao_054_a_073).returns(" 054_a_073")
16
+ subject.stubs(:header_lote_posicao_074_a_103).returns(" 074_a_103")
17
+ subject.stubs(:header_lote_posicao_104_a_143).returns(" 104_a_143")
18
+ subject.stubs(:header_lote_posicao_144_a_183).returns(" 144_a_183")
19
+ subject.stubs(:header_lote_posicao_184_a_191).returns(" 184_a_191")
20
+ subject.stubs(:header_lote_posicao_192_a_199).returns(" 192_a_199")
21
+ subject.stubs(:header_lote_posicao_200_a_207).returns(" 200_a_207")
22
+ subject.stubs(:header_lote_posicao_208_a_240).returns(" 208_a_240")
23
+ # Deve dar um upcase
24
+ subject.monta_header_lote(lote, 1).must_equal(" 001_A_003 004_A_007 008_A_008 009_A_009 010_A_011 012_A_013 014_A_016 017_A_017 018_A_018 019_A_033 034_A_053 054_A_073 074_A_103 104_A_143 144_A_183 184_A_191 192_A_199 200_A_207 208_A_240")
25
+ end
26
+
27
+ # Código do banco
28
+ # 3 posições
29
+ # Por padrão deve retornar o "codigo_banco"
30
+ #
31
+ def test_HeaderLoteTest_metodo_header_lote_posicao_001_a_003
32
+ subject.expects(:codigo_banco).returns("669")
33
+ subject.header_lote_posicao_001_a_003.must_equal("669")
34
+ end
35
+
36
+ # Lote de Serviço
37
+ # 4 posições
38
+ # Deve pegar o numero do lote preenchendo com 0
39
+ #
40
+ def test_HeaderLoteTest_metodo_header_lote_posicao_004_a_007
41
+ subject.header_lote_posicao_004_a_007(5).must_equal "0005"
42
+ end
43
+
44
+ # Tipo de Registro
45
+ # 1 posição
46
+ # valor padrão 1
47
+ #
48
+ def test_HeaderLoteTest_metodo_header_lote_posicao_008_a_008
49
+ subject.header_lote_posicao_008_a_008.must_equal '1'
50
+ end
51
+
52
+ # Tipo da Operação
53
+ # 1 posição
54
+ # Valor padrão R
55
+ #
56
+ def test_HeaderLoteTest_metodo_header_lote_posicao_009_a_009
57
+ subject.header_lote_posicao_009_a_009.must_equal "R"
58
+ end
59
+
60
+ # Tipo do Serviço
61
+ # 2 posições
62
+ # Valor padrão '01'
63
+ #
64
+ def test_HeaderLoteTest_metodo_header_lote_posicao_010_a_011
65
+ subject.header_lote_posicao_010_a_011.must_equal '01'
66
+ end
67
+
68
+ # Forma de Lançamento
69
+ # 2 posições
70
+ # Valor padrão '00'
71
+ #
72
+ def test_HeaderLoteTest_metodo_header_lote_posicao_012_a_013
73
+ subject.header_lote_posicao_012_a_013.must_equal '00'
74
+ end
75
+
76
+ # Nº da Versão do Layout do Lote
77
+ # 3 posições
78
+ # Deve pegar o valor do metodo "versao_layout_lote"
79
+ #
80
+ def test_HeaderLoteTest_metodo_header_lote_posicao_014_a_016
81
+ subject.expects(:versao_layout_lote).returns('versao_layout_lote')
82
+ subject.header_lote_posicao_014_a_016.must_equal "versao_layout_lote"
83
+ end
84
+
85
+ # Uso Exclusivo da FEBRABAN/CNAB
86
+ # 1 posição
87
+ # Padrão valor em branco
88
+ #
89
+ def test_HeaderLoteTest_metodo_header_lote_posicao_017_a_017
90
+ subject.header_lote_posicao_017_a_017.must_equal ' '
91
+ end
92
+
93
+ # Tipo de Inscrição da Empresa
94
+ # 1 posição
95
+ # Deve pegar o valor do metodo "tipo_inscricao"
96
+ #
97
+ def test_HeaderLoteTest_metodo_header_lote_posicao_018_a_018
98
+ subject.expects(:tipo_inscricao).returns('tipo_inscricao')
99
+ subject.header_lote_posicao_018_a_018.must_equal 'tipo_inscricao'
100
+ end
101
+
102
+ # Número de Inscrição da Empresa
103
+ # 15 posições
104
+ # Deve pegar o valor do 'documento_cedente' e ajustar com 0 o espaço em branco
105
+ #
106
+ def test_HeaderLoteTest_metodo_header_lote_posicao_019_a_033
107
+ subject.expects(:documento_cedente).returns('1234567890')
108
+ subject.header_lote_posicao_019_a_033.must_equal '000001234567890'
109
+ end
110
+
111
+ # Convenio -> Código do Cedente no Banco
112
+ # 6 posições
113
+ # Deve pegar o valor do metodo 'convenio_lote'
114
+ #
115
+ def test_HeaderLoteTest_metodo_header_lote_posicao_034_a_053#lote
116
+ subject.expects(:convenio_lote).with(lote).returns('convenio_lote')
117
+ subject.header_lote_posicao_034_a_053(lote).must_equal 'convenio_lote'
118
+ end
119
+
120
+ # Informações da conta bancária
121
+ # O padrão da FEBRABAN é:
122
+ # Posição de 54 até 58 com 05 posições = Agência Mantenedora da Conta
123
+ # Posição de 59 até 59 com 01 posições = DV -> Dígito Verificador da Agência
124
+ # Posição de 60 até 71 com 12 posições = Conta -> Número Número da Conta Corrente
125
+ # Posição de 72 até 72 com 01 posições = DV -> Dígito Verificador da Conta
126
+ # Posição de 73 até 73 com 01 posições = DV -> Dígito Verificador da Ag/Conta
127
+ #
128
+ # Porém como no Brasil os bancos não conseguem seguir um padrão, cada banco faz da sua maneira
129
+ # 20 posições
130
+ # Deve pegar o valor do metodo 'informacoes_da_conta'
131
+ #
132
+ def test_HeaderLoteTest_metodo_header_lote_posicao_054_a_073
133
+ subject.expects(:informacoes_da_conta).returns('informacoes_da_conta')
134
+ subject.header_lote_posicao_054_a_073.must_equal 'informacoes_da_conta'
135
+ end
136
+
137
+ # Nome da Empresa
138
+ # 30 posições
139
+ # deve retornar o valor do metodo 'nome_empresa_formatada'
140
+ #
141
+ def test_HeaderLoteTest_metodo_header_lote_posicao_074_a_103
142
+ subject.expects(:nome_empresa_formatada).returns('nome_empresa_formatada')
143
+ subject.header_lote_posicao_074_a_103.must_equal 'nome_empresa_formatada'
144
+ end
145
+
146
+ # Mensagem 1
147
+ # 40 posições
148
+ # Deve pegar o valor da "mensagem_1" e ajsutar para 40 posiçoes
149
+ #
150
+ def test_HeaderLoteTest_metodo_header_lote_posicao_104_a_143
151
+ subject.expects(:mensagem_1).returns('mensagem_1')
152
+ subject.header_lote_posicao_104_a_143.must_equal 'mensagem_1'.ljust(40, ' ')
153
+ end
154
+
155
+ # Mensagem 2
156
+ # 40 posições
157
+ # Deve pegar o valor da "mensagem_2" e ajsutar para 40 posiçoes
158
+ #
159
+ def test_HeaderLoteTest_metodo_header_lote_posicao_144_a_183
160
+ subject.expects(:mensagem_2).returns('1111'.rjust(44, '2'))
161
+ subject.header_lote_posicao_144_a_183.must_equal ''.rjust(40, '2')
162
+ end
163
+
164
+ # Número Remessa/Retorno
165
+ # 8 posições
166
+ # Deve pegar o valor do metodo "sequencial_remessa" e ajustar para 8 posições com zero
167
+ #
168
+ def test_HeaderLoteTest_metodo_header_lote_posicao_184_a_191
169
+ subject.expects(:sequencial_remessa).returns("111")
170
+ subject.header_lote_posicao_184_a_191.must_equal "111".rjust(8, '0')
171
+ end
172
+
173
+ # Data de Gravação Remessa/Retorno
174
+ # 8 posições
175
+ # Deve retornar o valor do metodo "data_geracao"
176
+ #
177
+ def test_HeaderLoteTest_metodo_header_lote_posicao_192_a_199
178
+ subject.expects(:data_geracao).returns("data_geracao")
179
+ subject.header_lote_posicao_192_a_199.must_equal 'data_geracao'
180
+ end
181
+
182
+ # Data do Crédito
183
+ # 8 posições
184
+ # Deve conter 8 posições com zeros
185
+ #
186
+ def test_HeaderLoteTest_metodo_header_lote_posicao_200_a_207
187
+ subject.header_lote_posicao_200_a_207.must_equal ''.rjust(8, '0')
188
+ end
189
+
190
+ # Uso Exclusivo FEBRABAN/CNAB
191
+ # 33 posições
192
+ # Deve conter 33 posições em branco
193
+ #
194
+ def test_HeaderLoteTest_metodo_header_lote_posicao_208_a_240
195
+ subject.header_lote_posicao_208_a_240.must_equal ''.rjust(33, ' ')
196
+ end
197
+
198
+
199
+ end
200
+ end
@@ -0,0 +1,390 @@
1
+ module Helper
2
+ module SegmentoPTest
3
+ def test_SegmentoPTest_metodo_monta_segmento_p_deve_ter_o_conteudo_dos_metodos_na_sequencia
4
+ subject.stubs(:segmento_p_posicao_001_a_003).returns(" 001_a_003")
5
+ subject.stubs(:segmento_p_posicao_004_a_007).with(1).returns(" 004_a_007")
6
+ subject.stubs(:segmento_p_posicao_008_a_008).returns(" 008_a_008")
7
+ subject.stubs(:segmento_p_posicao_009_a_013).with(2).returns(" 009_a_013")
8
+ subject.stubs(:segmento_p_posicao_014_a_014).returns(" 014_a_014")
9
+ subject.stubs(:segmento_p_posicao_015_a_015).returns(" 015_a_015")
10
+ subject.stubs(:segmento_p_posicao_016_a_017).returns(" 016_a_017")
11
+ subject.stubs(:segmento_p_posicao_018_a_022).returns(" 018_a_022")
12
+ subject.stubs(:segmento_p_posicao_023_a_023).returns(" 023_a_023")
13
+ subject.stubs(:segmento_p_posicao_024_a_057).with(pagamento).returns(" 024_a_057")
14
+ subject.stubs(:segmento_p_posicao_058_a_058).returns(" 058_a_058")
15
+ subject.stubs(:segmento_p_posicao_059_a_059).returns(" 059_a_059")
16
+ subject.stubs(:segmento_p_posicao_060_a_060).returns(" 060_a_060")
17
+ subject.stubs(:segmento_p_posicao_061_a_061).returns(" 061_a_061")
18
+ subject.stubs(:segmento_p_posicao_062_a_062).returns(" 062_a_062")
19
+ subject.stubs(:segmento_p_posicao_063_a_077).with(pagamento).returns(" 063_a_077")
20
+ subject.stubs(:segmento_p_posicao_078_a_085).with(pagamento).returns(" 078_a_085")
21
+ subject.stubs(:segmento_p_posicao_086_a_100).with(pagamento).returns(" 086_a_100")
22
+ subject.stubs(:segmento_p_posicao_101_a_105).returns(" 101_a_105")
23
+ subject.stubs(:segmento_p_posicao_106_a_106).returns(" 106_a_106")
24
+ subject.stubs(:segmento_p_posicao_107_a_108).returns(" 107_a_108")
25
+ subject.stubs(:segmento_p_posicao_109_a_109).returns(" 109_a_109")
26
+ subject.stubs(:segmento_p_posicao_110_a_117).with(pagamento).returns(" 110_a_117")
27
+ subject.stubs(:segmento_p_posicao_118_a_118).returns(" 118_a_118")
28
+ subject.stubs(:segmento_p_posicao_119_a_126).returns(" 119_a_126")
29
+ subject.stubs(:segmento_p_posicao_127_a_141).returns(" 127_a_141")
30
+ subject.stubs(:segmento_p_posicao_142_a_142).with(pagamento).returns(" 142_a_142")
31
+ subject.stubs(:segmento_p_posicao_143_a_150).with(pagamento).returns(" 143_a_150")
32
+ subject.stubs(:segmento_p_posicao_151_a_165).with(pagamento).returns(" 151_a_165")
33
+ subject.stubs(:segmento_p_posicao_166_a_180).with(pagamento).returns(" 166_a_180")
34
+ subject.stubs(:segmento_p_posicao_181_a_195).with(pagamento).returns(" 181_a_195")
35
+ subject.stubs(:segmento_p_posicao_196_a_220).returns(" 196_a_220")
36
+ subject.stubs(:segmento_p_posicao_221_a_221).returns(" 221_a_221")
37
+ subject.stubs(:segmento_p_posicao_222_a_223).returns(" 222_a_223")
38
+ subject.stubs(:segmento_p_posicao_224_a_224).returns(" 224_a_224")
39
+ subject.stubs(:segmento_p_posicao_225_a_227).returns(" 225_a_227")
40
+ subject.stubs(:segmento_p_posicao_228_a_229).returns(" 228_a_229")
41
+ subject.stubs(:segmento_p_posicao_230_a_239).returns(" 230_a_239")
42
+ subject.stubs(:segmento_p_posicao_240_a_240).returns(" 240_a_240")
43
+ # Deve dar um upcase
44
+ subject.monta_segmento_p(pagamento, 1, 2).must_equal(" 001_A_003 004_A_007 008_A_008 009_A_013 014_A_014 015_A_015 016_A_017 018_A_022 023_A_023 024_A_057 058_A_058 059_A_059 060_A_060 061_A_061 062_A_062 063_A_077 078_A_085 086_A_100 101_A_105 106_A_106 107_A_108 109_A_109 110_A_117 118_A_118 119_A_126 127_A_141 142_A_142 143_A_150 151_A_165 166_A_180 181_A_195 196_A_220 221_A_221 222_A_223 224_A_224 225_A_227 228_A_229 230_A_239 240_A_240")
45
+ end
46
+
47
+ # Código do banco
48
+ # 3 posições
49
+ # Por padrão deve retornar o "codigo_banco"
50
+ #
51
+ def test_SegmentoPTest_metodo_segmento_p_posicao_001_a_003
52
+ subject.expects(:codigo_banco).returns("669")
53
+ subject.segmento_p_posicao_001_a_003.must_equal("669")
54
+ end
55
+
56
+ # Lote de Serviço: Número seqüencial para identificar univocamente um lote de serviço.
57
+ # Criado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo.
58
+ # Preencher com '0001' para o primeiro lote do arquivo.
59
+ # Para os demais: número do lote anterior acrescido de 1. O número não poderá ser repetido dentro do arquivo.
60
+ # 4 posições
61
+ # Padrão recebe o nro do lote por parametro e ajusta para 4 caracteres
62
+ #
63
+ def test_SegmentoPTest_metodo_segmento_p_posicao_004_a_007
64
+ subject.segmento_p_posicao_004_a_007(5).to_s.rjust(4, '0')
65
+ end
66
+
67
+ # Tipo do registro -> Padrão 3
68
+ # 1 posição
69
+ # Por padrão retorna '3'
70
+ #
71
+ def test_SegmentoPTest_metodo_segmento_p_posicao_008_a_008
72
+ subject.segmento_p_posicao_008_a_008.must_equal '3'
73
+ end
74
+
75
+ # Nº Sequencial do Registro no Lote:
76
+ # Número adotado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo,
77
+ # para identificar a seqüência de registros encaminhados no lote.
78
+ # Deve ser inicializado sempre em '1', em cada novo lote.
79
+ # 5 posições
80
+ # recebe o sequencial por parâmetro e ajusta para 5 posições incluindo 0 na frente
81
+ #
82
+ def test_SegmentoPTest_metodo_segmento_p_posicao_009_a_013
83
+ subject.segmento_p_posicao_009_a_013(88).must_equal '00088'
84
+ end
85
+
86
+ # Cód. Segmento do Registro - Default: "P"
87
+ # 1 posição
88
+ # Por padrão é a letra P
89
+ #
90
+ def test_SegmentoPTest_metodo_segmento_p_posicao_014_a_014
91
+ subject.segmento_p_posicao_014_a_014.must_equal "P"
92
+ end
93
+
94
+ # Uso Exclusivo FEBRABAN/CNAB
95
+ # 1 posição
96
+ # Por padrão é valor em branco
97
+ #
98
+ def test_SegmentoPTest_metodo_segmento_p_posicao_015_a_015
99
+ subject.segmento_p_posicao_015_a_015.must_equal ' '
100
+ end
101
+
102
+ # cod. movimento remessa -> Padrão 01 = Entrada de Titulos
103
+ # 2 posições
104
+ # Por padrão é o valor '01'
105
+ #
106
+ def test_SegmentoPTest_metodo_segmento_p_posicao_016_a_017
107
+ subject.segmento_p_posicao_016_a_017.must_equal '01'
108
+ end
109
+
110
+ # Agência Mantenedora da Conta
111
+ # 5 posições
112
+ # Deve pegar a "agencia" e ajustar para 5 caracteres incluindo 0 na frente
113
+ #
114
+ def test_SegmentoPTest_metodo_segmento_p_posicao_018_a_022
115
+ subject.expects(:agencia).returns(89)
116
+ subject.segmento_p_posicao_018_a_022.must_equal '00089'
117
+ end
118
+
119
+ # Dígito Verificador da Agência
120
+ # 1 posição
121
+ # Deve pegar o "digito_agencia"
122
+ #
123
+ def test_SegmentoPTest_metodo_segmento_p_posicao_023_a_023
124
+ subject.expects(:digito_agencia).returns(1)
125
+ subject.segmento_p_posicao_023_a_023.must_equal '1'
126
+ end
127
+
128
+ # O padrão da FEBRABAN é:
129
+ # Posição de 24 até 35 com 12 posições = Número da Conta Corrente
130
+ # Posição de 36 até 36 com 01 posições = DV -> Dígito Verificador da Conta
131
+ # Posição de 37 até 37 com 01 posições = DV -> Dígito Verificador da Ag/Conta
132
+ # Posição de 38 até 57 com 20 posições = Nosso Número -> Identificação do Título no Banco
133
+ # Mas cada banco tem seu padrão
134
+ # 34 posições
135
+ # Deve pegar o "complemento_p" passando o "pagamento" por parametro
136
+ #
137
+ def test_SegmentoPTest_metodo_segmento_p_posicao_024_a_057
138
+ subject.expects(:complemento_p).with('pagamento').returns("complemento_p")
139
+ subject.segmento_p_posicao_024_a_057('pagamento').must_equal 'complemento_p'
140
+ end
141
+
142
+ # Código da carteira
143
+ # 1 posição
144
+ # Deve pegar o valor do metodo "codigo_carteira"
145
+ #
146
+ def test_SegmentoPTest_metodo_segmento_p_posicao_058_a_058
147
+ subject.expects(:codigo_carteira).returns('3')
148
+ subject.segmento_p_posicao_058_a_058.must_equal '3'
149
+ end
150
+
151
+ # Forma de Cadastr. do Título no Banco
152
+ # 1 posição
153
+ # Deve pegar o valor da "forma_cadastramento"
154
+ #
155
+ def test_SegmentoPTest_metodo_segmento_p_posicao_059_a_059
156
+ subject.expects(:forma_cadastramento).returns('123')
157
+ subject.segmento_p_posicao_059_a_059.must_equal '123'
158
+ end
159
+
160
+ # Tipo de Documento
161
+ # 1 posição
162
+ # Retorna o valor '2' por padrão
163
+ #
164
+ def test_SegmentoPTest_metodo_segmento_p_posicao_060_a_060
165
+ subject.segmento_p_posicao_060_a_060.must_equal '2'
166
+ end
167
+
168
+ # Identificação da Emissão do Bloqueto
169
+ # 1 posição
170
+ # Deve pegar o valor do metodo "emissao_boleto"
171
+ #
172
+ def test_SegmentoPTest_metodo_segmento_p_posicao_061_a_061
173
+ subject.expects(:emissao_boleto).returns('123')
174
+ subject.segmento_p_posicao_061_a_061.must_equal '123'
175
+ end
176
+
177
+ # Identificação da Distribuição
178
+ # 1 posição
179
+ # Deve pegar o valor do metodo "distribuicao_boleto"
180
+ #
181
+ def test_SegmentoPTest_metodo_segmento_p_posicao_062_a_062
182
+ subject.expects(:distribuicao_boleto).returns('distribuicao_boleto')
183
+ subject.segmento_p_posicao_062_a_062.must_equal 'distribuicao_boleto'
184
+ end
185
+
186
+ # Número do Documento de Cobrança
187
+ # Cada banco tem seu padrão
188
+ # 15 Posições
189
+ # Deve retornar o valor do metodo "segmento_p_numero_do_documento" com o pagamento
190
+ #
191
+ def test_SegmentoPTest_metodo_segmento_p_posicao_063_a_077#(pagamento)
192
+ subject.expects(:segmento_p_numero_do_documento).with('pagamento').returns('vpagamento')
193
+ subject.segmento_p_posicao_063_a_077('pagamento').must_equal 'vpagamento'
194
+ end
195
+
196
+ # Data de Vencimento do Título
197
+ # 8 posições
198
+ # Deve retornar a "data_vencimento" formatada do pagamento
199
+ #
200
+ def test_SegmentoPTest_metodo_segmento_p_posicao_078_a_085#(pagamento)
201
+ pagamento.data_vencimento = Date.today
202
+ subject.segmento_p_posicao_078_a_085(pagamento).must_equal Date.today.strftime('%d%m%Y')
203
+ end
204
+
205
+ # Valor Nominal do Título
206
+ # 15 posições (13 posições para valor inteiro e 2 posições para valor quebrado)
207
+ # Deve retornar o "valor_documento_formatado" com 15 posições
208
+ #
209
+ def test_SegmentoPTest_metodo_segmento_p_posicao_086_a_100#(pagamento)
210
+ pagamento.expects(:valor_documento_formatado).with(15).returns("123456789")
211
+ subject.segmento_p_posicao_086_a_100(pagamento).must_equal '123456789'
212
+ end
213
+
214
+ # Agencia cobradora
215
+ # 5 posições
216
+ # Por padrão é 5 posições em branco
217
+ #
218
+ def test_SegmentoPTest_metodo_segmento_p_posicao_101_a_105
219
+ subject.segmento_p_posicao_101_a_105.must_equal ''.rjust(5, '0')
220
+ end
221
+
222
+ # Dígito Verificador da Agência cobradora
223
+ # 1 posição
224
+ # Padrão é valor em branco
225
+ #
226
+ def test_SegmentoPTest_metodo_segmento_p_posicao_106_a_106
227
+ subject.segmento_p_posicao_106_a_106.must_equal ' '
228
+ end
229
+
230
+ # Espécie do Título
231
+ # 2 posições
232
+ # Deve retornar o valro do metodo "especie_titulo"
233
+ #
234
+ def test_SegmentoPTest_metodo_segmento_p_posicao_107_a_108
235
+ subject.expects(:especie_titulo).returns('123')
236
+ subject.segmento_p_posicao_107_a_108 .must_equal '123'
237
+ end
238
+
239
+ # Identific. de Título Aceito/Não Aceito (A ou N)
240
+ # 1 posição
241
+ # Deve retornar o valor do "aceite"
242
+ #
243
+ def test_SegmentoPTest_metodo_segmento_p_posicao_109_a_109
244
+ subject.expects(:aceite).returns('1')
245
+ subject.segmento_p_posicao_109_a_109.must_equal '1'
246
+ end
247
+
248
+ # Data da Emissão do Título
249
+ # 8 posições
250
+ # deve pegar a "data_emissao" do pagamento e formatar
251
+ #
252
+ def test_SegmentoPTest_metodo_segmento_p_posicao_110_a_117#(pagamento)
253
+ pagamento.data_emissao = Date.today
254
+ subject.segmento_p_posicao_110_a_117(pagamento).must_equal Date.today.strftime('%d%m%Y')
255
+ end
256
+
257
+ # Código do Juros de Mora
258
+ # 1 posição
259
+ # Por padrão é o valor '0'
260
+ #
261
+ def test_SegmentoPTest_metodo_segmento_p_posicao_118_a_118
262
+ subject.segmento_p_posicao_118_a_118 .must_equal '0'
263
+ end
264
+
265
+ # Data do Juros de Mora
266
+ # 8 posições
267
+ # Por padrão é 8 posições em branco
268
+ #
269
+ def test_SegmentoPTest_metodo_segmento_p_posicao_119_a_126
270
+ subject.segmento_p_posicao_119_a_126.must_equal ''.rjust(8, '0')
271
+ end
272
+
273
+ # Juros de Mora por Dia/Taxa
274
+ # 15 posições
275
+ # Por padrão é 15 posições em branco
276
+ #
277
+ def test_SegmentoPTest_metodo_segmento_p_posicao_127_a_141
278
+ subject.segmento_p_posicao_127_a_141.must_equal ''.rjust(15, '0')
279
+ end
280
+
281
+ # Código do Desconto 1
282
+ # 1 posição
283
+ # Deve pegar o "cod_desconto" do pagamento
284
+ #
285
+ def test_SegmentoPTest_metodo_segmento_p_posicao_142_a_142#(pagamento)
286
+ pagamento.expects(:cod_desconto).returns('123')
287
+ subject.segmento_p_posicao_142_a_142(pagamento).must_equal '123'
288
+ end
289
+
290
+ # Data do Desconto 1
291
+ # 8 posições
292
+ # Deve retornar a "data_desconto_formatado" com formato ddmmyyyy do pagamento
293
+ #
294
+ def test_SegmentoPTest_metodo_segmento_p_posicao_143_a_150#(pagamento)
295
+ pagamento.expects(:data_desconto_formatado).with('%d%m%Y').returns('12345678')
296
+ subject.segmento_p_posicao_143_a_150(pagamento).must_equal '12345678'
297
+ end
298
+
299
+ # Valor/Percentual a ser Concedido
300
+ # 15 posições
301
+ # Deve trazer o 'valor_desconto_formatado' com 15 posições do pagamento
302
+ #
303
+ def test_SegmentoPTest_metodo_segmento_p_posicao_151_a_165#(pagamento)
304
+ pagamento.expects(:valor_desconto_formatado).with(15).returns('132')
305
+ subject.segmento_p_posicao_151_a_165(pagamento).must_equal '132'
306
+ end
307
+
308
+ # Valor do IOF a ser Recolhido
309
+ # 15 posições
310
+ # Deve retornar o "valor_iof_formatado" com 15 posições do pagamento
311
+ #
312
+ def test_SegmentoPTest_metodo_segmento_p_posicao_166_a_180#(pagamento)
313
+ pagamento.expects(:valor_iof_formatado).with(15).returns('123')
314
+ subject.segmento_p_posicao_166_a_180(pagamento).must_equal '123'
315
+ end
316
+
317
+ # Valor do Abatimento
318
+ # 15 posições
319
+ # Deve retornar o "valor_abatimento_formatado" com 15 posições do pagamento
320
+ #
321
+ def test_SegmentoPTest_metodo_segmento_p_posicao_181_a_195#(pagamento)
322
+ pagamento.expects(:valor_abatimento_formatado).with(15).returns('123')
323
+ subject.segmento_p_posicao_181_a_195(pagamento).must_equal '123'
324
+ end
325
+
326
+ # Identificação do Título na Empresa
327
+ # 25 posições
328
+ # Deve retornar 25 posições em branco
329
+ #
330
+ def test_SegmentoPTest_metodo_segmento_p_posicao_196_a_220
331
+ subject.segmento_p_posicao_196_a_220.must_equal ''.rjust(25, ' ')
332
+ end
333
+
334
+ # Código para Protesto
335
+ # 1 posição
336
+ # Por padrão é o valor '1'
337
+ #
338
+ def test_SegmentoPTest_metodo_segmento_p_posicao_221_a_221
339
+ subject.segmento_p_posicao_221_a_221 .must_equal '1'
340
+ end
341
+
342
+ # Número de Dias para Protesto
343
+ # 2 posições
344
+ # Por padrão é o valor '00'
345
+ #
346
+ def test_SegmentoPTest_metodo_segmento_p_posicao_222_a_223
347
+ subject.segmento_p_posicao_222_a_223.must_equal '00'
348
+ end
349
+
350
+ # Código para Baixa/Devolução
351
+ # 1 posição
352
+ # Por padrão é o valor '0'
353
+ #
354
+ def test_SegmentoPTest_metodo_segmento_p_posicao_224_a_224
355
+ subject.segmento_p_posicao_224_a_224.must_equal '0'
356
+ end
357
+
358
+ # Número de Dias para Baixa/Devolução
359
+ # 3 posoções
360
+ # Por padrão é o valor '000'
361
+ #
362
+ def test_SegmentoPTest_metodo_segmento_p_posicao_225_a_227
363
+ subject.segmento_p_posicao_225_a_227.must_equal '000'
364
+ end
365
+
366
+ # Código da Moeda (09 para real)
367
+ # 2 posições
368
+ # Por padrão é o valor '09'
369
+ #
370
+ def test_SegmentoPTest_metodo_segmento_p_posicao_228_a_229
371
+ subject.segmento_p_posicao_228_a_229.must_equal '09'
372
+ end
373
+
374
+ # Nº do Contrato da Operação de Crédito (Uso do banco)
375
+ # 10 posições
376
+ # Por padrão é 10 pposições em branco
377
+ #
378
+ def test_SegmentoPTest_metodo_segmento_p_posicao_230_a_239
379
+ subject.segmento_p_posicao_230_a_239.must_equal ''.rjust(10, '0')
380
+ end
381
+
382
+ # Uso livre banco/empresa ou autorização de pagamento parcial
383
+ # 1 posição
384
+ # Por padrão é 1 campo em branco
385
+ #
386
+ def test_SegmentoPTest_metodo_segmento_p_posicao_240_a_240
387
+ subject.segmento_p_posicao_240_a_240.must_equal ' '
388
+ end
389
+ end
390
+ end