brcobranca 10.0.0 → 10.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +47 -21
  3. data/README.md +5 -0
  4. data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
  5. data/lib/brcobranca/boleto/banco_brasil.rb +5 -1
  6. data/lib/brcobranca/boleto/base.rb +2 -0
  7. data/lib/brcobranca/boleto/template/base.rb +4 -0
  8. data/lib/brcobranca/boleto/template/rghost2.rb +255 -0
  9. data/lib/brcobranca/boleto/template/rghost_bolepix.rb +279 -0
  10. data/lib/brcobranca/remessa/pagamento.rb +13 -11
  11. data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +3 -0
  12. data/lib/brcobranca/retorno/cnab400/base.rb +1 -1
  13. data/lib/brcobranca/version.rb +1 -1
  14. data/lib/brcobranca.rb +2 -0
  15. metadata +8 -139
  16. data/spec/brcobranca/base_spec.rb +0 -179
  17. data/spec/brcobranca/boleto/ailos_spec.rb +0 -148
  18. data/spec/brcobranca/boleto/banco_brasil_spec.rb +0 -336
  19. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +0 -153
  20. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +0 -160
  21. data/spec/brcobranca/boleto/banestes_spec.rb +0 -193
  22. data/spec/brcobranca/boleto/banrisul_spec.rb +0 -180
  23. data/spec/brcobranca/boleto/bradesco_spec.rb +0 -214
  24. data/spec/brcobranca/boleto/caixa_spec.rb +0 -160
  25. data/spec/brcobranca/boleto/citibank_spec.rb +0 -195
  26. data/spec/brcobranca/boleto/credisis_spec.rb +0 -160
  27. data/spec/brcobranca/boleto/hsbc_spec.rb +0 -171
  28. data/spec/brcobranca/boleto/itau_spec.rb +0 -261
  29. data/spec/brcobranca/boleto/safra_spec.rb +0 -171
  30. data/spec/brcobranca/boleto/santander_spec.rb +0 -142
  31. data/spec/brcobranca/boleto/sicoob_spec.rb +0 -192
  32. data/spec/brcobranca/boleto/sicredi_spec.rb +0 -194
  33. data/spec/brcobranca/boleto/unicred_spec.rb +0 -139
  34. data/spec/brcobranca/boletos_em_lote_spec.rb +0 -38
  35. data/spec/brcobranca/calculo_data_spec.rb +0 -33
  36. data/spec/brcobranca/calculo_spec.rb +0 -187
  37. data/spec/brcobranca/currency_spec.rb +0 -79
  38. data/spec/brcobranca/formatacao_spec.rb +0 -46
  39. data/spec/brcobranca/formatacao_string_spec.rb +0 -31
  40. data/spec/brcobranca/limpeza_spec.rb +0 -10
  41. data/spec/brcobranca/remessa/base_spec.rb +0 -66
  42. data/spec/brcobranca/remessa/cnab240/ailos_spec.rb +0 -165
  43. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +0 -222
  44. data/spec/brcobranca/remessa/cnab240/base_spec.rb +0 -114
  45. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +0 -165
  46. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +0 -272
  47. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +0 -200
  48. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +0 -203
  49. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +0 -195
  50. data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +0 -190
  51. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +0 -188
  52. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +0 -192
  53. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +0 -192
  54. data/spec/brcobranca/remessa/cnab400/base_spec.rb +0 -68
  55. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +0 -203
  56. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +0 -128
  57. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +0 -190
  58. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +0 -192
  59. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +0 -154
  60. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +0 -217
  61. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +0 -186
  62. data/spec/brcobranca/remessa/pagamento_spec.rb +0 -228
  63. data/spec/brcobranca/retorno/cnab240/base_spec.rb +0 -24
  64. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +0 -52
  65. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +0 -52
  66. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +0 -52
  67. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +0 -33
  68. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +0 -37
  69. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +0 -40
  70. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +0 -42
  71. data/spec/brcobranca/retorno/cnab400/base_spec.rb +0 -57
  72. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +0 -59
  73. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +0 -26
  74. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +0 -60
  75. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +0 -40
  76. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +0 -38
  77. data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +0 -69
  78. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +0 -58
  79. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +0 -53
  80. data/spec/brcobranca/rghost_spec.rb +0 -29
  81. data/spec/brcobranca/util/empresa_spec.rb +0 -35
  82. data/spec/brcobranca_spec.rb +0 -33
