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,206 @@
1
+ module BrBoleto
2
+ module Remessa
3
+ module Cnab240
4
+ module Helper
5
+ module SegmentoQ
6
+ # Monta o registro segmento Q 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_q(pagamento, nr_lote, sequencial)
18
+ # # DESCRICAO TAMANHO
19
+ segmento_q = ''
20
+ segmento_q << segmento_q_posicao_001_a_003 # codigo banco 3
21
+ segmento_q << segmento_q_posicao_004_a_007(nr_lote) # lote de servico 4
22
+ segmento_q << segmento_q_posicao_008_a_008 # tipo de registro 1
23
+ segmento_q << segmento_q_posicao_009_a_013(sequencial) # num. sequencial do registro no lote 5
24
+ segmento_q << segmento_q_posicao_014_a_014 # cod. segmento 1
25
+ segmento_q << segmento_q_posicao_015_a_015 # uso exclusivo 1
26
+ segmento_q << segmento_q_posicao_016_a_017 # cod. movimento remessa 2
27
+ segmento_q << segmento_q_posicao_018_a_018(pagamento) # tipo insc. sacado 1
28
+ segmento_q << segmento_q_posicao_019_a_033(pagamento) # documento sacado 14
29
+ segmento_q << segmento_q_posicao_034_a_073(pagamento) # nome cliente 40
30
+ segmento_q << segmento_q_posicao_074_a_113(pagamento) # endereco cliente 40
31
+ segmento_q << segmento_q_posicao_114_a_128(pagamento) # bairro 15
32
+ segmento_q << segmento_q_posicao_129_a_133(pagamento) # cep 5
33
+ segmento_q << segmento_q_posicao_134_a_136(pagamento) # sufixo cep 3
34
+ segmento_q << segmento_q_posicao_137_a_151(pagamento) # cidade 15
35
+ segmento_q << segmento_q_posicao_152_a_153(pagamento) # uf 2
36
+ segmento_q << segmento_q_posicao_154_a_154(pagamento) # identificacao do sacador 1
37
+ segmento_q << segmento_q_posicao_155_a_169(pagamento) # documento sacador 15
38
+ segmento_q << segmento_q_posicao_170_a_209(pagamento) # nome avalista 40
39
+ segmento_q << segmento_q_posicao_210_a_212 # cod. banco correspondente 3
40
+ segmento_q << segmento_q_posicao_213_a_232 # nosso numero banco correspondente 20
41
+ segmento_q << segmento_q_posicao_233_a_240 # uso exclusivo 8
42
+ segmento_q.upcase
43
+ end
44
+
45
+ # Código do banco
46
+ # 3 posições
47
+ #
48
+ def segmento_q_posicao_001_a_003
49
+ codigo_banco
50
+ end
51
+
52
+ # Lote de Serviço: Número seqüencial para identificar univocamente um lote de serviço.
53
+ # Criado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo.
54
+ # Preencher com '0001' para o primeiro lote do arquivo.
55
+ # Para os demais: número do lote anterior acrescido de 1. O número não poderá ser repetido dentro do arquivo.
56
+ # 4 posições
57
+ #
58
+ def segmento_q_posicao_004_a_007(numero_do_lote)
59
+ numero_do_lote.to_s.rjust(4, '0')
60
+ end
61
+
62
+ # Tipo do registro -> Padrão 3
63
+ # 1 posição
64
+ #
65
+ def segmento_q_posicao_008_a_008
66
+ '3'
67
+ end
68
+
69
+ # Nº Sequencial do Registro no Lote
70
+ # 5 posições
71
+ #
72
+ def segmento_q_posicao_009_a_013(sequencial)
73
+ sequencial.to_s.rjust(5, '0')
74
+ end
75
+
76
+ # Cód. Segmento do Registro Detalhe
77
+ # 1 posição
78
+ #
79
+ def segmento_q_posicao_014_a_014
80
+ 'Q'
81
+ end
82
+
83
+ # Uso Exclusivo FEBRABAN/CNAB
84
+ # 1 posição
85
+ #
86
+ def segmento_q_posicao_015_a_015
87
+ ' '
88
+ end
89
+
90
+ # Código de Movimento Remessa
91
+ # 2 posições
92
+ #
93
+ def segmento_q_posicao_016_a_017
94
+ '01'
95
+ end
96
+
97
+ # Tipo de Inscrição (1=CPF 2=CNPJ)
98
+ # 1 posição
99
+ #
100
+ def segmento_q_posicao_018_a_018(pagamento)
101
+ pagamento.tipo_documento_sacado(1)
102
+ end
103
+
104
+ # Número de Inscrição
105
+ # 15 posições
106
+ #
107
+ def segmento_q_posicao_019_a_033(pagamento)
108
+ pagamento.documento_sacado.to_s.rjust(15, '0')
109
+ end
110
+
111
+ # Nome do sacado
112
+ # 40 posições
113
+ #
114
+ def segmento_q_posicao_034_a_073(pagamento)
115
+ pagamento.nome_sacado.adjust_size_to(40)
116
+ end
117
+
118
+ # Endereço sacado
119
+ # 40 posições
120
+ #
121
+ def segmento_q_posicao_074_a_113(pagamento)
122
+ pagamento.endereco_sacado.adjust_size_to(40)
123
+ end
124
+
125
+ # Bairro do sacado
126
+ # 15 posições
127
+ #
128
+ def segmento_q_posicao_114_a_128(pagamento)
129
+ pagamento.bairro_sacado.adjust_size_to(15)
130
+ end
131
+
132
+ # CEP (prefixo)
133
+ # 5 posições
134
+ #
135
+ def segmento_q_posicao_129_a_133(pagamento)
136
+ pagamento.cep_sacado[0..4]
137
+ end
138
+
139
+ # CEP sufixo
140
+ # 3 posições
141
+ #
142
+ def segmento_q_posicao_134_a_136(pagamento)
143
+ pagamento.cep_sacado[5..7]
144
+ end
145
+
146
+ # Cidade
147
+ # 15 posições
148
+ #
149
+ def segmento_q_posicao_137_a_151(pagamento)
150
+ pagamento.cidade_sacado.adjust_size_to(15)
151
+ end
152
+
153
+ # Unidade da Federação
154
+ # 2 posuções
155
+ #
156
+ def segmento_q_posicao_152_a_153(pagamento)
157
+ pagamento.uf_sacado
158
+ end
159
+
160
+ # Tipo de Inscrição
161
+ # 1 posição
162
+ #
163
+ def segmento_q_posicao_154_a_154(pagamento)
164
+ pagamento.tipo_documento_avalista(1)
165
+ end
166
+
167
+ # Número de Inscrição
168
+ # 15 posições
169
+ #
170
+ def segmento_q_posicao_155_a_169(pagamento)
171
+ "#{pagamento.documento_avalista}".rjust(15, '0')
172
+ end
173
+
174
+ # Nome do avalista
175
+ # 40 posições
176
+ #
177
+ def segmento_q_posicao_170_a_209(pagamento)
178
+ "#{pagamento.nome_avalista}".adjust_size_to(40)
179
+ end
180
+
181
+ # Cód. Bco. Corresp. na Compensação
182
+ # 3 posições
183
+ #
184
+ def segmento_q_posicao_210_a_212
185
+ ''.rjust(3, '0')
186
+ end
187
+
188
+ # Nosso Nº no Banco Correspondente
189
+ # 20 posições
190
+ #
191
+ def segmento_q_posicao_213_a_232
192
+ ''.rjust(20, ' ')
193
+ end
194
+
195
+ # Uso Exclusivo FEBRABAN/CNAB
196
+ # 8 posições
197
+ #
198
+ def segmento_q_posicao_233_a_240
199
+ ''.rjust(8, ' ')
200
+ end
201
+
202
+ end
203
+ end
204
+ end
205
+ end
206
+ end
@@ -0,0 +1,261 @@
1
+ module BrBoleto
2
+ module Remessa
3
+ module Cnab240
4
+ module Helper
5
+ module SegmentoR
6
+ # Monta o registro segmento Q 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_r(pagamento, nr_lote, sequencial)
18
+ segmento_r = ''
19
+ segmento_r << segmento_r_posicao_001_a_003
20
+ segmento_r << segmento_r_posicao_004_a_007(nr_lote)
21
+ segmento_r << segmento_r_posicao_008_a_008
22
+ segmento_r << segmento_r_posicao_009_a_013(sequencial)
23
+ segmento_r << segmento_r_posicao_014_a_014
24
+ segmento_r << segmento_r_posicao_015_a_015
25
+ segmento_r << segmento_r_posicao_016_a_017
26
+ segmento_r << segmento_r_posicao_018_a_018(pagamento)
27
+ segmento_r << segmento_r_posicao_019_a_026(pagamento)
28
+ segmento_r << segmento_r_posicao_027_a_041(pagamento)
29
+ segmento_r << segmento_r_posicao_042_a_042(pagamento)
30
+ segmento_r << segmento_r_posicao_043_a_050(pagamento)
31
+ segmento_r << segmento_r_posicao_051_a_065(pagamento)
32
+ segmento_r << segmento_r_posicao_066_a_066(pagamento)
33
+ segmento_r << segmento_r_posicao_067_a_074(pagamento)
34
+ segmento_r << segmento_r_posicao_075_a_089(pagamento)
35
+ segmento_r << segmento_r_posicao_090_a_099
36
+ segmento_r << segmento_r_posicao_100_a_139
37
+ segmento_r << segmento_r_posicao_140_a_179
38
+ segmento_r << segmento_r_posicao_180_a_199
39
+ segmento_r << segmento_r_posicao_200_a_207
40
+ segmento_r << segmento_r_posicao_208_a_210
41
+ segmento_r << segmento_r_posicao_211_a_215
42
+ segmento_r << segmento_r_posicao_216_a_216
43
+ segmento_r << segmento_r_posicao_217_a_228
44
+ segmento_r << segmento_r_posicao_229_a_229
45
+ segmento_r << segmento_r_posicao_230_a_230
46
+ segmento_r << segmento_r_posicao_231_a_231
47
+ segmento_r << segmento_r_posicao_232_a_240
48
+ segmento_r.upcase
49
+ end
50
+
51
+ # Código do banco
52
+ # 3 posições
53
+ #
54
+ def segmento_r_posicao_001_a_003
55
+ codigo_banco
56
+ end
57
+
58
+ # Lote de Serviço: Número seqüencial para identificar univocamente um lote de serviço.
59
+ # Criado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo.
60
+ # Preencher com '0001' para o primeiro lote do arquivo.
61
+ # Para os demais: número do lote anterior acrescido de 1. O número não poderá ser repetido dentro do arquivo.
62
+ # 4 posições
63
+ #
64
+ def segmento_r_posicao_004_a_007(numero_do_lote)
65
+ numero_do_lote.to_s.rjust(4, '0')
66
+ end
67
+
68
+ # Tipo do registro -> Padrão 3
69
+ # 1 posição
70
+ #
71
+ def segmento_r_posicao_008_a_008
72
+ '3'
73
+ end
74
+
75
+ # Nº Sequencial do Registro no Lote
76
+ # 5 posições
77
+ #
78
+ def segmento_r_posicao_009_a_013(sequencial)
79
+ sequencial.to_s.rjust(5, '0')
80
+ end
81
+
82
+ # Cód. Segmento do Registro Detalhe
83
+ # 1 posição
84
+ #
85
+ def segmento_r_posicao_014_a_014
86
+ 'R'
87
+ end
88
+
89
+ # Uso Exclusivo FEBRABAN/CNAB
90
+ # 1 posição
91
+ #
92
+ def segmento_r_posicao_015_a_015
93
+ ' '
94
+ end
95
+
96
+ # Código de Movimento Remessa - 01 = Entrada de Titulos
97
+ # 2 posições
98
+ #
99
+ def segmento_r_posicao_016_a_017
100
+ '01'
101
+ end
102
+
103
+ # Código do desconto 2
104
+ # 1 posição
105
+ #
106
+ def segmento_r_posicao_018_a_018(pagamento)
107
+ "#{pagamento.desconto_2_codigo}".adjust_size_to(1)
108
+ end
109
+
110
+ # Data do desconto 2
111
+ # 8 posições
112
+ #
113
+ def segmento_r_posicao_019_a_026(pagamento)
114
+ "#{pagamento.desconto_2_data_formatado('%d%m%Y')}".adjust_size_to(8, '0')
115
+ end
116
+
117
+ # Valor do desconto 2
118
+ # 15 posições
119
+ #
120
+ def segmento_r_posicao_027_a_041(pagamento)
121
+ pagamento.desconto_2_valor_formatado(15)
122
+ end
123
+
124
+ # Código do desconto 3
125
+ # 1 posição
126
+ #
127
+ def segmento_r_posicao_042_a_042(pagamento)
128
+ "#{pagamento.desconto_3_codigo}".adjust_size_to(1)
129
+ end
130
+
131
+ # Data do desconto 3
132
+ # 8 posições
133
+ #
134
+ def segmento_r_posicao_043_a_050(pagamento)
135
+ "#{pagamento.desconto_3_data_formatado('%d%m%Y')}".adjust_size_to(8, '0')
136
+ end
137
+
138
+ # Valor do desconto 3
139
+ # 15 posições
140
+ #
141
+ def segmento_r_posicao_051_a_065(pagamento)
142
+ pagamento.desconto_3_valor_formatado(15)
143
+ end
144
+
145
+ # Codigo da multa - (0 = isento, 1 = Valor fixo e 2 = Percentual)
146
+ # 1 posição
147
+ #
148
+ def segmento_r_posicao_066_a_066(pagamento)
149
+ "#{pagamento.codigo_multa}".adjust_size_to(1, '0')
150
+ end
151
+
152
+ # Data da multa
153
+ # 8 posição
154
+ #
155
+ def segmento_r_posicao_067_a_074(pagamento)
156
+ "#{pagamento.data_multa_formatado('%d%m%Y')}".adjust_size_to(8, '0')
157
+ end
158
+
159
+ # valor da multa
160
+ # 15 posições
161
+ #
162
+ def segmento_r_posicao_075_a_089(pagamento)
163
+ pagamento.valor_multa_formatado(15)
164
+ end
165
+
166
+ # Informação ao pagador
167
+ # 10 posições
168
+ #
169
+ def segmento_r_posicao_090_a_099
170
+ ''.rjust(10, " ")
171
+ end
172
+
173
+ # Informação 3
174
+ # 40 posições
175
+ #
176
+ def segmento_r_posicao_100_a_139
177
+ ''.rjust(40, " ")
178
+ end
179
+
180
+ # Informação 4
181
+ # 40 posições
182
+ #
183
+ def segmento_r_posicao_140_a_179
184
+ ''.rjust(40, " ")
185
+ end
186
+
187
+ # CNAB Uso exclusivo FEBRABAN
188
+ # 20 posições
189
+ #
190
+ def segmento_r_posicao_180_a_199
191
+ ''.rjust(20, " ")
192
+ end
193
+
194
+ # Cod. Ocor. do pagador
195
+ # 8 posições
196
+ #
197
+ def segmento_r_posicao_200_a_207
198
+ ''.rjust(8, "0")
199
+ end
200
+
201
+ # Cod. do banco para débido
202
+ # 3 posições
203
+ #
204
+ def segmento_r_posicao_208_a_210
205
+ ''.rjust(3, "0")
206
+ end
207
+
208
+ # Agencia para débido
209
+ # 5 posições
210
+ #
211
+ def segmento_r_posicao_211_a_215
212
+ ''.rjust(5, "0")
213
+ end
214
+
215
+ # DV agencia para débido
216
+ # 1 posições
217
+ #
218
+ def segmento_r_posicao_216_a_216
219
+ " "
220
+ end
221
+
222
+ # Conta corrente para débito
223
+ # 12 posições
224
+ #
225
+ def segmento_r_posicao_217_a_228
226
+ "".rjust(12, '0')
227
+ end
228
+
229
+ # DV Conta corrente para débito
230
+ # 1 posições
231
+ #
232
+ def segmento_r_posicao_229_a_229
233
+ " "
234
+ end
235
+
236
+ # DV Aencia/Conta
237
+ # 1 posições
238
+ #
239
+ def segmento_r_posicao_230_a_230
240
+ " "
241
+ end
242
+
243
+ # Ident. Da emissão do Aviso Debito Automatico
244
+ # 1 posição
245
+ #
246
+ def segmento_r_posicao_231_a_231
247
+ "0"
248
+ end
249
+
250
+ # Uso exclusivo
251
+ # 9 posições
252
+ #
253
+ def segmento_r_posicao_232_a_240
254
+ "".rjust(9, " ")
255
+ end
256
+
257
+ end
258
+ end
259
+ end
260
+ end
261
+ end