formatos-febraban 0.3.45 → 0.3.47

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 10dc05ffecd855898d818a82595eae00355de820
4
- data.tar.gz: cc8df21f1b29e5edc93d13f00fe32032c956ba53
3
+ metadata.gz: e5e1d25d5e13fa8592863452305082b1400c29be
4
+ data.tar.gz: ab52a53391c7d3191c6ca0fbd1938e8acbcae411
5
5
  SHA512:
6
- metadata.gz: efc479d863a4dc5f001f88baffdb3edd41bd3c26a2bc22d9822fa1762073cbeceb613e9c55a553ab0ae4aef1d82461f567e8717de26230a21af7f53f67e7a520
7
- data.tar.gz: 89e1a5056060464eea5a144b7b49e8284ee2493f64e5b5db56bebbf60c67ee892b417c69a1f437d9ddf93dbe4ca84f305c3fa24864df545749410eaa93b07283
6
+ metadata.gz: accbc1fa02460e1f28dda23487526324bf63238794fdd9895f566016b89c09f4d2a5ae18592ad5909bc58caac57c31684a6713f38b1998abf26c684b4f1cab33
7
+ data.tar.gz: 6de5dbf219fd232793654823d454d910fbfaf59cb327968d0bc98d4dae92a6e1bfc528683e4b068020706307cd320cdd19815d0118afcc0ab7ac7051c552a20b
@@ -98,7 +98,7 @@ class Cielo
98
98
  section.set_reservado_3
99
99
  section.set_valor_parcela
100
100
  section.set_reservado_4
101
- section.set_reservado_5
101
+ section.set_reservado_5 params[:reservado]
102
102
  section.set_status_venda
103
103
  section.set_data_liquidacao
104
104
  section.set_reservado_6
@@ -100,6 +100,10 @@ class CieloDetalhe < FormatSection
100
100
  self.get_section_value(16)
101
101
  end
102
102
 
103
+ def get_reservado
104
+ self.get_section_value(15)
105
+ end
106
+
103
107
  def set_sequencial valor
104
108
  self.set_section_value(1, valor)
105
109
  end
@@ -2,25 +2,23 @@
2
2
  class Cnab400
3
3
  require 'date'
4
4
 
5
- VERSAO = "05"
6
-
7
5
  # Carrega todas as dependências de Layout
8
6
  Dir[File.join(File.dirname(__FILE__), '../..', 'base', '**/*.rb')].sort.each do |file|
9
7
  require file
10
8
  end
11
9
 
12
10
  # Partes do Layout
13
- require_relative 'cnab_400_0' # Header
14
- require_relative 'cnab_400_1' # Transação
15
- require_relative 'cnab_400_2' # Mensagem (Opcional)
16
- require_relative 'cnab_400_3' # Rateio de Crétido (Opcional)
17
- require_relative 'cnab_400_7' # Débito em Conta - Empresa
18
- require_relative 'cnab_400_9' # Trailler
11
+ require_relative 'cnab_400_0' # Header
12
+ require_relative 'cnab_400_1' # Transação
13
+ require_relative 'cnab_400_2' # Mensagem (Opcional)
14
+ require_relative 'cnab_400_3' # Rateio de Crétido (Opcional)
15
+ require_relative 'cnab_400_7' # Dados do Sacador Avalista (Opcional)
16
+ require_relative 'cnab_400_9' # Trailler
19
17
 
20
18
  #-------------------------------------------------------------------
21
19
  #-------------------------------------------------------------------
22
20
  # Construtor
23
- def initialize file = ""
21
+ def initialize file = ''
24
22
  @sections = []
25
23
 
26
24
  if file.length > 0
@@ -57,51 +55,144 @@ class Cnab400
57
55
  public
58
56
 
59
57
  # Seção 0
60
- def create_header(codigo_remessa, codigo_convenio, nome_empresa,
61
- codigo_banco, nome_banco, numero_sequencial)
58
+ def create_header(codigo_empresa, nome_empresa, codigo_banco,
59
+ nome_banco, data_geracao, numero_sequencial)
62
60
 
