tordist 0.1.7 → 0.2.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 +4 -4
- data/Gemfile.lock +2 -2
- data/Guardfile +1 -0
- data/README.md +13 -0
- data/lib/tordist.rb +2 -0
- data/lib/tordist/base_generator.rb +78 -0
- data/lib/tordist/generator.rb +26 -26
- data/lib/tordist/generator2018.rb +74 -0
- data/lib/tordist/transaction.rb +1 -1
- data/lib/tordist/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74b7a4a2b3f563c666fb2053a1fd11ff7d07b6d022ad8fea2707bf10d5d168dd
|
4
|
+
data.tar.gz: 5f61a923488e53b4b20c8e61d440c53fcb9ff30ff173a62e1b7c56a1737b1506
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6349543cfa561b67459deaa09de702a7ead97be28d0c9c424eedc7b92c854b0296d64812437685e8de29625797b89d7b6b4227b21cf86c342670731a7f051c65
|
7
|
+
data.tar.gz: 5adbdaba0e0f361f502fc2119076ce093d7bacbb32e2744345dbad20d7ab540d1b99752d7389aed161fe1a26415256f60b5d107b98aebe096e4c46059efd8f7c
|
data/Gemfile.lock
CHANGED
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -34,6 +34,19 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
34
34
|
|
35
35
|
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/tordist.
|
36
36
|
|
37
|
+
## Publish
|
38
|
+
|
39
|
+
eh soh vc dar gem build
|
40
|
+
e o nome da gem com .gemspec
|
41
|
+
tipo gem build tordist.gemspec
|
42
|
+
na real o processo eh
|
43
|
+
1) faz a alteracao
|
44
|
+
2) buillda (com o comando acima)
|
45
|
+
3) publica com gem push tordist-0.4.gem (por exemplo)
|
46
|
+
talvez vc tenha q ter permissao no gemspec
|
47
|
+
no gemspec no rubygem (edited)
|
48
|
+
|
37
49
|
## License
|
38
50
|
|
39
51
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
52
|
+
|
data/lib/tordist.rb
CHANGED
@@ -0,0 +1,78 @@
|
|
1
|
+
class Tordist::BaseGenerator
|
2
|
+
|
3
|
+
class GenField
|
4
|
+
|
5
|
+
def value(obj)
|
6
|
+
raise 'not implemented'
|
7
|
+
end
|
8
|
+
|
9
|
+
def value_or_default(obj)
|
10
|
+
v = obj.send(@opts[:prop]) if @opts.has_key? :prop
|
11
|
+
if v != nil
|
12
|
+
return v
|
13
|
+
end
|
14
|
+
if @opts.has_key? :default
|
15
|
+
return @opts[:default]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class FixField
|
21
|
+
def initialize(name, content, type, start_position, end_position, opts)
|
22
|
+
@content = opts[:default]
|
23
|
+
end
|
24
|
+
def value(obj)
|
25
|
+
@content
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class StrField < GenField
|
30
|
+
def initialize(name, description, type, start_position, end_position, opts)
|
31
|
+
@size = end_position - start_position + 1
|
32
|
+
@opts = opts
|
33
|
+
end
|
34
|
+
def value(obj)
|
35
|
+
value_or_default(obj).to_s.ljust(@size, ' ')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class IntField < GenField
|
40
|
+
def initialize(name, description, type, start_position, end_position, opts)
|
41
|
+
@size = end_position - start_position + 1
|
42
|
+
@name = name
|
43
|
+
@opts = opts
|
44
|
+
end
|
45
|
+
def value(obj)
|
46
|
+
#puts "parse #{@name} => #{value_or_default(obj)}" if @opts[:debug]
|
47
|
+
value_or_default(obj).to_i.abs().to_s.rjust(@size, '0')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class DecField < GenField
|
52
|
+
def initialize(name, description, type, start_position, end_position, opts)
|
53
|
+
m = type.match(/N\(([0-9]+)\)V([0-9]+)/)
|
54
|
+
int = m[1].to_i
|
55
|
+
dec = m[2].to_i
|
56
|
+
tot = int + dec + 1
|
57
|
+
@opts = opts
|
58
|
+
@formatter = "%0#{tot}.#{dec}f".to_s
|
59
|
+
end
|
60
|
+
def value(obj)
|
61
|
+
(@formatter % value_or_default(obj).abs()).gsub("." , "")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class SigField < GenField
|
66
|
+
def initialize(name, description, type, start_position, end_position, opts)
|
67
|
+
m = type.match(/N\(([0-9]+)\)V([0-9]+)/)
|
68
|
+
int = m[1].to_i
|
69
|
+
dec = m[2].to_i
|
70
|
+
tot = int + dec + 1
|
71
|
+
@opts = opts
|
72
|
+
@formatter = "%+0#{tot}.#{dec}f".to_s
|
73
|
+
end
|
74
|
+
def value(obj)
|
75
|
+
(@formatter % value_or_default(obj).abs()).gsub("." , "")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/tordist/generator.rb
CHANGED
@@ -11,33 +11,44 @@ class Tordist::Generator
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def header
|
14
|
-
|
14
|
+
"H#{header_date}#{@clearing_id.rjust(5,'0')}#{file_name}#{distribution_type}".ljust(92," ") +"\r\n"
|
15
15
|
end
|
16
16
|
|
17
17
|
def body
|
18
18
|
body_string = ""
|
19
19
|
@transactions.each do |transaction|
|
20
20
|
@transaction = transaction
|
21
|
-
body_string = body_string + "#{type}#{symbol}#{@transaction.broker_alias_code}#{client_digit}#{quantity}#{price}#{@transaction.side}#{liquidation_portfolio}#{nil_user}#{client}#{client_digit}#{liquidation_type}#{bvmf}#{increase_percentage}#{deadline}#{order_number}#{broker}\r\n"
|
21
|
+
body_string = body_string + "#{type}#{symbol}#{@transaction.broker_alias_code.rjust(7,'0')}#{client_digit}#{quantity}#{price}#{@transaction.side}#{liquidation_portfolio}#{nil_user}#{client}#{client_digit}#{liquidation_type}#{bvmf}#{increase_percentage}#{deadline}#{order_number}#{broker}\r\n"
|
22
22
|
end
|
23
23
|
return body_string
|
24
24
|
end
|
25
25
|
|
26
26
|
protected
|
27
|
+
|
28
|
+
def file_name
|
29
|
+
'TORDIST'
|
30
|
+
end
|
31
|
+
|
32
|
+
def distribution_type
|
33
|
+
# 05 – TIPO DA DISTRIBUIÇÃO
|
34
|
+
# “P” – PERCENTUAL, “M” – PREÇO MÉDIO POR LOTE, “D” – PREÇO DIGITADO, “O” – PREÇO MÉDIO POR ORDEM, “R” – PREÇO DIGITADO POR ORDEM.
|
35
|
+
'M'
|
36
|
+
end
|
27
37
|
|
28
38
|
def header_date
|
29
39
|
@transactions.first.date.strftime("%d/%m/%Y")
|
30
40
|
end
|
31
41
|
|
32
42
|
def symbol
|
33
|
-
|
43
|
+
@transaction.symbol.ljust(12, ' ')
|
34
44
|
end
|
35
45
|
|
36
46
|
def quantity
|
37
|
-
|
47
|
+
@transaction.quantity.abs.to_i.to_s.rjust(12, '0')
|
38
48
|
end
|
39
49
|
|
40
50
|
def type
|
51
|
+
# FIXO “B”
|
41
52
|
"B"
|
42
53
|
end
|
43
54
|
|
@@ -46,7 +57,8 @@ class Tordist::Generator
|
|
46
57
|
end
|
47
58
|
|
48
59
|
def price
|
49
|
-
|
60
|
+
# SOMENTE PARA TIPO DE DISTRIBUIÇÃO "D"
|
61
|
+
''.rjust(11,'0')
|
50
62
|
end
|
51
63
|
|
52
64
|
def liquidation_portfolio
|
@@ -54,15 +66,15 @@ class Tordist::Generator
|
|
54
66
|
end
|
55
67
|
|
56
68
|
def nil_user
|
57
|
-
|
69
|
+
''.rjust(5,"0")
|
58
70
|
end
|
59
71
|
|
60
72
|
def client
|
61
|
-
|
73
|
+
''.rjust(9,'0')
|
62
74
|
end
|
63
75
|
|
64
76
|
def client_digit
|
65
|
-
|
77
|
+
'0'
|
66
78
|
end
|
67
79
|
|
68
80
|
def liquidation_type
|
@@ -70,35 +82,23 @@ class Tordist::Generator
|
|
70
82
|
end
|
71
83
|
|
72
84
|
def bvmf
|
73
|
-
|
85
|
+
'1 '
|
74
86
|
end
|
75
87
|
|
76
88
|
def increase_percentage
|
77
|
-
|
89
|
+
'+'.ljust(12,'0')
|
78
90
|
end
|
79
91
|
|
80
92
|
def deadline
|
81
|
-
|
93
|
+
''.rjust(4,'0')
|
82
94
|
end
|
83
95
|
|
84
96
|
def order_number
|
85
|
-
|
97
|
+
''.rjust(9,'0')
|
86
98
|
end
|
87
99
|
|
88
100
|
def broker
|
89
|
-
|
101
|
+
@transaction.broker.rjust(5,'0')
|
90
102
|
end
|
91
103
|
|
92
|
-
|
93
|
-
size = total_size - text.size
|
94
|
-
char_text = ""
|
95
|
-
for i in 1..size
|
96
|
-
char_text = char_text + char
|
97
|
-
end
|
98
|
-
if (direction == :following)
|
99
|
-
return text + char_text
|
100
|
-
elsif (direction == :preceding)
|
101
|
-
return char_text + text
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
104
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
class Tordist::Generator2018 < Tordist::BaseGenerator
|
2
|
+
|
3
|
+
def initialize(clearing_id)
|
4
|
+
@clearing_id = clearing_id.to_s
|
5
|
+
@line_length = 108
|
6
|
+
@layout = [
|
7
|
+
FixField.new('1 - TIPO DE REGISTRO', 'FIXO B', 'X(01)', 1, 1, default: 'B'),
|
8
|
+
StrField.new('2 - CODIGO DE NEGOCIACAO', 'CODIGO DE NEGOCIACAO NA BOVESPA', 'X(12)', 2, 13, prop: :symbol),
|
9
|
+
IntField.new('3 - CODIGO DO CLIENTE', '', 'N(7)', 14, 20, prop: :broker_alias_code),
|
10
|
+
IntField.new('4 - DIGITO DO CLIENTE', '', 'N(01)', 21, 21, default: 0),
|
11
|
+
IntField.new(
|
12
|
+
'5 - QUANTIDADE / PERCENTUAL',
|
13
|
+
'PARA TIPO DE DISTRIBUIÇÃO = “D” OU “M” QUANTIDADE DO CLIENTE; PARA TIPO DE DISTRIBUIÇÃO = “P” PERCENTUAL A SER DISTRIBUIDO PARA O CLIENTE.',
|
14
|
+
'N(12)', 22, 33, prop: :quantity
|
15
|
+
),
|
16
|
+
DecField.new('6 - PRECO DO NEGOCIO', 'SOMENTE PARA TIPO DE DISTRIBUICAO "D"', 'N(09)V02', 34, 44, default: 0),
|
17
|
+
StrField.new('7 - NATUREZA DA OPERACAO', '“C” = COMPRA OU “V” = VENDA', 'X(1)', 45, 45, prop: :side),
|
18
|
+
IntField.new('8 - CARTEIRA DE LIQUIDACAO', '', 'N(3)', 46, 48, default: 216),
|
19
|
+
IntField.new('9 - USUARIO', 'CUSTODIANTE OU USUÁRIO DE ARBITRAGEM', 'N(05)', 49, 53, default: 0),
|
20
|
+
IntField.new('10 - CLIENTE', 'CLIENTE NO CUSTODIANTE OU NO USUÁRIO DA ARBITRAGEM', 'N(9)', 54, 62, default: 0),
|
21
|
+
IntField.new('11 - DÍGITO DO CLIENTE', 'DÍGITO DO CLIENTE NO CUSTODIANTE OU NO USUÁRIO DA ARBITRAGEM', 'N(1)', 63, 63, default: 0),
|
22
|
+
StrField.new('12 - TIPO DE LIQUIDACAO', '“C” = CUSTODIANTE OU “A” = ARBITRAGEM', 'X(1)', 64, 64, default: 'C'),
|
23
|
+
StrField.new('13 - BOLSA DO NEGOCIO', '“1 ” = BOVESPA - "5" = SOMA', 'X(2)', 65, 66, default: '1'),
|
24
|
+
SigField.new(
|
25
|
+
'14 - PERCENTUAL DE ACRÉSCIMO OU REDUÇÃO DO CUSTO DE CLEARING',
|
26
|
+
'A PRIMEIRA POSIÇÃO DEVE CONTER O SINAL DE NEGATIVO PARA DESCONTO E O SINAL DE POSITIVO PARA ACRÉSCIMO. NO CASO DE CUSTO TOTAL UTILIZE SINAL POSITIVO. PARA ASSUMIR O DO CADASTRO DE CLIENTES DO SINACOR, DEIXAR ESTA INFORMAÇÃO EM BRANCO OU PREENCHER COM ZERO',
|
27
|
+
'N(04)V08', 67, 78,
|
28
|
+
default: 0
|
29
|
+
),
|
30
|
+
IntField.new('15 - PRAZO DO TERMO', 'PRAZO DO TERMO. NA AUSÊNCIA DO PRAZO OU NÃO TERMO, PREENCHER COM ZEROS.', 'N(4)', 79, 82, default: 0),
|
31
|
+
IntField.new('16 - NUMERO DA ORDEM', 'NUMERO DA ORDEM A SER DISTRIBUIDA', 'N(09)', 83, 91, default: 0),
|
32
|
+
SigField.new(
|
33
|
+
'17 - PERCENTUAL DE ACRESCIMO OU REDUCAO DO CUSTO DE EXECUCAO',
|
34
|
+
'A PRIMEIRA POSIÇÃO DEVE CONTER O SINAL DE NEGATIVO PARA DESCONTO E O SINAL DE POSITIVO PARA ACRÉSCIMO. NO CASO DE CUSTO TOTAL UTILIZE SINAL POSITIVO. PARA ASSUMIR O DO CADASTRO DE CLIENTES DO SINACOR, DEIXAR ESTA INFORMAÇÃO EM BRANCO OU PREENCHER COM ZERO',
|
35
|
+
'N(04)V08', 92, 103,
|
36
|
+
default: 0
|
37
|
+
),
|
38
|
+
IntField.new('18 - CORRETORA ORIGEM', 'CÓDIGO DO PARTICIPANTE ORIGEM DO NEGÓCIO', 'N(05)', 104, 108, prop: :broker)
|
39
|
+
]
|
40
|
+
end
|
41
|
+
|
42
|
+
def generate(transactions)
|
43
|
+
lines = []
|
44
|
+
lines << header(transactions)
|
45
|
+
transactions.each do |transaction|
|
46
|
+
line = @layout.map {|field| field.value(transaction) }.join
|
47
|
+
if line.length != @line_length
|
48
|
+
raise "line length error: #{line}"
|
49
|
+
end
|
50
|
+
lines << line
|
51
|
+
end
|
52
|
+
lines << ''
|
53
|
+
lines.join("\r\n")
|
54
|
+
end
|
55
|
+
|
56
|
+
def header(transactions)
|
57
|
+
"H#{header_date(transactions)}#{@clearing_id.rjust(5,'0')}#{file_name}#{distribution_type}".ljust(@line_length," ")
|
58
|
+
end
|
59
|
+
|
60
|
+
def header_date(transactions)
|
61
|
+
transactions.first.date.strftime("%d/%m/%Y")
|
62
|
+
end
|
63
|
+
|
64
|
+
def file_name
|
65
|
+
'TORDIST'
|
66
|
+
end
|
67
|
+
|
68
|
+
def distribution_type
|
69
|
+
'M'
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
end
|
data/lib/tordist/transaction.rb
CHANGED
data/lib/tordist/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tordist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Investtools
|
@@ -113,7 +113,9 @@ files:
|
|
113
113
|
- bin/console
|
114
114
|
- bin/setup
|
115
115
|
- lib/tordist.rb
|
116
|
+
- lib/tordist/base_generator.rb
|
116
117
|
- lib/tordist/generator.rb
|
118
|
+
- lib/tordist/generator2018.rb
|
117
119
|
- lib/tordist/transaction.rb
|
118
120
|
- lib/tordist/version.rb
|
119
121
|
- tordist.gemspec
|