cnab240_bancoabc 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +17 -0
  3. data/LICENSE +21 -0
  4. data/README.md +72 -0
  5. data/Rakefile +48 -0
  6. data/lib/cnab240/bancoabc/entities/base.rb +50 -0
  7. data/lib/cnab240/bancoabc/entities/header.rb +120 -0
  8. data/lib/cnab240/bancoabc/entities/header_builder.rb +91 -0
  9. data/lib/cnab240/bancoabc/entities/header_lote_builder.rb +84 -0
  10. data/lib/cnab240/bancoabc/entities/register_p.rb +183 -0
  11. data/lib/cnab240/bancoabc/entities/register_q.rb +101 -0
  12. data/lib/cnab240/bancoabc/entities/register_r.rb +129 -0
  13. data/lib/cnab240/bancoabc/entities/register_s.rb +73 -0
  14. data/lib/cnab240/bancoabc/entities/register_t.rb +116 -0
  15. data/lib/cnab240/bancoabc/entities/register_u.rb +79 -0
  16. data/lib/cnab240/bancoabc/entities/trailler.rb +54 -0
  17. data/lib/cnab240/bancoabc/entities/trailler_builder.rb +45 -0
  18. data/lib/cnab240/bancoabc/entities/trailler_lote_builder.rb +49 -0
  19. data/lib/cnab240/bancoabc/ocorrencias.rb +68 -0
  20. data/lib/cnab240/bancoabc/services/parse_line.rb +21 -0
  21. data/lib/cnab240/bancoabc/version.rb +14 -0
  22. data/lib/cnab240_bancoabc.rb +25 -0
  23. data/spec/cnab240/bancoabc/entities/base_spec.rb +93 -0
  24. data/spec/cnab240/bancoabc/entities/header_spec.rb +64 -0
  25. data/spec/cnab240/bancoabc/entities/register_p_spec.rb +298 -0
  26. data/spec/cnab240/bancoabc/entities/register_q_spec.rb +149 -0
  27. data/spec/cnab240/bancoabc/entities/register_r_spec.rb +191 -0
  28. data/spec/cnab240/bancoabc/entities/register_t_spec.rb +64 -0
  29. data/spec/cnab240/bancoabc/entities/register_u_spec.rb +49 -0
  30. data/spec/cnab240/bancoabc/entities/trailler_builder_spec.rb +60 -0
  31. data/spec/cnab240/bancoabc/entities/trailler_lote_builder_spec.rb +65 -0
  32. data/spec/cnab240/bancoabc/entities/trailler_spec.rb +73 -0
  33. data/spec/cnab240/bancoabc/services/parse_line_spec.rb +37 -0
  34. data/spec/spec_helper.rb +34 -0
  35. metadata +223 -0