63
61
  if self.get_header.nil?
64
- section = self.get_new_section("0")
62
+ section = self.get_new_section('0')
63
+
64
+ section.set_id_registro ('0')
65
+ section.set_codigo_remessa ('1')
66
+ section.set_literal ('REMESSA')
67
+ section.set_codigo_servico ('01')
68
+ section.set_servico ('COBRANCA')
69
+ section.set_codigo_empresa (codigo_empresa)
70
+ section.set_nome_empresa (nome_empresa)
71
+ section.set_codigo_banco (codigo_banco)
72
+ section.set_nome_banco (nome_banco)
73
+ section.set_data_geracao (data_geracao)
74
+ section.set_branco_1 ('')
75
+ section.set_id_sistema ('MX')
76
+ section.set_seq_arquivo (numero_sequencial)
77
+ section.set_branco_2 ('')
78
+ section.set_seq_registro ('1')
79
+
80
+ self.add_section_from_business(section)
65
81
 
66
- section.set_codigo_remessa codigo_remessa
67
- section.set_codigo_convenio codigo_convenio
68
- section.set_nome_empresa nome_empresa
69
- section.set_codigo_banco codigo_banco
70
- section.set_nome_banco nome_banco
71
- section.set_data_geracao Time.new
72
- section.set_numero_sequencial numero_sequencial
73
- section.set_versao_layout Febraban150::VERSAO
74
- section.set_identificacao_servico Febraban150A::ID_SERVICO
75
- section.set_reservado ""
82
+ else
83
+ raise 'Header já declarado!'
84
+ end
85
+ end
76
86
 
77
- self.add_section_from_business section
87
+ # Seção 1
88
+ def create_transacao(agencia_debito, razao_conta, conta_corrente,
89
+ codigo_empresa, id_cliente_empresa, codigo_banco,
90
+ existe_multa, percent_multa, codigo_barras,
91
+ digito_conferencia, desconto_dia, condicao_emissao)
92
+
93
+ if self.get_header
94
+ section = self.get_new_section('1')
95
+
96
+ section.set_agencia_debito (agencia_debito)
97
+ section.set_razao_conta (razao_conta)
98
+ section.set_conta_corrente (conta_corrente)
99
+ section.set_codigo_empresa (codigo_empresa)
100
+ section.set_numero_controle (id_cliente_empresa)
101
+ section.set_codigo_banco (codigo_banco)
102
+ section.set_multa (existe_multa)
103
+ section.set_percent_multa (percent_multa)
104
+ section.set_id_titulo (codigo_barras)
105
+ section.set_digito_conferencia (digito_conferencia)
106
+ section.set_desconto_dia (desconto_dia)
107
+ section.set_condicao_emissao (condicao_emissao)
108
+ section.set_emite_boleto (file[94, 94])
109
+ section.set_id_operacao (file[95, 104])
110
+ section.set_indicador_rateio (file[105, 105])
111
+ section.set_enderecamento (file[106, 106])
112
+ section.set_branco (file[107, 108])
113
+ section.set_id_ocorrencia (file[109, 110])
114
+ section.set_numero_documento (file[111, 120])
115
+ section.set_data_vencimento (file[121, 126])
116
+ section.set_valor (file[127, 139])
117
+ section.set_banco_cobranca (file[140, 152])
118
+ section.set_agencia_depositaria (file[143, 147])
119
+ section.set_especie_titulo (file[148, 149])
120
+ section.set_data_emissao (file[151, 156])
121
+ section.set_primeira_instrucao (file[157, 158])
122
+ section.set_segunda_instrucao (file[159, 160])
123
+ section.set_valor_dia_atraso (file[161, 173])
124
+ section.set_data_limite_concessao (file[174, 179])
125
+ section.set_valor_desconto (file[180, 192])
126
+ section.set_valor_iof (file[193, 205])
127
+ section.set_valor_abatimento (file[206, 218])
128
+ section.set_tipo_inscricao (file[219, 220])
129
+ section.set_numero_inscricao (file[221, 234])
130
+ section.set_nome_sacado (file[235, 274])
131
+ section.set_endereco_sacado (file[235, 314])
132
+ section.set_primeira_mensagem (file[315, 326])
133
+ section.set_cep (file[317, 334])
134
+ section.set_sacador_avalista (file[335, 394])
135
+ section.set_seq_registro (file[395, 400])
136
+
137
+ self.add_section_from_business(section)
78
138
 
