gtin2atc 0.1.5 → 0.1.6
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 +13 -5
- data/History.txt +7 -0
- data/lib/gtin2atc/builder.rb +48 -7
- data/lib/gtin2atc/version.rb +1 -1
- data/spec/builder_spec.rb +12 -7
- data/spec/data/swissmedic_package.xlsx +0 -0
- data/spec/spec_helper.rb +1 -1
- metadata +29 -29
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZWFiNWE5NTUwZTA3ZWE3M2RiMjIwYjVmOTdlZDI4Zjc0MjVmMTQ1OA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NmMwYmQwOTA1Y2Y1NzZjMjBmZWNkZGNlMDY0Mjk2NmFhY2YwZWZiNA==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OWUwOTY5MmM3OTFjMGRjYWU5M2U5YTY0ZDg4YmRjMDA0OWM1MzJlNGViNWY4
|
10
|
+
NDI4OGE1ODA2MDFiMGZiYzIwNzRhNmExNzVlNTQzOGFhYTNiNTBiYWViZWVh
|
11
|
+
Mzk1YTE5MTE0MmI5OGY2NjYwYTQyZWU5NWIxNWI1MTcyODkyYjg=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NjU5Y2MzMTYwYjk0MWZlODJmNjNhYTc2ZTNkNjljZDZmMDkzZmFhMDk5ZmM2
|
14
|
+
ZWQxZTA1N2E1MmFlZmZjMDZiYzUwNDRhODI1ODcwYTk3ZGNlZDIzYWFkNjBi
|
15
|
+
ZjNjNGZiNTBjMzM1M2IwZmE5ZGY2YjcxODg2YTRhYTlkY2ZiYzQ=
|
data/History.txt
CHANGED
@@ -1,5 +1,12 @@
|
|
1
|
+
=== 0.1.6 10.03.2015
|
2
|
+
|
3
|
+
* Adapted to changed delimiter
|
4
|
+
* updated EPha URL for wido ATC download.
|
5
|
+
|
1
6
|
=== 0.1.5 04.03.2015
|
2
7
|
|
8
|
+
* Splitted ddd into qty, unit, route of administration
|
9
|
+
* Added exfactory and public price
|
3
10
|
* Added optional second parameter to specify output file
|
4
11
|
* Added output for dosis (name, unit, qty) for mono-preparations
|
5
12
|
|
data/lib/gtin2atc/builder.rb
CHANGED
@@ -15,6 +15,10 @@ module Gtin2atc
|
|
15
15
|
AtcNotInBag = 'atc not in bag'
|
16
16
|
AtcDifferent = 'atc differed'
|
17
17
|
CsvOutputOptions = { :col_sep => ';', :encoding => 'UTF-8'}
|
18
|
+
Mesurements = [ 'g', 'kg', 'l', 'mg', 'ml', 'cm', 'GBq']
|
19
|
+
# see Selection of units of WHO DDD guidelines
|
20
|
+
RouteOfAdministrations = ['Inhal', 'R', 'N', 'O', 'SL', 'P', 'V', 'TD']
|
21
|
+
|
18
22
|
def initialize(opts)
|
19
23
|
Util.set_logging(opts[:log])
|
20
24
|
@output = opts[:output]
|
@@ -38,9 +42,9 @@ module Gtin2atc
|
|
38
42
|
end
|
39
43
|
def epha_atc_extractor
|
40
44
|
data = {}
|
41
|
-
body = open('https://download.epha.ch/
|
45
|
+
body = open('https://download.epha.ch/data/atc/atc.csv').read.force_encoding('UTF-8')
|
42
46
|
Util.debug_msg "epha_atc_extractor is #{body.size} bytes long"
|
43
|
-
csv = CSV.new(body, { :headers => false, :col_sep => '
|
47
|
+
csv = CSV.new(body, { :headers => false, :col_sep => ',' } )
|
44
48
|
csv.to_a.each{
|
45
49
|
|line|
|
46
50
|
data[line[0]] = line[2] if line[2]
|
@@ -137,6 +141,10 @@ module Gtin2atc
|
|
137
141
|
gtin = gtin.to_i
|
138
142
|
item[:gtin] = gtin
|
139
143
|
item[:name] = seq.NameDe + " " + pac.DescriptionDe
|
144
|
+
if pac.Prices
|
145
|
+
item[:exfactory_price] = pac.Prices.ExFactoryPrice.Price if pac.Prices.ExFactoryPrice
|
146
|
+
item[:public_price] = pac.Prices.PublicPrice.Price if pac.Prices.PublicPrice
|
147
|
+
end
|
140
148
|
data[gtin] = item
|
141
149
|
Util.debug_msg "run_bag_extractor add #{item}" if $VERBOSE
|
142
150
|
else
|
@@ -149,12 +157,44 @@ module Gtin2atc
|
|
149
157
|
data
|
150
158
|
end
|
151
159
|
|
160
|
+
# return [qty, unit, roa] for simple, valid ddd
|
161
|
+
# return [nil, nil, full_text] for structured DDDs like Standarddosis: 10 Tabletten oder 50 ml Mixtur
|
162
|
+
# a simple ddd is valid if meets the following three criteria
|
163
|
+
# first part is a float value
|
164
|
+
# second part is a unit e.g. ml
|
165
|
+
# third part is one or several (separated by ',') RouteOfAdministrations
|
166
|
+
def get_valid_ddd(full_text)
|
167
|
+
result =[nil, nil, full_text]
|
168
|
+
return result unless full_text
|
169
|
+
return result if full_text.index(';') # e.g. 0,12 g O,R; 18 mg P; 60 mg SL; 3 mg TD; 50 mg TD Gel; 12 mg P bezogen auf Testosteronundecanoat
|
170
|
+
return result if full_text.index(':') # e.g. Standarddosis: 10 Tabletten oder 50 ml Mixture
|
171
|
+
if full_text
|
172
|
+
parts = full_text.split(' ')
|
173
|
+
return result if parts.size > 3
|
174
|
+
qty = parts[0] ? parts[0].sub(',', '.').to_f : ''
|
175
|
+
if Mesurements.index(parts[1]) and qty != 0.0
|
176
|
+
roas = parts[2].split(',')
|
177
|
+
valid = roas.size > 0
|
178
|
+
roas.each{
|
179
|
+
|roa|
|
180
|
+
unless RouteOfAdministrations.index(roa)
|
181
|
+
valid = false
|
182
|
+
break
|
183
|
+
end
|
184
|
+
}
|
185
|
+
result = [qty, parts[1], parts[2]] if valid
|
186
|
+
end
|
187
|
+
end
|
188
|
+
result
|
189
|
+
end
|
190
|
+
|
152
191
|
def run(gtins_to_parse=[], output_name=nil)
|
153
192
|
Util.debug_msg("run #{gtins_to_parse}")
|
154
193
|
Util.debug_msg("@use_swissindex true")
|
155
194
|
@oddb_calc = oddb_calc_xml_extractor
|
156
195
|
@data_epha_atc = epha_atc_extractor
|
157
196
|
@data_swissindex = swissindex_xml_extractor
|
197
|
+
@data_bag = bag_xml_extractor
|
158
198
|
emitted_ids = []
|
159
199
|
if @do_compare
|
160
200
|
output_name = File.join(Util.get_archive, 'gtin2atc_swissindex.csv')
|
@@ -163,21 +203,23 @@ module Gtin2atc
|
|
163
203
|
output_name = File.join(Util.get_archive, output_name)
|
164
204
|
end
|
165
205
|
CSV.open(output_name,'w+', CsvOutputOptions) do |csvfile|
|
166
|
-
csvfile << ["gtin", "ATC", 'pharmacode', 'description', '
|
206
|
+
csvfile << ["gtin", "ATC", 'pharmacode', 'description', 'exfactory_price', 'public_price', 'selling units', 'name', 'qty', 'unit', 'ddd:qty', 'ddd:unit', 'ddd:full_text']
|
167
207
|
@data_swissindex.sort.each do |gtin, item|
|
168
208
|
if @do_compare or gtins_to_parse.size == 0 or
|
169
209
|
gtins_to_parse.index(gtin.to_s) or
|
170
210
|
gtins_to_parse.index(item[:pharmacode].to_s)
|
171
211
|
atc = item[:atc_code]
|
172
|
-
ddd = @data_epha_atc[atc]
|
212
|
+
ddd = get_valid_ddd(@data_epha_atc[atc])
|
173
213
|
selling_units = @oddb_calc[gtin] ? @oddb_calc[gtin][:SELLING_UNITS] : nil
|
214
|
+
exfactory_price = @data_bag[gtin] ? @data_bag[gtin][:exfactory_price] : nil
|
215
|
+
public_price = @data_bag[gtin] ? @data_bag[gtin][:public_price] : nil
|
174
216
|
emitted_ids << gtin.to_i if gtin
|
175
217
|
emitted_ids << item[:pharmacode].to_i if item[:pharmacode]
|
176
218
|
if @oddb_calc[gtin] and @oddb_calc[gtin][:COMPOSITIONS]
|
177
219
|
comp = @oddb_calc[gtin][:COMPOSITIONS].COMPONENT.first
|
178
|
-
csvfile << [gtin, atc, item[:pharmacode], item[:description],
|
220
|
+
csvfile << [gtin, atc, item[:pharmacode], item[:description], exfactory_price, public_price, selling_units, comp.NAME, comp.QTY, comp.UNIT, ddd].flatten
|
179
221
|
else
|
180
|
-
csvfile << [gtin, atc, item[:pharmacode], item[:description],
|
222
|
+
csvfile << [gtin, atc, item[:pharmacode], item[:description], exfactory_price, public_price, selling_units, nil, nil, nil, ddd].flatten
|
181
223
|
end
|
182
224
|
end
|
183
225
|
end
|
@@ -194,7 +236,6 @@ module Gtin2atc
|
|
194
236
|
msg = "swissindex: Could not find info for #{missing_ids.size} missing ids see file pharmacode_gtin_not_found.txt"
|
195
237
|
Util.debug_msg(msg)
|
196
238
|
return unless @do_compare
|
197
|
-
@data_bag = bag_xml_extractor
|
198
239
|
output_name = File.join(Util.get_archive, 'gtin2atc_bag.csv')
|
199
240
|
CSV.open(output_name,'w+', CsvOutputOptions) do |csvfile|
|
200
241
|
csvfile << ["gtin", "ATC", 'description']
|
data/lib/gtin2atc/version.rb
CHANGED
data/spec/builder_spec.rb
CHANGED
@@ -21,6 +21,7 @@ end
|
|
21
21
|
describe Gtin2atc::Builder do
|
22
22
|
include ServerMockHelper
|
23
23
|
CSV_NAME = 'gtin2atc.csv'
|
24
|
+
FERRO = '7680316440115;B03AA07;20244;FERRO-GRADUMET Depottabl;;;30;Ferrum(ii);105.0;mg;;;0,2 g O Fe2+'
|
24
25
|
before(:each) do
|
25
26
|
@savedDir = Dir.pwd
|
26
27
|
FileUtils.makedirs Gtin2atc::WorkDir
|
@@ -50,8 +51,8 @@ describe Gtin2atc::Builder do
|
|
50
51
|
inhalt = IO.readlines(filename)
|
51
52
|
/^\d{13};\w{4}/.should match inhalt[1]
|
52
53
|
# Packungsgrösse, Dosierung, DDD, Route of Administration
|
53
|
-
/^gtin;ATC;pharmacode;description;
|
54
|
-
|
54
|
+
/^gtin;ATC;pharmacode;description;exfactory_price;public_price;selling units;name;qty;unit;ddd:qty;ddd:unit;ddd:full_text/.should match inhalt.first
|
55
|
+
IO.read(filename).index(FERRO).should_not == nil
|
55
56
|
end
|
56
57
|
|
57
58
|
context 'when 20273 41803 (Pharmacodes) is given' do
|
@@ -101,8 +102,8 @@ describe Gtin2atc::Builder do
|
|
101
102
|
check_csv(CSV_NAME)
|
102
103
|
inhalt = IO.readlines(CSV_NAME)
|
103
104
|
inhalt.size.should eq 2+1 # one header lines + two items
|
104
|
-
inhalt[1].chomp.should eq '7680147690482;N07BC02;41803;KETALGIN Inj Lös 10 mg/ml;
|
105
|
-
inhalt[2].chomp.should eq '7680353660163;B03AE10;20273;KENDURAL Depottabl
|
105
|
+
inhalt[1].chomp.should eq '7680147690482;N07BC02;41803;KETALGIN Inj Lös 10 mg/ml;;;;;;;25.0;mg;O,P'
|
106
|
+
inhalt[2].chomp.should eq '7680353660163;B03AE10;20273;KENDURAL Depottabl;;;;;;;;;'
|
106
107
|
end
|
107
108
|
end
|
108
109
|
|
@@ -208,10 +209,14 @@ describe Gtin2atc::Builder do
|
|
208
209
|
it 'should contain dose for FERRO-GRADUMET Depottab' do
|
209
210
|
oddb_calc_xml = File.expand_path(File.join( __FILE__, '../data/oddb_calc.xml'))
|
210
211
|
FileUtils.cp(oddb_calc_xml, Gtin2atc::WorkDir, :verbose => false)
|
211
|
-
|
212
|
+
# buildr_capture(:stdout){ cli.run() }
|
213
|
+
cli.run()
|
212
214
|
check_csv(CSV_NAME)
|
213
|
-
inhalt = IO.
|
214
|
-
inhalt
|
215
|
+
inhalt = IO.read(CSV_NAME)
|
216
|
+
puts inhalt
|
217
|
+
inhalt.index(FERRO).should_not == nil
|
218
|
+
inhalt.index('7680291520390;N02BE01;31532;BEN-U-RON Supp 250 mg Kind;;;;;;;;;"3 g O,P,R; 0,75 g O Kinder DDD; 0,375 g R Säuglings DDD; 0,75 g R Kinder DDD"').should_not == nil
|
219
|
+
inhalt.index('7680147700112;N07BC02;41826;KETALGIN Tabl 5 mg;;;;;;;25.0;mg;O,P').should_not == nil
|
215
220
|
end
|
216
221
|
end
|
217
222
|
|
Binary file
|
data/spec/spec_helper.rb
CHANGED
@@ -53,7 +53,7 @@ module ServerMockHelper
|
|
53
53
|
end
|
54
54
|
def setup_epha_atc_server_mock
|
55
55
|
# zip
|
56
|
-
stub_url = 'https://download.epha.ch/
|
56
|
+
stub_url = 'https://download.epha.ch/data/atc/atc.csv'
|
57
57
|
stub_response = File.read(File.join(Gtin2atc::SpecData, 'atc.csv'))
|
58
58
|
stub_request(:get, stub_url).
|
59
59
|
with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
|
metadata
CHANGED
@@ -1,167 +1,167 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gtin2atc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Niklaus Giger, Zeno R.R. Davatz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.1.6
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.1.6
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mechanize
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 2.5.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 2.5.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 1.5.10
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 1.5.10
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: savon
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 2.4.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.4.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rubyXL
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 3.3.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 3.3.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: sax-machine
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: 1.3.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 1.3.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: bundler
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ! '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ! '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ! '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ! '>='
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rspec
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ! '>='
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ! '>='
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: webmock
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ! '>='
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ! '>='
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: rdoc
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - ! '>='
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - ! '>='
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
description: gtin2atc file with gtin, atc_code, pharmanr from input file with gtin
|
@@ -171,8 +171,8 @@ executables:
|
|
171
171
|
extensions: []
|
172
172
|
extra_rdoc_files: []
|
173
173
|
files:
|
174
|
-
-
|
175
|
-
-
|
174
|
+
- .gitignore
|
175
|
+
- .travis.yml
|
176
176
|
- Gemfile
|
177
177
|
- History.txt
|
178
178
|
- LICENSE
|
@@ -207,17 +207,17 @@ require_paths:
|
|
207
207
|
- lib
|
208
208
|
required_ruby_version: !ruby/object:Gem::Requirement
|
209
209
|
requirements:
|
210
|
-
- -
|
210
|
+
- - ! '>='
|
211
211
|
- !ruby/object:Gem::Version
|
212
212
|
version: '0'
|
213
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
214
214
|
requirements:
|
215
|
-
- -
|
215
|
+
- - ! '>='
|
216
216
|
- !ruby/object:Gem::Version
|
217
217
|
version: '0'
|
218
218
|
requirements: []
|
219
219
|
rubyforge_project:
|
220
|
-
rubygems_version: 2.
|
220
|
+
rubygems_version: 2.3.0
|
221
221
|
signing_key:
|
222
222
|
specification_version: 4
|
223
223
|
summary: gtin2atc creates csv files with GTIN and ATC.
|