@@ -0,0 +1,191 @@
1
+ # frozen_string_literal: false
2
+
3
+ require "spec_helper"
4
+
5
+ describe CNAB240::BancoABC::Entities::RegisterR do
6
+ describe "#register?" do
7
+ subject { described_class.new.register? }
8
+
9
+ it { expect(subject).to be_truthy }
10
+ end
11
+
12
+ describe "#codigo_banco" do
13
+ subject { described_class.new.codigo_banco(2) }
14
+
15
+ it { expect(subject).to eq("002") }
16
+ end
17
+
18
+ describe "#lote_servico" do
19
+ subject { described_class.new.lote_servico(2) }
20
+
21
+ it { expect(subject).to eq("0002") }
22
+ end
23
+
24
+ describe "#tipo_registro" do
25
+ subject { described_class.new.tipo_registro(2) }
26
+
27
+ it { expect(subject).to eq("2") }
28
+ end
29
+
30
+ describe "#numero_registro" do
31
+ subject { described_class.new.numero_registro(2) }
32
+
33
+ it { expect(subject).to eq("00002") }
34
+ end
35
+
36
+ describe "#segmento" do
37
+ subject { described_class.new.segmento }
38
+
39
+ it { expect(subject).to eq("R") }
40
+ end
41
+
42
+ describe "#cnab" do
43
+ subject { described_class.new.cnab("1") }
44
+
45
+ it { expect(subject).to eq("1") }
46
+ end
47
+
48
+ describe "#codigo_movimento" do
49
+ subject { described_class.new.codigo_movimento("1") }
50
+
51
+ it { expect(subject).to eq("01") }
52
+ end
53
+
54
+ describe "#uso_exclusivo" do
55
+ subject { described_class.new.uso_exclusivo(31234) }
56
+
57
+ it { expect(subject).to eq("31234 ") }
58
+ end
59
+
60
+ describe "#cod_desconto_2" do
61
+ subject { described_class.new.cod_desconto_2(820123) }
62
+
63
+ it { expect(subject).to eq("820123") }
64
+ end
65
+
66
+ describe "#data_desconto_2" do
67
+ subject { described_class.new.data_desconto_2(820123) }
68
+
69
+ it { expect(subject).to eq("00820123") }
70
+ end
71
+
72
+ describe "#valor_desconto_2" do
73
+ subject { described_class.new.valor_desconto_2(820123) }
74
+
75
+ it { expect(subject).to eq("000000000820123") }
76
+ end
77
+
78
+ describe "#cod_desconto_3" do
79
+ subject { described_class.new.cod_desconto_3(820123) }
80
+
81
+ it { expect(subject).to eq("820123") }
82
+ end
83
+
84
+ describe "#data_desconto_3" do
85
+ subject { described_class.new.data_desconto_3(820123) }
86
+
87
+ it { expect(subject).to eq("00820123") }
88
+ end
89
+
90
+ describe "#valor_desconto_3" do
91
+ subject { described_class.new.valor_desconto_3(820123) }
92
+
93
+ it { expect(subject).to eq("000000000820123") }
94
+ end
95
+
96
+ describe "#cod_multa" do
97
+ subject { described_class.new.cod_multa(820123) }
98
+
99
+ it { expect(subject).to eq("820123") }
100
+ end
101
+
102
+ describe "#data_multa" do
103
+ subject { described_class.new.data_multa(820123) }
104
+
105
+ it { expect(subject).to eq("00820123") }
106
+ end
107
+
108
+ describe "#valor_multa" do
109
+ subject { described_class.new.valor_multa(820123) }
110
+
111
+ it { expect(subject).to eq("000000000820123") }
112
+ end
113
+
114
+ describe "#informacao_sacado" do
115
+ subject { described_class.new.informacao_sacado(820123) }
116
+
117
+ it { expect(subject).to eq("0000820123") }
118
+ end
119
+
120
+ describe "#mensagem_3" do
121
+ subject { described_class.new.mensagem_3(820123) }
122
+
123
+ it { expect(subject).to eq("820123 ") }
124
+ end
125
+
126
+ describe "#mensagem_4" do
127
+ subject { described_class.new.mensagem_4(820123) }
128
+
129
+ it { expect(subject).to eq("820123 ") }
130
+ end
131
+
132
+ describe "#uso_exclusivo" do
133
+ subject { described_class.new.uso_exclusivo(820123) }
134
+
135
+ it { expect(subject).to eq("820123 ") }
136
+ end
137
+
138
+ describe "#cod_ocorrencia_sacado" do
139
+ subject { described_class.new.cod_ocorrencia_sacado(820123) }
140
+
141
+ it { expect(subject).to eq("00820123") }
142
+ end
143
+
144
+ describe "#cod_banco_conta_debito" do
145
+ subject { described_class.new.cod_banco_conta_debito(820123) }
146
+
147
+ it { expect(subject).to eq("820") }
148
+ end
149
+
150
+ describe "#cod_agencia_debito" do
151
+ subject { described_class.new.cod_agencia_debito(820123) }
152
+
153
+ it { expect(subject).to eq("82012") }
154
+ end
155
+
156
+ describe "#digito_verificador_agencia" do
157
+ subject { described_class.new.digito_verificador_agencia(820123) }
158
+
159
+ it { expect(subject).to eq("8") }
160
+ end
161
+
162
+ describe "#conta_corrente_debito" do
163
+ subject { described_class.new.conta_corrente_debito(820123) }
164
+
165
+ it { expect(subject).to eq("820123 ") }
166
+ end
167
+
168
+ describe "#digito_verificador_conta" do
169
+ subject { described_class.new.digito_verificador_conta(820123) }
170
+
171
+ it { expect(subject).to eq("8") }
172
+ end
173
+
174
+ describe "#aviso_debito_automatico" do
175
+ subject { described_class.new.aviso_debito_automatico(2820123) }
176
+
177
+ it { expect(subject).to eq("2820123") }
178
+ end
179
+
180
+ describe "#uso_exclusivo_cnab" do
181
+ subject { described_class.new.uso_exclusivo_cnab(2820123) }
182
+
183
+ it { expect(subject).to eq("2820123 ") }
184
+ end
185
+
186
+ describe "#digito_verificador_agencia_conta" do
187
+ subject { described_class.new.digito_verificador_agencia_conta(2820123) }
188
+
189
+ it { expect(subject).to eq("2") }
190
+ end
191
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: false
2
+
3
+ require "spec_helper"
4
+
5
+ describe CNAB240::BancoABC::Entities::RegisterT do
6
+ let(:header) { 13.times.map { rand(10) }.join }
7
+ let(:segmento) { 1.times.map { rand(10) }.join }
8
+ let(:segmento_space) { 1.times.map { rand(10) }.join }
9
+ let(:codigo_movimento) { 2.times.map { rand(10) }.join }
10
+ let(:codigo_movimento_space) { 29.times.map { rand(10) }.join }
11
+ let(:identificacao_do_titulo) { 11.times.map { rand(10) }.join }
12
+ let(:codigo_carteira) { 1.times.map { rand(10) }.join }
13
+ let(:numero_documento) { 15.times.map { rand(10) }.join }
14
+ let(:data_vencimento) { 8.times.map { rand(10) }.join }
15
+ let(:valor_titulo) { 15.times.map { rand(10) }.join }
16
+ let(:numero_do_banco) { 3.times.map { rand(10) }.join }
17
+ let(:agencia) { 5.times.map { rand(10) }.join }
18
+ let(:digito_verificador) { 1.times.map { rand(10) }.join }
19
+ let(:uso_empresa) { 25.times.map { rand(10) }.join }
20
+ let(:uso_empresa_space) { 2.times.map { rand(10) }.join }
21
+ let(:tipo_inscricao) { 1.times.map { rand(10) }.join }
22
+ let(:numero_inscricao) { 15.times.map { rand(10) }.join }
23
+ let(:nome) { 40.times.map { rand(10) }.join }
24
+ let(:nome_space) { 10.times.map { rand(10) }.join }
25
+ let(:motivo_ocorrencia) { 10.times.map { rand(10) }.join }
26
+ let(:valor_de_tarifas_custas_correspondentes) { 15.times.map { rand(10) }.join }
27
+ let(:ocorrencia) { described_class.new(line).ocorrencia }
28
+
29
+ let(:line) do
30
+ header + segmento + segmento_space + codigo_movimento + codigo_movimento_space + identificacao_do_titulo + codigo_carteira +
31
+ numero_documento + data_vencimento + valor_titulo + numero_do_banco + agencia + digito_verificador +
32
+ uso_empresa + uso_empresa_space + tipo_inscricao + numero_inscricao + nome + nome_space + valor_de_tarifas_custas_correspondentes + motivo_ocorrencia
33
+ end
34
+
35
+ describe "#register?" do
36
+ subject { described_class.new(line).register? }
37
+
38
+ it { expect(subject).to be_truthy }
39
+ end
40
+
41
+ describe "#data" do
42
+ subject { described_class.new(line).data }
43
+
44
+ it { expect(subject).to eq({
45
+ segmento: segmento.strip,
46
+ codigo_movimento: codigo_movimento.strip,
47
+ ocorrencia:,
48
+ identificacao_do_titulo: identificacao_do_titulo.strip,
49
+ codigo_carteira: codigo_carteira.strip,
50
+ numero_documento: numero_documento.strip,
51
+ data_vencimento: data_vencimento.strip,
52
+ valor_titulo: valor_titulo.strip,
53
+ numero_do_banco: numero_do_banco.strip,
54
+ agencia: agencia.strip,
55
+ digito_verificador: digito_verificador.strip,
56
+ uso_empresa: uso_empresa.strip,
57
+ tipo_inscricao: tipo_inscricao.strip,
58
+ numero_inscricao: numero_inscricao.strip,
59
+ nome: nome.strip,
60
+ valor_de_tarifas_custas_correspondentes: valor_de_tarifas_custas_correspondentes.strip,
61
+ motivo_ocorrencia:
62
+ }) }
63
+ end
64
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: false
2
+
3
+ require "spec_helper"
4
+
5
+ describe CNAB240::BancoABC::Entities::RegisterU do
6
+ let(:header) { 13.times.map { rand(10) }.join }
7
+ let(:segmento) { 1.times.map { rand(10) }.join }
8
+ let(:segmento_space) { 3.times.map { rand(10) }.join }
9
+ let(:acrescimos) { 15.times.map { rand(10) }.join }
10
+ let(:valor_desconto) { 15.times.map { rand(10) }.join }
11
+ let(:valor_abatimento) { 15.times.map { rand(10) }.join }
12
+ let(:valor_iof) { 15.times.map { rand(10) }.join }
13
+ let(:valor_pago) { 15.times.map { rand(10) }.join }
14
+ let(:valor_liquido) { 15.times.map { rand(10) }.join }
15
+ let(:valor_outras_despesas) { 15.times.map { rand(10) }.join }
16
+ let(:valor_outros_creditos) { 15.times.map { rand(10) }.join }
17
+ let(:data_ocorrencia) { 8.times.map { rand(10) }.join }
18
+ let(:data_credito) { 8.times.map { rand(10) }.join }
19
+
20
+ let(:line) do
21
+ header + segmento + segmento_space + acrescimos + valor_desconto + valor_abatimento +
22
+ valor_iof + valor_pago + valor_liquido + valor_outras_despesas + valor_outros_creditos +
23
+ data_ocorrencia + data_credito
24
+ end
25
+
26
+ describe "#register?" do
27
+ subject { described_class.new(line).register? }
28
+
29
+ it { expect(subject).to be_truthy }
30
+ end
31
+
32
+ describe "#data" do
33
+ subject { described_class.new(line).data }
34
+
35
+ it { expect(subject).to eq({
36
+ segmento:,
37
+ acrescimos:,
38
+ valor_desconto:,
39
+ valor_abatimento:,
40
+ valor_iof:,
41
+ valor_pago:,
42
+ valor_liquido:,
43
+ valor_outras_despesas:,
44
+ valor_outros_creditos:,
45
+ data_ocorrencia:,
46
+ data_credito:
47
+ }) }
48
+ end
49
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: false
2
+
3
+ require "spec_helper"
4
+
5
+ describe CNAB240::BancoABC::Entities::TraillerBuilder do
6
+ describe "#trailler?" do
7
+ subject { described_class.new.trailler? }
8
+
9
+ it { expect(subject).to be_truthy }
10
+ end
11
+
12
+ describe "#codigo_banco" do
13
+ subject { described_class.new.codigo_banco }
14
+
15
+ it { expect(subject).to eq("246") }
16
+ end
17
+
18
+ describe "#lote_do_servico" do
19
+ subject { described_class.new.lote_do_servico }
20
+
21
+ it { expect(subject).to eq("9999") }
22
+ end
23
+
24
+
25
+ describe "#tipo_registro" do
26
+ subject { described_class.new.tipo_registro }
27
+
28
+ it { expect(subject).to eq("9") }
29
+ end
30
+
31
+ describe "#quantidade_lotes" do
32
+ subject { described_class.new.quantidade_lotes }
33
+
34
+ it { expect(subject).to eq("000001") }
35
+ end
36
+
37
+ describe "#quantidade_registros" do
38
+ subject { described_class.new.quantidade_registros("1") }
39
+
40
+ it { expect(subject).to eq("000001") }
41
+ end
42
+
43
+ describe "#quantidade_contas_para_conciliacao" do
44
+ subject { described_class.new.quantidade_contas_para_conciliacao }
45
+
46
+ it { expect(subject).to eq("000000") }
47
+ end
48
+
49
+ describe "#uso_exclusivo_febraban_1" do
50
+ subject { described_class.new.uso_exclusivo_febraban_1(234) }
51
+
52
+ it { expect(subject).to eq("234 ") }
53
+ end
54
+
55
+ describe "#uso_exclusivo_febraban_2" do
56
+ subject { described_class.new.uso_exclusivo_febraban_2(234) }
57
+
58
+ it { expect(subject).to eq("234#{' ' * 202}") }
59
+ end
60
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: false
2
+
3
+ require "spec_helper"
4
+
5
+ describe CNAB240::BancoABC::Entities::TraillerLoteBuilder do
6
+ describe "#trailler?" do
7
+ subject { described_class.new.trailler? }
8
+
9
+ it { expect(subject).to be_truthy }
10
+ end
11
+
12
+ describe "#codigo_banco" do
13
+ subject { described_class.new.codigo_banco }
14
+
15
+ it { expect(subject).to eq("246") }
16
+ end
17
+
18
+ describe "#lote_do_servico" do
19
+ subject { described_class.new.lote_do_servico }
20
+
21
+ it { expect(subject).to eq("0001") }
22
+ end
23
+
24
+ describe "#tipo_registro" do
25
+ subject { described_class.new.tipo_registro }
26
+
27
+ it { expect(subject).to eq("5") }
28
+ end
29
+
30
+ describe "#quantidade_registros_lotes" do
31
+ subject { described_class.new.quantidade_registros_lotes(123456) }
32
+
33
+ it { expect(subject).to eq("123456") }
34
+ end
35
+
36
+ describe "#uso_exclusivo_febraban" do
37
+ subject { described_class.new.uso_exclusivo_febraban(1234567890) }
38
+
39
+ it { expect(subject).to eq("123456789") }
40
+ end
41
+
42
+ describe "#quantidade_titulos_cobranca" do
43
+ subject { described_class.new.quantidade_titulos_cobranca }
44
+
45
+ it { expect(subject).to eq("0" * 6) }
46
+ end
47
+
48
+ describe "#valor_total_titulos_carteira" do
49
+ subject { described_class.new.valor_total_titulos_carteira }
50
+
51
+ it { expect(subject).to eq("0" * 17) }
52
+ end
53
+
54
+ describe "#uso_abc" do
55
+ subject { described_class.new.uso_abc(123456789) }
56
+
57
+ it { expect(subject).to eq("12345678") }
58
+ end
59
+
60
+ describe "#uso_exclusivo" do
61
+ subject { described_class.new.uso_exclusivo("0" * 117) }
62
+
63
+ it { expect(subject).to eq("0" * 117) }
64
+ end
65
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: false
2
+
3
+ require "spec_helper"
4
+
5
+ describe CNAB240::BancoABC::Entities::Trailler do
6
+ let(:codigo_banco) { 3.times.map { rand(10) }.join }
7
+ let(:lote_do_servico) { 4.times.map { rand(10) }.join }
8
+ let(:tipo_registro) { 1.times.map { rand(10) }.join }
9
+ let(:uso_exclusivo_febraban_1) { 9.times.map { rand(10) }.join }
10
+ let(:quantidade_lotes) { 6.times.map { rand(10) }.join }
11
+ let(:quantidade_registros) { 6.times.map { rand(10) }.join }
12
+ let(:quantidade_contas_para_conciliacao) { 6.times.map { rand(10) }.join }
13
+ let(:uso_exclusivo_febraban_2) { 204.times.map { rand(10) }.join }
14
+
15
+ let(:line) do
16
+ codigo_banco + lote_do_servico + tipo_registro + uso_exclusivo_febraban_1 + quantidade_lotes +
17
+ quantidade_registros + quantidade_contas_para_conciliacao + uso_exclusivo_febraban_2
18
+ end
19
+
20
+ describe "#trailler?" do
21
+ subject { described_class.new(line).trailler? }
22
+
23
+ it { expect(subject).to be_truthy }
24
+ end
25
+
26
+ describe "#codigo_banco" do
27
+ subject { described_class.new(line).codigo_banco }
28
+
29
+ it { expect(subject).to eq(codigo_banco) }
30
+ end
31
+
32
+ describe "#lote_do_servico" do
33
+ subject { described_class.new(line).lote_do_servico }
34
+
35
+ it { expect(subject).to eq(lote_do_servico) }
36
+ end
37
+
38
+ describe "#tipo_registro" do
39
+ subject { described_class.new(line).tipo_registro }
40
+
41
+ it { expect(subject).to eq(tipo_registro) }
42
+ end
43
+
44
+ describe "#uso_exclusivo_febraban_1" do
45
+ subject { described_class.new(line).uso_exclusivo_febraban_1 }
46
+
47
+ it { expect(subject).to eq(uso_exclusivo_febraban_1) }
48
+ end
49
+
50
+ describe "#quantidade_lotes" do
51
+ subject { described_class.new(line).quantidade_lotes }
52
+
53
+ it { expect(subject).to eq(quantidade_lotes) }
54
+ end
55
+
56
+ describe "#quantidade_registros" do
57
+ subject { described_class.new(line).quantidade_registros }
58
+
59
+ it { expect(subject).to eq(quantidade_registros) }
60
+ end
61
+
62
+ describe "#quantidade_contas_para_conciliacao" do
63
+ subject { described_class.new(line).quantidade_contas_para_conciliacao }
64
+
65
+ it { expect(subject).to eq(quantidade_contas_para_conciliacao) }
66
+ end
67
+
68
+ describe "#uso_exclusivo_febraban_2" do
69
+ subject { described_class.new(line).uso_exclusivo_febraban_2 }
70
+
71
+ it { expect(subject).to eq(uso_exclusivo_febraban_2) }
72
+ end
73
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe CNAB240::BancoABC::Services::ParseLine do
6
+ context "when it receives a line and pass type 0" do
7
+ it "returns a Header" do
8
+ line = described_class.call("00000", "0")
9
+
10
+ expect(line.header?).to eq(true)
11
+ end
12
+ end
13
+
14
+ context "when it receives a line and pass type 1" do
15
+ it "returns a Register T format" do
16
+ line = described_class.call("00000000000000T", "1")
17
+
18
+ expect(line.register?).to eq(true)
19
+ end
20
+ end
21
+
22
+ context "when it receives a line and pass type 2" do
23
+ it "returns a Register U format" do
24
+ line = described_class.call("00000000000000U", "2")
25
+
26
+ expect(line.register?).to eq(true)
27
+ end
28
+ end
29
+
30
+ context "when it receives a line and pass type 9" do
31
+ it "returns a Trailler" do
32
+ line = described_class.call("90000", "9")
33
+
34
+ expect(line.trailler?).to eq(true)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "simplecov"
4
+ require "bundler"
5
+ require "pry"
6
+
7
+ SimpleCov.formatters = [SimpleCov::Formatter::HTMLFormatter]
8
+ SimpleCov.minimum_coverage 70.0
9
+
10
+ SimpleCov.start do
11
+ add_filter "/spec/"
12
+ minimum_coverage 70
13
+ minimum_coverage_by_file 50
14
+ end
15
+
16
+ Dir["./lib/**/*.rb"].sort.each { |file| require file }
17
+
18
+ begin
19
+ Bundler.setup(:default, :development, :test)
20
+ rescue Bundler::BundlerError => e
21
+ warn e.message
22
+ warn "Run `bundle install` to install missing gems"
23
+
24
+ exit e.status_code
25
+ end
26
+
27
+ RSpec.configure do |config|
28
+ # Enable flags like --only-failures and --next-failure
29
+ config.example_status_persistence_file_path = ".rspec_status"
30
+
31
+ config.expect_with :rspec do |c|
32
+ c.syntax = :expect
33
+ end
34
+ end