79
139
  else
80
- raise "Header declarado!"
140
+ raise 'Header não declarado!'
141
+ end
142
+ end
143
+
144
+ # Seção 9
145
+ def create_trailler(numero_sequencial)
146
+
147
+ if self.get_header
148
+ if self.get_trailler.nil?
149
+ section = self.get_new_section('9')
150
+
151
+ section.set_id_registro ('9')
152
+ section.set_branco ('')
153
+ section.set_seq_registro (numero_sequencial)
154
+
155
+ self.add_section_from_business(section)
156
+
157
+ else
158
+ raise 'Trailler já declarado!'
159
+ end
160
+
161
+ else
162
+ raise 'Header não declarado!'
81
163
  end
82
164
  end
83
165
 
84
166
  #-------------------------------------------------------------------
85
167
  #-------------------------------------------------------------------
86
- # Validações
87
- protected
88
- def valida_existe_header
89
- raise "Header (Seção A) ainda não declarado" if self.get_header.nil?
168
+ # Getters
169
+ public
170
+ def sections
171
+ @sections.to_a
90
172
  end
91
173
 
92
- public
93
- def is_valid?
94
- if self.layout_empresa?
95
- raise "Layout de Empresa inválido!" unless self.is_empresa_valid?
174
+ def has_section section
175
+ self.get_section(section).length > 0
176
+ end
96
177
 
97
- elsif self.layout_banco?
98
- raise "Layout de Banco inválido!" unless self.is_banco_valid?
178
+ def get_section section
179
+ self.sections.select {|c| c.is_section?(section) == true }
180
+ end
99
181
 
100
- else
101
- raise "Código de Remessa desconhecido: #{codigo_remessa}"
102
- end
182
+ def is_sections_valid?
183
+ self.sections.select {|b| b.is_valid? == false }.length == 0
184
+ end
185
+
186
+ def to_s
187
+ self.sections.map {|a| a.to_s}.join("\r\n")
188
+ end
103
189
 
104
- result = self.is_sections_valid?
190
+ def get_header
191
+ self.get_section('0').first()
192
+ end
193
+
194
+ def get_trailler
195
+ self.get_section('9').first()
105
196
  end
106
197
 
107
198
  #-------------------------------------------------------------------
@@ -113,8 +204,8 @@ class Cnab400
113
204
  "CD#{data_geracao.day}#{data_geracao.month}00.REM"
114
205
  end
115
206
 
116
- #--------------------------------------------------------------------------------------
117
- #--------------------------------------------------------------------------------------
207
+ #-------------------------------------------------------------------
208
+ #-------------------------------------------------------------------
118
209
  # Carregamento de Arquivo
119
210
  protected
120
211
  def get_new_section section_type
@@ -133,4 +224,23 @@ class Cnab400
133
224
  Cnab4009.new(self)
134
225
  end
135
226
  end
227
+
228
+ def process_file location
229
+ file = File.new(location, 'r')
230
+
231
+ while (line = file.gets)
232
+ process_string line
233
+ end
234
+
235
+ file.close
236
+ end
237
+
238
+ def process_string file
239
+ section_type = file[0,1]
240
+
241
+ section = get_new_section(section_type)
242
+ section.process_section(file)
243
+
244
+ self.add_section section
245
+ end
136
246
  end
@@ -5,134 +5,122 @@
5
5
  class Cnab4000 < FormatSection