@@ -1,195 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe Brcobranca::Remessa::Cnab240::Unicred do
6
- let(:pagamento) do
7
- Brcobranca::Remessa::Pagamento.new(
8
- valor: 50.0,
9
- data_vencimento: Date.current,
10
- nosso_numero: '072000031',
11
- numero: '00003',
12
- documento: 6969,
13
- documento_sacado: '82136760505',
14
- nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO,!^.?\/@ DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
15
- endereco_sacado: 'RUA RIO GRANDE DO SUL,!^.?\/@ São paulo Minas caçapa da silva junior',
16
- bairro_sacado: 'São josé dos quatro apostolos magros',
17
- cep_sacado: '12345678',
18
- cidade_sacado: 'Santa rita de cássia maria da silva',
19
- uf_sacado: 'RJ'
20
- )
21
- end
22
-
23
- let(:params) do
24
- {
25
- empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
26
- agencia: '0165',
27
- conta_corrente: '00623',
28
- digito_conta: '8',
29
- documento_cedente: '74576177000177',
30
- modalidade_carteira: '01',
31
- posto: '02',
32
- byte_idt: '2',
33
- pagamentos: [pagamento]
34
- }
35
- end
36
-
37
- let(:unicred) { subject.class.new(params) }
38
-
39
- before { Timecop.freeze(Time.local(2007, 7, 14, 16, 15, 15)) }
40
-
41
- after { Timecop.return }
42
-
43
- context 'validacoes' do
44
- context '@posto' do
45
- it 'deve ser invalido se nao possuir o valor do posto' do
46
- objeto = subject.class.new(params.merge(posto: nil))
47
- expect(objeto.invalid?).to be true
48
- expect(objeto.errors.full_messages).to include('Posto não pode estar em branco.')
49
- end
50
-
51
- it 'deve ser invalido se o posto tiver mais de 2 dígitos' do
52
- unicred.posto = '123'
53
- expect(unicred.invalid?).to be true
54
- expect(unicred.errors.full_messages).to include('Posto deve ter 2 dígitos.')
55
- end
56
- end
57
-
58
- context '@byte_idt' do
59
- it 'deve ser invalido se nao possuir o valor da byte de geracao' do
60
- objeto = subject.class.new(params.merge(byte_idt: nil))
61
- expect(objeto.invalid?).to be true
62
- expect(objeto.errors.full_messages).to include('Byte idt não pode estar em branco.')
63
- end
64
-
65
- it 'deve ser invalido se o byte idt tiver mais de 1 dígito' do
66
- unicred.byte_idt = '12'
67
- expect(unicred.invalid?).to be true
68
- expect(unicred.errors.full_messages)
69
- .to include('Byte idt deve ser 1 se o numero foi gerado pela agencia ou 2-9 se foi gerado pelo beneficiário')
70
- end
71
- end
72
-
73
- context '@modalidade_carteira' do
74
- it 'deve ser invalido se nao possuir a modalidade da carteira' do
75
- objeto = subject.class.new(params.merge(modalidade_carteira: nil))
76
- expect(objeto.invalid?).to be true
77
- expect(objeto.errors.full_messages).to include('Modalidade carteira não pode estar em branco.')
78
- end
79
- end
80
-
81
- context '@parcela' do
82
- it 'deve ser invalido se nao possuir a parcela' do
83
- objeto = subject.class.new(params.merge(parcela: nil))
84
- expect(objeto.invalid?).to be true
85
- expect(objeto.errors.full_messages).to include('Parcela não pode estar em branco.')
86
- end
87
- end
88
-
89
- context '@agencia' do
90
- it 'deve ser invalido se a agencia tiver mais de 4 digitos' do
91
- unicred.agencia = '12345'
92
- expect(unicred.invalid?).to be true
93
- expect(unicred.errors.full_messages).to include('Agencia deve ter 4 dígitos.')
94
- end
95
- end
96
-
97
- context '@conta_corrente' do
98
- it 'deve ser invalido se a conta corrente tiver mais de 5 digitos' do
99
- unicred.conta_corrente = '123456'
100
- expect(unicred.invalid?).to be true
101
- expect(unicred.errors.full_messages).to include('Conta corrente deve ter 5 dígitos.')
102
- end
103
- end
104
-
105
- context '@digito_conta' do
106
- it 'deve ser inválido se o dígito conta não for informado' do
107
- unicred.digito_conta = nil
108
- expect(unicred.invalid?).to be true
109
- expect(unicred.errors.full_messages).to include('Digito conta não pode estar em branco.')
110
- end
111
-
112
- it 'deve ser inválido se o dígito conta tiver mais de 1 dígito' do
113
- unicred.digito_conta = '12'
114
- expect(unicred.invalid?).to be true
115
- expect(unicred.errors.full_messages).to include('Digito conta deve ter 1 dígito.')
116
- end
117
- end
118
- end
119
-
120
- context 'formatacoes' do
121
- it 'codigo do banco deve ser 001' do
122
- expect(unicred.cod_banco).to eq '748'
123
- end
124
-
125
- it 'nome do banco deve ser unicred com 30 posicoes' do
126
- nome_banco = unicred.nome_banco
127
- expect(nome_banco.size).to eq 30
128
- expect(nome_banco[0..19]).to eq 'SICREDI '
129
- end
130
-
131
- it 'versao do layout do arquivo deve ser 081' do
132
- expect(unicred.versao_layout_arquivo).to eq '081'
133
- end
134
-
135
- it 'versao do layout do lote deve ser 040' do
136
- expect(unicred.versao_layout_lote).to eq '040'
137
- end
138
-
139
- it 'deve calcular o digito da agencia' do
140
- expect(unicred.digito_agencia).to eq ' '
141
- end
142
-
143
- it 'deve calcular digito da conta' do
144
- # digito calculado a partir do modulo 11 com base 9
145
- #
146
- # conta = 1 2 3 4 5
147
- #
148
- # 5 4 3 2 1
149
- # x 9 8 7 6 5
150
- # = 45 32 21 12 5 = 116
151
- # 116 / 11 = 10 com resto 5
152
- expect(unicred.digito_conta).to eq '8'
153
- end
154
-
155
- it 'cod. convenio deve retornar as informacoes nas posicoes corretas' do
156
- cod_convenio = unicred.codigo_convenio
157
- expect(cod_convenio[0..19]).to eq ''.rjust(20, ' ')
158
- end
159
-
160
- it 'info conta deve retornar as informacoes nas posicoes corretas' do
161
- info_conta = unicred.info_conta
162
- expect(info_conta[0..4]).to eq '00165'
163
- expect(info_conta[5]).to eq ' '
164
- expect(info_conta[6..17]).to eq '000000000623'
165
- expect(info_conta[18]).to eq '8'
166
- end
167
-
168
- it 'complemento header deve retornar espacos em branco' do
169
- expect(unicred.complemento_header).to eq ''.rjust(29, ' ')
170
- end
171
-
172
- it 'complemento trailer deve retornar espacos em branco com a totalização das cobranças' do
173
- total_cobranca_simples = ''.rjust(23, '0')
174
- total_cobranca_vinculada = ''.rjust(23, '0')
175
- total_cobranca_caucionada = ''.rjust(23, '0')
176
- total_cobranca_descontada = ''.rjust(23, '0')
177
-
178
- expect(unicred.complemento_trailer).to eq "#{total_cobranca_simples}#{total_cobranca_vinculada}"\
179
- "#{total_cobranca_caucionada}#{total_cobranca_descontada}".ljust(217, ' ')
180
- end
181
-
182
- it 'formata o nosso numero' do
183
- nosso_numero = unicred.formata_nosso_numero '072000031'
184
- expect(nosso_numero.strip).to eq '072000031'
185
- end
186
- end
187
-
188
- context 'geracao remessa' do
189
- it_behaves_like 'cnab240'
190
-
191
- context 'arquivo' do
192
- it { expect(unicred.gera_arquivo).to eq(read_remessa('remessa-unicred-cnab240.rem', unicred.gera_arquivo)) }
193
- end
194
- end
195
- end
@@ -1,190 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe Brcobranca::Remessa::Cnab400::BancoBrasil do
6
- let(:pagamento) do
7
- Brcobranca::Remessa::Pagamento.new(valor: 199.9,
8
- data_vencimento: Date.current,
9
- nosso_numero: 123,
10
- documento_sacado: '12345678901',
11
- nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO,!^.?\/@ DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
12
- endereco_sacado: 'RUA RIO GRANDE DO SUL,!^.?\/@ São paulo Minas caçapa da silva junior',
13
- bairro_sacado: 'São josé dos quatro apostolos magros',
14
- cep_sacado: '12345678',
15
- cidade_sacado: 'Santa rita de cássia maria da silva',
16
- uf_sacado: 'SP')
17
- end
18
- let(:params) do
19
- { carteira: '12',
20
- agencia: '1234',
21
- variacao_carteira: '123',
22
- convenio: '1234567',
23
- convenio_lider: '7654321',
24
- conta_corrente: '1234',
25
- empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
26
- documento_cedente: '12345678910',
27
- sequencial_remessa: '1',
28
- pagamentos: [pagamento],
29
- tipo_cobranca: '04DSC' }
30
- end
31
- let(:banco_brasil) { subject.class.new(params) }
32
-
33
- context 'validacoes dos campos' do
34
- context '@agencia' do
35
- it 'deve ser invalido se nao possuir uma agencia' do
36
- object = subject.class.new(params.merge!(agencia: nil))
37
- expect(object.invalid?).to be true
38
- expect(object.errors.full_messages).to include('Agencia não pode estar em branco.')
39
- end
40
-
41
- it 'deve ser invalido se a agencia tiver mais de 4 digitos' do
42
- banco_brasil.agencia = '12345'
43
- expect(banco_brasil.invalid?).to be true
44
- expect(banco_brasil.errors.full_messages).to include('Agencia deve ser igual a 4 digítos.')
45
- end
46
- end
47
-
48
- context '@conta_corrente' do
49
- it 'deve ser invalido se nao possuir uma conta corrente' do
50
- object = subject.class.new(params.merge!(conta_corrente: nil))
51
- expect(object.invalid?).to be true
52
- expect(object.errors.full_messages).to include('Conta corrente não pode estar em branco.')
53
- end
54
-
55
- it 'deve ser invalido se a conta corrente tiver mais de 5 digitos' do
56
- banco_brasil.conta_corrente = '123456789'
57
- expect(banco_brasil.invalid?).to be true
58
- expect(banco_brasil.errors.full_messages).to include('Conta corrente deve ser menor ou igual a 8 dígitos.')
59
- end
60
- end
61
-
62
- context '@carteira' do
63
- it 'deve ser invalido se nao possuir uma carteira' do
64
- object = subject.class.new(params.merge!(carteira: nil))
65
- expect(object.invalid?).to be true
66
- expect(object.errors.full_messages).to include('Carteira não pode estar em branco.')
67
- end
68
-
69
- it 'deve ser invalido se a carteira nao tiver 2 digitos' do
70
- banco_brasil.carteira = '123'
71
- expect(banco_brasil.invalid?).to be true
72
- expect(banco_brasil.errors.full_messages).to include('Carteira deve ser igual a 2 digítos.')
73
- end
74
- end
75
-
76
- context '@convenio' do
77
- it 'deve ser invalido se nao possuir o convenio' do
78
- object = subject.class.new(params.merge!(convenio: nil))
79
- expect(object.invalid?).to be true
80
- expect(object.errors.full_messages).to include('Convenio não pode estar em branco.')
81
- end
82
- end
83
-
84
- context '@variacao_carteira' do
85
- it 'deve ser invalido se nao possuir a variacao da carteira' do
86
- object = subject.class.new(params.merge!(variacao_carteira: nil))
87
- expect(object.invalid?).to be true
88
- expect(object.errors.full_messages).to include('Variacao carteira não pode estar em branco.')
89
- end
90
-
91
- it 'deve ser invalido se a carteira nao tiver 3 digitos' do
92
- banco_brasil.variacao_carteira = '1234'
93
- expect(banco_brasil.invalid?).to be true
94
- expect(banco_brasil.errors.full_messages).to include('Variacao carteira deve ser igual a 3 digítos.')
95
- end
96
- end
97
-
98
- context '@documento_cedente' do
99
- it 'deve ser invalido se nao possuir o documento cedente' do
100
- object = subject.class.new(params.merge!(documento_cedente: nil))
101
- expect(object.invalid?).to be true
102
- expect(object.errors.full_messages).to include('Documento cedente não pode estar em branco.')
103
- end
104
-
105
- it 'deve ser invalido se o documento do cedente nao tiver entre 11 e 14 digitos' do
106
- banco_brasil.documento_cedente = '123'
107
- expect(banco_brasil.invalid?).to be true
108
- expect(banco_brasil.errors.full_messages).to include('Documento cedente deve ter entre 11 e 14 dígitos.')
109
- end
110
- end
111
- end
112
-
113
- context 'formatacoes dos valores' do
114
- it 'cod_banco deve ser 001' do
115
- expect(banco_brasil.cod_banco).to eq '001'
116
- end
117
-
118
- it 'nome_banco deve ser BANCODOBRASIL com 15 posicoes' do
119
- nome_banco = banco_brasil.nome_banco
120
- expect(nome_banco.size).to eq 15
121
- expect(nome_banco.strip).to eq 'BANCODOBRASIL'
122
- end
123
-
124
- it 'complemento deve retornar 294 posicoes com as suas informacoes' do
125
- complemento = banco_brasil.complemento
126
- expect(complemento.size).to eq 294
127
- expect(complemento[0..6]).to eq '0000001' # sequencial de remessa
128
- expect(complemento[29..35]).to eq '7654321' # numero do convenio lider
129
- end
130
-
131
- it 'info_conta deve retornar com 20 posicoes as informacoes da conta' do
132
- info_conta = banco_brasil.info_conta
133
- expect(info_conta.size).to eq 20
134
- expect(info_conta[0..3]).to eq '1234' # num. da agencia
135
- expect(info_conta[4]).to eq banco_brasil.agencia_dv.to_s # digito da agencia
136
- expect(info_conta[5..12]).to eq '00001234' # num. da conta corrente
137
- expect(info_conta[13]).to eq banco_brasil.conta_corrente_dv.to_s # digito da conta corrente
138
- end
139
- end
140
-
141
- context 'monta remessa' do
142
- it_behaves_like 'cnab400'
143
-
144
- context 'header' do
145
- it 'informacoes devem estar posicionadas corretamente no header' do
146
- header = banco_brasil.monta_header
147
- expect(header[1]).to eq '1' # tipo operacao (1 = remessa)
148
- expect(header[2..8]).to eq 'REMESSA' # literal da operacao
149
- expect(header[26..45]).to eq banco_brasil.info_conta # informacoes da conta
150
- expect(header[46..75]).to eq 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA'[0..29] # nome da empresa cedente
151
- expect(header[76..78]).to eq '001' # codigo do banco
152
- expect(header[79..93]).to eq 'BANCODOBRASIL'.ljust(15, ' ') # nome do banco
153
- expect(header[100..393]).to eq banco_brasil.complemento # complemento
154
- end
155
- end
156
-
157
- context 'detalhe' do
158
- it 'informacoes devem estar posicionadas corretamente no detalhe' do
159
- detalhe = banco_brasil.monta_detalhe pagamento, 1
160
- expect(detalhe[3..16]).to eq '00012345678910' # documento do cedente
161
- expect(detalhe[17..20]).to eq '1234' # agencia
162
- expect(detalhe[21]).to eq banco_brasil.agencia_dv.to_s # digito da agencia
163
- expect(detalhe[22..29]).to eq '00001234' # num. da conta corrente
164
- expect(detalhe[30]).to eq banco_brasil.conta_corrente_dv.to_s # digito da conta corrente
165
- expect(detalhe[31..37]).to eq '1234567' # convenio da empresa
166
- expect(detalhe[70..79]).to eq '0000000123' # nosso numero
167
- expect(detalhe[91..93]).to eq '123' # variacao da carteira
168
- expect(detalhe[101..105]).to eq '04DSC' # tipo de cobranca
169
- expect(detalhe[106..107]).to eq '12' # carteira
170
- expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
171
- expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
172
- expect(detalhe[156..157]).to eq '00' # primeira instrucao
173
- expect(detalhe[158..159]).to eq '00' # segunda instrucao
174
- expect(detalhe[220..233]).to eq '00012345678901' # documento do pagador
175
- expect(detalhe[234..270]).to eq 'PABLO DIEGO JOSE FRANCISCO DE PAULA J' # nome do pagador
176
- end
177
- end
178
-
179
- context 'arquivo' do
180
- before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
181
-
182
- after { Timecop.return }
183
-
184
- it {
185
- expect(banco_brasil.gera_arquivo).to eq(read_remessa('remessa-banco-brasil-cnab400.rem',
186
- banco_brasil.gera_arquivo))
187
- }
188
- end
189
- end
190
- end
@@ -1,188 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe Brcobranca::Remessa::Cnab400::BancoBrasilia do
6
- let(:pagamento) do
7
- Brcobranca::Remessa::Pagamento.new(valor: 199.9,
8
- data_vencimento: Date.current,
9
- nosso_numero: 123,
10
- documento: 6969,
11
- documento_sacado: '12345678901',
12
- nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO,!^.?\/@ DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
13
- endereco_sacado: 'RUA RIO GRANDE DO SUL,!^.?\/@ São paulo Minas caçapa da silva junior',
14
- bairro_sacado: 'São josé dos quatro apostolos magros',
15
- cep_sacado: '12345678',
16
- cidade_sacado: 'Santa rita de cássia maria da silva',
17
- uf_sacado: 'SP')
18
- end
19
- let(:params) do
20
- {
21
- carteira: '2',
22
- agencia: '083',
23
- conta_corrente: '0000490',
24
- digito_conta: '1',
25
- empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
26
- pagamentos: [pagamento]
27
- }
28
- end
29
- let(:banco_brasilia) { subject.class.new(params) }
30
-
31
- context 'validacoes dos campos' do
32
- context '@agencia' do
33
- it 'deve ser invalido se nao possuir uma agencia' do
34
- object = subject.class.new(params.merge!(agencia: nil))
35
- expect(object.invalid?).to be true
36
- expect(object.errors.full_messages).to include('Agencia não pode estar em branco.')
37
- end
38
-
39
- it 'deve ser invalido se a agencia tiver mais de 3 digitos' do
40
- banco_brasilia.agencia = '1234'
41
- expect(banco_brasilia.invalid?).to be true
42
- expect(banco_brasilia.errors.full_messages).to include('Agencia deve ter 3 dígitos.')
43
- end
44
- end
45
-
46
- context '@digito_conta' do
47
- it 'deve ser invalido se nao possuir um digito da conta corrente' do
48
- objeto = subject.class.new(params.merge!(digito_conta: nil))
49
- expect(objeto.invalid?).to be true
50
- expect(objeto.errors.full_messages).to include('Digito conta não pode estar em branco.')
51
- end
52
-
53
- it 'deve ser inválido se o dígito da conta tiver mais de 1 dígito' do
54
- banco_brasilia.digito_conta = '12'
55
- expect(banco_brasilia.invalid?).to be true
56
- expect(banco_brasilia.errors.full_messages).to include('Digito conta deve ter 1 dígito.')
57
- end
58
- end
59
-
60
- context '@conta_corrente' do
61
- it 'deve ser invalido se nao possuir uma conta corrente' do
62
- object = subject.class.new(params.merge!(conta_corrente: nil))
63
- expect(object.invalid?).to be true
64
- expect(object.errors.full_messages).to include('Conta corrente não pode estar em branco.')
65
- end
66
-
67
- it 'deve ser invalido se a conta corrente tiver mais de 7 digitos' do
68
- banco_brasilia.conta_corrente = '12345678'
69
- expect(banco_brasilia.invalid?).to be true
70
- expect(banco_brasilia.errors.full_messages).to include('Conta corrente deve ter 7 dígitos.')
71
- end
72
- end
73
-
74
- context '@carteira' do
75
- it 'deve ser inválido se não possuir uma carteira' do
76
- object = subject.class.new(params.merge!(carteira: nil))
77
- expect(object.invalid?).to be true
78
- expect(object.errors.full_messages).to include('Carteira não pode estar em branco.')
79
- end
80
-
81
- it 'deve ser inválido se a carteira tiver 1 dígito' do
82
- banco_brasilia.carteira = '12'
83
- expect(banco_brasilia.invalid?).to be true
84
- expect(banco_brasilia.errors.full_messages).to include('Carteira deve ter 1 dígito.')
85
- end
86
- end
87
- end
88
-
89
- context 'formatacoes dos valores' do
90
- it 'cod_banco deve ser 070' do
91
- expect(banco_brasilia.cod_banco).to eq '070'
92
- end
93
-
94
- it 'info_conta deve retornar com 10 posicoes as informacoes da conta' do
95
- info_conta = banco_brasilia.info_conta
96
- expect(info_conta.size).to eq 10
97
- expect(info_conta[0..2]).to eq '083' # num. da agencia
98
- expect(info_conta[3..9]).to eq '0000490' # num. da conta
99
- end
100
- end
101
-
102
- context 'monta remessa' do
103
- # it_behaves_like 'cnab400'
104
-
105
- context 'header' do
106
- it 'deve ter 39 posicoes' do
107
- expect(banco_brasilia.monta_header.size).to eq 39
108
- end
109
-
110
- it 'informacoes devem estar posicionadas corretamente no header' do
111
- header = banco_brasilia.monta_header
112
- expect(header[0..2]).to eq 'DCB' # literal DCB
113
- expect(header[3..5]).to eq '001' # versão
114
- expect(header[6..8]).to eq '075' # arquivo
115
- expect(header[9..18]).to eq banco_brasilia.info_conta # informacoes da conta
116
- expect(header[19..32]).to eq Time.now.strftime('%Y%m%d%H%M%S') # data/hora de formação
117
- expect(header[33..38]).to eq '000002' # num. de registros
118
- end
119
- end
120
-
121
- context 'detalhe' do
122
- it 'deve ter 400 posições' do
123
- expect(banco_brasilia.monta_detalhe(pagamento, 1).size).to eq 400
124
- end
125
-
126
- it 'informacoes devem estar posicionadas corretamente no detalhe' do
127
- detalhe = banco_brasilia.monta_detalhe pagamento, 1
128
- expect(detalhe[0..1]).to eq '01' # identificador
129
- expect(detalhe[2..11]).to eq banco_brasilia.info_conta # info da conta
130
- expect(detalhe[12..25]).to eq '00012345678901' # identificador
131
- expect(detalhe[26..60]).to eq 'PABLO DIEGO JOSE FRANCISCO DE PAULA' # nome do pagador
132
- expect(detalhe[61..95]).to eq 'RUA RIO GRANDE DO SUL Sao paulo Min' # endereço do pagador
133
- expect(detalhe[96..110]).to eq 'Santa rita de c' # cidade do pagador
134
- expect(detalhe[111..112]).to eq 'SP' # uf do pagador
135
- expect(detalhe[113..120]).to eq '12345678' # cep do pagador
136
- expect(detalhe[121..121]).to eq '1' # tipo de pessoa
137
- expect(detalhe[122..134]).to eq '6969'.rjust(13, '0') # seu numero
138
- expect(detalhe[135..135]).to eq '2' # categoria de cobranca
139
- expect(detalhe[136..143]).to eq Date.current.strftime('%d%m%Y') # data de emissao
140
- expect(detalhe[144..145]).to eq '21' # tipo do documento
141
- expect(detalhe[146..146]).to eq '0' # código da natureza
142
- expect(detalhe[147..147]).to eq '0' # código da cond. pagamento
143
- expect(detalhe[148..149]).to eq '02' # código da moeda
144
- expect(detalhe[150..152]).to eq '070' # código do banco
145
- expect(detalhe[153..156]).to eq '0083' # código da agência
146
- expect(detalhe[157..186]).to eq ''.rjust(30, ' ') # praça de cobranca
147
- expect(detalhe[187..194]).to eq Date.current.strftime('%d%m%Y') # data de vencimento
148
- expect(detalhe[195..208]).to eq '00000000019990' # valor do titulo
149
- expect(detalhe[209..220]).to eq '200012307038' # nosso numero
150
- expect(detalhe[221..222]).to eq '00' # tipo de juros
151
- expect(detalhe[223..236]).to eq ''.rjust(14, '0') # valor dos juros
152
- expect(detalhe[237..250]).to eq ''.rjust(14, '0') # valor dos abatimento
153
- expect(detalhe[251..252]).to eq '00' # tipo de desconto
154
- expect(detalhe[253..260]).to eq ''.rjust(8, '0') # data limite de desconto
155
- expect(detalhe[261..274]).to eq ''.rjust(14, '0') # valor dos descontos
156
- expect(detalhe[288..327]).to eq 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA ' # emitente do titulo
157
- end
158
- end
159
-
160
- it 'montagem da remessa deve falhar se o objeto nao for valido' do
161
- expect { subject.class.new.gera_arquivo }.to raise_error(Brcobranca::RemessaInvalida)
162
- end
163
-
164
- it 'remessa deve conter os registros mais as quebras de linha' do
165
- remessa = banco_brasilia.gera_arquivo
166
- expect(remessa.size).to eq 845
167
-
168
- # registros
169
- expect(remessa[0..38]).to eq banco_brasilia.monta_header
170
- expect(remessa[41..440]).to eq banco_brasilia.monta_detalhe(pagamento, 2).upcase
171
-
172
- # quebras de linha
173
- expect(remessa[39..40]).to eq "\r\n"
174
- expect(remessa[441..442]).to eq "\r\n"
175
- end
176
-
177
- context 'arquivo' do
178
- before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
179
-
180
- after { Timecop.return }
181
-
182
- it {
183
- expect(banco_brasilia.gera_arquivo).to eq(read_remessa('remessa-banco-brasilia-cnab400.rem',
184
- banco_brasilia.gera_arquivo))
185
- }
186
- end
187
- end
188
- end