br_boleto 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.travis.yml +1 -1
- data/Gemfile.lock +2 -2
- data/br_boleto.gemspec +2 -3
- data/lib/br_boleto/association/have_conta.rb +27 -25
- data/lib/br_boleto/association/have_pagador.rb +2 -0
- data/lib/br_boleto/boleto/base.rb +0 -4
- data/lib/br_boleto/boleto/bradesco.rb +80 -0
- data/lib/br_boleto/boleto/caixa.rb +10 -12
- data/lib/br_boleto/boleto/cecred.rb +76 -0
- data/lib/br_boleto/boleto/itau.rb +114 -0
- data/lib/br_boleto/boleto/sicredi.rb +101 -0
- data/lib/br_boleto/boleto/unicred.rb +21 -0
- data/lib/br_boleto/conta/base.rb +28 -3
- data/lib/br_boleto/conta/bradesco.rb +120 -0
- data/lib/br_boleto/conta/caixa.rb +22 -12
- data/lib/br_boleto/conta/cecred.rb +67 -0
- data/lib/br_boleto/conta/itau.rb +199 -0
- data/lib/br_boleto/conta/sicoob.rb +40 -11
- data/lib/br_boleto/conta/sicredi.rb +171 -0
- data/lib/br_boleto/conta/unicred.rb +38 -0
- data/lib/br_boleto/helper/default_codes.rb +535 -26
- data/lib/br_boleto/pagador.rb +4 -0
- data/lib/br_boleto/remessa/base.rb +2 -0
- data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
- data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
- data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
- data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
- data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
- data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
- data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
- data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
- data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
- data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
- data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
- data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
- data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
- data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
- data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
- data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
- data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
- data/lib/br_boleto/remessa/pagamento.rb +93 -43
- data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
- data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
- data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
- data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
- data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
- data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
- data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
- data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
- data/lib/br_boleto/retorno/pagamento.rb +18 -4
- data/lib/br_boleto/version.rb +2 -2
- data/lib/br_boleto.rb +28 -0
- data/lib/config/locales/br-boleto-en.yml +1 -0
- data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
- data/test/br_boleto/association/have_pagador_test.rb +24 -0
- data/test/br_boleto/boleto/bradesco_test.rb +125 -0
- data/test/br_boleto/boleto/caixa_test.rb +18 -18
- data/test/br_boleto/boleto/cecred_test.rb +115 -0
- data/test/br_boleto/boleto/itau_test.rb +160 -0
- data/test/br_boleto/boleto/sicredi_test.rb +136 -0
- data/test/br_boleto/boleto/unicred_test.rb +128 -0
- data/test/br_boleto/conta/base_test.rb +298 -3
- data/test/br_boleto/conta/bradesco_test.rb +142 -0
- data/test/br_boleto/conta/caixa_test.rb +7 -6
- data/test/br_boleto/conta/cecred_test.rb +119 -0
- data/test/br_boleto/conta/itau_test.rb +189 -0
- data/test/br_boleto/conta/sicoob_test.rb +32 -2
- data/test/br_boleto/conta/sicredi_test.rb +180 -0
- data/test/br_boleto/conta/unicred_test.rb +154 -0
- data/test/br_boleto/pagador_test.rb +22 -2
- data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
- data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
- data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
- data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
- data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
- data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
- data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
- data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
- data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
- data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
- data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
- data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
- data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
- data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
- data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
- data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
- data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
- data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
- data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
- data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
- data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
- data/test/br_boleto/retorno/pagamento_test.rb +7 -0
- data/test/factories/boleto/boleto_bradesco.rb +18 -0
- data/test/factories/boleto/boleto_cecred.rb +18 -0
- data/test/factories/boleto/boleto_itau.rb +18 -0
- data/test/factories/boleto/boleto_sicredi.rb +18 -0
- data/test/factories/boleto/boleto_unicred.rb +18 -0
- data/test/factories/conta/bradesco.rb +16 -0
- data/test/factories/conta/caixa.rb +2 -1
- data/test/factories/conta/cecred.rb +15 -0
- data/test/factories/conta/itau.rb +15 -0
- data/test/factories/conta/sicoob.rb +2 -1
- data/test/factories/conta/sicredi.rb +15 -0
- data/test/factories/conta/unicred.rb +15 -0
- data/test/factories/remessa/cnab240/bradesco.rb +9 -0
- data/test/factories/remessa/cnab240/cecred.rb +9 -0
- data/test/factories/remessa/cnab240/itau.rb +9 -0
- data/test/factories/remessa/cnab240/sicredi.rb +9 -0
- data/test/factories/remessa/cnab240/unicred.rb +9 -0
- data/test/factories/remessa/cnab400/bradesco.rb +8 -0
- data/test/factories/remessa/cnab400/itau.rb +8 -0
- data/test/factories/remessa/cnab400/sicredi.rb +8 -0
- data/test/factories/remessa/cnab400/unicred.rb +8 -0
- data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
- data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
- data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
- data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
- data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
- data/test/fixtures/retorno/cnab400/itau.ret +54 -0
- metadata +138 -3
@@ -0,0 +1,250 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrBoleto::Remessa::Cnab240::Unicred do
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab240_unicred, lotes: lote) }
|
5
|
+
let(:pagamento) { FactoryGirl.build(:remessa_pagamento, valor_documento: 879.66) }
|
6
|
+
let(:lote) { FactoryGirl.build(:remessa_lote, pagamentos: pagamento) }
|
7
|
+
|
8
|
+
it "deve herdar da class Bradesco" do
|
9
|
+
subject.class.superclass.must_equal BrBoleto::Remessa::Cnab240::Bradesco
|
10
|
+
end
|
11
|
+
|
12
|
+
context "validations" do
|
13
|
+
describe 'Validações personalizadas da conta' do
|
14
|
+
it 'valid_carteira_required' do
|
15
|
+
# subject.send(:valid_carteira_required).must_equal true
|
16
|
+
subject.conta.carteira = ''
|
17
|
+
conta_must_be_msg_error(:carteira, :blank)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'valid_carteira_length' do
|
21
|
+
# subject.send(:valid_carteira_length).must_equal 2
|
22
|
+
subject.conta.carteira = '1234567890123456'
|
23
|
+
conta_must_be_msg_error(:carteira, :custom_length_is, {count: 2})
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'valid_convenio_required' do
|
27
|
+
# subject.send(:valid_convenio_required).must_equal true
|
28
|
+
subject.conta.convenio = ''
|
29
|
+
conta_must_be_msg_error(:convenio, :blank)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'valid_convenio_length' do
|
33
|
+
# subject.send(:valid_convenio_length).must_equal 2
|
34
|
+
subject.conta.convenio = '1234567890123456'
|
35
|
+
conta_must_be_msg_error(:convenio, :custom_length_maximum, {count: 7})
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'agencia_required' do
|
39
|
+
# subject.send(:agencia_required).must_equal true
|
40
|
+
subject.conta.agencia = ''
|
41
|
+
conta_must_be_msg_error(:agencia, :blank)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'agencia_length' do
|
45
|
+
# subject.send(:agencia_length).must_equal 2
|
46
|
+
subject.conta.agencia = '1234567890123456'
|
47
|
+
conta_must_be_msg_error(:agencia, :custom_length_is, {count: 4})
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
|
53
|
+
must_be_message_error(:base, "#{BrBoleto::Conta::Unicred.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
describe "#convenio_lote" do
|
60
|
+
it "as 7 primeiras posições deve ser o valor do convenio ajustado com zeros a esquerda" do
|
61
|
+
subject.conta.codigo_cedente = '88'
|
62
|
+
subject.convenio_lote(lote).must_equal '00000000000000000088'
|
63
|
+
|
64
|
+
subject.conta.convenio = '7374'
|
65
|
+
subject.convenio_lote(lote).must_equal '00000000000000007374'
|
66
|
+
end
|
67
|
+
it "deve ter 20 caracteres" do
|
68
|
+
subject.convenio_lote(lote).size.must_equal 20
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#informacoes_da_conta" do
|
73
|
+
it "deve ter 20 posições" do
|
74
|
+
subject.informacoes_da_conta.size.must_equal 20
|
75
|
+
end
|
76
|
+
|
77
|
+
it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
|
78
|
+
subject.conta.agencia = '47'
|
79
|
+
subject.informacoes_da_conta[0..4].must_equal '00047'
|
80
|
+
|
81
|
+
subject.conta.agencia = '1234'
|
82
|
+
subject.informacoes_da_conta[0..4].must_equal '01234'
|
83
|
+
end
|
84
|
+
|
85
|
+
it "2 - Segunda parte = agencia_dv" do
|
86
|
+
subject.conta.agencia_dv = '7'
|
87
|
+
subject.informacoes_da_conta[5].must_equal "7"
|
88
|
+
end
|
89
|
+
|
90
|
+
it "3 - Terceira parte = conta_corrente 12 posicoes - ajustados com zeros a esquerda" do
|
91
|
+
subject.conta.conta_corrente = '89755'
|
92
|
+
subject.informacoes_da_conta[6..17].must_equal '000000089755'
|
93
|
+
|
94
|
+
subject.conta.conta_corrente = '1234567890'
|
95
|
+
subject.informacoes_da_conta[6..17].must_equal '001234567890'
|
96
|
+
end
|
97
|
+
|
98
|
+
it "4 - Quarta parte = Conta Corrente DV" do
|
99
|
+
subject.conta.conta_corrente_dv = '8'
|
100
|
+
subject.informacoes_da_conta[18..18].must_equal('8')
|
101
|
+
end
|
102
|
+
|
103
|
+
it "5 - Quinta parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
|
104
|
+
subject.informacoes_da_conta[19].must_equal(' ')
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "#complemento_header_arquivo" do
|
109
|
+
it "deve ter 29 posições" do
|
110
|
+
subject.complemento_header_arquivo.size.must_equal 29
|
111
|
+
end
|
112
|
+
|
113
|
+
it "2 - Segunda parte = USO FEBRABAN com 25 posições em branco" do
|
114
|
+
subject.complemento_header_arquivo[4..28].must_equal ' ' * 25
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "#complemento_p" do
|
119
|
+
|
120
|
+
it "deve ter 34 posições" do
|
121
|
+
subject.complemento_p(pagamento).size.must_equal 34
|
122
|
+
end
|
123
|
+
|
124
|
+
it "1 - Primeira parte = conta_corrente com 12 posicoes - ajustados com zeros a esquerda" do
|
125
|
+
subject.conta.conta_corrente = '1234'
|
126
|
+
subject.complemento_p(pagamento)[0..11].must_equal '000000001234'
|
127
|
+
|
128
|
+
subject.conta.conta_corrente = '264631'
|
129
|
+
subject.complemento_p(pagamento)[0..11].must_equal '000000264631'
|
130
|
+
end
|
131
|
+
|
132
|
+
it "2 - Seguna parte = Conta Corrente DV - 1 posicao" do
|
133
|
+
subject.conta.conta_corrente_dv = '7'
|
134
|
+
subject.complemento_p(pagamento)[12..12].must_equal '7'
|
135
|
+
end
|
136
|
+
|
137
|
+
it "3 - Terceira parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
|
138
|
+
subject.complemento_p(pagamento)[13..13].must_equal ' '
|
139
|
+
end
|
140
|
+
|
141
|
+
it "4 - Quarta parte = Numero documento com 11 posicoes" do
|
142
|
+
pagamento.numero_documento = '89378'
|
143
|
+
subject.complemento_p(pagamento)[14..24].must_equal '00000089378'
|
144
|
+
|
145
|
+
pagamento.numero_documento = '12345678901'
|
146
|
+
subject.complemento_p(pagamento)[14..24].must_equal '12345678901'
|
147
|
+
end
|
148
|
+
|
149
|
+
it "5 - Quinta parte = numero_documento DV com 1 posicao - Deve ser o ultimo digito do nosso numero" do
|
150
|
+
pagamento.nosso_numero = '99/99999999999-9'
|
151
|
+
subject.complemento_p(pagamento)[25..25].must_equal '9'
|
152
|
+
|
153
|
+
pagamento.nosso_numero = '99/99999999999-0'
|
154
|
+
subject.complemento_p(pagamento)[25..25].must_equal '0'
|
155
|
+
end
|
156
|
+
|
157
|
+
it "6 - Sexta parte = Exclusivo Banco com 8 posicoes preenchidas com zeros" do
|
158
|
+
subject.complemento_p(pagamento)[26..33].must_equal ' ' * 8
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
describe "#segmento_p_numero_do_documento" do
|
164
|
+
it "deve ter 15 posições" do
|
165
|
+
subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
|
166
|
+
end
|
167
|
+
|
168
|
+
it "deve conter o numero do documento 15 posicoes - ajustados com zeros a esquerda" do
|
169
|
+
pagamento.expects(:numero_documento).returns("977897")
|
170
|
+
subject.segmento_p_numero_do_documento(pagamento).must_equal '000000000977897'
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe "#complemento_trailer_lote" do
|
175
|
+
it "deve ter 217 posições" do
|
176
|
+
subject.complemento_trailer_lote(lote, 5).size.must_equal 217
|
177
|
+
end
|
178
|
+
|
179
|
+
it "1 - Primeira parte = 92 posições todas preenchidas com zeros (VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO)" do
|
180
|
+
subject.complemento_trailer_lote(lote, 5)[0..91].must_equal '0' * 92
|
181
|
+
end
|
182
|
+
|
183
|
+
it "2 - Segunda parte = 8 posições todas preenchidas com zeros (Nr. do aviso de lançamento do crédito referente aos títulos de cobrança)" do
|
184
|
+
subject.complemento_trailer_lote(lote, 5)[92..99].must_equal ('0' * 8)
|
185
|
+
end
|
186
|
+
|
187
|
+
it "3 - Terceira parte = EXCLUSIVO FEBRABAN com 117 posicoes em branco" do
|
188
|
+
subject.complemento_trailer_lote(lote, 5)[100..216].must_equal (' ' * 117)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
describe "usa_segmento_S?" do
|
193
|
+
it "deve retornar false como padrão para o UNICRED" do
|
194
|
+
subject.usa_segmento_S?.must_equal false
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
describe 'Geração do arquivo' do
|
199
|
+
let(:conta) do
|
200
|
+
{
|
201
|
+
razao_social: 'EMPRESA EMITENTE',
|
202
|
+
cpf_cnpj: '33.486.451/0001-30',
|
203
|
+
carteira: '09',
|
204
|
+
agencia: '7506',
|
205
|
+
codigo_cedente: '82819',
|
206
|
+
conta_corrente: '1354843'
|
207
|
+
}
|
208
|
+
end
|
209
|
+
let(:pagador) {
|
210
|
+
{
|
211
|
+
nome: 'Benjamin Francisco Marcos Vinicius Fernandes',
|
212
|
+
cpf_cnpj: '787.933.211-12',
|
213
|
+
endereco: 'Rua Principal s/n 881',
|
214
|
+
bairro: 'Centro',
|
215
|
+
cep: '79210-972',
|
216
|
+
cidade: 'Anastácio',
|
217
|
+
uf: 'MS',
|
218
|
+
nome_avalista: 'EMPRESA EMITENTE',
|
219
|
+
documento_avalista: '33486451000130'
|
220
|
+
}
|
221
|
+
}
|
222
|
+
let(:pagamento) {
|
223
|
+
BrBoleto::Remessa::Pagamento.new({
|
224
|
+
nosso_numero: '09000000000011',
|
225
|
+
numero_documento: '00000000001',
|
226
|
+
data_vencimento: Date.parse('13/12/2016'),
|
227
|
+
valor_documento: 50.00,
|
228
|
+
pagador: pagador,
|
229
|
+
especie_titulo: '02',
|
230
|
+
codigo_juros: '0',
|
231
|
+
data_juros: Date.parse('15/12/2016'),
|
232
|
+
valor_juros: 0.00,
|
233
|
+
codigo_multa: '0',
|
234
|
+
data_multa: Date.parse('14/12/2016'),
|
235
|
+
valor_multa: 0.00,
|
236
|
+
data_emissao: Date.parse('10/11/2016'),
|
237
|
+
})
|
238
|
+
}
|
239
|
+
let(:lote) { BrBoleto::Remessa::Lote.new(pagamentos: pagamento) }
|
240
|
+
it "deve gerar o arquivo de remessa corretamente com as informações passadas" do
|
241
|
+
remessa = BrBoleto::Remessa::Cnab240::Unicred.new({
|
242
|
+
data_hora_arquivo: Time.parse('10/11/2016 09:27:45'),
|
243
|
+
sequencial_remessa: 1,
|
244
|
+
conta: conta,
|
245
|
+
lotes: [lote],
|
246
|
+
})
|
247
|
+
remessa.dados_do_arquivo.must_equal read_fixture('remessa/cnab240/unicred.rem')
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
@@ -156,7 +156,7 @@ describe BrBoleto::Remessa::Cnab400::Base do
|
|
156
156
|
|
157
157
|
it '#detalhe_posicao_002_003 - deve retornar o tipo do cnpj da conta' do
|
158
158
|
conta.expects(:tipo_cpf_cnpj).returns('5')
|
159
|
-
subject.detalhe_posicao_002_003.must_equal '5'
|
159
|
+
subject.detalhe_posicao_002_003(pagamento).must_equal '5'
|
160
160
|
end
|
161
161
|
|
162
162
|
it '#detalhe_posicao_004_017 - deve retornar o cnpj da conta ajustado para 14 digitos' do
|
@@ -171,7 +171,7 @@ describe BrBoleto::Remessa::Cnab400::Base do
|
|
171
171
|
end
|
172
172
|
|
173
173
|
it '#detalhe_posicao_038_062 - deve retornar 25 caracteres vazios' do
|
174
|
-
subject.detalhe_posicao_038_062.must_equal ''.rjust(25, ' ')
|
174
|
+
subject.detalhe_posicao_038_062(pagamento).must_equal ''.rjust(25, ' ')
|
175
175
|
|
176
176
|
end
|
177
177
|
|
@@ -188,8 +188,8 @@ describe BrBoleto::Remessa::Cnab400::Base do
|
|
188
188
|
end
|
189
189
|
|
190
190
|
it '#detalhe_posicao_109_110 - deve retornar a identificacao da ocorrencia ajustando o tamanho para 2' do # (pagamento, sequencial)
|
191
|
-
pagamento.expects(:identificacao_ocorrencia).returns('
|
192
|
-
subject.detalhe_posicao_109_110(pagamento, 1).must_equal '
|
191
|
+
pagamento.expects(:identificacao_ocorrencia).returns('5')
|
192
|
+
subject.detalhe_posicao_109_110(pagamento, 1).must_equal '05'
|
193
193
|
end
|
194
194
|
|
195
195
|
it '#detalhe_posicao_111_120 - deve retornar o numero do documento do pagamento' do # (pagamento, sequencial)
|
@@ -0,0 +1,164 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrBoleto::Remessa::Cnab400::Bradesco do
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab400_bradesco, pagamentos: pagamento, conta: conta) }
|
5
|
+
let(:pagamento) { FactoryGirl.build(:remessa_pagamento, pagador: pagador) }
|
6
|
+
let(:conta) { FactoryGirl.build(:conta_bradesco) }
|
7
|
+
let(:pagador) { FactoryGirl.build(:pagador) }
|
8
|
+
|
9
|
+
it "deve ter a class para a conta do bradesco" do
|
10
|
+
BrBoleto::Remessa::Cnab400::Bradesco.new.conta_class.must_equal BrBoleto::Conta::Bradesco
|
11
|
+
end
|
12
|
+
|
13
|
+
it "deve herdar de Cnab400::Base" do
|
14
|
+
subject.class.superclass.must_equal BrBoleto::Remessa::Cnab400::Base
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#informacoes_da_conta' do
|
18
|
+
it "deve retornar com 20 caracteres" do
|
19
|
+
subject.informacoes_da_conta(:header).size.must_equal 20
|
20
|
+
end
|
21
|
+
it "deve trazer as informações em suas posições quando o parametro for :header" do
|
22
|
+
conta.codigo_empresa = 39321235
|
23
|
+
result = subject.informacoes_da_conta(:header)
|
24
|
+
|
25
|
+
result[0..20].must_equal '00000000000039321235' # Codigo Empresa
|
26
|
+
end
|
27
|
+
it "deve retornar com 20 caracteres" do
|
28
|
+
subject.informacoes_da_conta(:detalhe).size.must_equal 20
|
29
|
+
end
|
30
|
+
it "deve trazer as informações em suas posições quando o parametro for :detalhe" do
|
31
|
+
conta.agencia = 1234
|
32
|
+
conta.agencia_dv = 1
|
33
|
+
conta.conta_corrente = 89755
|
34
|
+
conta.conta_corrente_dv = 7
|
35
|
+
conta.carteira = 21
|
36
|
+
result = subject.informacoes_da_conta(:detalhe)
|
37
|
+
|
38
|
+
result[0..2].must_equal ' '
|
39
|
+
result[3].must_equal '0'
|
40
|
+
result[4..6].must_equal '021'
|
41
|
+
result[7..11].must_equal '01234' # Agencia
|
42
|
+
result[12..18].must_equal '0089755' # Conta Corrente
|
43
|
+
result[19].must_equal '7' # Conta Corrente DV
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#complemento_registro' do
|
48
|
+
it "deve retornar o sequencial da remessa com 12 posições e mais 277 brancos" do
|
49
|
+
subject.sequencial_remessa = 4758
|
50
|
+
|
51
|
+
subject.complemento_registro[0..7].must_equal ' '
|
52
|
+
subject.complemento_registro[8..9].must_equal 'MX'
|
53
|
+
subject.complemento_registro[10..16].must_equal '0004758'
|
54
|
+
subject.complemento_registro[17..293].must_equal ''.rjust(277)
|
55
|
+
|
56
|
+
subject.complemento_registro.size.must_equal 294
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
describe '#detalhe_posicao_063_108' do
|
62
|
+
it "deve ter o tamanho de 46 digitos" do
|
63
|
+
subject.detalhe_posicao_063_108(pagamento).size.must_equal 46
|
64
|
+
end
|
65
|
+
it "deve conter as informações nas posições corretas" do
|
66
|
+
pagamento.assign_attributes(tipo_emissao: 2)
|
67
|
+
result = subject.detalhe_posicao_063_108(pagamento)
|
68
|
+
|
69
|
+
result[0..2].must_equal '000'
|
70
|
+
result[3].must_equal '0' # Identificativos de Multa
|
71
|
+
result[4..7].must_equal '0000' # Percentual de Multa por Atraso
|
72
|
+
result[8..18].must_equal '00000977897' # Identificação do Título no Banco
|
73
|
+
result[19].must_equal '6' # Nosso numero DV
|
74
|
+
result[20..29].must_equal '0000000000' # Desconto Bonificação por dia
|
75
|
+
result[30].must_equal '2' # Condição para Emissão da Papeleta de Cobrança
|
76
|
+
result[31..45].must_equal ''.rjust(15) # Preencher com Branco
|
77
|
+
|
78
|
+
result.size.must_equal 46
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#informacoes_do_pagamento' do
|
83
|
+
it "deve ter o tamanho de 40 digitos" do
|
84
|
+
subject.informacoes_do_pagamento(pagamento, 1).size.must_equal 40
|
85
|
+
end
|
86
|
+
it "deve conter as informações nas posições corretas" do
|
87
|
+
conta.agencia = 4587
|
88
|
+
conta.agencia_dv = 45 # Vai retornar apenas o 4
|
89
|
+
pagamento.data_vencimento = Date.parse('05/08/2029')
|
90
|
+
pagamento.valor_documento = 47.56
|
91
|
+
pagamento.especie_titulo = "12"
|
92
|
+
pagamento.aceite = true
|
93
|
+
pagamento.data_emissao = Date.parse('15/09/2017')
|
94
|
+
result = subject.informacoes_do_pagamento(pagamento, 4)
|
95
|
+
result.size.must_equal 40
|
96
|
+
|
97
|
+
result[00..05].must_equal '050829' # "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
|
98
|
+
result[06..18].must_equal '0000000004756' # Valor do Titulo
|
99
|
+
result[19..21].must_equal '000' # 000 ou Número Banco
|
100
|
+
result[22..26].must_equal "00000" # 000000 ou Agencia
|
101
|
+
result[27..28].must_equal "02" # Espécie do Título
|
102
|
+
result[ 29 ].must_equal "N" # dentificação (Sempre 'N')
|
103
|
+
result[30..35].must_equal '150917' # Data de Emissão do Título: formato ddmmaa
|
104
|
+
result[36..37].must_equal '00' # Primeira instrução codificada
|
105
|
+
result[38..39].must_equal '00' # Segunda instrução
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe '#detalhe_multas_e_juros_do_pagamento' do
|
110
|
+
it "deve ter o tamanho de 58 digitos" do
|
111
|
+
subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
|
112
|
+
end
|
113
|
+
it "deve conter as informações nas posições corretas" do
|
114
|
+
pagamento.valor_mora = '0.39'
|
115
|
+
pagamento.valor_iof = '2.7'
|
116
|
+
pagamento.data_desconto = Date.parse('21/03/2018')
|
117
|
+
pagamento.valor_desconto = 4.3
|
118
|
+
pagamento.valor_abatimento = 56.47
|
119
|
+
|
120
|
+
result = subject.detalhe_multas_e_juros_do_pagamento(pagamento, 4)
|
121
|
+
result.size.must_equal 58
|
122
|
+
|
123
|
+
result[00..12].must_equal '0000000000039'
|
124
|
+
result[13..18].must_equal "210318"
|
125
|
+
result[19..31].must_equal '0000000000430'
|
126
|
+
result[32..44].must_equal '0000000000270'
|
127
|
+
result[45..57].must_equal '0000000005647'
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe '#informacoes_do_sacado' do
|
132
|
+
it "deve ter o tamanho de 176 digitos" do
|
133
|
+
subject.informacoes_do_sacado(pagamento, 2).size.must_equal 176
|
134
|
+
end
|
135
|
+
it "deve conter as informações nas posições corretas" do
|
136
|
+
# pagador.tipo_cpf_cnpj = '1'
|
137
|
+
pagador.cpf_cnpj = '12345678901'
|
138
|
+
pagador.nome = 'nome pagador'
|
139
|
+
pagador.endereco = 'rua do pagador'
|
140
|
+
pagador.bairro = 'bairro do pagador'
|
141
|
+
pagador.cidade = 'Chapecó'
|
142
|
+
pagador.uf = 'SC'
|
143
|
+
pagador.cep = '89885-001'
|
144
|
+
pagador.nome_avalista = 'Avalista'
|
145
|
+
pagador.documento_avalista = '840.106.990-43'
|
146
|
+
|
147
|
+
result = subject.informacoes_do_sacado(pagamento, 2)
|
148
|
+
result.size.must_equal 176
|
149
|
+
|
150
|
+
result[00..01].must_equal "01" # Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
|
151
|
+
result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
|
152
|
+
result[16..55].must_equal 'nome pagador'.adjust_size_to(40) # Nome do Pagador
|
153
|
+
|
154
|
+
result[56..73].must_equal 'rua do pagador'.adjust_size_to(18) # Endereço do Pagador
|
155
|
+
result[74..83].must_equal 'bairro do pagador'.adjust_size_to(10) # Endereço do Pagador
|
156
|
+
result[84..93].must_equal 'Chapecó'.adjust_size_to(10) # Endereço do Pagador
|
157
|
+
result[94..95].must_equal 'SC'.adjust_size_to(2) # Endereço do Pagador
|
158
|
+
result[108..115].must_equal '89885001' # CEP do Pagador
|
159
|
+
|
160
|
+
result[116..129].must_equal '84010699043'.adjust_size_to(14) # Observações/Mensagem ou Sacador/Avalista
|
161
|
+
result[130..175].must_equal 'Avalista'.adjust_size_to(46) # Observações/Mensagem ou Sacador/Avalista
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
@@ -0,0 +1,173 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrBoleto::Remessa::Cnab400::Itau do
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab400_itau, pagamentos: pagamento, conta: conta) }
|
5
|
+
let(:pagamento) { FactoryGirl.build(:remessa_pagamento, pagador: pagador) }
|
6
|
+
let(:conta) { FactoryGirl.build(:conta_itau) }
|
7
|
+
let(:pagador) { FactoryGirl.build(:pagador) }
|
8
|
+
|
9
|
+
it "deve ter a class para a conta do itau" do
|
10
|
+
BrBoleto::Remessa::Cnab400::Itau.new.conta_class.must_equal BrBoleto::Conta::Itau
|
11
|
+
end
|
12
|
+
|
13
|
+
it "deve herdar de Cnab400::Base" do
|
14
|
+
subject.class.superclass.must_equal BrBoleto::Remessa::Cnab400::Base
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#informacoes_da_conta' do
|
18
|
+
it "deve retornar com 20 caracteres" do
|
19
|
+
subject.informacoes_da_conta(:header).size.must_equal 20
|
20
|
+
end
|
21
|
+
it "deve trazer as informações em suas posições quando o parametro for :header" do
|
22
|
+
conta.agencia = 1234
|
23
|
+
conta.agencia_dv = 1
|
24
|
+
conta.conta_corrente = 89755
|
25
|
+
conta.conta_corrente_dv = 7
|
26
|
+
|
27
|
+
result = subject.informacoes_da_conta(:header)
|
28
|
+
|
29
|
+
result[0..3].must_equal '1234' # Agencia
|
30
|
+
result[4..5].must_equal '00'
|
31
|
+
result[6..10].must_equal '89755' # Conta Corrente
|
32
|
+
result[11].must_equal '7' # Conta Corrente DV
|
33
|
+
result[12..19].must_equal ' ' * 8
|
34
|
+
|
35
|
+
|
36
|
+
end
|
37
|
+
it "deve retornar com 20 caracteres" do
|
38
|
+
subject.informacoes_da_conta(:detalhe).size.must_equal 20
|
39
|
+
end
|
40
|
+
it "deve trazer as informações em suas posições quando o parametro for :detalhe" do
|
41
|
+
conta.agencia = 1234
|
42
|
+
conta.agencia_dv = 1
|
43
|
+
conta.conta_corrente = 89755
|
44
|
+
conta.conta_corrente_dv = 7
|
45
|
+
|
46
|
+
result = subject.informacoes_da_conta(:detalhe)
|
47
|
+
|
48
|
+
result[0..3].must_equal '1234' # Agencia
|
49
|
+
result[4..5].must_equal '00'
|
50
|
+
result[6..10].must_equal '89755' # Conta Corrente
|
51
|
+
result[11].must_equal '7' # Conta Corrente DV
|
52
|
+
result[12..15].must_equal ' '
|
53
|
+
result[16..19].must_equal '0000'
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#complemento_registro' do
|
59
|
+
it "deve retornar 294 brancos" do
|
60
|
+
subject.complemento_registro[0..293].must_equal ''.rjust(294)
|
61
|
+
subject.complemento_registro.size.must_equal 294
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
describe '#detalhe_posicao_063_108' do
|
67
|
+
it "deve ter o tamanho de 46 digitos" do
|
68
|
+
subject.detalhe_posicao_063_108(pagamento).size.must_equal 46
|
69
|
+
end
|
70
|
+
it "deve conter as informações nas posições corretas" do
|
71
|
+
conta.carteira = 123
|
72
|
+
pagamento.assign_attributes(tipo_emissao: 2)
|
73
|
+
pagamento.assign_attributes(numero_documento: 763)
|
74
|
+
|
75
|
+
result = subject.detalhe_posicao_063_108(pagamento)
|
76
|
+
|
77
|
+
result[0..7].must_equal '00000763' # Numero documento
|
78
|
+
result[8..20].must_equal '0' * 13 # Zeros
|
79
|
+
result[21..23].must_equal '123' # Carteira
|
80
|
+
result[24..44].must_equal ' ' * 21 # Brancos
|
81
|
+
result[45].must_equal 'I' # Cod. Carteira
|
82
|
+
|
83
|
+
result.size.must_equal 46
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe '#informacoes_do_pagamento' do
|
88
|
+
it "deve ter o tamanho de 40 digitos" do
|
89
|
+
subject.informacoes_do_pagamento(pagamento, 1).size.must_equal 40
|
90
|
+
end
|
91
|
+
it "deve conter as informações nas posições corretas" do
|
92
|
+
conta.agencia = 4587
|
93
|
+
conta.agencia_dv = 45 # Vai retornar apenas o 4
|
94
|
+
pagamento.data_vencimento = Date.parse('05/08/2029')
|
95
|
+
pagamento.valor_documento = 47.56
|
96
|
+
pagamento.especie_titulo = "12"
|
97
|
+
pagamento.aceite = true
|
98
|
+
pagamento.data_emissao = Date.parse('15/09/2017')
|
99
|
+
result = subject.informacoes_do_pagamento(pagamento, 4)
|
100
|
+
result.size.must_equal 40
|
101
|
+
|
102
|
+
result[00..05].must_equal '050829' # "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
|
103
|
+
result[06..18].must_equal '0000000004756' # Valor do Titulo
|
104
|
+
result[19..21].must_equal '341' # Número Banco
|
105
|
+
result[22..26].must_equal "00000" # 000000 ou Agencia
|
106
|
+
result[27..28].must_equal "02" # Espécie do Título
|
107
|
+
result[ 29 ].must_equal "N" # dentificação (Sempre 'N')
|
108
|
+
result[30..35].must_equal '150917' # Data de Emissão do Título: formato ddmmaa
|
109
|
+
result[36..37].must_equal '00' # Primeira instrução codificada
|
110
|
+
result[38..39].must_equal '00' # Segunda instrução
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe '#detalhe_multas_e_juros_do_pagamento' do
|
115
|
+
it "deve ter o tamanho de 58 digitos" do
|
116
|
+
subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
|
117
|
+
end
|
118
|
+
it "deve conter as informações nas posições corretas" do
|
119
|
+
pagamento.valor_mora = '0.39'
|
120
|
+
pagamento.valor_iof = '2.7'
|
121
|
+
pagamento.data_desconto = Date.parse('21/03/2018')
|
122
|
+
pagamento.valor_desconto = 4.3
|
123
|
+
pagamento.valor_abatimento = 56.47
|
124
|
+
|
125
|
+
result = subject.detalhe_multas_e_juros_do_pagamento(pagamento, 4)
|
126
|
+
result.size.must_equal 58
|
127
|
+
|
128
|
+
result[00..12].must_equal '0000000000039'
|
129
|
+
result[13..18].must_equal "210318"
|
130
|
+
result[19..31].must_equal '0000000000430'
|
131
|
+
result[32..44].must_equal '0000000000270'
|
132
|
+
result[45..57].must_equal '0000000005647'
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe '#informacoes_do_sacado' do
|
137
|
+
it "deve ter o tamanho de 176 digitos" do
|
138
|
+
subject.informacoes_do_sacado(pagamento, 2).size.must_equal 176
|
139
|
+
end
|
140
|
+
it "deve conter as informações nas posições corretas" do
|
141
|
+
# pagador.tipo_cpf_cnpj = '1'
|
142
|
+
pagador.cpf_cnpj = '12345678901'
|
143
|
+
pagador.nome = 'nome pagador'
|
144
|
+
pagador.endereco = 'rua do pagador'
|
145
|
+
pagador.bairro = 'bairro do pagador'
|
146
|
+
pagador.cidade = 'Chapecó'
|
147
|
+
pagador.uf = 'SC'
|
148
|
+
pagador.cep = '89885-001'
|
149
|
+
pagador.nome_avalista = 'Avalista'
|
150
|
+
pagador.documento_avalista = '840.106.990-43'
|
151
|
+
|
152
|
+
result = subject.informacoes_do_sacado(pagamento, 2)
|
153
|
+
result.size.must_equal 176
|
154
|
+
|
155
|
+
result[00..01].must_equal "01" # Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
|
156
|
+
result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
|
157
|
+
result[16..55].must_equal 'nome pagador'.adjust_size_to(40) # Nome do Pagador
|
158
|
+
|
159
|
+
result[56..95].must_equal 'rua do pagador'.adjust_size_to(40) # Endereço do Pagador
|
160
|
+
result[96..107].must_equal 'bairro do pagador'.adjust_size_to(12) # Bairro do Pagador
|
161
|
+
result[108..115].must_equal '89885001' # CEP do Pagador
|
162
|
+
result[116..130].must_equal 'Chapecó'.adjust_size_to(15) # Cidade do Pagador
|
163
|
+
result[131..132].must_equal 'SC'.adjust_size_to(2) # UF do Pagador
|
164
|
+
|
165
|
+
result[133..162].must_equal 'Avalista'.adjust_size_to(30) # Nome Sacador/Avalista
|
166
|
+
|
167
|
+
result[163..166].must_equal ' ' # Complemento Registro (Brancos)
|
168
|
+
result[167..172].must_equal '000000' # Data de mora (Zeros)
|
169
|
+
result[173..174].must_equal '03' # Quantidade de dias (Zeros)
|
170
|
+
result[175].must_equal ' ' # Complemento Registro (Branco)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
@@ -99,7 +99,7 @@ describe BrBoleto::Remessa::Cnab400::Sicoob do
|
|
99
99
|
conta.agencia_dv = 45 # Vai retornar apenas o 4
|
100
100
|
pagamento.data_vencimento = Date.parse('05/08/2029')
|
101
101
|
pagamento.valor_documento = 47.56
|
102
|
-
pagamento.especie_titulo = 12
|
102
|
+
pagamento.especie_titulo = "12"
|
103
103
|
pagamento.aceite = true
|
104
104
|
pagamento.data_emissao = Date.parse('15/09/2017')
|
105
105
|
result = subject.informacoes_do_pagamento(pagamento, 4)
|
@@ -110,7 +110,7 @@ describe BrBoleto::Remessa::Cnab400::Sicoob do
|
|
110
110
|
result[19..21].must_equal '756' # Número Banco: "756"
|
111
111
|
result[22..25].must_equal "4587" # Prefixo da Cooperativa: vide e-mail enviado com os dados do processo de homologação
|
112
112
|
result[ 26 ].must_equal "4" # Dígito Verificador do Prefixo: vide e-mail enviado com os dados do processo de homologação
|
113
|
-
result[27..28].must_equal "
|
113
|
+
result[27..28].must_equal "02" # Espécie do Título
|
114
114
|
result[ 29 ].must_equal "1" # "Aceite do Título: "0" = Sem aceite "1" = Com aceite"
|
115
115
|
result[30..35].must_equal '150917' # Data de Emissão do Título: formato ddmmaa
|
116
116
|
result[36..37].must_equal '00' # Primeira instrução codificada:
|