6
6
  require 'date'
7
7
 
8
- ID_SERVICO = "DÉBITO AUTOMÁTICO"
9
-
10
8
  def initialize master
11
9
  super(master, true, true, false)
12
10
 
13
11
  @section = Section.new({
14
- 0 => Position.new(1, 1, false, "A", true), # Código do Registro
15
- 1 => Position.new(2, 1, true), # Código Remessa (1-Remessa, 2-Retorno)
16
- 2 => Position.new(3, 20, false), # Código de ID enviado pelo Banco
17
- 3 => Position.new(4, 20, false), # Nome da Empresa
18
- 4 => Position.new(5, 3, true), # Código do Banco
19
- 5 => Position.new(6, 20, false), # Nome do Banco
20
- 6 => Position.new(7, 8, true), # Data de Geração de Arquivo
21
- 7 => Position.new(8, 6, true), # Número Sequencial do Arquivo
22
- 8 => Position.new(9, 2, true, 5), # Versão do Layout (5, desde 05.05.2008)
23
- 9 => Position.new(10, 17, false, Febraban150A::ID_SERVICO), # Identificação ("DÉBITO AUTOMÁTICO")
24
- 10 => Position.new(11, 52, false), # Reservado pelo Sistema
12
+ 0 => Position.new(1, 1, true, '0', true), # Identificação do Registro
13
+ 1 => Position.new(2, 1, true, '1'), # Código Remessa (1-Remessa, 2-Retorno)
14
+ 2 => Position.new(3, 7, false,'REMESSA'), # Literal Remessa
15
+ 3 => Position.new(4, 2, true, '01'), # Código do Serviço
16
+ 4 => Position.new(5, 15, false,'COBRANCA'), # Literal Serviço
17
+ 5 => Position.new(6, 20, true), # Código da Empresa
18
+ 6 => Position.new(7, 30, false), # Nome da Empresa
19
+ 7 => Position.new(8, 3, true), # Código do Banco
20
+ 8 => Position.new(9, 15, false, 'BRADESCO'), # Nome do Banco
21
+ 9 => Position.new(10, 6, true), # Data de Geração de Arquivo
22
+ 10 => Position.new(11, 8, false), # Brancos
23
+ 11 => Position.new(12, 2, false), # Identificação do Sistema
24
+ 12 => Position.new(13, 7, true), # Número Sequencial do Arquivo
25
+ 13 => Position.new(14, 277, false), # Brancos
26
+ 14 => Position.new(15, 6, true, '1'), # Sequencial de Regsitro
25
27
  })
26
28
  end
27
29
 
28
30
  #-------------------------------------------------------------------
29
31
  #-------------------------------------------------------------------
30
32
  # Gerais
31
- def process_section file
32
- self.set_codigo_remessa file[1..1]
33
- self.set_codigo_convenio file[2..21]
34
- self.set_nome_empresa file[22..41]
35
- self.set_codigo_banco file[42..44]
36
- self.set_nome_banco file[45..64]
37
- self.set_data_geracao file[65..72]
38
- self.set_numero_sequencial file[73..78]
39
- self.set_versao_layout file[79..80]
40
- self.set_identificacao_servico file[81..99]
41
- self.set_reservado file[98..149]
42
- end
43
-
44
- #-------------------------------------------------------------------
45
- #-------------------------------------------------------------------
46
- # Validações
47
- def is_valid?
48
- result = (self.get_codigo_remessa > 0 and
49
- self.get_codigo_convenio.length > 0 and
50
- self.get_nome_empresa.length > 0 and
51
- self.get_codigo_banco > 0 and
52
- self.get_nome_banco.length > 0 and
53
- !self.get_data_geracao.nil? and
54
- self.get_numero_sequencial > 0 and
55
- self.get_versao_layout > 0 and
56
- self.get_identificacao_servico.length > 0)
33
+ def process_section(file)
34
+ self.set_id_registro (file[1..1])
35
+ self.set_codigo_remessa (file[2..2])
36
+ self.set_literal (file[3..9])
37
+ self.set_codigo_servico (file[10..11])
38
+ self.set_servico (file[12..26])
39
+ self.set_codigo_empresa (file[27..46])
40
+ self.set_nome_empresa (file[47..76])
41
+ self.set_codigo_banco (file[77..79])
42
+ self.set_nome_banco (file[80..94])
43
+ self.set_data_geracao (file[95..100])
44
+ self.set_branco_1 (file[101..108])
45
+ self.set_id_sistema (file[109..110])
46
+ self.set_seq_arquivo (file[111..117])
47
+ self.set_branco_2 (file[118..394])
48
+ self.set_seq_registro (file[395..400])
57
49
  end
