rubycnab240 1.0.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.
- 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: []
|