formatos-febraban 0.2.20 → 0.2.21

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: c0da9166d98dadf6187fa6f4eb64d984d1f2bfbf
4
- data.tar.gz: 20b13f2084caa27e17cc421afa2375cfee99e467
3
+ metadata.gz: 25bf282dc098733014bb51215dcf2d5bb4b8db8e
4
+ data.tar.gz: 48b1658b38d7a281ea933b1b700add9adef46d14
5
5
  SHA512:
6
- metadata.gz: 863dee7aa72412c878acea5a24e74ce59a1942ec7dbe1ec192d183f527264c696c2559b751cfe0b0dca6cc2dfaf225ab109766b2b426c2df24d8d73e0d1b14be
7
- data.tar.gz: f51d1fdd19d904e2c69d16bbab067d48c248c49a31322f591e4c2a008a525a4ff010ebba62557007eb5d80e058e204c4923189c5a819bb789f0b69912c0daa10
6
+ metadata.gz: b9e2885a776fc3ed0ea6dc3d747414ef4d115ad5a43aebe850bae01fc02aca53a20da619ef32ce419b72d38d3e1441d679e7a736ee28bab32575bd412cf47472
7
+ data.tar.gz: 31a6e03e73a6310a6c44eb055c619fecd3a578cd9467af6bc03ba11a10ebde74b7f644e094de624088b7c62630302bbdc1392cd8a4e39a0fcc2089f692f040cc
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Settings><!--This file was automatically generated by Ruby plugin.
3
+ You are allowed to:
4
+ 1. Remove rake task
5
+ 2. Add existing rake tasks
6
+ To add existing rake tasks automatically delete this file and reload the project.
7
+ --><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build formatos-febraban-0.2.20.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Build and install formatos-febraban-0.2.20.gem into system gems" fullCmd="install" taksId="install" /><RakeTask description="Create tag v0.2.20 and build and push formatos-febraban-0.2.20.gem to Rubygems" fullCmd="release" taksId="release" /><RakeGroup description="" fullCmd="" taksId="release"><RakeTask description="" fullCmd="release:guard_clean" taksId="guard_clean" /><RakeTask description="" fullCmd="release:rubygem_push" taksId="rubygem_push" /><RakeTask description="" fullCmd="release:source_control_push" taksId="source_control_push" /></RakeGroup></RakeGroup></Settings>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
4
+ </project>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="FacetManager">
4
+ <facet type="gem" name="Ruby Gem">
5
+ <configuration>
6
+ <option name="GEM_APP_ROOT_PATH" value="$MODULE_DIR$" />
7
+ <option name="GEM_APP_TEST_PATH" value="" />
8
+ <option name="GEM_APP_LIB_PATH" value="$MODULE_DIR$/lib" />
9
+ </configuration>
10
+ </facet>
11
+ </component>
12
+ <component name="NewModuleRootManager">
13
+ <content url="file://$MODULE_DIR$" />
14
+ <orderEntry type="inheritedJdk" />
15
+ <orderEntry type="sourceFolder" forTests="false" />
16
+ <orderEntry type="library" scope="PROVIDED" name="rake (v10.4.2, rbenv: 2.0.0-p643) [gem]" level="application" />
17
+ </component>
18
+ </module>
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="DaemonCodeAnalyzer">
4
+ <disable_hints />
5
+ </component>
6
+ <component name="DependencyValidationManager">
7
+ <option name="SKIP_IMPORT_STATEMENTS" value="false" />
8
+ </component>
9
+ <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
10
+ <component name="ProjectLevelVcsManager" settingsEditedManually="false">
11
+ <OptionsSetting value="true" id="Add" />
12
+ <OptionsSetting value="true" id="Remove" />
13
+ <OptionsSetting value="true" id="Checkout" />
14
+ <OptionsSetting value="true" id="Update" />
15
+ <OptionsSetting value="true" id="Status" />
16
+ <OptionsSetting value="true" id="Edit" />
17
+ <ConfirmationsSetting value="0" id="Add" />
18
+ <ConfirmationsSetting value="0" id="Remove" />
19
+ </component>
20
+ <component name="ProjectModuleManager">
21
+ <modules />
22
+ </component>
23
+ <component name="ProjectRootManager" version="2" project-jdk-name="rbenv: 2.0.0-p643" project-jdk-type="RUBY_SDK" />
24
+ <component name="RunManager">
25
+ <list size="0" />
26
+ </component>
27
+ </project>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/formatos-febraban.iml" filepath="$PROJECT_DIR$/.idea/formatos-febraban.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
@@ -0,0 +1,5 @@
1
+ <component name="DependencyValidationManager">
2
+ <state>
3
+ <option name="SKIP_IMPORT_STATEMENTS" value="false" />
4
+ </state>
5
+ </component>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="" vcs="" />
5
+ </component>
6
+ </project>
@@ -0,0 +1,49 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ChangeListManager">
4
+ <option name="TRACKING_ENABLED" value="true" />
5
+ <option name="SHOW_DIALOG" value="false" />
6
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
7
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
8
+ <option name="LAST_RESOLUTION" value="IGNORE" />
9
+ </component>
10
+ <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
11
+ <component name="CreatePatchCommitExecutor">
12
+ <option name="PATCH_PATH" value="" />
13
+ </component>
14
+ <component name="DaemonCodeAnalyzer">
15
+ <disable_hints />
16
+ </component>
17
+ <component name="ProjectLevelVcsManager" settingsEditedManually="false">
18
+ <OptionsSetting value="true" id="Add" />
19
+ <OptionsSetting value="true" id="Remove" />
20
+ <OptionsSetting value="true" id="Checkout" />
21
+ <OptionsSetting value="true" id="Update" />
22
+ <OptionsSetting value="true" id="Status" />
23
+ <OptionsSetting value="true" id="Edit" />
24
+ <ConfirmationsSetting value="0" id="Add" />
25
+ <ConfirmationsSetting value="0" id="Remove" />
26
+ </component>
27
+ <component name="RunManager">
28
+ <list size="0" />
29
+ </component>
30
+ <component name="ShelveChangesManager" show_recycled="false" />
31
+ <component name="TaskManager">
32
+ <task active="true" id="Default" summary="Default task">
33
+ <option name="number" value="Default" />
34
+ </task>
35
+ <servers />
36
+ </component>
37
+ <component name="VcsContentAnnotationSettings">
38
+ <option name="myLimit" value="2678400000" />
39
+ </component>
40
+ <component name="VcsManagerConfiguration">
41
+ <option name="myTodoPanelSettings">
42
+ <TodoPanelSettings />
43
+ </option>
44
+ </component>
45
+ <component name="XDebuggerManager">
46
+ <breakpoint-manager />
47
+ <watches-manager />
48
+ </component>
49
+ </project>
@@ -0,0 +1,136 @@
1
+
2
+ class Cnab400
3
+ require 'date'
4
+
5
+ VERSAO = "05"
6
+
7
+ # Carrega todas as dependências de Layout
8
+ Dir[File.join(File.dirname(__FILE__), '../..', 'base', '**/*.rb')].sort.each do |file|
9
+ require file
10
+ end
11
+
12
+ # 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
19
+
20
+ #-------------------------------------------------------------------
21
+ #-------------------------------------------------------------------
22
+ # Construtor
23
+ def initialize file = ""
24
+ @sections = []
25
+
26
+ if file.length > 0
27
+ self.process_file file
28
+ end
29
+ end
30
+
31
+ #-------------------------------------------------------------------
32
+ #-------------------------------------------------------------------
33
+ # Geral
34
+ protected
35
+ def add_section section
36
+ if section.is_valid?
37
+ self.sections << section
38
+ else
39
+ raise "Seção #{section.get_id} está inválida:
40
+ #{section.errors.inspect}
41
+ #{section.to_s}"
42
+ end
43
+ end
44
+
45
+ def add_section_from_business section
46
+ if section.is_empresa?
47
+ self.add_section section
48
+ self
49
+ else
50
+ raise "Seção #{section.get_id} não pode ser criada pela Empresa"
51
+ end
52
+ end
53
+
54
+ #-------------------------------------------------------------------
55
+ #-------------------------------------------------------------------
56
+ # Criação das Partes
57
+ public
58
+
59
+ # Seção 0
60
+ def create_header(codigo_remessa, codigo_convenio, nome_empresa,
61
+ codigo_banco, nome_banco, numero_sequencial)
62
+
63
+ if self.get_header.nil?
64
+ section = self.get_new_section("0")
65
+
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 ""
76
+
77
+ self.add_section_from_business section
78
+
79
+ else
80
+ raise "Header já declarado!"
81
+ end
82
+ end
83
+
84
+ #-------------------------------------------------------------------
85
+ #-------------------------------------------------------------------
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?
90
+ end
91
+
92
+ public
93
+ def is_valid?
94
+ if self.layout_empresa?
95
+ raise "Layout de Empresa inválido!" unless self.is_empresa_valid?
96
+
97
+ elsif self.layout_banco?
98
+ raise "Layout de Banco inválido!" unless self.is_banco_valid?
99
+
100
+ else
101
+ raise "Código de Remessa desconhecido: #{codigo_remessa}"
102
+ end
103
+
104
+ result = self.is_sections_valid?
105
+ end
106
+
107
+ #-------------------------------------------------------------------
108
+ #-------------------------------------------------------------------
109
+ # Getters
110
+ public
111
+ def get_nome_arquivo
112
+ data_geracao = Date.new
113
+ "CD#{data_geracao.day}#{data_geracao.month}00.REM"
114
+ end
115
+
116
+ #--------------------------------------------------------------------------------------
117
+ #--------------------------------------------------------------------------------------
118
+ # Carregamento de Arquivo
119
+ protected
120
+ def get_new_section section_type
121
+ case section_type
122
+ when "0"
123
+ Cnab4000.new(self)
124
+ when "1"
125
+ Cnab4001.new(self)
126
+ when "2"
127
+ Cnab4002.new(self)
128
+ when "3"
129
+ Cnab4003.new(self)
130
+ when "7"
131
+ Cnab4007.new(self)
132
+ when "9"
133
+ Cnab4009.new(self)
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,212 @@
1
+
2
+ #-------------------------------------------------------------------
3
+ #-------------------------------------------------------------------
4
+ # Header - Empresa e Banco
5
+ class Cnab4000 < FormatSection
6
+ require 'date'
7
+
8
+ ID_SERVICO = "DÉBITO AUTOMÁTICO"
9
+
10
+ def initialize master
11
+ super(master, true, true, false)
12
+
13
+ @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
25
+ })
26
+ end
27
+
28
+ #-------------------------------------------------------------------
29
+ #-------------------------------------------------------------------
30
+ # 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)
57
+ end
58
+
59
+ #-------------------------------------------------------------------
60
+ #-------------------------------------------------------------------
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
69
+
70
+ def get_nome_empresa
71
+ self.get_section_value(3)
72
+ end
73
+
74
+ def get_codigo_banco
75
+ self.get_section_value(4).to_i
76
+ end
77
+
78
+ def get_nome_banco
79
+ self.get_section_value(5)
80
+ end
81
+
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
86
+
87
+ def get_numero_sequencial
88
+ data = self.get_section_value(7).to_i
89
+ end
90
+
91
+ def get_versao_layout
92
+ data = self.get_section_value(8).to_i
93
+ end
94
+
95
+ def get_identificacao_servico
96
+ data = self.get_section_value(9)
97
+ end
98
+
99
+ #-------------------------------------------------------------------
100
+ #-------------------------------------------------------------------
101
+ # Setters
102
+ def set_codigo_remessa code
103
+ code = code.to_i
104
+
105
+ if code == 1 or code == 2
106
+ self.set_section_value(1, code)
107
+ 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}"
111
+ end
112
+ end
113
+
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)
119
+
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}"
126
+ end
127
+ end
128
+
129
+ def set_nome_empresa nome
130
+ nome = nome.to_s
131
+
132
+ if nome.to_s.length > 0
133
+ self.set_section_value(3, nome)
134
+ else
135
+ raise "#{get_id}: Nome da Empresa não pode estar vazio"
136
+ end
137
+ end
138
+
139
+ def set_codigo_banco codigo
140
+ codigo = codigo.to_i
141
+
142
+ if codigo > 0
143
+ self.set_section_value(4, codigo)
144
+ else
145
+ raise "#{get_id}: Código do Banco não pode estar vazio"
146
+ end
147
+ end
148
+
149
+ def set_nome_banco nome
150
+ nome = nome.to_s
151
+
152
+ if nome.to_s.length > 0
153
+ self.set_section_value(5, nome)
154
+ else
155
+ raise "#{get_id}: Nome do Banco não pode estar vazio"
156
+ end
157
+ end
158
+
159
+ def set_data_geracao data
160
+ begin
161
+ real_data = data.strftime("%Y%m%d")
162
+
163
+ if real_data.length == 8
164
+ self.set_section_value(6, real_data)
165
+ else
166
+ raise
167
+ end
168
+
169
+ rescue
170
+ raise "#{get_id}: Data de Geração Inválida
171
+ Valor: #{data}"
172
+ end
173
+ end
174
+
175
+ def set_numero_sequencial numero
176
+ numero = numero.to_i
177
+
178
+ if numero > 0
179
+ self.set_section_value(7, numero)
180
+ else
181
+ raise "#{get_id}: Número Sequencial deve ser positivo e maior que 0
182
+ Valor: #{numero}"
183
+ end
184
+ end
185
+
186
+ def set_versao_layout versao
187
+ versao = versao.to_i
188
+
189
+ if versao > 0
190
+ self.set_section_value(8, versao)
191
+ else
192
+ raise "#{get_id}: Versão deve ser 05 (a partir de 05.05.2008)
193
+ Valor: #{versao}"
194
+ end
195
+ end
196
+
197
+ def set_identificacao_servico identificacao
198
+ identificacao = identificacao.to_s
199
+
200
+ if identificacao.length > 0
201
+ self.set_section_value(9, identificacao)
202
+ else
203
+ raise "#{get_id}: Deve ser Débito Automático
204
+ Valor: #{identificacao}"
205
+ end
206
+ end
207
+
208
+ def set_reservado reservado
209
+ reservado = reservado.to_s
210
+ self.set_section_value(10, reservado)
211
+ end
212
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,5 +1,5 @@
1
1
  module Formatos