58
50
 
59
51
  #-------------------------------------------------------------------
60
52
  #-------------------------------------------------------------------
61
- # Getters
62
- def get_codigo_remessa
63
- self.get_section_value(1).to_i
64
- end
65
-
66
- def get_codigo_convenio
67
- self.get_section_value(2)
68
- end
53
+ # Setters
54
+ def set_id_registro code
55
+ code = code.to_i
69
56
 
70
- def get_nome_empresa
71
- self.get_section_value(3)
57
+ unless code
58
+ self.set_section_value(0, code)
59
+ else
60
+ raise
61
+ end
72
62
  end
73
63
 
74
- def get_codigo_banco
75
- self.get_section_value(4).to_i
76
- end
64
+ def set_codigo_remessa code
65
+ code = code.to_s
77
66
 
78
- def get_nome_banco
79
- self.get_section_value(5)
67
+ if code.length >= 1
68
+ self.set_section_value(1, code)
69
+ else
70
+ raise
71
+ end
80
72
  end
81
73
 
82
- def get_data_geracao
83
- data = self.get_section_value(6)
84
- Date.new(data[0..3].to_i, data[4..5].to_i, data[6..7].to_i)
85
- end
74
+ def set_literal literal
75
+ nome = literal.to_s
86
76
 
87
- def get_numero_sequencial
88
- data = self.get_section_value(7).to_i
77
+ if nome.to_s.length > 0
78
+ self.set_section_value(2, nome)
79
+ else
80
+ raise
81
+ end
89
82
  end
90
83
 
91
- def get_versao_layout
92
- data = self.get_section_value(8).to_i
93
- end
84
+ def set_codigo_servico codigo
85
+ codigo = codigo.to_i
94
86
 
95
- def get_identificacao_servico
96
- data = self.get_section_value(9)
87
+ if codigo > 0
88
+ self.set_section_value(3, codigo)
89
+ else
90
+ raise
91
+ end
97
92
  end
98
93
 
99
- #-------------------------------------------------------------------
100
- #-------------------------------------------------------------------
101
- # Setters
102
- def set_codigo_remessa code
103
- code = code.to_i
94
+ def set_servico nome
95
+ nome = nome.to_s
104
96
 
105
- if code == 1 or code == 2
106
- self.set_section_value(1, code)
97
+ if nome.to_s.length > 0
98
+ self.set_section_value(4, nome)
107
99
  else
108
- raise "#{get_id}: 1 = Remessa - Enviado pela Empresa para o Banco
109
- 2 = Retorno - Enviado pelo Banco para a Empresa
110
- Valor: #{code}"
100
+ raise
111
101
  end
112
102
  end
113
103
 
114
- def set_codigo_convenio code
115
- code = code.to_s
116
-
117
- if !code.nil? and
118
- (code.length > 0 and code.length <= 20)
104
+ def set_codigo_empresa codigo
105
+ begin
106
+ if codigo.length == 20
107
+ self.set_section_value(5, codigo)
108
+ else
109
+ raise
110
+ end
119
111
 
120
- self.set_section_value(2, code)
121
- else
122
- raise "#{get_id}: Código atribuído pelo Banco, para seu controle interno.
123
- Este código será informado à Empresa, pelo Banco, antes
124
- da implantação do serviço de débito automático.
125
- Valor: #{code}"
112
+ rescue
113
+ raise
126
114
  end
