cnab240santander 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/RETORNO.TXT +6 -0
- data/Rakefile +1 -0
- data/cnab240santander.gemspec +24 -0
- data/lib/cnab240santander/base.rb +5 -0
- data/lib/cnab240santander/detalhe.rb +74 -0
- data/lib/cnab240santander/formatacao.rb +20 -0
- data/lib/cnab240santander/header_arquivo.rb +31 -0
- data/lib/cnab240santander/header_lote.rb +31 -0
- data/lib/cnab240santander/retorno.rb +95 -0
- data/lib/cnab240santander/trailer_arquivo.rb +16 -0
- data/lib/cnab240santander/trailer_lote.rb +24 -0
- data/lib/cnab240santander/version.rb +8 -0
- data/lib/cnab240santander.rb +9 -0
- data/spec/files/cnab_spec.rb +25 -0
- data/spec/spec_helper.rb +9 -0
- metadata +130 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color --format documentation
|
data/Gemfile
ADDED
data/RETORNO.TXT
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
03300000 2012508169000136226080130004011 005015243 ZERTICO TECNOLOGIAS DE INTERNEBANCO SANTANDER (BRASIL) S/A 204082011 000002040
|
2
|
+
03367741T01 040 2012508169000136005015243 226080130004011 ZERTICO TECNOLOGIAS DE INTERNE 0000000204082011
|
3
|
+
0336774300001T 17226080130004011 00000000000601 0408201100000000000435000100308 002000000000000000 01300040110000000000002640400000000
|
4
|
+
0336774300002U 170000000000000000000000000000000000000000000000000000000000000000000000043500000000000043500000000000000000000000000000000408201105082011000000000000000000000000000 000
|
5
|
+
03367745 0000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
6
|
+
03367749 000001000006
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "cnab240santander/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "cnab240santander"
|
7
|
+
s.version = Cnab240santander::Version::STRING
|
8
|
+
s.authors = ["Lairton Borges"]
|
9
|
+
s.email = ["lairton@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/ljoseppi/"
|
11
|
+
s.summary = "Gem to read the cnab240 return file of Santander Bank (Brazil)"
|
12
|
+
s.description = s.summary
|
13
|
+
|
14
|
+
s.rubyforge_project = "cnab240santander"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency "activesupport", "~> 3.1.0"
|
22
|
+
s.add_dependency "mocha", "~> 0.9.10"
|
23
|
+
s.add_development_dependency "rspec", "~> 2.6.0"
|
24
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Cnab240santander
|
2
|
+
class Detalhe < Base
|
3
|
+
def self.processar(linha, segmento)
|
4
|
+
vlinha = Hash.new
|
5
|
+
|
6
|
+
if segmento == "T"
|
7
|
+
#Controle
|
8
|
+
vlinha["banco"] = linha[0..2] # Num //Código no Banco da Compensação
|
9
|
+
vlinha["lote"] = linha[3..6] # Num //Numero do lote retorno
|
10
|
+
vlinha["registro"] = linha[7..7] # Num //Tipo de Registro - 3
|
11
|
+
#Serviço
|
12
|
+
vlinha["num_registro_lote"] = linha[8..12] # Num //No sequencial do registro no lote
|
13
|
+
vlinha["segmento"] = linha[13..13] # Alfa //Código de Segmento no Reg. Detalhe - T
|
14
|
+
vlinha["res_banco1"] = linha[14..14] # Alfa //Reservado (uso Banco) - Brancos
|
15
|
+
vlinha["cod_movimento"] = linha[15..16] # Num //Código de movimento (ocorrência)
|
16
|
+
vlinha["agencia_ced"] = linha[17..20] # Num //Agência do Cedente
|
17
|
+
vlinha["dv_agencia_ced"] = linha[21..21] # Num //Dígito da Agência do Cedente
|
18
|
+
vlinha["conta_ced"] = linha[22..30] # Num //Número da conta corrente
|
19
|
+
vlinha["dv_conta_ced"] = linha[31..31] # Num //Dígito verificador da conta
|
20
|
+
vlinha["res_banco2"] = linha[32..39] # Alfa //Reservado (uso Banco) - Brancos
|
21
|
+
vlinha["nosso_numero"] = linha[40..52] # Num //Identificação do título no Banco - Nosso número
|
22
|
+
vlinha["cod_carteira"] = linha[53..53] # Num //Código da carteira
|
23
|
+
vlinha["seu_numero"] = linha[54..68] # Alfa //No do documento de cobrança - Seu número
|
24
|
+
vlinha["data_venc_titulo"] = formataData(linha[69..76]) # Num //Data do vencimento do título - DDMMAAAA
|
25
|
+
vlinha["valor_nominal"] = preparaMoeda(linha[77..91], 2) # Num //Valor nominal do título - 2 decimais
|
26
|
+
vlinha["banco_cobrador"] = linha[92..94] # Num //No do Banco Cobrador / Recebedor
|
27
|
+
vlinha["ag_cobradora"] = linha[95..98] # Num //Agência Cobradora / Recebedora
|
28
|
+
vlinha["dig_ag_cobradora"] = linha[99..99] # Num //Dígito da Agência do Cobradora
|
29
|
+
vlinha["id_titulo"] = linha[100..124] # Alfa //Identif. do título na empresa
|
30
|
+
vlinha["cod_moeda"] = linha[125..126] # Num //Código da moeda
|
31
|
+
vlinha["tipo_inscricao_sacado"] = linha[127..127] # Num //Tipo de inscrição sacado - 1 =CPF, 2 = CNPJ
|
32
|
+
vlinha["num_inscricao_sacado"] = linha[128..142] # Num //Número de inscrição sacado
|
33
|
+
vlinha["nome_sacado"] = linha[143..182] # Alfa //Nome do Sacado
|
34
|
+
vlinha["conta_cobranca"] = linha[183..192] # Alfa //Conta Cobrança
|
35
|
+
vlinha["valor_tarifa"] = preparaMoeda(linha[193..207], 2) # Num //Valor da Tarifa/Custas
|
36
|
+
vlinha["rejeicoes"] = linha[208..217] # Alfa //Identificação para rejeições, tarifas, custas, liquidações e baixas,
|
37
|
+
# ocorre 5 vezes, sendo que cada ocorrência ocupa 02 dígitos.
|
38
|
+
vlinha["res_banco3"] = linha[218..239] # Alfa //Reservado (uso Banco) - Brancos
|
39
|
+
|
40
|
+
elsif segmento == "U"
|
41
|
+
|
42
|
+
#Controle
|
43
|
+
vlinha["banco2"] = linha[0..2] # Num //Código do Banco na Compensação
|
44
|
+
vlinha["lote2"] = linha[3..6] # Num //Lote de Serviço
|
45
|
+
vlinha["registro2"] = linha[7..7] # Num default '3'//Registro detalhe
|
46
|
+
#Serviço
|
47
|
+
vlinha["num_registro_lote2"] = linha[8..12] # Num //No Sequencial do Registro no Lote
|
48
|
+
vlinha["segmento2"] = linha[13..13] # Alfa //Cód. segmento do registro detalhe - U
|
49
|
+
vlinha["res_banco3"] = linha[14..14] # Alfa //Reservado (uso Banco) - Brancos
|
50
|
+
vlinha["cod_movimento2"] = linha[15..16] # Num //Código de movimento (ocorrência)
|
51
|
+
#Valores
|
52
|
+
vlinha["juros_multa_encargos"] = preparaMoeda(linha[17..31], 2) # Num //Juros / Multa / Encargos - 2 decimais
|
53
|
+
vlinha["valor_desconto"] = preparaMoeda(linha[32..46], 2) # Num //Valor do desconto concedido - 2 decimais
|
54
|
+
vlinha["valor_abatimento"] = preparaMoeda(linha[47..61], 2) # Num //Valor do Abatimento Concedido/Cancelado - 2 decimais
|
55
|
+
vlinha["valor_iof"] = preparaMoeda(linha[62..76], 2) # Num //Valor do IOF recolhido - 2 decimais
|
56
|
+
vlinha["valor_pago"] = preparaMoeda(linha[77..91], 2) # Num //Valor pago pelo sacado - 2 decimais
|
57
|
+
vlinha["valor_liquido"] = preparaMoeda(linha[92..106], 2) # Num //Valor liquido a ser creditado - 2 decimais
|
58
|
+
vlinha["valor_despesas"] = preparaMoeda(linha[107..121], 2) # Num //Valor de outras despesas - 2 decimais
|
59
|
+
vlinha["valor_creditos"] = preparaMoeda(linha[122..136], 2) # Num //Valor de outros créditos - 2 decimais
|
60
|
+
#Ocorrencia
|
61
|
+
vlinha["data_ocorrencia"] = formataData(linha[137..144]) # Num //Data da ocorrência - DDMMAAAA
|
62
|
+
vlinha["data_credito"] = formataData(linha[145..152]) # Num //Data da efetivação do crédito - DDMMAAAA
|
63
|
+
vlinha["cod_ocorrencia_sacado"] = linha[153..156] # Num //Código da ocorrência do sacado
|
64
|
+
vlinha["data_ocorrencia_sacado"] = formataData(linha[157..164]) # Num //Data da ocorrência do sacado - DDMMAAAA
|
65
|
+
vlinha["valor_ocorrencia_sacado"] = preparaMoeda(linha[165..179], 2) # Num //Valor da ocorrência do sacado - 2 decimais
|
66
|
+
vlinha["comp_ocorrencia_sacado"] = linha[180..209] # Alfa //Complemento da ocorrência do sacado
|
67
|
+
vlinha["banco_compensacao"] = linha[210..212] # Num //Código do Banco correspondente compens.
|
68
|
+
vlinha["res_banco4"] = linha[213..239] # Alfa //Reservado (uso Banco) - Brancos
|
69
|
+
end
|
70
|
+
|
71
|
+
return vlinha
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Cnab240santander
|
2
|
+
module Formatacao
|
3
|
+
def formataData(dt)
|
4
|
+
puts dt
|
5
|
+
if dt.split("").uniq != ["0"]
|
6
|
+
return DateTime.strptime(dt[0..1]+"/"+dt[2..3]+"/"+dt[4..7], "%d/%m/%Y").strftime('%d/%m/%Y')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def preparaMoeda(n, digitos)
|
11
|
+
return (n.to_f)/(10**digitos)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Object
|
17
|
+
def blank?
|
18
|
+
respond_to?(:empty?) ? empty? : !self
|
19
|
+
end unless respond_to?(:blank?)
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Cnab240santander
|
2
|
+
class HeaderArquivo < Cnab240santander::Base
|
3
|
+
def self.processar(linha)
|
4
|
+
vlinha = Hash.new
|
5
|
+
vlinha["banco"] = linha[0..2] #num //Código do Banco na Compensação
|
6
|
+
vlinha["lote"] = linha[3..6] #num - default 0000 //Lote de Serviço
|
7
|
+
vlinha["registro"] = linha[7..7] #num - default 0 //Tipo de Registro
|
8
|
+
vlinha["res_banco1"] = linha[8..15] #alfa //Reservado (uso Banco) - Brancos
|
9
|
+
vlinha["tipo_inscricao_empresa"] = linha[16..16] #num //Tipo de Inscrição da Empresa
|
10
|
+
vlinha["num_inscricao_empresa"] = linha[17..31] #num //Número de Inscrição da Empresa
|
11
|
+
vlinha["agencia"] = linha[32..35] #num //Agência do Cedente
|
12
|
+
vlinha["dv_agencia"] = linha[36..36] #num //Dígito da Agência do Cedente
|
13
|
+
vlinha["conta_corrente"] = linha[37..45] #num //Número da conta corrente
|
14
|
+
vlinha["dv_conta"] = linha[46..46] #num //DV da Conta Corrent
|
15
|
+
vlinha["res_banco2"] = linha[47..51] #alfa //Reservado (uso Banco) - Brancos
|
16
|
+
vlinha["cod_cedente"] = linha[52..60] #num //Código do Cedente
|
17
|
+
vlinha["res_banco3"] = linha[61..71] #alfa //Reservado (uso Banco) - Brancos
|
18
|
+
vlinha["nome_empresa"] = linha[72..101] #alfa //Nome da empresa
|
19
|
+
vlinha["nome_banco"] = linha[102..131] #alfa //Nome do Banco
|
20
|
+
vlinha["res_banco4"] = linha[132..141] #alfa //Reservado (uso Banco) - Brancos
|
21
|
+
vlinha["cod_retorno"] = linha[142..142] #num - Código remessa / retorno
|
22
|
+
vlinha["data_geracao_arq"] = linha[143..150] #num - Data de geração do arquivo - DDMMAAAA
|
23
|
+
vlinha["res_banco5"] = linha[151..156] #alfa //Reservado (uso Banco) - Brancos
|
24
|
+
vlinha["sequencia"] = linha[157..162] #num //No seqüencial do arquivo
|
25
|
+
vlinha["versao"] = linha[163..165] #num //No da versão do layout do arquivo
|
26
|
+
vlinha["res_banco6"] = linha[166..239] #alfa //Reservado (uso Banco) - Brancos
|
27
|
+
|
28
|
+
return vlinha
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Cnab240santander
|
2
|
+
class HeaderLote < Cnab240santander::Base
|
3
|
+
def self.processar(linha)
|
4
|
+
vlinha = Hash.new
|
5
|
+
vlinha["banco"] = linha[0..2] #NUMERICO //Código do Banco na Compensação
|
6
|
+
vlinha["lote"] = linha[3..6] #num //Numero do lote retorno
|
7
|
+
vlinha["registro"] = linha[7..7] #num //Tipo de registro
|
8
|
+
vlinha["operacao"] = linha[8..8] #alfa //Tipo de operação - T
|
9
|
+
vlinha["servico"] = linha[9..10] #num //Tipo de serviço - 01
|
10
|
+
vlinha["res_banco1"] = linha[11..12] #alfa //Reservado (uso Banco) - Brancos
|
11
|
+
vlinha["layout_lote"] = linha[13..15] #num //No da versão do layout do lote - 040
|
12
|
+
vlinha["res_banco2"] = linha[16..16] #alfa //Reservado (uso Banco) - Brancos
|
13
|
+
vlinha["tipo_inscricao"] = linha[17..17] #num //Tipo de inscrição da empresa - 1 = CPF, 2 = CNPJ
|
14
|
+
vlinha["numero_inscricao"] = linha[18..32] #num //No de inscrição da empresa
|
15
|
+
vlinha["codigo_cedente"] = linha[33..41] #num //Código do Cedente
|
16
|
+
vlinha["res_banco3"] = linha[42..52] #alfa //Reservado (uso Banco) - Brancos
|
17
|
+
vlinha["agencia_ced"] = linha[53..56] #num //Agência do Cedente
|
18
|
+
vlinha["dv_agencia_ced"] = linha[57..57] #num //Dígito da Agência do Cedente
|
19
|
+
vlinha["conta_ced"] = linha[58..66] #num //Número da conta do Cedente
|
20
|
+
vlinha["dv_conta_ced"] = linha[67..67] #num //Dígito verificador da conta
|
21
|
+
vlinha["res_banco4"] = linha[68..72] #alfa //Reservado (uso Banco) - Brancos
|
22
|
+
vlinha["nome_empresa"] = linha[73..102] #alfa //Nome da empresa
|
23
|
+
vlinha["res_banco5"] = linha[103..182] #alfa //Reservado (uso Banco) - Branco
|
24
|
+
vlinha["numero_retorno"] = linha[183..190] #num //Número do Retorno
|
25
|
+
vlinha["data_remessa"] = formataData(linha[191..198]) #num //Data da gravação remessa/retorno - DDMMAAAA
|
26
|
+
vlinha["res_banco6"] = linha[199..239] #brancos //Uso Exclusivo FEBRABAN / CNAB
|
27
|
+
|
28
|
+
return vlinha
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module Cnab240santander
|
2
|
+
class Retorno
|
3
|
+
# Tipos de registros
|
4
|
+
$HEADER_ARQUIVO = 0
|
5
|
+
$HEADER_LOTE = 1
|
6
|
+
$DETALHE = 3
|
7
|
+
$TRAILER_LOTE = 5
|
8
|
+
$TRAILER_ARQUIVO = 9
|
9
|
+
|
10
|
+
attr_accessor :linhas
|
11
|
+
|
12
|
+
def initialize(args = {})
|
13
|
+
if args.has_key? :path
|
14
|
+
@linhas = processar(args) if validaCNAB240(args[:path])
|
15
|
+
else
|
16
|
+
raise Exception, "Necessário informar o :path"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def validaCNAB240(path)
|
21
|
+
File.open(path, 'rb') do |f|
|
22
|
+
while linha = f.gets
|
23
|
+
return false if linha.length != 242
|
24
|
+
end
|
25
|
+
end
|
26
|
+
return true
|
27
|
+
end
|
28
|
+
|
29
|
+
def processarLinha(numLn, linha)
|
30
|
+
tipoLn = linha[7..7].to_i
|
31
|
+
segmento = linha[13..13].to_s
|
32
|
+
|
33
|
+
case tipoLn
|
34
|
+
when $HEADER_ARQUIVO
|
35
|
+
HeaderArquivo.processar(linha)
|
36
|
+
when $HEADER_LOTE
|
37
|
+
HeaderLote.processar(linha)
|
38
|
+
when $DETALHE
|
39
|
+
Detalhe.processar(linha, segmento)
|
40
|
+
when $TRAILER_LOTE
|
41
|
+
TrailerLote.processar(linha)
|
42
|
+
when $TRAILER_ARQUIVO
|
43
|
+
TrailerArquivo.processar(linha)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def processar(args)
|
48
|
+
linhas = []
|
49
|
+
numLn = 0
|
50
|
+
|
51
|
+
File.open(args[:path], 'rb') { |f|
|
52
|
+
while (linha = f.gets)
|
53
|
+
tipoLn = linha[7..7].to_i
|
54
|
+
if tipoLn == $HEADER_ARQUIVO and args[:retorna] == $HEADER_ARQUIVO #0
|
55
|
+
puts "Processando header"
|
56
|
+
linhas << HeaderArquivo.processar(linha)
|
57
|
+
elsif tipoLn == $DETALHE and args[:retorna] == $DETALHE #3
|
58
|
+
puts "Processando detalhe"
|
59
|
+
segmento = linha[13..13]
|
60
|
+
if args[:merge] == true
|
61
|
+
hash_aux = {}
|
62
|
+
|
63
|
+
#RESGATANDO SEGMENTO G PARA AGRUPAMENTO
|
64
|
+
segmento = linha[13..13]
|
65
|
+
add_to_hash(Detalhe.processar(linha, segmento), hash_aux)
|
66
|
+
|
67
|
+
#RESGATANDO SEGMENTO H PARA AGRUPAMENTO (PROXIMA LINHA)
|
68
|
+
linha = f.gets
|
69
|
+
segmento = linha[13..13]
|
70
|
+
add_to_hash(Detalhe.processar(linha, segmento), hash_aux)
|
71
|
+
|
72
|
+
linhas << hash_aux
|
73
|
+
else
|
74
|
+
linhas << Detalhe.processar(linha, segmento)
|
75
|
+
end
|
76
|
+
|
77
|
+
elsif args[:retorna].blank?
|
78
|
+
puts "Processando linha..."
|
79
|
+
linhas << processarLinha(numLn, linha)
|
80
|
+
end
|
81
|
+
numLn += 1
|
82
|
+
end
|
83
|
+
}
|
84
|
+
|
85
|
+
return linhas
|
86
|
+
end
|
87
|
+
|
88
|
+
def add_to_hash(my_hash, combined_hash)
|
89
|
+
my_hash.inject(combined_hash) do |new_hash, (key, value)|
|
90
|
+
(new_hash[key] ||= []) << value
|
91
|
+
new_hash
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Cnab240santander
|
2
|
+
class TrailerArquivo < Cnab240santander::Base
|
3
|
+
def self.processar(linha)
|
4
|
+
vlinha = Hash.new
|
5
|
+
vlinha["banco"] = linha[0..2] #num //Código do Banco na Compensação - 353 / 008 / 033
|
6
|
+
vlinha["lote"] = linha[3..6] #num //Numero do lote remessa
|
7
|
+
vlinha["registro"] = linha[7..7] #num //Tipo de registro - 9
|
8
|
+
vlinha["res_banco1"] = linha[8..16] #alfa //Reservado (uso Banco) - Branco
|
9
|
+
vlinha["qtde_lotes"] = linha[17..22] #num //Quantidade de lotes do arquivo - Registros tipo=1
|
10
|
+
vlinha["qtde_registros"] = linha[23..28] #num //Quantidade de registros do arquivo - Registros tipo=0+1+3+5+9
|
11
|
+
vlinha["res_banco2"] = linha[29..239] #alfa //Reservado (uso Banco) - Branco
|
12
|
+
|
13
|
+
return vlinha
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Cnab240santander
|
2
|
+
class TrailerLote < Cnab240santander::Base
|
3
|
+
def self.processar(linha)
|
4
|
+
vlinha = Hash.new
|
5
|
+
vlinha["banco"] = linha[0..2] #Num //Código do Banco na Compensação - 353 / 008 / 033
|
6
|
+
vlinha["lote"] = linha[3..6] #Num //Lote de Serviço
|
7
|
+
vlinha["registro"] = linha[7..7] #Num //Tipo de Registro - 5
|
8
|
+
vlinha["res_banco1"] = linha[8..16] #Alfa //Reservado (uso Banco) - Brancos
|
9
|
+
vlinha["qtde_registros"] = linha[17..22] #Num //Quantidade de registros do lote
|
10
|
+
vlinha["qtde_titulos_cobranca_simples"] = linha[23..28] #Num //Quantidade títulos cobrança simples
|
11
|
+
vlinha["valor_titulos_cobranca_simples"] = preparaMoeda(linha[29..45], 2) #Num //Valor total dos títulos cobrança simples - 2 decimais
|
12
|
+
vlinha["qtde_titulos_cobranca_vinculada"] = linha[46..51] #Num //Quantidade de títulos em cobrança vinculada
|
13
|
+
vlinha["valor_titulos_cobranca_vinculada"] = preparaMoeda(linha[52..68], 2) #Num //Valor total dos títulos em cobrança vinculada - 2 decimais
|
14
|
+
vlinha["qtde_titulos_cobranca_caucionada"] = linha[69..74] #Num //Quantidade de títulos em cobrança caucionada
|
15
|
+
vlinha["valor_titulos_cobranca_caucionada"] = preparaMoeda(linha[75..91], 2) #Num //Valor total dos títulos em cobrança caucionada - 2 decimais
|
16
|
+
vlinha["qtde_titulos_cobranca_descontada"] = linha[92..97] #Num //Quantidade de títulos em cobrança descontada
|
17
|
+
vlinha["valor_titulos_cobranca_descontada"] = preparaMoeda(linha[98..114], 2) #Num //Valor total dos títulos em cobrança descontada - 2 decimais
|
18
|
+
vlinha["num_aviso_lancamento"] = linha[115..122] #Alfa //Número do aviso de lançamento
|
19
|
+
vlinha["res_banco2"] = linha[123..239] #Alfa //Reservado (uso Banco) - Branco
|
20
|
+
|
21
|
+
return vlinha
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
["formatacao", "base", "retorno", "header_arquivo", "header_lote", "detalhe", "trailer_arquivo", "trailer_lote"].each do |f|
|
2
|
+
require File.join(File.dirname(__FILE__), 'cnab240santander', f)
|
3
|
+
end
|
4
|
+
|
5
|
+
module Cnab240santander
|
6
|
+
def self.retorno(path, retorna)
|
7
|
+
Cnab240santander::Retorno.new(:path => path, :retorna => retorna)
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Cnab240santander" do
|
4
|
+
it "should include ActiveSupport" do
|
5
|
+
Object.class_eval { const_defined?("ActiveSupport") }.should be_true
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should raise an exception when :path options is nil" do
|
9
|
+
lambda {
|
10
|
+
Cnab240santander.retorno()
|
11
|
+
}.should raise_exception(Exception)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return an array" do
|
15
|
+
cnab = Cnab240santander.retorno(File.dirname(__FILE__)+"/../../RETORNO.TXT", nil)
|
16
|
+
cnab.linhas.should be_kind_of(Array)
|
17
|
+
end
|
18
|
+
|
19
|
+
context "Header file" do
|
20
|
+
it "should parse the header file" do
|
21
|
+
cnab = Cnab240santander.retorno(File.dirname(__FILE__)+"/../../RETORNO.TXT", 0)
|
22
|
+
cnab.linhas.should be_kind_of(Array)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cnab240santander
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Lairton Borges
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-11-29 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: activesupport
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 3
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
version: 3.1.0
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: mocha
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 47
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 9
|
48
|
+
- 10
|
49
|
+
version: 0.9.10
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: rspec
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 23
|
61
|
+
segments:
|
62
|
+
- 2
|
63
|
+
- 6
|
64
|
+
- 0
|
65
|
+
version: 2.6.0
|
66
|
+
type: :development
|
67
|
+
version_requirements: *id003
|
68
|
+
description: Gem to read the cnab240 return file of Santander Bank (Brazil)
|
69
|
+
email:
|
70
|
+
- lairton@gmail.com
|
71
|
+
executables: []
|
72
|
+
|
73
|
+
extensions: []
|
74
|
+
|
75
|
+
extra_rdoc_files: []
|
76
|
+
|
77
|
+
files:
|
78
|
+
- .gitignore
|
79
|
+
- .rspec
|
80
|
+
- Gemfile
|
81
|
+
- RETORNO.TXT
|
82
|
+
- Rakefile
|
83
|
+
- cnab240santander.gemspec
|
84
|
+
- lib/cnab240santander.rb
|
85
|
+
- lib/cnab240santander/base.rb
|
86
|
+
- lib/cnab240santander/detalhe.rb
|
87
|
+
- lib/cnab240santander/formatacao.rb
|
88
|
+
- lib/cnab240santander/header_arquivo.rb
|
89
|
+
- lib/cnab240santander/header_lote.rb
|
90
|
+
- lib/cnab240santander/retorno.rb
|
91
|
+
- lib/cnab240santander/trailer_arquivo.rb
|
92
|
+
- lib/cnab240santander/trailer_lote.rb
|
93
|
+
- lib/cnab240santander/version.rb
|
94
|
+
- spec/files/cnab_spec.rb
|
95
|
+
- spec/spec_helper.rb
|
96
|
+
homepage: https://github.com/ljoseppi/
|
97
|
+
licenses: []
|
98
|
+
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
version: "0"
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
version: "0"
|
122
|
+
requirements: []
|
123
|
+
|
124
|
+
rubyforge_project: cnab240santander
|
125
|
+
rubygems_version: 1.8.10
|
126
|
+
signing_key:
|
127
|
+
specification_version: 3
|
128
|
+
summary: Gem to read the cnab240 return file of Santander Bank (Brazil)
|
129
|
+
test_files: []
|
130
|
+
|