2
2
  module Febraban
3
- VERSION = "0.2.20"
3
+ VERSION = "0.2.21"
4
4
  end
5
5
  end
@@ -158,6 +158,7 @@ class Febraban150A < FormatSection
158
158
 
159
159
  def set_data_geracao data
160
160
  begin
161
+ data = Date.strptime(data, "%Y%m%d") if data.is_a?(String)
161
162
  real_data = data.strftime("%Y%m%d")
162
163
 
163
164
  if real_data.length == 8
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formatos-febraban
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.20
4
+ version: 0.2.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - josé Ricardo Almeida
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-21 00:00:00.000000000 Z
11
+ date: 2015-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -46,6 +46,14 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - ".gitignore"
49
+ - ".idea/.rakeTasks"
50
+ - ".idea/encodings.xml"
51
+ - ".idea/formatos-febraban.iml"
52
+ - ".idea/misc.xml"
53
+ - ".idea/modules.xml"
54
+ - ".idea/scopes/scope_settings.xml"
55
+ - ".idea/vcs.xml"
56
+ - ".idea/workspace.xml"
49
57
  - ".rspec"
50
58
  - ".travis.yml"
51
59
  - CODE_OF_CONDUCT.md
@@ -59,6 +67,13 @@ files:
59
67
  - bin/console
60
68
  - bin/setup
61
69
  - formatos-febraban.gemspec
70
+ - lib/formatos/cnab400/cnab_400.rb
71
+ - lib/formatos/cnab400/cnab_400_0.rb
72
+ - lib/formatos/cnab400/cnab_400_1.rb
73
+ - lib/formatos/cnab400/cnab_400_2.rb
74
+ - lib/formatos/cnab400/cnab_400_3.rb
75
+ - lib/formatos/cnab400/cnab_400_7.rb
76
+ - lib/formatos/cnab400/cnab_400_9.rb
62
77
  - lib/formatos/febraban.rb
63
78
  - lib/formatos/febraban/version.rb
64
79
  - lib/formatos/febraban150/febraban_150.rb