rubycnab240 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/README.md +119 -0
- data/Rakefile +2 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docs/PgtVer03BB.xls +0 -0
- data/lib/rubycnab240/arquivo/header.rb +89 -0
- data/lib/rubycnab240/arquivo/lote.rb +115 -0
- data/lib/rubycnab240/arquivo/lotes/header.rb +87 -0
- data/lib/rubycnab240/arquivo/lotes/segment.rb +4 -0
- data/lib/rubycnab240/arquivo/lotes/segments/a.rb +112 -0
- data/lib/rubycnab240/arquivo/lotes/segments/b.rb +48 -0
- data/lib/rubycnab240/arquivo/lotes/trailer.rb +43 -0
- data/lib/rubycnab240/arquivo/trailer.rb +37 -0
- data/lib/rubycnab240/arquivo.rb +117 -0
- data/lib/rubycnab240/retorno.rb +267 -0
- data/lib/rubycnab240/version.rb +3 -0
- data/lib/rubycnab240.rb +6 -0
- data/rubycnab240.gemspec +23 -0
- metadata +91 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a99350d0a7515aeb552c40785b3ecf3030a5bf4b
|
4
|
+
data.tar.gz: 08bc254becb4859e6f12a2bdada6f38796d9448f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 92ea588c99bfab173e1d1b05a4b91e056254150902dff71eadcfa5c24d4f6742e5aefa3dc48bb39ee7a695075a69b69352ca8bdff9c3496533af6f56f9b0f9ee
|
7
|
+
data.tar.gz: 5660efbedc67f2d726acfe8b21f1a3a5758c9d6736ac3bfe759baf6e5b7ac9fdb3f482148e8eff5861ccce047f6737445465ce8cf229f5ccd2890e58d70df174
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
# RubyCnab240
|
2
|
+
|
3
|
+
A Gem RubyCnab240 permite criar arquivos de remessa de pagamentos no formato RubyCnab240 para o Banco do Brasil (por enquanto) segundo as normas da Febraban
|
4
|
+
|
5
|
+
## Instalação
|
6
|
+
|
7
|
+
Adicione ao seu Gemfile
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'rubycnab240'
|
11
|
+
```
|
12
|
+
|
13
|
+
Depois basta requerir a mesma
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
require 'rubycnab240'
|
17
|
+
```
|
18
|
+
|
19
|
+
Ou instale você mesmo:
|
20
|
+
|
21
|
+
$ gem install rubycnab240
|
22
|
+
|
23
|
+
## Uso
|
24
|
+
|
25
|
+
O arquivo de documentação de referencia encontra-se na pasta Docs. Porém, segue um exemplo funcional abaixo:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
#crie o arquivo de remessa
|
29
|
+
|
30
|
+
r = RubyCnab240::Arquivo.new({
|
31
|
+
:codigo_do_banco_na_compensacao => '000', #codigo do seu banco
|
32
|
+
:tipo_de_inscricao_da_empresa => '2', #1 para CPF, 2 para CNPJ
|
33
|
+
:numero_de_inscricao_da_empresa => '00000000000000', #CNPJ
|
34
|
+
:codigo_do_convenio_do_banco => '000000000', #codigo do convenio do banco
|
35
|
+
:agencia_mantenedora_da_conta => '00000', #sua agencia
|
36
|
+
:digito_verificador_da_agencia => '0', #digito verificador da agencia
|
37
|
+
:numero_da_conta_corrente => '000000000000', #numero da conta corrente
|
38
|
+
:digito_verificador_da_conta => '0', #digito verificador da conta
|
39
|
+
:nome_da_empresa => '______________________________', #nome da empresa
|
40
|
+
:nome_do_banco => '___________________', #nome do banco
|
41
|
+
:codigo_remessa_retorno => '1', #verificar documentação febraban (pasta docs)
|
42
|
+
:numero_sequencial_de_arquivo => '3', #numero sequencial do arquivo (verificar documentaçao pasta docs)
|
43
|
+
:para_uso_reservado_da_empresa => 'texto', #(verificar documentaçao pasta docs)
|
44
|
+
:data_dos_pagamentos => Date.today #data dos pagamentos em
|
45
|
+
})
|
46
|
+
|
47
|
+
#crie um lote para pagamentos externos ao banco
|
48
|
+
|
49
|
+
lote_externo = RubyCnab240::Arquivo::Lote.new({
|
50
|
+
:forma_de_lancamento => 'EXTERNO',
|
51
|
+
:codigo_do_banco_na_compensacao => '000', #codigo identificador de banco exceto banco do brasil
|
52
|
+
:codigo_remessa_retorno => '1',
|
53
|
+
:numero_sequencial_de_arquivo => '3',
|
54
|
+
:para_uso_reservado_da_empresa => '', #texto reservado para empresa
|
55
|
+
:campos_opcionais_de_endereco => '' #(verificar documentaçao pasta docs)
|
56
|
+
})
|
57
|
+
#crie um lote para pagamentos internos ao banco
|
58
|
+
|
59
|
+
lote_interno = RubyCnab240::Arquivo::Lote.new({
|
60
|
+
:forma_de_lancamento => 'INTERNO',
|
61
|
+
:codigo_do_banco_na_compensacao => '001', #001 para banco do brasil
|
62
|
+
:codigo_remessa_retorno => '1',
|
63
|
+
:numero_sequencial_de_arquivo => '3',
|
64
|
+
:para_uso_reservado_da_empresa => '', #texto reservado para empresa
|
65
|
+
:campos_opcionais_de_endereco => '' #(verificar documentaçao pasta docs)
|
66
|
+
})
|
67
|
+
|
68
|
+
#adicione pagamentos dentro do lote (somentes com favorecidos de outros bancos que nao o banco do brasil)
|
69
|
+
|
70
|
+
lote_externo << {
|
71
|
+
:codigo_do_banco_favorecido => '000', #codigo do banco do favorecido
|
72
|
+
:agencia_mantenedora_da_conta_favorecida => '0000', #agencia do favorecido
|
73
|
+
:digito_verificador_da_agencia => '0',
|
74
|
+
:numero_da_conta_corrente => '',
|
75
|
+
:digito_verificador_da_conta => '0',
|
76
|
+
:nome_do_favorecido => 'NOME DO FAVORECIDO',
|
77
|
+
:numero_doc_atribuido_para_empresa => '000000000001', #a ser utilizaro para identificação posterior
|
78
|
+
:valor_do_pagamento => '1000', #valor do pagamento em centavos
|
79
|
+
:outras_informacoes => 'OUTRAS INFORMACOES',
|
80
|
+
:tipo_de_inscricao_do_favorecido => '1', # 1 para CPF e 2 para CNPJ
|
81
|
+
:numero_de_inscricao_do_favorecido => '00000000000', #CPF OU CNPJ
|
82
|
+
:complemento_tipo_de_servico => '1' #(verificar documentaçao pasta docs)
|
83
|
+
}
|
84
|
+
|
85
|
+
#adicione pagamentos dentro do lote (somentes com favorecidos do banco do brasil)
|
86
|
+
|
87
|
+
lote_externo << {
|
88
|
+
:codigo_do_banco_favorecido => '001', #codigo do banco do favorecido (001 por ser o banco do brasil)
|
89
|
+
:agencia_mantenedora_da_conta_favorecida => '0000', #agencia do favorecido
|
90
|
+
:digito_verificador_da_agencia => '0',
|
91
|
+
:numero_da_conta_corrente => '',
|
92
|
+
:digito_verificador_da_conta => '0',
|
93
|
+
:nome_do_favorecido => 'NOME DO FAVORECIDO',
|
94
|
+
:numero_doc_atribuido_para_empresa => '000000000001', #a ser utilizaro para identificação posterior
|
95
|
+
:valor_do_pagamento => '1000', #valor do pagamento em centavos
|
96
|
+
:outras_informacoes => 'OUTRAS INFORMACOES',
|
97
|
+
:tipo_de_inscricao_do_favorecido => '1', # 1 para CPF e 2 para CNPJ
|
98
|
+
:numero_de_inscricao_do_favorecido => '00000000000', #CPF OU CNPJ
|
99
|
+
:complemento_tipo_de_servico => '1' #(verificar documentaçao pasta docs)
|
100
|
+
}
|
101
|
+
|
102
|
+
#adicione os lotes aos arquivo
|
103
|
+
|
104
|
+
r << lote_interno
|
105
|
+
r << lote_externo
|
106
|
+
|
107
|
+
#crie o arquivo a ser salvo
|
108
|
+
|
109
|
+
file = File.open('nome_do_arquivo_de_remessa.rem', "w+")
|
110
|
+
|
111
|
+
#salve o arquivo
|
112
|
+
|
113
|
+
r.save_to_file(file)
|
114
|
+
```
|
115
|
+
|
116
|
+
## Contribua
|
117
|
+
|
118
|
+
Report de Bugs serão bem vindos no GitHub em https://github.com/Hamdan85/rubycnab240. Fique a vontade para contribuir com mais funcionalidades.
|
119
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "rubycnab240"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/docs/PgtVer03BB.xls
ADDED
Binary file
|
@@ -0,0 +1,89 @@
|
|
1
|
+
class RubyCnab240::Arquivo::Header < RubyCnab240::Arquivo
|
2
|
+
attr_accessor :codigo_do_banco_na_compensacao
|
3
|
+
attr_accessor :lote_do_servico
|
4
|
+
attr_accessor :tipo_de_registro
|
5
|
+
attr_accessor :tipo_de_inscricao_da_empresa
|
6
|
+
attr_accessor :numero_de_inscricao_da_empresa
|
7
|
+
attr_accessor :codigo_do_convenio_do_banco
|
8
|
+
attr_accessor :agencia_mantenedora_da_conta
|
9
|
+
attr_accessor :digito_verificador_da_agencia
|
10
|
+
attr_accessor :numero_da_conta_corrente
|
11
|
+
attr_accessor :digito_verificador_da_conta
|
12
|
+
attr_accessor :digito_verificador_da_agencia_e_conta
|
13
|
+
attr_accessor :nome_da_empresa
|
14
|
+
attr_accessor :nome_do_banco
|
15
|
+
attr_accessor :codigo_remessa_retorno
|
16
|
+
attr_accessor :numero_sequencial_de_arquivo
|
17
|
+
attr_accessor :para_uso_reservado_da_empresa
|
18
|
+
|
19
|
+
attr_reader :uso_exclusivo_febraban
|
20
|
+
attr_reader :uso_exclusivo_febraban2
|
21
|
+
attr_reader :uso_exclusivo_febraban3
|
22
|
+
|
23
|
+
def initialize(fields = {})
|
24
|
+
@codigo_do_banco_na_compensacao = fields[:codigo_do_banco_na_compensacao].to_s[0..2].rjust(3, '0') #default: 001
|
25
|
+
@lote_do_servico = fields[:lote_do_servico].to_s[0..3].rjust(4, '0')
|
26
|
+
@tipo_de_registro = fields[:tipo_de_registro].to_s[0..0].rjust(1, '0')
|
27
|
+
@uso_exclusivo_febraban = ' ' * 9
|
28
|
+
@tipo_de_inscricao_da_empresa = fields[:tipo_de_inscricao_da_empresa].to_s[0..0].rjust(1, '0') #1 – para CPF e 2 – para CNPJ.
|
29
|
+
@numero_de_inscricao_da_empresa = fields[:numero_de_inscricao_da_empresa].to_s[0..13].rjust(14, '0') #Informar número da inscrição (CPF ou CNPJ) da Empresa, alinhado à direita com zeros à esquerda.
|
30
|
+
|
31
|
+
#bb
|
32
|
+
#Preencher com “0009999990126 “, onde 999999 informar o número do convênio de pagamento, alinhado à direita com zeros à esquerda seguido de “0126” para pagamento e demais posições com brancos (espaços).
|
33
|
+
@codigo_do_convenio_do_banco = fields[:codigo_do_convenio_do_banco].to_s[0..8].rjust(9, '0') #Informar o convênio de pagamento, completando com zeros à esquerda;
|
34
|
+
@bb2 = fields[:bb2] = '0126'
|
35
|
+
@bb3 = fields[:bb3] = ' '
|
36
|
+
@bb4 = fields[:bb4] = ' '
|
37
|
+
|
38
|
+
@agencia_mantenedora_da_conta = fields[:agencia_mantenedora_da_conta].to_s[0..4].rjust(5, '0')
|
39
|
+
@digito_verificador_da_agencia = fields[:digito_verificador_da_agencia].to_s[0..0].upcase.rjust(1, '0')
|
40
|
+
@numero_da_conta_corrente = fields[:numero_da_conta_corrente].to_s[0..11].rjust(12, '0')
|
41
|
+
@digito_verificador_da_conta = fields[:digito_verificador_da_conta].to_s[0..0].upcase.rjust(1, '0')
|
42
|
+
@digito_verificador_da_agencia_e_conta = '0'
|
43
|
+
|
44
|
+
@nome_da_empresa = fields[:nome_da_empresa].to_s[0..29].upcase.ljust(30, ' ')
|
45
|
+
@nome_do_banco = fields[:nome_do_banco].to_s[0..29].upcase.ljust(30, ' ')
|
46
|
+
@uso_exclusivo_febraban2 = ' '
|
47
|
+
@codigo_remessa_retorno = '1' #1 – para arquivo remessa. 2 – quando arquivo retorno.
|
48
|
+
@data_de_geracao_do_arquivo = Date.today.strftime("%d%m%Y")
|
49
|
+
@hora_de_geracao_do_arquivo = Time.now.strftime("%H%M%S")
|
50
|
+
@numero_sequencial_de_arquivo = fields[:numero_sequencial_de_arquivo].to_s[0..5].upcase.rjust(6, '0')
|
51
|
+
@versao_do_leiaute_de_arquivo = '050'
|
52
|
+
@densidade_de_gravacao_de_arquivo = '0' * 5
|
53
|
+
@para_uso_reservado_do_banco = ' '
|
54
|
+
@para_uso_reservado_da_empresa = fields[:para_uso_reservado_da_empresa].to_s[0..19].rjust(20, ' ') #uso reservado da empresa
|
55
|
+
@uso_exclusivo_febraban3 = ' '
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_string
|
59
|
+
header = String.new
|
60
|
+
|
61
|
+
header << @codigo_do_banco_na_compensacao
|
62
|
+
header << @lote_do_servico
|
63
|
+
header << @tipo_de_registro
|
64
|
+
header << @uso_exclusivo_febraban
|
65
|
+
header << @tipo_de_inscricao_da_empresa
|
66
|
+
header << @numero_de_inscricao_da_empresa
|
67
|
+
header << @codigo_do_convenio_do_banco
|
68
|
+
header << @bb2
|
69
|
+
header << @bb3
|
70
|
+
header << @bb4
|
71
|
+
header << @agencia_mantenedora_da_conta
|
72
|
+
header << @digito_verificador_da_agencia
|
73
|
+
header << @numero_da_conta_corrente
|
74
|
+
header << @digito_verificador_da_conta
|
75
|
+
header << @digito_verificador_da_agencia_e_conta
|
76
|
+
header << @nome_da_empresa
|
77
|
+
header << @nome_do_banco
|
78
|
+
header << @uso_exclusivo_febraban2
|
79
|
+
header << @codigo_remessa_retorno
|
80
|
+
header << @data_de_geracao_do_arquivo
|
81
|
+
header << @hora_de_geracao_do_arquivo
|
82
|
+
header << @numero_sequencial_de_arquivo
|
83
|
+
header << @versao_do_leiaute_de_arquivo
|
84
|
+
header << @densidade_de_gravacao_de_arquivo
|
85
|
+
header << @para_uso_reservado_do_banco
|
86
|
+
header << @para_uso_reservado_da_empresa
|
87
|
+
header << @uso_exclusivo_febraban3
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
class RubyCnab240::Arquivo::Lote < RubyCnab240::Arquivo
|
2
|
+
require 'rubycnab240/arquivo/lotes/header'
|
3
|
+
require 'rubycnab240/arquivo/lotes/segment'
|
4
|
+
require 'rubycnab240/arquivo/lotes/trailer'
|
5
|
+
|
6
|
+
attr_accessor :lot_header
|
7
|
+
attr_accessor :lots
|
8
|
+
attr_accessor :lot_trailer
|
9
|
+
|
10
|
+
def initialize(fields = {})
|
11
|
+
|
12
|
+
forma_de_lancamento = if fields[:forma_de_lancamento] == 'INTERNO'
|
13
|
+
'01'
|
14
|
+
else
|
15
|
+
'41'
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
@lot_header = RubyCnab240::Arquivo::Lote::Header.new({
|
20
|
+
:codigo_do_banco_na_compensacao => fields[:codigo_do_banco_na_compensacao],
|
21
|
+
:lote_do_servico => '0',
|
22
|
+
:forma_de_lancamento => forma_de_lancamento,
|
23
|
+
:tipo_de_inscricao_da_empresa => @@tipo_de_inscricao_da_empresa,
|
24
|
+
:numero_de_inscricao_da_empresa => @@numero_de_inscricao_da_empresa,
|
25
|
+
:codigo_do_convenio_do_banco => @@codigo_do_convenio_do_banco,
|
26
|
+
:agencia_mantenedora_da_conta => @@agencia_mantenedora_da_conta,
|
27
|
+
:digito_verificador_da_agencia => @@digito_verificador_da_agencia,
|
28
|
+
:numero_da_conta_corrente => @@numero_da_conta_corrente,
|
29
|
+
:digito_verificador_da_conta => @@digito_verificador_da_conta,
|
30
|
+
:digito_verificador_da_agencia_e_conta => @@digito_verificador_da_agencia_e_conta,
|
31
|
+
:data_do_pagamento => @@data_dos_pagamentos,
|
32
|
+
:nome_da_empresa => @@nome_da_empresa,
|
33
|
+
:campos_opcionais_de_endereco => fields[:campos_opcionais_de_endereco]
|
34
|
+
})
|
35
|
+
|
36
|
+
@lots = []
|
37
|
+
|
38
|
+
@lot_trailer = RubyCnab240::Arquivo::Lote::Trailer.new({
|
39
|
+
:codigo_do_banco_na_compensacao => fields[:codigo_do_banco_na_compensacao],
|
40
|
+
:lote_do_servico => '0',
|
41
|
+
:tipo_de_registro => '5',
|
42
|
+
:qtd_registros_de_lote => '0',
|
43
|
+
:somatorio_dos_valores => '0'
|
44
|
+
})
|
45
|
+
end
|
46
|
+
|
47
|
+
def <<(s)
|
48
|
+
s[:complemento_tipo_de_servico] = '1'
|
49
|
+
s[:codigo_do_banco_na_compensacao] = '001'
|
50
|
+
|
51
|
+
if self.lot_header.forma_de_lancamento == '01'
|
52
|
+
#interno
|
53
|
+
codigo_da_camara_centralizadora = '000'
|
54
|
+
s[:outras_informacoes] = ' '
|
55
|
+
s[:aviso_ao_favorecido] = ' '
|
56
|
+
else
|
57
|
+
#externo
|
58
|
+
codigo_da_camara_centralizadora = '018'
|
59
|
+
s[:outras_informacoes] = '01 '
|
60
|
+
s[:aviso_ao_favorecido] = '0'
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
self.lots << RubyCnab240::Arquivo::Lote::Segment::A.new({
|
65
|
+
:codigo_do_banco_na_compensacao => s[:codigo_do_banco_na_compensacao],
|
66
|
+
:lote_do_servico => self.lot_header.lote_do_servico,
|
67
|
+
:tipo_de_registro => '3',
|
68
|
+
:numero_sequencial_de_registro_no_lote => (self.lots.size + 1).to_s,
|
69
|
+
:codigo_da_camara_centralizadora => codigo_da_camara_centralizadora,
|
70
|
+
:codigo_do_banco_favorecido => s[:codigo_do_banco_favorecido],
|
71
|
+
:agencia_mantenedora_da_conta_favorecida => s[:agencia_mantenedora_da_conta_favorecida],
|
72
|
+
:digito_verificador_da_agencia => s[:digito_verificador_da_agencia],
|
73
|
+
:numero_da_conta_corrente => s[:numero_da_conta_corrente],
|
74
|
+
:digito_verificador_da_conta => s[:digito_verificador_da_conta],
|
75
|
+
:digito_verificador_da_agencia_e_conta => s[:digito_verificador_da_agencia_e_conta],
|
76
|
+
:nome_do_favorecido => s[:nome_do_favorecido],
|
77
|
+
:numero_doc_atribuido_para_empresa => s[:numero_doc_atribuido_para_empresa],
|
78
|
+
:data_do_pagamento => @@data_dos_pagamentos,
|
79
|
+
:valor_do_pagamento => s[:valor_do_pagamento],
|
80
|
+
:outras_informacoes => s[:outras_informacoes],
|
81
|
+
:complemento_tipo_de_servico => s[:complemento_tipo_de_servico],
|
82
|
+
:complemento_finalidade_da_ted => s[:complemento_finalidade_da_ted],
|
83
|
+
:complemento_finalidade_de_pagamento => s[:complemento_finalidade_de_pagamento],
|
84
|
+
:aviso_ao_favorecido => s[:aviso_ao_favorecido]
|
85
|
+
})
|
86
|
+
|
87
|
+
self.lots << RubyCnab240::Arquivo::Lote::Segment::B.new({
|
88
|
+
:codigo_do_banco_na_compensacao => s[:codigo_do_banco_na_compensacao],
|
89
|
+
:lote_do_servico => self.lot_header.lote_do_servico,
|
90
|
+
:tipo_de_registro => '3',
|
91
|
+
:numero_sequencial_de_registro_no_lote => (self.lots.size + 1).to_s,
|
92
|
+
:tipo_de_inscricao_do_favorecido => s[:tipo_de_inscricao_do_favorecido],
|
93
|
+
:numero_de_inscricao_do_favorecido => s[:numero_de_inscricao_do_favorecido],
|
94
|
+
:aviso_ao_favorecido => s[:aviso_ao_favorecido]
|
95
|
+
})
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
def to_string
|
100
|
+
rubycnab240 = String.new
|
101
|
+
|
102
|
+
qtd_registros_de_lote = self.lots.size + 2
|
103
|
+
|
104
|
+
somatorio_dos_valores = self.lots.reject { |l| l.class == RubyCnab240::Arquivo::Lote::Segment::B }.map{|l| l.valor_do_pagamento.to_i }.inject(:+)
|
105
|
+
|
106
|
+
self.lot_trailer.qtd_registros_de_lote = qtd_registros_de_lote.to_s[0..5].rjust(6, '0')
|
107
|
+
self.lot_trailer.somatorio_dos_valores = somatorio_dos_valores.to_s[0..17].rjust(18, '0')
|
108
|
+
|
109
|
+
rubycnab240 << self.lot_header.to_string + "\n"
|
110
|
+
self.lots.each do |lot|
|
111
|
+
rubycnab240 << lot.to_string + "\n"
|
112
|
+
end
|
113
|
+
rubycnab240 << self.lot_trailer.to_string
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
class RubyCnab240::Arquivo::Lote::Header < RubyCnab240::Arquivo::Lote
|
2
|
+
attr_accessor :codigo_do_banco_na_compensacao
|
3
|
+
attr_accessor :lote_do_servico
|
4
|
+
attr_accessor :forma_de_lancamento
|
5
|
+
attr_accessor :tipo_de_inscricao_da_empresa
|
6
|
+
attr_accessor :numero_de_inscricao_da_empresa
|
7
|
+
attr_accessor :codigo_do_convenio_do_banco
|
8
|
+
attr_accessor :agencia_mantenedora_da_conta
|
9
|
+
attr_accessor :digito_verificador_da_agencia
|
10
|
+
attr_accessor :numero_da_conta_corrente
|
11
|
+
attr_accessor :digito_verificador_da_conta
|
12
|
+
attr_accessor :digito_verificador_da_agencia_e_conta
|
13
|
+
attr_accessor :nome_da_empresa
|
14
|
+
attr_accessor :campos_opcionais_de_endereco
|
15
|
+
|
16
|
+
attr_reader :uso_exclusivo_febraban
|
17
|
+
attr_reader :tipo_de_registro
|
18
|
+
attr_reader :tipo_de_operacao
|
19
|
+
attr_reader :tipo_de_servico
|
20
|
+
attr_reader :bb2
|
21
|
+
attr_reader :bb3
|
22
|
+
attr_reader :bb4
|
23
|
+
attr_reader :mensagem_1
|
24
|
+
attr_reader :uso_exclusivo_febraban2
|
25
|
+
attr_reader :codigo_para_ocorrencias_de_retorno
|
26
|
+
attr_reader :numero_da_versao_do_leiaute_do_lote
|
27
|
+
|
28
|
+
def initialize(fields = {})
|
29
|
+
@codigo_do_banco_na_compensacao = fields[:codigo_do_banco_na_compensacao].to_s[0..2].rjust(3, '0') #default: 001
|
30
|
+
@lote_do_servico = fields[:lote_do_servico].to_s[0..3].rjust(4, '0')
|
31
|
+
@tipo_de_registro = fields[:tipo_de_registro] = '1'
|
32
|
+
@tipo_de_operacao = fields[:tipo_de_operacao] = 'C'
|
33
|
+
@tipo_de_servico = fields[:tipo_de_servico] = '20' #Os tipos de serviços aceitos pelo BB são somente '20' (Pagamento a Fornecedores), '30' (Pagamento de Salários) e '98' (Pagamentos Diversos).
|
34
|
+
@forma_de_lancamento = fields[:forma_de_lancamento] || '41' #Formas de lançamentos aceitos pelo BB quando utilizados os segmentos A e B : 01 para Crédito em Conta Corrente, 02 para Pagamento Contra0Recibo, 03 para DOC/TED, 04 para Cartão Salário, 05 para Crédito em Conta Poupança, 10 para Ordem de Pagamento, 41 para TED Outra Titularidade, e 43 para TED Mesma Titularidade. Obs.: no caso da forma de lançamento 03, 41 ou 43, há complementação de informação do campo “Código da Câmara de Compensação”, posições 18 a 20 do segmento A.
|
35
|
+
@numero_da_versao_do_leiaute_do_lote = '031' #Campo não criticado pelo sistema. Informar Zeros OU se preferir, informar número da versão do leiaute do Lote que foi utilizado como base para formatação dos campos. Versões disponíveis: 043, 042, 041, 040, 031, 030 ou 020. A versão do Lote quando informada deve estar condizente com a versão do Arquivo (posições 164 a 166 do Header de Arquivo). Ou seja, para utilizar 043 no lote o Header do arquivo deve conter 084, para 042 no lote o Header do arquivo deve conter 083 ou 082, para 041 ou 040 no lote o Header do arquivo deve conter 080, para 031 no lote o Header do arquivo deve conter 050, para 030 no lote o Header do Arquivo deve conter 040, e para 020 no lote o Header do Arquivo deve conter 030.
|
36
|
+
@uso_exclusivo_febraban = ' '
|
37
|
+
@tipo_de_inscricao_da_empresa = fields[:tipo_de_inscricao_da_empresa].to_s[0..0].rjust(1, '0') #1 – para CPF e 2 – para CNPJ.
|
38
|
+
@numero_de_inscricao_da_empresa = fields[:numero_de_inscricao_da_empresa].to_s[0..13].rjust(14, '0') #Informar número da inscrição (CPF ou CNPJ) da Empresa, alinhado à direita com zeros à esquerda.
|
39
|
+
|
40
|
+
#Codigo do Convenio do Banco
|
41
|
+
@codigo_do_convenio_do_banco = fields[:codigo_do_convenio_do_banco].to_s[0..8].rjust(9, '0') #Informar o convênio de pagamento, completando com zeros à esquerda
|
42
|
+
@bb2 = fields[:bb2] = '0126'
|
43
|
+
@bb3 = fields[:bb3] = ' '
|
44
|
+
@bb4 = fields[:bb4] = ' '
|
45
|
+
|
46
|
+
@agencia_mantenedora_da_conta = fields[:agencia_mantenedora_da_conta].to_s[0..4].rjust(5, '0')
|
47
|
+
@digito_verificador_da_agencia = fields[:digito_verificador_da_agencia].to_s[0..0].upcase.rjust(1, '0')
|
48
|
+
@numero_da_conta_corrente = fields[:numero_da_conta_corrente].to_s[0..11].rjust(12, '0')
|
49
|
+
@digito_verificador_da_conta = fields[:digito_verificador_da_conta].to_s[0..0].upcase.rjust(1, '0')
|
50
|
+
@digito_verificador_da_agencia_e_conta = '0'
|
51
|
+
@nome_da_empresa = fields[:nome_da_empresa].to_s[0..29].upcase.rjust(30, ' ')
|
52
|
+
|
53
|
+
@mensagem_1 = fields[:mensagem_1] = ' '
|
54
|
+
@campos_opcionais_de_endereco = fields[:campos_opcionais_de_endereco].to_s[0..79].upcase.ljust(80, ' ')
|
55
|
+
@uso_exclusivo_febraban2 = ' '
|
56
|
+
@codigo_para_ocorrencias_de_retorno = ' '
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_string
|
60
|
+
header = String.new
|
61
|
+
|
62
|
+
header << self.codigo_do_banco_na_compensacao
|
63
|
+
header << self.lote_do_servico
|
64
|
+
header << self.tipo_de_registro
|
65
|
+
header << self.tipo_de_operacao
|
66
|
+
header << self.tipo_de_servico
|
67
|
+
header << self.forma_de_lancamento
|
68
|
+
header << self.numero_da_versao_do_leiaute_do_lote
|
69
|
+
header << self.uso_exclusivo_febraban
|
70
|
+
header << self.tipo_de_inscricao_da_empresa
|
71
|
+
header << self.numero_de_inscricao_da_empresa
|
72
|
+
header << self.codigo_do_convenio_do_banco
|
73
|
+
header << self.bb2
|
74
|
+
header << self.bb3
|
75
|
+
header << self.bb4
|
76
|
+
header << self.agencia_mantenedora_da_conta
|
77
|
+
header << self.digito_verificador_da_agencia
|
78
|
+
header << self.numero_da_conta_corrente
|
79
|
+
header << self.digito_verificador_da_conta
|
80
|
+
header << self.digito_verificador_da_agencia_e_conta
|
81
|
+
header << self.nome_da_empresa
|
82
|
+
header << self.mensagem_1
|
83
|
+
header << self.campos_opcionais_de_endereco
|
84
|
+
header << self.uso_exclusivo_febraban2
|
85
|
+
header << self.codigo_para_ocorrencias_de_retorno
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
class RubyCnab240::Arquivo::Lote::Segment::A < RubyCnab240::Arquivo::Lote::Segment
|
2
|
+
attr_accessor :codigo_do_banco_na_compensacao
|
3
|
+
attr_accessor :lote_do_servico
|
4
|
+
attr_accessor :tipo_de_registro
|
5
|
+
attr_accessor :numero_sequencial_de_registro_no_lote
|
6
|
+
attr_accessor :codigo_segmento_do_registro_detalhe
|
7
|
+
attr_accessor :codigo_da_instrucao_para_movimento
|
8
|
+
attr_accessor :codigo_da_camara_centralizadora
|
9
|
+
attr_accessor :codigo_do_banco_favorecido
|
10
|
+
attr_accessor :agencia_mantenedora_da_conta_favorecida
|
11
|
+
attr_accessor :digito_verificador_da_agencia
|
12
|
+
attr_accessor :numero_da_conta_corrente
|
13
|
+
attr_accessor :digito_verificador_da_conta
|
14
|
+
attr_accessor :digito_verificador_da_agencia_e_conta
|
15
|
+
attr_accessor :nome_do_favorecido
|
16
|
+
attr_accessor :numero_doc_atribuido_para_empresa
|
17
|
+
attr_accessor :data_do_pagamento
|
18
|
+
attr_accessor :quantidade_da_moeda
|
19
|
+
attr_accessor :valor_do_pagamento
|
20
|
+
attr_accessor :outras_informacoes
|
21
|
+
attr_accessor :complemento_tipo_de_servico
|
22
|
+
attr_accessor :complemento_finalidade_da_ted
|
23
|
+
attr_accessor :complemento_finalidade_de_pagamento
|
24
|
+
attr_accessor :aviso_ao_favorecido
|
25
|
+
|
26
|
+
|
27
|
+
attr_reader :tipo_de_movimento
|
28
|
+
attr_reader :verificacao_retorno
|
29
|
+
attr_reader :tipo_da_moeda
|
30
|
+
attr_reader :dec_quantidade_da_moeda
|
31
|
+
attr_reader :numero_do_documento_atribuido_pelo_banco
|
32
|
+
attr_reader :data_real_da_efetivacao_do_pagamento
|
33
|
+
attr_reader :valor_real_da_efetivacao_do_pagamento
|
34
|
+
attr_reader :dec_valor_real_da_efetivacao_do_pagamento
|
35
|
+
attr_reader :uso_exclusivo_febraban
|
36
|
+
attr_reader :codigo_das_ocorrencias_para_retorno
|
37
|
+
|
38
|
+
def initialize(fields = {})
|
39
|
+
@codigo_do_banco_na_compensacao = fields[:codigo_do_banco_na_compensacao].to_s[0..2].rjust(3, '0') #default: 001
|
40
|
+
@lote_do_servico = fields[:lote_do_servico].to_s[0..3].rjust(4, '0')
|
41
|
+
@tipo_de_registro = fields[:tipo_de_registro].to_s[0..0].rjust(1, '0')
|
42
|
+
@numero_sequencial_de_registro_no_lote = fields[:numero_sequencial_de_registro_no_lote].to_s[0..4].rjust(5, '0')
|
43
|
+
@codigo_segmento_do_registro_detalhe = fields[:codigo_segmento_do_registro_detalhe] = 'A'
|
44
|
+
@tipo_de_movimento = fields[:tipo_de_movimento] = '0' #“0” para inclusão de pagamento ou “9” para exclusão. O pagamento só poderá ser excluido, quando o mesmo já estiver sendo visualizado no Gerenciador Financeiro.
|
45
|
+
@codigo_da_instrucao_para_movimento = fields[:codigo_da_instrucao_para_movimento] = '00' #“00” para inclusão de pagamento ou “99” para exclusão.
|
46
|
+
@codigo_da_camara_centralizadora = fields[:codigo_da_camara_centralizadora].to_s[0..2].rjust(3, '0') #Quando de lançamento no Header do Lote for igual a: '03' (DOC/TED) este campo deverá ser preenchido com '700' para DOC (valor até R$ 4.999,99) ou preencher com '018' para TED (valor igual ou acima de 5 mil reais). Quando a forma de lançamento no Header do Lote for igual a: '41' (TED Outra Titularidade) ou '43' (TED Mesma Titularidade), este campo deverá ser preenchido com '018'. Para crédito no Banco do Brasil informar “000” (zeros).
|
47
|
+
@codigo_do_banco_favorecido = fields[:codigo_do_banco_favorecido].to_s[0..2].rjust(3, '0')
|
48
|
+
@agencia_mantenedora_da_conta_favorecida = fields[:agencia_mantenedora_da_conta_favorecida].to_s[0..4].rjust(5, '0')
|
49
|
+
@digito_verificador_da_agencia = fields[:digito_verificador_da_agencia].to_s[0..0].upcase.rjust(1, '0')
|
50
|
+
@numero_da_conta_corrente = fields[:numero_da_conta_corrente].to_s[0..11].rjust(12, '0')
|
51
|
+
@digito_verificador_da_conta = fields[:digito_verificador_da_conta].to_s[0..0].upcase.rjust(1, '0')
|
52
|
+
@digito_verificador_da_agencia_e_conta = fields[:digito_verificador_da_agencia_e_conta].to_s[0..0].upcase.rjust(1, ' ') #As contas do Banco do Brasil não possuem o segundo dígito, nesse caso informar 'branco' (espaço). Para favorecidos de outros bancos que possuem contas com dois dígitos verificadores (DV), preencher este campo com o segundo dígito verificador.
|
53
|
+
@nome_do_favorecido = fields[:nome_do_favorecido].to_s[0..29].upcase.ljust(30, ' ')
|
54
|
+
@verificacao_retorno = '0' * 11
|
55
|
+
@numero_doc_atribuido_para_empresa = fields[:numero_doc_atribuido_para_empresa].to_s[0..8].upcase.rjust(9, '0') #No caso de pagamento de salário, os número colocados nas posições 74 a 79 aparecerão como número do documento no extrato do favorecido, e os números das posições 80 a 85, serão utilizadas como número do documento no extrato do pagador. Obs.: Como os lançamentos ocorridos na conta do pagador são aglutinados num mesmo lote as posições 80 a 85 de todos os detalhes devem ser iguais, caso contrário será considerado apenas o número constante no primeiro registro detalhe de cada lote. As posições 86 a 93 não são tratadas pelo sistema. As informações impostas nessa posição voltarão iguais no arquivo retorno.
|
56
|
+
@data_do_pagamento = fields[:data_do_pagamento].to_s[0..7].rjust(8, ' ')
|
57
|
+
@tipo_da_moeda = fields[:tipo_da_moeda] = 'BRL'
|
58
|
+
@quantidade_da_moeda = fields[:quantidade_da_moeda].to_s[0..9].rjust(10, '0') #Preencher com zeros quando a moeda for Real, no campo 18.3A
|
59
|
+
@dec_quantidade_da_moeda = '00000'
|
60
|
+
@valor_do_pagamento = fields[:valor_do_pagamento].to_s[0..14].upcase.rjust(15, '0')
|
61
|
+
@numero_do_documento_atribuido_pelo_banco = ' ' * 20
|
62
|
+
@data_real_da_efetivacao_do_pagamento = '0' * 8
|
63
|
+
@valor_real_da_efetivacao_do_pagamento = '0' * 13
|
64
|
+
@dec_valor_real_da_efetivacao_do_pagamento = '0' * 2
|
65
|
+
@outras_informacoes = fields[:outras_informacoes].to_s[0..39].upcase.ljust(40, ' ') #Para Modalidade de Ordem de Pagamento ('10' nas posições 12 e 13 do Header de Lote), poderá ser informado até dois prepostos. Neste caso, informar na posição 178 a 188 o CPF do 1º preposto e na posição 189 a 199 o CPF do 2º preposto e na posição 200 a 217 informar ZEROS. Caso não haja prepostos, preencher os campos com ZEROS.
|
66
|
+
@complemento_tipo_de_servico = fields[:complemento_tipo_de_servico].to_s[0..1].ljust(2, ' ') #Corresponde a Finalidade do DOC. Será repassado para o Banco favorecido conforme informado, sem tratamento.
|
67
|
+
@complemento_finalidade_da_ted = fields[:complemento_finalidade_da_ted].to_s[0..4].ljust(5, ' ')
|
68
|
+
@complemento_finalidade_de_pagamento = fields[:complemento_finalidade_de_pagamento].to_s[0..1].ljust(2, ' ')
|
69
|
+
@uso_exclusivo_febraban = ' '
|
70
|
+
@aviso_ao_favorecido = ' ' #O ou 5 – o código 5 (com aviso) somente será tratado caso tenha sido negociado com a agência e conste no cadastramento do serviço a emissão de aviso.
|
71
|
+
@codigo_das_ocorrencias_para_retorno = fields[:codigo_das_ocorrencias_para_retorno] = ' '
|
72
|
+
end
|
73
|
+
|
74
|
+
def to_string
|
75
|
+
segment = String.new
|
76
|
+
|
77
|
+
segment << self.codigo_do_banco_na_compensacao
|
78
|
+
segment << self.lote_do_servico
|
79
|
+
segment << self.tipo_de_registro
|
80
|
+
segment << self.numero_sequencial_de_registro_no_lote
|
81
|
+
segment << self.codigo_segmento_do_registro_detalhe
|
82
|
+
segment << self.tipo_de_movimento
|
83
|
+
segment << self.codigo_da_instrucao_para_movimento
|
84
|
+
segment << self.codigo_da_camara_centralizadora
|
85
|
+
segment << self.codigo_do_banco_favorecido
|
86
|
+
segment << self.agencia_mantenedora_da_conta_favorecida
|
87
|
+
segment << self.digito_verificador_da_agencia
|
88
|
+
segment << self.numero_da_conta_corrente
|
89
|
+
segment << self.digito_verificador_da_conta
|
90
|
+
segment << self.digito_verificador_da_agencia_e_conta
|
91
|
+
segment << self.nome_do_favorecido
|
92
|
+
segment << self.verificacao_retorno
|
93
|
+
segment << self.numero_doc_atribuido_para_empresa
|
94
|
+
segment << self.data_do_pagamento
|
95
|
+
segment << self.tipo_da_moeda
|
96
|
+
segment << self.quantidade_da_moeda
|
97
|
+
segment << self.dec_quantidade_da_moeda
|
98
|
+
segment << self.valor_do_pagamento
|
99
|
+
segment << self.numero_do_documento_atribuido_pelo_banco
|
100
|
+
segment << self.data_real_da_efetivacao_do_pagamento
|
101
|
+
segment << self.valor_real_da_efetivacao_do_pagamento
|
102
|
+
segment << self.dec_valor_real_da_efetivacao_do_pagamento
|
103
|
+
segment << self.outras_informacoes
|
104
|
+
segment << self.complemento_tipo_de_servico
|
105
|
+
segment << self.complemento_finalidade_da_ted
|
106
|
+
segment << self.complemento_finalidade_de_pagamento
|
107
|
+
segment << self.uso_exclusivo_febraban
|
108
|
+
segment << self.aviso_ao_favorecido
|
109
|
+
segment << self.codigo_das_ocorrencias_para_retorno
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class RubyCnab240::Arquivo::Lote::Segment::B < RubyCnab240::Arquivo::Lote::Segment
|
2
|
+
attr_accessor :codigo_do_banco_na_compensacao
|
3
|
+
attr_accessor :lote_do_servico
|
4
|
+
attr_accessor :tipo_de_registro
|
5
|
+
attr_accessor :numero_sequencial_de_registro_no_lote
|
6
|
+
attr_accessor :tipo_de_inscricao_do_favorecido
|
7
|
+
attr_accessor :numero_de_inscricao_do_favorecido
|
8
|
+
attr_accessor :aviso_ao_favorecido
|
9
|
+
attr_accessor :campos_de_endereco_opcionais
|
10
|
+
|
11
|
+
attr_reader :codigo_segmento_do_registro_detalhe
|
12
|
+
attr_reader :uso_exclusivo_do_siape
|
13
|
+
attr_reader :uso_exclusivo_febraban
|
14
|
+
attr_reader :uso_exclusivo_febraban2
|
15
|
+
|
16
|
+
def initialize(fields = {})
|
17
|
+
|
18
|
+
@codigo_do_banco_na_compensacao = fields[:codigo_do_banco_na_compensacao].to_s[0..2].rjust(3, '0') #default: 001
|
19
|
+
@lote_do_servico = fields[:lote_do_servico].to_s[0..3].rjust(4, '0')
|
20
|
+
@tipo_de_registro = fields[:tipo_de_registro] = '3'
|
21
|
+
@numero_sequencial_de_registro_no_lote = fields[:numero_sequencial_de_registro_no_lote].to_s[0..4].rjust(5, '0') #Começar com 00002 e ir incrementando em 1 a cada nova linha do registro detalhe, esse sequencial é continuação do segmento 'A' anterior.
|
22
|
+
@codigo_segmento_do_registro_detalhe = 'B'
|
23
|
+
@uso_exclusivo_febraban = ' ' * 3
|
24
|
+
@tipo_de_inscricao_do_favorecido = fields[:tipo_de_inscricao_do_favorecido].to_s[0..0].rjust(1, '0') #Informação obrigatória para crédito via DOC/TED, saque on0line e ORPAG e caso a empresa queira que o sistema confronte o CPF/CNPJ com a agência/conta do favorecido informada.
|
25
|
+
@numero_de_inscricao_do_favorecido = fields[:numero_de_inscricao_do_favorecido].to_s[0..13].rjust(14, '0') #Informação obrigatória para crédito via DOC/TED, saque online, ORPAG e caso a empresa queira que o sistema confronte o CPF/CNPJ com a agência/conta do favorecido informada. Neste último caso, deve ser solicitada para a agência que conste no cadastro do serviço para conferir número de inscrição do favorecido..
|
26
|
+
@campos_de_endereco_opcionais = ' ' * 193
|
27
|
+
@aviso_ao_favorecido = '0' #O ou 5 – o código 5 (com aviso) somente será tratado caso tenha sido negociado com a agência e conste no cadastramento do serviço a emissão de aviso.
|
28
|
+
@uso_exclusivo_do_siape = ' ' * 6
|
29
|
+
@uso_exclusivo_febraban2 = ' ' * 8
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_string
|
33
|
+
segmento = String.new
|
34
|
+
|
35
|
+
segmento << self.codigo_do_banco_na_compensacao
|
36
|
+
segmento << self.lote_do_servico
|
37
|
+
segmento << self.tipo_de_registro
|
38
|
+
segmento << self.numero_sequencial_de_registro_no_lote
|
39
|
+
segmento << self.codigo_segmento_do_registro_detalhe
|
40
|
+
segmento << self.uso_exclusivo_febraban
|
41
|
+
segmento << self.tipo_de_inscricao_do_favorecido
|
42
|
+
segmento << self.numero_de_inscricao_do_favorecido
|
43
|
+
segmento << self.campos_de_endereco_opcionais
|
44
|
+
segmento << self.aviso_ao_favorecido
|
45
|
+
segmento << self.uso_exclusivo_do_siape
|
46
|
+
segmento << self.uso_exclusivo_febraban2
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class RubyCnab240::Arquivo::Lote::Trailer < RubyCnab240::Arquivo::Lote
|
2
|
+
attr_accessor :codigo_do_banco_na_compensacao
|
3
|
+
attr_accessor :lote_do_servico
|
4
|
+
attr_accessor :qtd_registros_de_lote
|
5
|
+
attr_accessor :somatorio_dos_valores
|
6
|
+
|
7
|
+
attr_reader :tipo_de_registro
|
8
|
+
attr_reader :uso_exclusivo_febraban
|
9
|
+
attr_reader :somatorio_qtd_de_moedas
|
10
|
+
attr_reader :numero_de_aviso_debito
|
11
|
+
attr_reader :uso_exclusivo_febraban2
|
12
|
+
attr_reader :codigo_das_ocorrencias_para_retorno
|
13
|
+
|
14
|
+
|
15
|
+
def initialize(fields = {})
|
16
|
+
|
17
|
+
@codigo_do_banco_na_compensacao = fields[:codigo_do_banco_na_compensacao].to_s[0..2].rjust(3, '0') #default: 001
|
18
|
+
@lote_do_servico = fields[:lote_do_servico].to_s[0..3].rjust(4, '0')
|
19
|
+
@tipo_de_registro = fields[:tipo_de_registro].to_s[0..0].rjust(1, '0')
|
20
|
+
@uso_exclusivo_febraban = ' ' * 9
|
21
|
+
@qtd_registros_de_lote = fields[:qtd_registros_de_lote].to_s[0..5].rjust(6, '0')
|
22
|
+
@somatorio_dos_valores = fields[:somatorio_dos_valores].to_s[0..17].rjust(18, '0')
|
23
|
+
@somatorio_qtd_de_moedas = ' ' * 18
|
24
|
+
@numero_de_aviso_debito = ' ' * 6
|
25
|
+
@uso_exclusivo_febraban2 = ' ' * 165
|
26
|
+
@codigo_das_ocorrencias_para_retorno = ' ' * 10
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_string
|
30
|
+
trailer = String.new
|
31
|
+
|
32
|
+
trailer << self.codigo_do_banco_na_compensacao
|
33
|
+
trailer << self.lote_do_servico
|
34
|
+
trailer << self.tipo_de_registro
|
35
|
+
trailer << self.uso_exclusivo_febraban
|
36
|
+
trailer << self.qtd_registros_de_lote
|
37
|
+
trailer << self.somatorio_dos_valores
|
38
|
+
trailer << self.somatorio_qtd_de_moedas
|
39
|
+
trailer << self.numero_de_aviso_debito
|
40
|
+
trailer << self.uso_exclusivo_febraban2
|
41
|
+
trailer << self.codigo_das_ocorrencias_para_retorno
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class RubyCnab240::Arquivo::Trailer < RubyCnab240::Arquivo
|
2
|
+
attr_accessor :codigo_do_banco_na_compensacao
|
3
|
+
attr_accessor :qtd_registros_de_lote
|
4
|
+
attr_accessor :qtd_registros_do_arquivo
|
5
|
+
|
6
|
+
attr_reader :lote_do_servico
|
7
|
+
attr_reader :tipo_de_registro
|
8
|
+
attr_reader :uso_exclusivo_febraban
|
9
|
+
attr_reader :qtd_de_contas_para_conc
|
10
|
+
attr_reader :uso_exclusivo_febraban2
|
11
|
+
|
12
|
+
def initialize(fields = {})
|
13
|
+
|
14
|
+
fields[:qtd_registros_de_lote] = '1'
|
15
|
+
|
16
|
+
@codigo_do_banco_na_compensacao = fields[:codigo_do_banco_na_compensacao].to_s[0..2].rjust(3, '0') #default: 001
|
17
|
+
@lote_do_servico = '9999'
|
18
|
+
@tipo_de_registro = '9'
|
19
|
+
@uso_exclusivo_febraban = ' ' * 9
|
20
|
+
@qtd_registros_de_lote = fields[:qtd_registros_de_lote].to_s[0..5].rjust(6, '0')
|
21
|
+
@qtd_registros_do_arquivo = fields[:qtd_registros_do_arquivo].to_s[0..5].rjust(6, '0')
|
22
|
+
@qtd_de_contas_para_conc = ' ' * 6
|
23
|
+
@uso_exclusivo_febraban2 = ' ' * 205
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_string
|
27
|
+
trailer = String.new
|
28
|
+
trailer << self.codigo_do_banco_na_compensacao
|
29
|
+
trailer << self.lote_do_servico
|
30
|
+
trailer << self.tipo_de_registro
|
31
|
+
trailer << self.uso_exclusivo_febraban
|
32
|
+
trailer << self.qtd_registros_de_lote
|
33
|
+
trailer << self.qtd_registros_do_arquivo
|
34
|
+
trailer << self.qtd_de_contas_para_conc
|
35
|
+
trailer << self.uso_exclusivo_febraban2
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
class RubyCnab240::Arquivo
|
2
|
+
require 'rubycnab240/arquivo/header'
|
3
|
+
require 'rubycnab240/arquivo/lote'
|
4
|
+
require 'rubycnab240/arquivo/trailer'
|
5
|
+
|
6
|
+
attr_accessor :header
|
7
|
+
attr_accessor :lot_header
|
8
|
+
attr_accessor :segments
|
9
|
+
attr_accessor :lot_trailer
|
10
|
+
attr_accessor :trailer
|
11
|
+
attr_accessor :data_dos_pagamentos
|
12
|
+
|
13
|
+
@@tipo_de_inscricao_da_empresa = String.new
|
14
|
+
@@numero_de_inscricao_da_empresa = String.new
|
15
|
+
@@codigo_do_convenio_do_banco = String.new
|
16
|
+
@@agencia_mantenedora_da_conta = String.new
|
17
|
+
@@digito_verificador_da_agencia = String.new
|
18
|
+
@@numero_da_conta_corrente = String.new
|
19
|
+
@@digito_verificador_da_conta = String.new
|
20
|
+
@@digito_verificador_da_agencia_e_conta = String.new
|
21
|
+
@@nome_da_empresa = String.new
|
22
|
+
@@data_dos_pagamentos = String.new
|
23
|
+
|
24
|
+
def initialize(fields = {})
|
25
|
+
fields[:tipo_de_registro] = '0'
|
26
|
+
fields[:digito_verificador_da_agencia_e_conta] = '0'
|
27
|
+
|
28
|
+
@@data_dos_pagamentos = fields[:data_dos_pagamentos] ? fields[:data_dos_pagamentos].strftime("%d%m%Y") : Date.today.strftime("%d%m%Y")
|
29
|
+
|
30
|
+
@@tipo_de_inscricao_da_empresa = fields[:tipo_de_inscricao_da_empresa]
|
31
|
+
@@numero_de_inscricao_da_empresa = fields[:numero_de_inscricao_da_empresa]
|
32
|
+
@@codigo_do_convenio_do_banco = fields[:codigo_do_convenio_do_banco]
|
33
|
+
@@agencia_mantenedora_da_conta = fields[:agencia_mantenedora_da_conta]
|
34
|
+
@@digito_verificador_da_agencia = fields[:digito_verificador_da_agencia]
|
35
|
+
@@numero_da_conta_corrente = fields[:numero_da_conta_corrente]
|
36
|
+
@@digito_verificador_da_conta = fields[:digito_verificador_da_conta]
|
37
|
+
@@digito_verificador_da_agencia_e_conta = fields[:digito_verificador_da_agencia_e_conta]
|
38
|
+
@@nome_da_empresa = fields[:nome_da_empresa]
|
39
|
+
|
40
|
+
@header = RubyCnab240::Arquivo::Header.new({
|
41
|
+
:codigo_do_banco_na_compensacao => fields[:codigo_do_banco_na_compensacao],
|
42
|
+
:lote_do_servico => '0',
|
43
|
+
:tipo_de_registro => fields[:tipo_de_registro],
|
44
|
+
:tipo_de_inscricao_da_empresa => @@tipo_de_inscricao_da_empresa,
|
45
|
+
:numero_de_inscricao_da_empresa => @@numero_de_inscricao_da_empresa,
|
46
|
+
:codigo_do_convenio_do_banco => @@codigo_do_convenio_do_banco,
|
47
|
+
:agencia_mantenedora_da_conta => @@agencia_mantenedora_da_conta,
|
48
|
+
:digito_verificador_da_agencia => @@digito_verificador_da_agencia,
|
49
|
+
:numero_da_conta_corrente => @@numero_da_conta_corrente,
|
50
|
+
:digito_verificador_da_conta => @@digito_verificador_da_conta,
|
51
|
+
:digito_verificador_da_agencia_e_conta => @@digito_verificador_da_agencia_e_conta,
|
52
|
+
:nome_da_empresa => @@nome_da_empresa,
|
53
|
+
:nome_do_banco => fields[:nome_do_banco],
|
54
|
+
:codigo_remessa_retorno => fields[:codigo_remessa_retorno],
|
55
|
+
:numero_sequencial_de_arquivo => fields[:numero_sequencial_de_arquivo],
|
56
|
+
:para_uso_reservado_da_empresa => fields[:para_uso_reservado_da_empresa]
|
57
|
+
})
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
@segments = []
|
62
|
+
|
63
|
+
@trailer = RubyCnab240::Arquivo::Trailer.new({
|
64
|
+
:codigo_do_banco_na_compensacao => fields[:codigo_do_banco_na_compensacao],
|
65
|
+
:qtd_registros_de_lote => "0",
|
66
|
+
:qtd_registros_do_arquivo => "0"
|
67
|
+
})
|
68
|
+
end
|
69
|
+
|
70
|
+
def number_of_segments
|
71
|
+
self.segments.size + 1
|
72
|
+
end
|
73
|
+
|
74
|
+
def <<(lote)
|
75
|
+
numero_do_lote = (self.segments.size + 1).to_s[0..3].rjust(4, '0')
|
76
|
+
|
77
|
+
lote.lot_header.lote_do_servico = numero_do_lote
|
78
|
+
lote.lot_trailer.lote_do_servico = numero_do_lote
|
79
|
+
|
80
|
+
self.segments << lote unless lote.class.to_s != "RubyCnab240::Arquivo::Lote"
|
81
|
+
end
|
82
|
+
|
83
|
+
def to_string
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
rubycnab240 = String.new
|
88
|
+
|
89
|
+
qtd_registros_de_lote = self.segments.size
|
90
|
+
qtd_registros_do_arquivo = 0
|
91
|
+
|
92
|
+
self.segments.each do |segment|
|
93
|
+
segment.lots.each do |lot|
|
94
|
+
qtd_registros_do_arquivo += 1
|
95
|
+
lot.lote_do_servico = segment.lot_header.lote_do_servico
|
96
|
+
lot.data_do_pagamento = @@data_dos_pagamentos unless lot.class.to_s == "RubyCnab240::Arquivo::Lote::Segment::B"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
qtd_registros_do_arquivo = qtd_registros_do_arquivo + (2 * self.segments.size) + 2
|
101
|
+
|
102
|
+
self.trailer.qtd_registros_de_lote = qtd_registros_de_lote.to_s[0..5].rjust(6, '0')
|
103
|
+
self.trailer.qtd_registros_do_arquivo = qtd_registros_do_arquivo.to_s[0..5].rjust(6, '0')
|
104
|
+
|
105
|
+
rubycnab240 << self.header.to_string + "\n"
|
106
|
+
self.segments.each do |lot|
|
107
|
+
rubycnab240 << lot.to_string + "\n"
|
108
|
+
end
|
109
|
+
rubycnab240 << self.trailer.to_string + "\n"
|
110
|
+
end
|
111
|
+
|
112
|
+
def save_to_file(file)
|
113
|
+
string = self.to_string
|
114
|
+
|
115
|
+
File.open(file, 'w') { |file| file.write(string) }
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,267 @@
|
|
1
|
+
class RubyCnab240::Retorno
|
2
|
+
|
3
|
+
attr_accessor :file
|
4
|
+
attr_accessor :result
|
5
|
+
|
6
|
+
def initialize(file)
|
7
|
+
@file = file
|
8
|
+
@result = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def process
|
12
|
+
|
13
|
+
lines = []
|
14
|
+
|
15
|
+
File.foreach(self.file).with_index do |line, line_num|
|
16
|
+
lines << { line_num: line_num, text: line }
|
17
|
+
end
|
18
|
+
|
19
|
+
lines.select{ |line| line[:text][13..13] == 'A' }.each do |segment_a|
|
20
|
+
self.result << {
|
21
|
+
line_num: segment_a[:line_num],
|
22
|
+
identification: segment_a[:text][85..92],
|
23
|
+
succeded: RubyCnab240::Retorno.success?(segment_a[:text][230..23]),
|
24
|
+
return_code: segment_a[:text][230..23],
|
25
|
+
return_message: RubyCnab240::Retorno.return_message(segment_a[:text][230..231]),
|
26
|
+
date: Date.strptime(segment_a[:text][93..101],"%d%m%Y")
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
self.result
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.return_message(code)
|
34
|
+
case code
|
35
|
+
when '00'
|
36
|
+
'CREDITO OU DEBITO EFETUADO'
|
37
|
+
when '01'
|
38
|
+
'INSUFICIENCIA DE FUNDOS - DEBITO NAO EFETUADO'
|
39
|
+
when '02'
|
40
|
+
'CREDITO OU DEBITO CANCELADO PELO PAGADOR/CREDOR'
|
41
|
+
when '03'
|
42
|
+
'DEBITO AUTORIZADO PELA AGENCIA - EFETUADO'
|
43
|
+
when '88'
|
44
|
+
'REMESSA DUPLICADA'
|
45
|
+
when 'AA'
|
46
|
+
'CONTROLE INVALIDO'
|
47
|
+
when 'AB'
|
48
|
+
'TIPO DE OPERACAO INVALIDO'
|
49
|
+
when 'AC'
|
50
|
+
'TIPO DE SERVICO INVALIDO'
|
51
|
+
when 'AD'
|
52
|
+
'FORMA DE LANCAMENTO INVALIDA'
|
53
|
+
when 'AE'
|
54
|
+
'TIPO/NUMERO DE INSCRICAO INVALIDO'
|
55
|
+
when 'AF'
|
56
|
+
'CODIGO DE CONVENIO INVALIDO'
|
57
|
+
when 'AG'
|
58
|
+
'AGENCIA/CONTA CORRENTE/DV INVALIDO'
|
59
|
+
when 'AH'
|
60
|
+
'No. SEQUENCIAL DO REGISTRO LOTE INVALIDO'
|
61
|
+
when 'AI'
|
62
|
+
'CODIGO DE SEGMENTO DE DETALHE INVALIDO'
|
63
|
+
when 'AJ'
|
64
|
+
'TIPO DE MOVIMENTO INVALIDO'
|
65
|
+
when 'AK'
|
66
|
+
'CODIGO DE COMPENSACAO DO FAVORECIDO/DEPOSITARIO INVALIDO'
|
67
|
+
when 'AL'
|
68
|
+
'BANCO DO FAVORECIDO OU DEPOSITARIO INVALIDO'
|
69
|
+
when 'AM'
|
70
|
+
'AGENCIA MANTENEDORA DA C.C. DO FAVOREDICO INVALIDA'
|
71
|
+
when 'AO'
|
72
|
+
'NOME DO FAVORECIDO INVALIDO'
|
73
|
+
when 'AP'
|
74
|
+
'DATA LANCAMENTO INVALIDA'
|
75
|
+
when 'AQ'
|
76
|
+
'TIPO/QUANTIDADE DA MOEDA INVALIDO'
|
77
|
+
when 'AR'
|
78
|
+
'VALOR DO LANCAMENTO INVALIDO'
|
79
|
+
when 'AS'
|
80
|
+
'AVISO AO FAVORECIDO - IDENTIFICACAO INVALIDA'
|
81
|
+
when 'AT'
|
82
|
+
'TIPO/NUMERO DE INSCRICAO DO FAVORECIDO INVALIDO'
|
83
|
+
when 'AU'
|
84
|
+
'LOGRADOURO DO FAVORECIDO NAO INFORMADO'
|
85
|
+
when 'AV'
|
86
|
+
'No. DO LOCAL DO FAVORECIDO NAO INFORMADO'
|
87
|
+
when 'AW'
|
88
|
+
'CIDADE DO FAVORECIDO NAO INFORMADO'
|
89
|
+
when 'AX'
|
90
|
+
'CEP/COMPLEMENTO DO FAVORECIDO INVALIDO'
|
91
|
+
when 'AY'
|
92
|
+
'SIGLA DO ESTADO DO FAVORECIDO INVALIDO'
|
93
|
+
when 'AZ'
|
94
|
+
'CODIGO/NOME DO BANCO DEPOSITARIO INVALIDO'
|
95
|
+
when 'BA'
|
96
|
+
'CODIGO/NOME DA AGENCIA DEPOSITARIA NAO INFORMADO'
|
97
|
+
when 'BB'
|
98
|
+
'SEU NUMERO INVALIDO'
|
99
|
+
when 'BC'
|
100
|
+
'NOSSO NUMERO INVALIDO'
|
101
|
+
when 'BD'
|
102
|
+
'CONFIRMACAO DE PAGAMENTO AGENDADO'
|
103
|
+
when 'CF'
|
104
|
+
'VALOR DO DOCUMENTO INVALIDO'
|
105
|
+
when 'HB'
|
106
|
+
'LOTE NAO ACEITO'
|
107
|
+
when 'HC'
|
108
|
+
'CONVENIO COM A EMPRESA INEXISTENTE/INVALIDO PARA O CONTRATO'
|
109
|
+
when 'HD'
|
110
|
+
'AGENCIA/CONTA DA EMPRESA INEXISTENTE/INVALIDA P/ CONTRATO'
|
111
|
+
when 'HE'
|
112
|
+
'TIPO DE SERVICO INVALIDO P/ CONTRATO'
|
113
|
+
when 'HF'
|
114
|
+
'CONTA CORRENTE DA EMPRESA COM SALDO INSUFICIENTE'
|
115
|
+
when 'HG'
|
116
|
+
'LOTE DE SERVICO FORA DE SEQUENCIA'
|
117
|
+
when 'HH'
|
118
|
+
'LOTE DE SERVICO INVALIDO'
|
119
|
+
when 'NA'
|
120
|
+
'CONTA CORRENTE/DV DO FAVORECIDO INVALIDO'
|
121
|
+
when 'TA'
|
122
|
+
'LOTE NAO ACEITO - TOTAIS DO LOTE COM DIFERENCA'
|
123
|
+
else
|
124
|
+
'IDENTIFICADOR NÃO EXISTENTE OU NÃO RECONHECIDO'
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def self.success?(code)
|
129
|
+
case code
|
130
|
+
when '00'
|
131
|
+
#'CREDITO OU DEBITO EFETUADO'
|
132
|
+
true
|
133
|
+
when '01'
|
134
|
+
#'INSUFICIENCIA DE FUNDOS - DEBITO NAO EFETUADO'
|
135
|
+
false
|
136
|
+
when '02'
|
137
|
+
#'CREDITO OU DEBITO CANCELADO PELO PAGADOR/CREDOR'
|
138
|
+
false
|
139
|
+
when '03'
|
140
|
+
#'DEBITO AUTORIZADO PELA AGENCIA - EFETUADO'
|
141
|
+
true
|
142
|
+
when '88'
|
143
|
+
#'REMESSA DUPLICADA'
|
144
|
+
false
|
145
|
+
when 'AA'
|
146
|
+
#'CONTROLE INVALIDO'
|
147
|
+
false
|
148
|
+
when 'AB'
|
149
|
+
#'TIPO DE OPERACAO INVALIDO'
|
150
|
+
false
|
151
|
+
when 'AC'
|
152
|
+
#'TIPO DE SERVICO INVALIDO'
|
153
|
+
false
|
154
|
+
when 'AD'
|
155
|
+
#'FORMA DE LANCAMENTO INVALIDA'
|
156
|
+
false
|
157
|
+
when 'AE'
|
158
|
+
#'TIPO/NUMERO DE INSCRICAO INVALIDO'
|
159
|
+
false
|
160
|
+
when 'AF'
|
161
|
+
#'CODIGO DE CONVENIO INVALIDO'
|
162
|
+
false
|
163
|
+
when 'AG'
|
164
|
+
#'AGENCIA/CONTA CORRENTE/DV INVALIDO'
|
165
|
+
false
|
166
|
+
when 'AH'
|
167
|
+
#'No. SEQUENCIAL DO REGISTRO LOTE INVALIDO'
|
168
|
+
false
|
169
|
+
when 'AI'
|
170
|
+
#'CODIGO DE SEGMENTO DE DETALHE INVALIDO'
|
171
|
+
false
|
172
|
+
when 'AJ'
|
173
|
+
#'TIPO DE MOVIMENTO INVALIDO'
|
174
|
+
false
|
175
|
+
when 'AK'
|
176
|
+
#'CODIGO DE COMPENSACAO DO FAVORECIDO/DEPOSITARIO INVALIDO'
|
177
|
+
false
|
178
|
+
when 'AL'
|
179
|
+
#'BANCO DO FAVORECIDO OU DEPOSITARIO INVALIDO'
|
180
|
+
false
|
181
|
+
when 'AM'
|
182
|
+
#'AGENCIA MANTENEDORA DA C.C. DO FAVOREDICO INVALIDA'
|
183
|
+
false
|
184
|
+
when 'AO'
|
185
|
+
#'NOME DO FAVORECIDO INVALIDO'
|
186
|
+
false
|
187
|
+
when 'AP'
|
188
|
+
#'DATA LANCAMENTO INVALIDA'
|
189
|
+
false
|
190
|
+
when 'AQ'
|
191
|
+
#'TIPO/QUANTIDADE DA MOEDA INVALIDO'
|
192
|
+
false
|
193
|
+
when 'AR'
|
194
|
+
#'VALOR DO LANCAMENTO INVALIDO'
|
195
|
+
false
|
196
|
+
when 'AS'
|
197
|
+
#'AVISO AO FAVORECIDO - IDENTIFICACAO INVALIDA'
|
198
|
+
false
|
199
|
+
when 'AT'
|
200
|
+
#'TIPO/NUMERO DE INSCRICAO DO FAVORECIDO INVALIDO'
|
201
|
+
false
|
202
|
+
when 'AU'
|
203
|
+
#'LOGRADOURO DO FAVORECIDO NAO INFORMADO'
|
204
|
+
false
|
205
|
+
when 'AV'
|
206
|
+
#'No. DO LOCAL DO FAVORECIDO NAO INFORMADO'
|
207
|
+
false
|
208
|
+
when 'AW'
|
209
|
+
#'CIDADE DO FAVORECIDO NAO INFORMADO'
|
210
|
+
false
|
211
|
+
when 'AX'
|
212
|
+
#'CEP/COMPLEMENTO DO FAVORECIDO INVALIDO'
|
213
|
+
false
|
214
|
+
when 'AY'
|
215
|
+
#'SIGLA DO ESTADO DO FAVORECIDO INVALIDO'
|
216
|
+
false
|
217
|
+
when 'AZ'
|
218
|
+
#'CODIGO/NOME DO BANCO DEPOSITARIO INVALIDO'
|
219
|
+
false
|
220
|
+
when 'BA'
|
221
|
+
#'CODIGO/NOME DA AGENCIA DEPOSITARIA NAO INFORMADO'
|
222
|
+
false
|
223
|
+
when 'BB'
|
224
|
+
#'SEU NUMERO INVALIDO'
|
225
|
+
false
|
226
|
+
when 'BC'
|
227
|
+
#'NOSSO NUMERO INVALIDO'
|
228
|
+
false
|
229
|
+
when 'BD'
|
230
|
+
#'CONFIRMACAO DE PAGAMENTO AGENDADO'
|
231
|
+
false
|
232
|
+
when 'CF'
|
233
|
+
#'VALOR DO DOCUMENTO INVALIDO'
|
234
|
+
false
|
235
|
+
when 'HB'
|
236
|
+
#'LOTE NAO ACEITO'
|
237
|
+
false
|
238
|
+
when 'HC'
|
239
|
+
#'CONVENIO COM A EMPRESA INEXISTENTE/INVALIDO PARA O CONTRATO'
|
240
|
+
false
|
241
|
+
when 'HD'
|
242
|
+
#'AGENCIA/CONTA DA EMPRESA INEXISTENTE/INVALIDA P/ CONTRATO'
|
243
|
+
false
|
244
|
+
when 'HE'
|
245
|
+
#'TIPO DE SERVICO INVALIDO P/ CONTRATO'
|
246
|
+
false
|
247
|
+
when 'HF'
|
248
|
+
#'CONTA CORRENTE DA EMPRESA COM SALDO INSUFICIENTE'
|
249
|
+
false
|
250
|
+
when 'HG'
|
251
|
+
#'LOTE DE SERVICO FORA DE SEQUENCIA'
|
252
|
+
false
|
253
|
+
when 'HH'
|
254
|
+
#'LOTE DE SERVICO INVALIDO'
|
255
|
+
false
|
256
|
+
when 'NA'
|
257
|
+
#'CONTA CORRENTE/DV DO FAVORECIDO INVALIDO'
|
258
|
+
false
|
259
|
+
when 'TA'
|
260
|
+
#'LOTE NAO ACEITO - TOTAIS DO LOTE COM DIFERENCA'
|
261
|
+
false
|
262
|
+
else
|
263
|
+
#'IDENTIFICADOR NÃO EXISTENTE OU NÃO RECONHECIDO'
|
264
|
+
false
|
265
|
+
end
|
266
|
+
end
|
267
|
+
end
|
data/lib/rubycnab240.rb
ADDED
data/rubycnab240.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rubycnab240/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "rubycnab240"
|
8
|
+
spec.version = RubyCnab240::VERSION
|
9
|
+
spec.authors = ["Gabriel Hamdan"]
|
10
|
+
spec.email = ["ghamdan.eng@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = "Crie arquivo de remessa de pagamentos CNAB240 - Febraban"
|
13
|
+
spec.description = "Crie arquivo de remessa de pagamentos CNAB240 - Febraban"
|
14
|
+
spec.homepage = "https://github.com/Hamdan85/rubycnab240"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubycnab240
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gabriel Hamdan
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
description: Crie arquivo de remessa de pagamentos CNAB240 - Febraban
|
42
|
+
email:
|
43
|
+
- ghamdan.eng@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".gitignore"
|
49
|
+
- Gemfile
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- bin/console
|
53
|
+
- bin/setup
|
54
|
+
- docs/PgtVer03BB.xls
|
55
|
+
- lib/rubycnab240.rb
|
56
|
+
- lib/rubycnab240/arquivo.rb
|
57
|
+
- lib/rubycnab240/arquivo/header.rb
|
58
|
+
- lib/rubycnab240/arquivo/lote.rb
|
59
|
+
- lib/rubycnab240/arquivo/lotes/header.rb
|
60
|
+
- lib/rubycnab240/arquivo/lotes/segment.rb
|
61
|
+
- lib/rubycnab240/arquivo/lotes/segments/a.rb
|
62
|
+
- lib/rubycnab240/arquivo/lotes/segments/b.rb
|
63
|
+
- lib/rubycnab240/arquivo/lotes/trailer.rb
|
64
|
+
- lib/rubycnab240/arquivo/trailer.rb
|
65
|
+
- lib/rubycnab240/retorno.rb
|
66
|
+
- lib/rubycnab240/version.rb
|
67
|
+
- rubycnab240.gemspec
|
68
|
+
homepage: https://github.com/Hamdan85/rubycnab240
|
69
|
+
licenses: []
|
70
|
+
metadata: {}
|
71
|
+
post_install_message:
|
72
|
+
rdoc_options: []
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
requirements: []
|
86
|
+
rubyforge_project:
|
87
|
+
rubygems_version: 2.4.6
|
88
|
+
signing_key:
|
89
|
+
specification_version: 4
|
90
|
+
summary: Crie arquivo de remessa de pagamentos CNAB240 - Febraban
|
91
|
+
test_files: []
|