br_boleto 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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