127
115
  end
128
116
 
129
117
  def set_nome_empresa nome
130
118
  nome = nome.to_s
131
119
 
132
- if nome.to_s.length > 0
133
- self.set_section_value(3, nome)
120
+ if nome
121
+ self.set_section_value(6, nome)
134
122
  else
135
- raise "#{get_id}: Nome da Empresa não pode estar vazio"
123
+ raise
136
124
  end
137
125
  end
138
126
 
@@ -140,29 +128,29 @@ class Cnab4000 < FormatSection
140
128
  codigo = codigo.to_i
141
129
 
142
130
  if codigo > 0
143
- self.set_section_value(4, codigo)
131
+ self.set_section_value(7, codigo)
144
132
  else
145
- raise "#{get_id}: Código do Banco não pode estar vazio"
133
+ raise
146
134
  end
147
135
  end
148
136
 
149
137
  def set_nome_banco nome
150
138
  nome = nome.to_s
151
139
 
152
- if nome.to_s.length > 0
153
- self.set_section_value(5, nome)
140
+ if nome.length > 0
141
+ self.set_section_value(8, nome)
154
142
  else
155
- raise "#{get_id}: Nome do Banco não pode estar vazio"
143
+ raise
156
144
  end
157
145
  end
158
146
 
159
147
  def set_data_geracao data
160
148
  begin
161
- data = Date.strptime(data, "%Y%m%d") if data.is_a?(String)
162
- real_data = data.strftime("%Y%m%d")
149
+ data = Date.strptime(data, "%d%m%y") if data.is_a?(String)
150
+ real_data = data.strftime('%d%m%y')
163
151
 
164
- if real_data.length == 8
165
- self.set_section_value(6, real_data)
152
+ if real_data.length == 6
153
+ self.set_section_value(9, real_data)
166
154
  else
167
155
  raise
168
156
  end
@@ -173,41 +161,34 @@ class Cnab4000 < FormatSection
173
161
  end
174
162
  end
175
163
 
176
- def set_numero_sequencial numero
177
- numero = numero.to_i
178
-
179
- if numero > 0
180
- self.set_section_value(7, numero)
181
- else
182
- raise "#{get_id}: Número Sequencial deve ser positivo e maior que 0
183
- Valor: #{numero}"
184
- end
164
+ def set_branco_1 branco
165
+ branco = branco.to_s
166
+ self.set_section_value(10, branco)
185
167
  end
186
168
 
187
- def set_versao_layout versao
188
- versao = versao.to_i
189
-
190
- if versao > 0
191
- self.set_section_value(8, versao)
192
- else
193
- raise "#{get_id}: Versão deve ser 05 (a partir de 05.05.2008)
194
- Valor: #{versao}"
195
- end
169
+ def set_id_sistema id
170
+ id = id.to_s
171
+ self.set_section_value(11, id)
196
172
  end
197
173
 
198
- def set_identificacao_servico identificacao
199
- identificacao = identificacao.to_s
174
+ def set_seq_arquivo sequencial
175
+ sequencial = sequencial.to_i
176
+ self.set_section_value(12, sequencial)
177
+ end
200
178
 
201
- if identificacao.length > 0
202
- self.set_section_value(9, identificacao)
203
- else
204
- raise "#{get_id}: Deve ser Débito Automático
205
- Valor: #{identificacao}"
206
- end
179
+ def set_branco_2 branco
180
+ branco = branco.to_s
181
+ self.set_section_value(13, branco)
207
182
  end
208
183
 
209
- def set_reservado reservado
210
- reservado = reservado.to_s
211
- self.set_section_value(10, reservado)
184
+ def set_seq_registro sequencial
185
+ sequencial = sequencial.to_i
186
+ self.set_section_value(14, sequencial)
212
187
  end
213
188
  end
189
+
190
+
191
+
192
+
193
+
194
+