cnab240 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/.travis.yml +8 -0
- data/Gemfile +6 -0
- data/LICENSE +22 -0
- data/README.md +34 -0
- data/Rakefile +8 -0
- data/cnab240.gemspec +22 -0
- data/lib/cnab240/arquivo/arquivo.rb +32 -0
- data/lib/cnab240/arquivo/header.rb +39 -0
- data/lib/cnab240/arquivo/trailer.rb +18 -0
- data/lib/cnab240/core_ext/attribute_accessors.rb +47 -0
- data/lib/cnab240/core_ext/bindata.rb +9 -0
- data/lib/cnab240/core_ext/default_mixin.rb +12 -0
- data/lib/cnab240/pagamentos/header.rb +41 -0
- data/lib/cnab240/pagamentos/lote.rb +25 -0
- data/lib/cnab240/pagamentos/trailer.rb +18 -0
- data/lib/cnab240/segmentos/segmento_a.rb +44 -0
- data/lib/cnab240/segmentos/segmento_b.rb +40 -0
- data/lib/cnab240/segmentos/segmento_c.rb +32 -0
- data/lib/cnab240/version.rb +4 -0
- data/lib/cnab240.rb +41 -0
- data/spec/arquivo/arquivo_spec.rb +40 -0
- data/spec/arquivo/header_spec.rb +41 -0
- data/spec/arquivo/trailer_spec.rb +22 -0
- data/spec/cnab240_spec.rb +22 -0
- data/spec/pagamentos/header_spec.rb +55 -0
- data/spec/pagamentos/lote_spec.rb +26 -0
- data/spec/pagamentos/trailer_spec.rb +32 -0
- data/spec/segmentos/segmento_a_spec.rb +56 -0
- data/spec/segmentos/segmento_b_spec.rb +58 -0
- data/spec/segmentos/segmento_c_spec.rb +42 -0
- data/spec/spec_helper.rb +8 -0
- metadata +127 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 J. Eduardo R. Mourao
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# CNAB 240
|
2
|
+
|
3
|
+
[![Build Status](https://secure.travis-ci.org/eduardordm/cnab240.png)](http://travis-ci.org/eduardordm/cnab240)
|
4
|
+
|
5
|
+
Esta é uma implementação do Layout Padrão Febraban 240 posições, baseada no BinData.
|
6
|
+
|
7
|
+
## Instalação
|
8
|
+
|
9
|
+
Adicione ao Gemfile:
|
10
|
+
|
11
|
+
gem 'cnab240'
|
12
|
+
|
13
|
+
execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Ou adicione no seu chiqueiro:
|
18
|
+
|
19
|
+
$ gem install cnab240
|
20
|
+
|
21
|
+
## Como usar
|
22
|
+
|
23
|
+
TODO: ...
|
24
|
+
|
25
|
+
## Contribuindo
|
26
|
+
|
27
|
+
Adicione testes, abra o pull request.
|
28
|
+
|
29
|
+
Regras:
|
30
|
+
|
31
|
+
1. Sem bikeshedding.
|
32
|
+
2. Sem bikeshedding.
|
33
|
+
3. Sem bikeshedding.
|
34
|
+
|
data/Rakefile
ADDED
data/cnab240.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/cnab240/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.add_development_dependency "rspec"
|
6
|
+
gem.add_dependency "bindata"
|
7
|
+
|
8
|
+
gem.authors = ["Eduardo Mourao"]
|
9
|
+
gem.email = ["eduardo.a20@gmail.com"]
|
10
|
+
gem.description = %q{Formato CNAB 240.}
|
11
|
+
gem.summary = %q{Formato CNAB 240.}
|
12
|
+
gem.homepage = ""
|
13
|
+
|
14
|
+
gem.rubyforge_project = "cnab240"
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split($\)
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
+
gem.name = "cnab240"
|
20
|
+
gem.require_paths = ["lib"]
|
21
|
+
gem.version = Cnab240::VERSION
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cnab240::Arquivo
|
2
|
+
class Arquivo
|
3
|
+
attr_accessor :header
|
4
|
+
attr_accessor :lotes
|
5
|
+
attr_accessor :trailer
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@header = Header.new
|
9
|
+
@trailer = Trailer.new
|
10
|
+
@lotes = []
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def linhas
|
15
|
+
a = Array.new
|
16
|
+
a << @header.linha
|
17
|
+
@lotes.each do |lote|
|
18
|
+
lote.linhas.each do |linha|
|
19
|
+
a << linha
|
20
|
+
end
|
21
|
+
end
|
22
|
+
a << @trailer.linha
|
23
|
+
a
|
24
|
+
end
|
25
|
+
|
26
|
+
def string
|
27
|
+
a.join("\n")
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Cnab240::Arquivo
|
2
|
+
class Header < BinData::Record
|
3
|
+
|
4
|
+
include Cnab240::DefaultMixin
|
5
|
+
|
6
|
+
string :controle_banco, :length => 3
|
7
|
+
string :controle_lote, :value => '0000'
|
8
|
+
string :controle_registro, :value => '0'
|
9
|
+
|
10
|
+
string :cnab_g004_1, :length => 9
|
11
|
+
|
12
|
+
string :empresa_tipo, :length => 1
|
13
|
+
string :empresa_numero, :length => 14
|
14
|
+
string :empresa_convenio, :length => 20
|
15
|
+
string :empresa_agencia_codigo, :length => 5
|
16
|
+
string :empresa_agencia_dv, :length => 1
|
17
|
+
string :empresa_conta_numero, :length => 12
|
18
|
+
string :empresa_conta_dv, :length => 1
|
19
|
+
string :empresa_agencia_conta_dv, :length => 1
|
20
|
+
string :empresa_nome, :length => 30
|
21
|
+
|
22
|
+
string :banco_nome, :length => 30
|
23
|
+
|
24
|
+
string :cnab_g004_2, :length => 10
|
25
|
+
|
26
|
+
string :arquivo_codigo, :length => 1
|
27
|
+
string :arquivo_data_geracao, :length => 8
|
28
|
+
string :arquivo_hora_geracao,:length => 6
|
29
|
+
string :arquivo_sequencia, :length => 6
|
30
|
+
string :arquivo_layout, :value => '085'
|
31
|
+
string :arquivo_densidade, :length => 5
|
32
|
+
|
33
|
+
string :reservado_banco, :length => 20
|
34
|
+
string :reservado_empresa, :length => 20
|
35
|
+
|
36
|
+
string :cnab_g004_3, :length => 29
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Cnab240::Arquivo
|
2
|
+
class Trailer < BinData::Record
|
3
|
+
|
4
|
+
include Cnab240::DefaultMixin
|
5
|
+
|
6
|
+
string :controle_banco, :length => 3
|
7
|
+
string :controle_lote, :value => '9999'
|
8
|
+
string :controle_registro, :value => '9'
|
9
|
+
|
10
|
+
string :cnab_g004_1, :length => 9
|
11
|
+
|
12
|
+
string :totais_qtde_lotes, :length => 6
|
13
|
+
string :totais_qtde_registros, :length => 6
|
14
|
+
string :totais_qtde_contas_concil, :length => 6
|
15
|
+
|
16
|
+
string :cnab_g004_2, :length => 205
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Taken from Rails 2.1
|
2
|
+
class Module
|
3
|
+
def mod_attr_reader(*syms)
|
4
|
+
syms.each do |sym|
|
5
|
+
next if sym.is_a?(Hash)
|
6
|
+
class_eval(<<-EOS, __FILE__, __LINE__)
|
7
|
+
unless defined? @@#{sym}
|
8
|
+
@@#{sym} = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.#{sym}
|
12
|
+
@@#{sym}
|
13
|
+
end
|
14
|
+
|
15
|
+
def #{sym}
|
16
|
+
@@#{sym}
|
17
|
+
end
|
18
|
+
EOS
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def mod_attr_writer(*syms)
|
23
|
+
options = syms
|
24
|
+
syms.each do |sym|
|
25
|
+
class_eval(<<-EOS, __FILE__, __LINE__)
|
26
|
+
unless defined? @@#{sym}
|
27
|
+
@@#{sym} = nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.#{sym}=(obj)
|
31
|
+
@@#{sym} = obj
|
32
|
+
end
|
33
|
+
|
34
|
+
#{"
|
35
|
+
def #{sym}=(obj)
|
36
|
+
@@#{sym} = obj
|
37
|
+
end
|
38
|
+
" }
|
39
|
+
EOS
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def mod_attr_accessor(*syms)
|
44
|
+
mod_attr_reader(*syms)
|
45
|
+
mod_attr_writer(*syms)
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Cnab240::Pagamentos
|
2
|
+
class Header < BinData::Record
|
3
|
+
|
4
|
+
include Cnab240::DefaultMixin
|
5
|
+
|
6
|
+
string :controle_banco, :length => 3
|
7
|
+
string :controle_lote, :length => 4
|
8
|
+
string :controle_registro, :length => 1, :initial_value => '1'
|
9
|
+
|
10
|
+
string :servico_operacao, :value => 'C'
|
11
|
+
string :servico_tipo, :length => 2
|
12
|
+
string :servico_forma, :length => 2
|
13
|
+
string :servico_layout, :value => '044'
|
14
|
+
|
15
|
+
string :cnab_g004_1, :length => 1
|
16
|
+
|
17
|
+
string :empresa_tipo, :length => 1
|
18
|
+
string :empresa_numero, :length => 14
|
19
|
+
string :empresa_convenio, :length => 20
|
20
|
+
string :empresa_agencia_codigo, :length => 5
|
21
|
+
string :empresa_agencia_dv, :length => 1
|
22
|
+
string :empresa_conta_numero, :length => 12
|
23
|
+
string :empresa_conta_dv, :length => 1
|
24
|
+
string :empresa_agencia_conta_dv, :length => 1
|
25
|
+
string :empresa_nome, :length => 30
|
26
|
+
|
27
|
+
string :informacao_1, :length => 40
|
28
|
+
|
29
|
+
string :endereco_logradouro, :length => 30
|
30
|
+
string :endereco_numero, :length => 5
|
31
|
+
string :endereco_complemento, :length => 15
|
32
|
+
string :endereco_cidade, :length => 20
|
33
|
+
string :endereco_cep, :length => 5
|
34
|
+
string :endereco_complemento_cep, :length => 3
|
35
|
+
string :endereco_estado, :length => 2
|
36
|
+
|
37
|
+
string :indicativo_forma_pagamento, :length => 2
|
38
|
+
string :cnab_g004_2, :length => 6
|
39
|
+
string :ocorrencias, :length => 10
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Cnab240::Pagamentos
|
2
|
+
class Lote
|
3
|
+
attr_accessor :header
|
4
|
+
attr_accessor :segmento_a
|
5
|
+
attr_accessor :segmento_b
|
6
|
+
attr_accessor :segmento_c
|
7
|
+
attr_accessor :trailer
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@header = Header.new
|
11
|
+
@segmento_a = SegmentoA.new
|
12
|
+
@segmento_b = SegmentoB.new
|
13
|
+
@trailer = Trailer.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def linhas
|
17
|
+
@segmento_c.nil? ? [@header, @segmento_a, @segmento_b, @trailer] : [@header, @segmento_a, @segmento_b, @segmento_c, @trailer]
|
18
|
+
end
|
19
|
+
|
20
|
+
def string
|
21
|
+
linhas.join("\n")
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Cnab240::Pagamentos
|
2
|
+
class Trailer < BinData::Record
|
3
|
+
|
4
|
+
include Cnab240::DefaultMixin
|
5
|
+
|
6
|
+
string :controle_banco, :length => 3
|
7
|
+
string :controle_lote, :length => 4
|
8
|
+
string :controle_registro, :value => '5'
|
9
|
+
|
10
|
+
string :cnab_g004_1, :length => 9
|
11
|
+
string :totais_qtde_registros, :length => 6
|
12
|
+
string :totais_valor, :length => 18
|
13
|
+
string :totais_qtde_moeda, :length => 18
|
14
|
+
string :numero_aviso_debito, :length => 6
|
15
|
+
string :cnab_g004_2, :length => 165
|
16
|
+
string :ocorrencias, :length => 10
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Cnab240
|
2
|
+
class SegmentoA < BinData::Record
|
3
|
+
|
4
|
+
include Cnab240::DefaultMixin
|
5
|
+
|
6
|
+
string :controle_banco, :length => 3
|
7
|
+
string :controle_lote, :length => 4
|
8
|
+
string :controle_registro, :length => 1, :initial_value => '3'
|
9
|
+
|
10
|
+
string :servico_numero_registro, :length => 5
|
11
|
+
string :servico_codigo_segmento, :value => 'A'
|
12
|
+
string :servico_tipo_movimento, :length => 1
|
13
|
+
string :servico_codigo_movimento, :length => 2
|
14
|
+
|
15
|
+
string :favorecido_camara, :length => 3
|
16
|
+
string :favorecido_banco, :length => 3
|
17
|
+
string :favorecido_agencia_codigo, :length => 5
|
18
|
+
string :favorecido_agencia_dv, :length => 1
|
19
|
+
string :favorecido_conta_numero, :length => 12
|
20
|
+
string :favorecido_conta_dv, :length => 1
|
21
|
+
string :favorecido_agencia_conta_dv, :length => 1
|
22
|
+
string :favorecido_nome, :length => 30
|
23
|
+
|
24
|
+
string :credito_seu_numero, :length => 20
|
25
|
+
string :credito_data_pagamento, :length => 8
|
26
|
+
string :credito_moeda_tipo, :length => 3
|
27
|
+
string :credito_moeda_quantidade, :length => 15
|
28
|
+
string :credito_valor_pagamento, :length => 15
|
29
|
+
string :credito_nosso_numero, :length => 20
|
30
|
+
string :credito_data_real, :length => 8
|
31
|
+
string :credito_valor_real, :length => 15
|
32
|
+
|
33
|
+
string :informacao_2, :length => 40
|
34
|
+
|
35
|
+
string :codigo_finalidade_doc, :length => 2
|
36
|
+
string :codigo_finalidade_ted, :length => 5
|
37
|
+
string :codigo_finalidade_complementar, :length => 2
|
38
|
+
|
39
|
+
string :cnab_g004_1, :length => 3
|
40
|
+
string :aviso, :length => 1
|
41
|
+
string :ocorrencias, :length => 10
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Cnab240
|
2
|
+
class SegmentoB < BinData::Record
|
3
|
+
|
4
|
+
include Cnab240::DefaultMixin
|
5
|
+
|
6
|
+
string :controle_banco, :length => 3
|
7
|
+
string :controle_lote, :length => 4
|
8
|
+
string :controle_registro, :length => 1, :initial_value => '3'
|
9
|
+
|
10
|
+
string :servico_numero_registro, :length => 5
|
11
|
+
string :servico_codigo_segmento, :value => 'B'
|
12
|
+
|
13
|
+
string :cnab240_g004_1, :length => 3
|
14
|
+
|
15
|
+
string :favorecido_inscricao_tipo, :length => 1
|
16
|
+
string :favorecido_inscricao_numero, :length => 14
|
17
|
+
string :favorecido_endereco_logradouro, :length => 30
|
18
|
+
string :favorecido_endereco_numero, :length => 5
|
19
|
+
string :favorecido_endereco_complemento, :length => 15
|
20
|
+
string :favorecido_endereco_bairro, :length => 15
|
21
|
+
string :favorecido_endereco_cidade, :length => 20
|
22
|
+
string :favorecido_endereco_cep, :length => 5
|
23
|
+
string :favorecido_endereco_cep_complemento, :length => 3
|
24
|
+
string :favorecido_endereco_estado, :length => 2
|
25
|
+
|
26
|
+
string :pagamento_data_vencimento, :length => 8
|
27
|
+
string :pagamento_valor_documento, :length => 15
|
28
|
+
string :pagamento_valor_abatimento, :length => 15
|
29
|
+
string :pagamento_valor_desconto, :length => 15
|
30
|
+
string :pagamento_valor_mora, :length => 15
|
31
|
+
string :pagamento_valor_multa, :length => 15
|
32
|
+
|
33
|
+
string :codigo_documento_favorecido, :length => 15
|
34
|
+
string :aviso, :length => 1
|
35
|
+
string :codigo_ug, :length => 6
|
36
|
+
|
37
|
+
string :cnab_g004_2, :length => 8
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cnab240
|
2
|
+
class SegmentoC < BinData::Record
|
3
|
+
|
4
|
+
include Cnab240::DefaultMixin
|
5
|
+
|
6
|
+
string :controle_banco, :length => 3
|
7
|
+
string :controle_lote, :length => 4
|
8
|
+
string :controle_registro, :length => 1, :initial_value => '3'
|
9
|
+
|
10
|
+
string :servico_numero_registro, :length => 5
|
11
|
+
string :servico_codigo_segmento, :value => 'C'
|
12
|
+
|
13
|
+
string :cnab240_g004_1, :length => 3
|
14
|
+
|
15
|
+
string :complementar_valor_ir, :length => 15
|
16
|
+
string :complementar_valor_iss, :length => 15
|
17
|
+
string :complementar_valor_iof, :length => 15
|
18
|
+
string :complementar_valor_outras_deducoes, :length => 15
|
19
|
+
string :complementar_valor_outros_acrescimos, :length => 15
|
20
|
+
|
21
|
+
string :substituta_agencia, :length => 5
|
22
|
+
string :substituta_agencia_dv, :length => 1
|
23
|
+
string :substituta_numero_cc, :length => 12
|
24
|
+
string :substituta_conta_dv, :length => 1
|
25
|
+
string :substituta_agencia_conta_dv, :length => 1
|
26
|
+
|
27
|
+
string :valor_inss, :length => 15
|
28
|
+
|
29
|
+
string :cnab_g004_2, :length => 113
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
data/lib/cnab240.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require "cnab240/version"
|
2
|
+
|
3
|
+
require 'bindata'
|
4
|
+
|
5
|
+
require "cnab240/core_ext/attribute_accessors"
|
6
|
+
require "cnab240/core_ext/bindata"
|
7
|
+
require "cnab240/core_ext/default_mixin"
|
8
|
+
|
9
|
+
require "cnab240/segmentos/segmento_a"
|
10
|
+
require "cnab240/segmentos/segmento_b"
|
11
|
+
require "cnab240/segmentos/segmento_c"
|
12
|
+
|
13
|
+
require "cnab240/arquivo/arquivo"
|
14
|
+
require "cnab240/arquivo/header"
|
15
|
+
require "cnab240/arquivo/trailer"
|
16
|
+
|
17
|
+
require "cnab240/pagamentos/header"
|
18
|
+
require "cnab240/pagamentos/trailer"
|
19
|
+
require "cnab240/pagamentos/lote"
|
20
|
+
|
21
|
+
|
22
|
+
module Cnab240
|
23
|
+
|
24
|
+
mod_attr_accessor :defaults
|
25
|
+
@@defaults = {}
|
26
|
+
|
27
|
+
|
28
|
+
# Yield self for configuration block:
|
29
|
+
#
|
30
|
+
# Cnab240.setup do |config|
|
31
|
+
# config.banco = "001"
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
def self.setup
|
35
|
+
yield self
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include Cnab240::Pagamentos
|
4
|
+
include Cnab240::Arquivo
|
5
|
+
|
6
|
+
describe Arquivo do
|
7
|
+
|
8
|
+
it "deve instanciar" do
|
9
|
+
arquivo = Cnab240::Arquivo::Arquivo.new
|
10
|
+
arquivo.should be_an_instance_of(Cnab240::Arquivo::Arquivo)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "deve aceitar lotes" do
|
14
|
+
arquivo = Cnab240::Arquivo::Arquivo.new
|
15
|
+
arquivo.should respond_to(:lotes)
|
16
|
+
|
17
|
+
(1..10).each do |n|
|
18
|
+
lote = Cnab240::Pagamentos::Lote.new
|
19
|
+
lote.should be_an_instance_of(Cnab240::Pagamentos::Lote)
|
20
|
+
arquivo.lotes << lote
|
21
|
+
arquivo.lotes.length.should be(n)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it "deve manter 240 em todo o arquivo" do
|
26
|
+
arquivo = Cnab240::Arquivo::Arquivo.new
|
27
|
+
arquivo.should respond_to(:lotes)
|
28
|
+
|
29
|
+
(1..10).each do |n|
|
30
|
+
lote = Cnab240::Pagamentos::Lote.new
|
31
|
+
lote.should be_an_instance_of(Cnab240::Pagamentos::Lote)
|
32
|
+
arquivo.lotes << lote
|
33
|
+
end
|
34
|
+
|
35
|
+
arquivo.linhas do |linha|
|
36
|
+
linha.length.should be(240)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe Cnab240::Arquivo::Header do
|
5
|
+
|
6
|
+
it "deve ter campos de header" do
|
7
|
+
header = Cnab240::Arquivo::Header.new
|
8
|
+
|
9
|
+
header.should respond_to(:controle_banco)
|
10
|
+
header.should respond_to(:controle_lote)
|
11
|
+
header.should respond_to(:controle_registro)
|
12
|
+
|
13
|
+
header.should respond_to(:cnab_g004_1)
|
14
|
+
|
15
|
+
header.should respond_to(:empresa_tipo)
|
16
|
+
header.should respond_to(:empresa_numero)
|
17
|
+
header.should respond_to(:empresa_convenio)
|
18
|
+
header.should respond_to(:empresa_agencia_codigo)
|
19
|
+
header.should respond_to(:empresa_agencia_dv)
|
20
|
+
header.should respond_to(:empresa_conta_numero)
|
21
|
+
header.should respond_to(:empresa_conta_dv)
|
22
|
+
header.should respond_to(:empresa_agencia_conta_dv)
|
23
|
+
header.should respond_to(:empresa_nome)
|
24
|
+
|
25
|
+
header.should respond_to(:banco_nome)
|
26
|
+
|
27
|
+
header.should respond_to(:cnab_g004_2)
|
28
|
+
|
29
|
+
header.should respond_to(:arquivo_codigo)
|
30
|
+
header.should respond_to(:arquivo_data_geracao)
|
31
|
+
header.should respond_to(:arquivo_hora_geracao)
|
32
|
+
header.should respond_to(:arquivo_sequencia)
|
33
|
+
header.should respond_to(:arquivo_layout)
|
34
|
+
header.should respond_to(:arquivo_densidade)
|
35
|
+
|
36
|
+
header.should respond_to(:reservado_banco)
|
37
|
+
header.should respond_to(:reservado_empresa)
|
38
|
+
|
39
|
+
header.should respond_to(:cnab_g004_3)
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe Cnab240::Arquivo::Trailer do
|
5
|
+
|
6
|
+
it "deve conter campos trailer" do
|
7
|
+
header = Cnab240::Arquivo::Trailer.new
|
8
|
+
|
9
|
+
header.should respond_to(:controle_banco)
|
10
|
+
header.should respond_to(:controle_lote)
|
11
|
+
header.should respond_to(:controle_registro)
|
12
|
+
|
13
|
+
header.should respond_to(:cnab_g004_1)
|
14
|
+
|
15
|
+
header.should respond_to(:totais_qtde_lotes)
|
16
|
+
header.should respond_to(:totais_qtde_registros)
|
17
|
+
header.should respond_to(:totais_qtde_contas_concil)
|
18
|
+
|
19
|
+
header.should respond_to(:cnab_g004_2)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cnab240 do
|
4
|
+
|
5
|
+
it "deve ter campos de configuracao" do
|
6
|
+
Cnab240.setup do |config|
|
7
|
+
config.should respond_to(:defaults)
|
8
|
+
defaults[:empresa_tipo] = "1"
|
9
|
+
end
|
10
|
+
Cnab240.defaults[:empresa_tipo].should eq("1")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "configuracao deve ter efeito" do
|
14
|
+
Cnab240.setup do |config|
|
15
|
+
defaults[:empresa_tipo] = "1"
|
16
|
+
end
|
17
|
+
Cnab240.defaults[:empresa_tipo].should eq("1")
|
18
|
+
arquivo = Cnab240::Arquivo::Arquivo.new
|
19
|
+
arquivo.header.empresa_tipo.should eq("1")
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cnab240::Pagamentos::Header do
|
4
|
+
|
5
|
+
it "deve conter campos header" do
|
6
|
+
lote = Cnab240::Pagamentos::Lote.new
|
7
|
+
|
8
|
+
header = lote.header
|
9
|
+
|
10
|
+
header.should respond_to(:controle_banco)
|
11
|
+
header.should respond_to(:controle_lote)
|
12
|
+
header.should respond_to(:controle_registro)
|
13
|
+
|
14
|
+
header.should respond_to(:servico_operacao)
|
15
|
+
header.should respond_to(:servico_tipo)
|
16
|
+
header.should respond_to(:servico_forma)
|
17
|
+
header.should respond_to(:servico_layout)
|
18
|
+
|
19
|
+
header.should respond_to(:cnab_g004_1)
|
20
|
+
|
21
|
+
header.should respond_to(:empresa_tipo)
|
22
|
+
header.should respond_to(:empresa_numero)
|
23
|
+
header.should respond_to(:empresa_convenio)
|
24
|
+
header.should respond_to(:empresa_agencia_codigo)
|
25
|
+
header.should respond_to(:empresa_agencia_dv)
|
26
|
+
header.should respond_to(:empresa_conta_numero)
|
27
|
+
header.should respond_to(:empresa_conta_dv)
|
28
|
+
header.should respond_to(:empresa_agencia_conta_dv)
|
29
|
+
header.should respond_to(:empresa_nome)
|
30
|
+
|
31
|
+
header.should respond_to(:informacao_1)
|
32
|
+
|
33
|
+
header.should respond_to(:endereco_logradouro)
|
34
|
+
header.should respond_to(:endereco_numero)
|
35
|
+
header.should respond_to(:endereco_complemento)
|
36
|
+
header.should respond_to(:endereco_cidade)
|
37
|
+
header.should respond_to(:endereco_cep)
|
38
|
+
header.should respond_to(:endereco_complemento_cep)
|
39
|
+
header.should respond_to(:endereco_estado)
|
40
|
+
|
41
|
+
header.should respond_to(:indicativo_forma_pagamento)
|
42
|
+
|
43
|
+
header.should respond_to(:cnab_g004_2)
|
44
|
+
|
45
|
+
header.should respond_to(:ocorrencias)
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
it "header deve ter 240 caracteres" do
|
51
|
+
lote = Cnab240::Pagamentos::Lote.new
|
52
|
+
lote.header.linha.length.should be(240)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cnab240::Pagamentos::Lote do
|
4
|
+
|
5
|
+
it "deve conter trailer e header" do
|
6
|
+
lote = Cnab240::Pagamentos::Lote.new
|
7
|
+
lote.header.should be_an_instance_of(Cnab240::Pagamentos::Header)
|
8
|
+
lote.trailer.should be_an_instance_of(Cnab240::Pagamentos::Trailer)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "deve conter segmento a" do
|
12
|
+
lote = Cnab240::Pagamentos::Lote.new
|
13
|
+
lote.segmento_a.should be_an_instance_of(Cnab240::SegmentoA)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "deve conter segmento b" do
|
17
|
+
lote = Cnab240::Pagamentos::Lote.new
|
18
|
+
lote.segmento_b.should be_an_instance_of(Cnab240::SegmentoB)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "pode conter segmento c" do
|
22
|
+
lote = Cnab240::Pagamentos::Lote.new
|
23
|
+
lote.should respond_to(:segmento_c)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cnab240::Pagamentos::Trailer do
|
4
|
+
|
5
|
+
it "deve conter campos trailer" do
|
6
|
+
lote = Cnab240::Pagamentos::Lote.new
|
7
|
+
|
8
|
+
trailer = lote.trailer
|
9
|
+
|
10
|
+
trailer.should respond_to(:controle_banco)
|
11
|
+
trailer.should respond_to(:controle_lote)
|
12
|
+
trailer.should respond_to(:controle_registro)
|
13
|
+
|
14
|
+
trailer.should respond_to(:cnab_g004_1)
|
15
|
+
|
16
|
+
trailer.should respond_to(:totais_qtde_registros)
|
17
|
+
trailer.should respond_to(:totais_valor)
|
18
|
+
trailer.should respond_to(:totais_qtde_moeda)
|
19
|
+
|
20
|
+
trailer.should respond_to(:numero_aviso_debito)
|
21
|
+
|
22
|
+
trailer.should respond_to(:cnab_g004_2)
|
23
|
+
|
24
|
+
trailer.should respond_to(:ocorrencias)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "trailer deve ter 240 caracteres" do
|
28
|
+
lote = Cnab240::Pagamentos::Lote.new
|
29
|
+
lote.trailer.linha.length.should be(240)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include Cnab240
|
4
|
+
|
5
|
+
describe SegmentoA do
|
6
|
+
|
7
|
+
it "deve instanciar segmento" do
|
8
|
+
segmento = SegmentoA.new
|
9
|
+
segmento.should be_an_instance_of(SegmentoA)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "deve conter campos" do
|
13
|
+
segmento = SegmentoA.new
|
14
|
+
|
15
|
+
segmento.should respond_to(:controle_banco)
|
16
|
+
segmento.should respond_to(:controle_lote)
|
17
|
+
segmento.should respond_to(:controle_registro)
|
18
|
+
|
19
|
+
segmento.should respond_to(:servico_numero_registro)
|
20
|
+
segmento.should respond_to(:servico_codigo_segmento)
|
21
|
+
segmento.should respond_to(:servico_tipo_movimento)
|
22
|
+
segmento.should respond_to(:servico_codigo_movimento)
|
23
|
+
|
24
|
+
segmento.should respond_to(:favorecido_camara)
|
25
|
+
segmento.should respond_to(:favorecido_banco)
|
26
|
+
segmento.should respond_to(:favorecido_agencia_codigo)
|
27
|
+
segmento.should respond_to(:favorecido_agencia_dv)
|
28
|
+
segmento.should respond_to(:favorecido_conta_numero)
|
29
|
+
segmento.should respond_to(:favorecido_conta_dv)
|
30
|
+
segmento.should respond_to(:favorecido_nome)
|
31
|
+
|
32
|
+
segmento.should respond_to(:credito_seu_numero)
|
33
|
+
segmento.should respond_to(:credito_data_pagamento)
|
34
|
+
segmento.should respond_to(:credito_moeda_tipo)
|
35
|
+
segmento.should respond_to(:credito_moeda_quantidade)
|
36
|
+
segmento.should respond_to(:credito_valor_pagamento)
|
37
|
+
segmento.should respond_to(:credito_nosso_numero)
|
38
|
+
segmento.should respond_to(:credito_data_real)
|
39
|
+
segmento.should respond_to(:credito_valor_real)
|
40
|
+
|
41
|
+
segmento.should respond_to(:informacao_2)
|
42
|
+
|
43
|
+
segmento.should respond_to(:codigo_finalidade_doc)
|
44
|
+
segmento.should respond_to(:codigo_finalidade_ted)
|
45
|
+
segmento.should respond_to(:codigo_finalidade_complementar)
|
46
|
+
segmento.should respond_to(:cnab_g004_1)
|
47
|
+
segmento.should respond_to(:aviso)
|
48
|
+
segmento.should respond_to(:ocorrencias)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "deve ter 240 caracteres" do
|
52
|
+
segmento = SegmentoA.new
|
53
|
+
segmento.linha.length.should be(240)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include Cnab240
|
4
|
+
|
5
|
+
describe SegmentoB do
|
6
|
+
|
7
|
+
it "deve instanciar segmento" do
|
8
|
+
segmento = SegmentoB.new
|
9
|
+
segmento.should be_an_instance_of(SegmentoB)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "deve conter campos" do
|
13
|
+
segmento = SegmentoB.new
|
14
|
+
|
15
|
+
segmento.should respond_to(:controle_banco)
|
16
|
+
segmento.should respond_to(:controle_lote)
|
17
|
+
segmento.should respond_to(:controle_registro)
|
18
|
+
|
19
|
+
segmento.should respond_to(:servico_numero_registro)
|
20
|
+
segmento.should respond_to(:servico_codigo_segmento)
|
21
|
+
|
22
|
+
segmento.should respond_to(:cnab240_g004_1)
|
23
|
+
|
24
|
+
segmento.should respond_to(:favorecido_inscricao_tipo)
|
25
|
+
segmento.should respond_to(:favorecido_inscricao_numero)
|
26
|
+
segmento.should respond_to(:favorecido_endereco_logradouro)
|
27
|
+
segmento.should respond_to(:favorecido_endereco_numero)
|
28
|
+
segmento.should respond_to(:favorecido_endereco_complemento)
|
29
|
+
segmento.should respond_to(:favorecido_endereco_bairro)
|
30
|
+
segmento.should respond_to(:favorecido_endereco_cidade)
|
31
|
+
segmento.should respond_to(:favorecido_endereco_cep)
|
32
|
+
segmento.should respond_to(:favorecido_endereco_cep_complemento)
|
33
|
+
segmento.should respond_to(:favorecido_endereco_estado)
|
34
|
+
|
35
|
+
segmento.should respond_to(:pagamento_data_vencimento)
|
36
|
+
segmento.should respond_to(:pagamento_valor_documento)
|
37
|
+
segmento.should respond_to(:pagamento_valor_abatimento)
|
38
|
+
segmento.should respond_to(:pagamento_valor_desconto)
|
39
|
+
segmento.should respond_to(:pagamento_valor_mora)
|
40
|
+
segmento.should respond_to(:pagamento_valor_multa)
|
41
|
+
|
42
|
+
segmento.should respond_to(:codigo_documento_favorecido)
|
43
|
+
|
44
|
+
segmento.should respond_to(:aviso)
|
45
|
+
|
46
|
+
segmento.should respond_to(:codigo_ug)
|
47
|
+
|
48
|
+
segmento.should respond_to(:cnab_g004_2)
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
it "deve ter 240 caracteres" do
|
54
|
+
segmento = SegmentoB.new
|
55
|
+
segmento.linha.length.should be(240)
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include Cnab240
|
4
|
+
|
5
|
+
describe SegmentoC do
|
6
|
+
|
7
|
+
it "deve instanciar segmento" do
|
8
|
+
segmento = SegmentoC.new
|
9
|
+
segmento.should be_an_instance_of(SegmentoC)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "deve conter campos" do
|
13
|
+
segmento = SegmentoC.new
|
14
|
+
|
15
|
+
segmento.should respond_to(:servico_numero_registro)
|
16
|
+
segmento.should respond_to(:servico_codigo_segmento)
|
17
|
+
|
18
|
+
segmento.should respond_to(:cnab240_g004_1)
|
19
|
+
|
20
|
+
segmento.should respond_to(:complementar_valor_ir)
|
21
|
+
segmento.should respond_to(:complementar_valor_iss)
|
22
|
+
segmento.should respond_to(:complementar_valor_iof)
|
23
|
+
segmento.should respond_to(:complementar_valor_outras_deducoes)
|
24
|
+
segmento.should respond_to(:complementar_valor_outros_acrescimos)
|
25
|
+
|
26
|
+
segmento.should respond_to(:substituta_agencia)
|
27
|
+
segmento.should respond_to(:substituta_agencia_dv)
|
28
|
+
segmento.should respond_to(:substituta_numero_cc)
|
29
|
+
segmento.should respond_to(:substituta_conta_dv)
|
30
|
+
segmento.should respond_to(:substituta_agencia_conta_dv)
|
31
|
+
|
32
|
+
segmento.should respond_to(:valor_inss)
|
33
|
+
|
34
|
+
segmento.should respond_to(:cnab_g004_2)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "deve ter 240 caracteres" do
|
38
|
+
segmento = SegmentoC.new
|
39
|
+
segmento.linha.length.should be(240)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cnab240
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Eduardo Mourao
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-11 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: bindata
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: Formato CNAB 240.
|
47
|
+
email:
|
48
|
+
- eduardo.a20@gmail.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- .gitignore
|
54
|
+
- .rspec
|
55
|
+
- .travis.yml
|
56
|
+
- Gemfile
|
57
|
+
- LICENSE
|
58
|
+
- README.md
|
59
|
+
- Rakefile
|
60
|
+
- cnab240.gemspec
|
61
|
+
- lib/cnab240.rb
|
62
|
+
- lib/cnab240/arquivo/arquivo.rb
|
63
|
+
- lib/cnab240/arquivo/header.rb
|
64
|
+
- lib/cnab240/arquivo/trailer.rb
|
65
|
+
- lib/cnab240/core_ext/attribute_accessors.rb
|
66
|
+
- lib/cnab240/core_ext/bindata.rb
|
67
|
+
- lib/cnab240/core_ext/default_mixin.rb
|
68
|
+
- lib/cnab240/pagamentos/header.rb
|
69
|
+
- lib/cnab240/pagamentos/lote.rb
|
70
|
+
- lib/cnab240/pagamentos/trailer.rb
|
71
|
+
- lib/cnab240/segmentos/segmento_a.rb
|
72
|
+
- lib/cnab240/segmentos/segmento_b.rb
|
73
|
+
- lib/cnab240/segmentos/segmento_c.rb
|
74
|
+
- lib/cnab240/version.rb
|
75
|
+
- spec/arquivo/arquivo_spec.rb
|
76
|
+
- spec/arquivo/header_spec.rb
|
77
|
+
- spec/arquivo/trailer_spec.rb
|
78
|
+
- spec/cnab240_spec.rb
|
79
|
+
- spec/pagamentos/header_spec.rb
|
80
|
+
- spec/pagamentos/lote_spec.rb
|
81
|
+
- spec/pagamentos/trailer_spec.rb
|
82
|
+
- spec/segmentos/segmento_a_spec.rb
|
83
|
+
- spec/segmentos/segmento_b_spec.rb
|
84
|
+
- spec/segmentos/segmento_c_spec.rb
|
85
|
+
- spec/spec_helper.rb
|
86
|
+
homepage: ''
|
87
|
+
licenses: []
|
88
|
+
post_install_message:
|
89
|
+
rdoc_options: []
|
90
|
+
require_paths:
|
91
|
+
- lib
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
hash: -3092847186393092884
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ! '>='
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
segments:
|
108
|
+
- 0
|
109
|
+
hash: -3092847186393092884
|
110
|
+
requirements: []
|
111
|
+
rubyforge_project: cnab240
|
112
|
+
rubygems_version: 1.8.24
|
113
|
+
signing_key:
|
114
|
+
specification_version: 3
|
115
|
+
summary: Formato CNAB 240.
|
116
|
+
test_files:
|
117
|
+
- spec/arquivo/arquivo_spec.rb
|
118
|
+
- spec/arquivo/header_spec.rb
|
119
|
+
- spec/arquivo/trailer_spec.rb
|
120
|
+
- spec/cnab240_spec.rb
|
121
|
+
- spec/pagamentos/header_spec.rb
|
122
|
+
- spec/pagamentos/lote_spec.rb
|
123
|
+
- spec/pagamentos/trailer_spec.rb
|
124
|
+
- spec/segmentos/segmento_a_spec.rb
|
125
|
+
- spec/segmentos/segmento_b_spec.rb
|
126
|
+
- spec/segmentos/segmento_c_spec.rb
|
127
|
+
- spec/spec_helper.rb
|