gtin2atc 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/History.txt +4 -0
- data/lib/gtin2atc/builder.rb +32 -7
- data/lib/gtin2atc/version.rb +1 -1
- data/spec/builder_spec.rb +28 -3
- data/spec/data/atc.csv +18 -0
- data/spec/data/bluecare.pharmacode +2265 -0
- data/spec/spec_helper.rb +9 -0
- metadata +32 -28
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YmZlMDkxMWRiM2VkNTY0MDZiMjk0YWFkYjM0MGY3ZDFjMDEzMTBlYw==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 88ed6172e67a5d527bfa4c4f55fe1d49d4af214f
|
4
|
+
data.tar.gz: b7daf74015a79a3f797037eaa0cc8c45f84ec3b8
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NmEzMDI1NjYxNzk0Njg2MDhhYTQ4ZDNkZDNiZTUyYzE0MTRiODdiZmYxODc5
|
11
|
-
NjJhMDk3MDY1ODRlMzBmY2YxNzUyMTM4ZDQwNzZjNzNjMDQ0MTY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZDk1NDkxZmY0NGY3OTZjYzY3MTYwMzFmMmFkMjQ3OTExZmRmZWE2YTcxZDQ0
|
14
|
-
MmUxNWE4OGRiOGRiZmIzMGEyNGQwYmYzMTA1NWQzYmEwMTBiODFkNTcxNmVj
|
15
|
-
MWE1YzAyNDg3OTgyYjJlMTg4ZmQ3YTI4ZjhhOWNhYTExNjllMGU=
|
6
|
+
metadata.gz: a98367cbe6b716cee86116d9e100b7ea0fd8c44a85e5b7bb633d292f0f04de78d907865c9eebddf9fb74609161dbe3e69464d8353287ffc2f19596e51318a3c7
|
7
|
+
data.tar.gz: a7d711d4fa0305d21540c6445669e09082734a99d0b30b9cfa4f05494ff242cadb365d2d89bc9d46d504a52959c5938e4675e0e435d7f33a43a4c749b180ca0c
|
data/History.txt
CHANGED
data/lib/gtin2atc/builder.rb
CHANGED
@@ -4,6 +4,7 @@ require "gtin2atc/options"
|
|
4
4
|
require "gtin2atc/downloader"
|
5
5
|
require "gtin2atc/xml_definitions"
|
6
6
|
require 'mechanize'
|
7
|
+
require 'open-uri'
|
7
8
|
|
8
9
|
module Gtin2atc
|
9
10
|
class Builder
|
@@ -33,6 +34,18 @@ module Gtin2atc
|
|
33
34
|
end
|
34
35
|
((10-(sum%10))%10).to_s
|
35
36
|
end
|
37
|
+
def epha_atc_extractor
|
38
|
+
data = {}
|
39
|
+
body = open('https://download.epha.ch/cleaned/atc.csv').read.force_encoding('UTF-8')
|
40
|
+
Util.debug_msg "epha_atc_extractor is #{body.size} bytes long"
|
41
|
+
csv = CSV.new(body, { :headers => false, :col_sep => '|' } )
|
42
|
+
csv.to_a.each{
|
43
|
+
|line|
|
44
|
+
data[line[0]] = line[2] if line[2]
|
45
|
+
}
|
46
|
+
Util.debug_msg "epha_atc_extractor extracted #{data.size} items"
|
47
|
+
data
|
48
|
+
end
|
36
49
|
def swissmedic_xls_extractor
|
37
50
|
@swissmedic = SwissmedicDownloader.new
|
38
51
|
filename = @swissmedic.download
|
@@ -111,20 +124,35 @@ module Gtin2atc
|
|
111
124
|
def run(gtins_to_parse=[])
|
112
125
|
Util.debug_msg("run #{gtins_to_parse}")
|
113
126
|
Util.debug_msg("@use_swissindex true")
|
127
|
+
@data_epha_atc = epha_atc_extractor
|
114
128
|
@data_swissindex = swissindex_xml_extractor
|
129
|
+
emitted_ids = []
|
115
130
|
output_name = File.join(Util.get_archive, @do_compare ? 'gtin2atc_swissindex.csv' : 'gtin2atc.csv')
|
116
131
|
CSV.open(output_name,'w+') do |csvfile|
|
117
|
-
csvfile << ["gtin", "ATC", 'pharmacode', 'description']
|
132
|
+
csvfile << ["gtin", "ATC", 'pharmacode', 'description', 'daily drug dose']
|
118
133
|
@data_swissindex.sort.each do |gtin, item|
|
119
134
|
if @do_compare or gtins_to_parse.size == 0 or
|
120
|
-
|
121
|
-
|
122
|
-
|
135
|
+
gtins_to_parse.index(gtin.to_s) or
|
136
|
+
gtins_to_parse.index(item[:pharmacode])
|
137
|
+
atc = item[:atc_code]
|
138
|
+
ddd = @data_epha_atc[atc]
|
139
|
+
emitted_ids << gtin if gtin
|
140
|
+
emitted_ids << item[:pharmacode] if item[:pharmacode]
|
141
|
+
csvfile << [gtin, atc, item[:pharmacode], item[:description], ddd]
|
123
142
|
end
|
124
143
|
end
|
125
144
|
end
|
126
145
|
msg = "swissindex: Extracted #{gtins_to_parse.size} of #{@data_swissindex.size} items into #{output_name} for #{gtins_to_parse}"
|
127
146
|
Util.debug_msg(msg)
|
147
|
+
missing_ids = []
|
148
|
+
gtins_to_parse.each{
|
149
|
+
|id|
|
150
|
+
next if emitted_ids.index(id)
|
151
|
+
missing_ids << id
|
152
|
+
}
|
153
|
+
File.open('pharmacode_gtin_not_found.txt', 'w+') { |f| f.write missing_ids.join("\n") }
|
154
|
+
msg = "swissindex: Could not find info for #{missing_ids.size} missing ids see file pharmacode_gtin_not_found.txt"
|
155
|
+
Util.debug_msg(msg)
|
128
156
|
return unless @do_compare
|
129
157
|
@data_bag = bag_xml_extractor
|
130
158
|
output_name = File.join(Util.get_archive, 'gtin2atc_bag.csv')
|
@@ -148,7 +176,6 @@ module Gtin2atc
|
|
148
176
|
check_swissmedic
|
149
177
|
compare
|
150
178
|
end
|
151
|
-
# require 'pry';
|
152
179
|
def check_bag
|
153
180
|
matching_atc_codes = []
|
154
181
|
|
@@ -201,8 +228,6 @@ module Gtin2atc
|
|
201
228
|
end
|
202
229
|
total1 = not_in_swissindex + match_in_swissindex + longer_in_swissindex + shorter_in_swissindex + different_atc_in_swissindex
|
203
230
|
total2 = not_in_swissmedic + match_in_swissmedic + longer_in_swissmedic + shorter_in_swissmedic + different_atc_in_swissmedic
|
204
|
-
# binding.pry if j != (total1 + matching_atc_codes)
|
205
|
-
# binding.pry if j != (total2 + matching_atc_codes)
|
206
231
|
# Util.debug_msg "#{gtin}: j #{j} finished #{total1} #{total2} #{atc_code} matching_atc_codes #{matching_atc_codes}"
|
207
232
|
}
|
208
233
|
Util.info "Result of verifing data from bag (SL):
|
data/lib/gtin2atc/version.rb
CHANGED
data/spec/builder_spec.rb
CHANGED
@@ -45,6 +45,30 @@ describe Gtin2atc::Builder do
|
|
45
45
|
Dir.chdir @savedDir if @savedDir and File.directory?(@savedDir)
|
46
46
|
end
|
47
47
|
|
48
|
+
def check_csv(filename)
|
49
|
+
File.exists?(filename).should eq true
|
50
|
+
inhalt = IO.readlines(filename)
|
51
|
+
puts inhalt
|
52
|
+
/^\d{13},\w{4}/.should match inhalt[1]
|
53
|
+
# Packungsgrösse, Dosierung, DDD, Route of Administration
|
54
|
+
/^gtin,ATC,pharmacode,description,daily drug dose/.should match inhalt.first
|
55
|
+
/^7680316440115,B03AA07,20244,FERRO-GRADUMET Depottabl,"0,2 g O Fe2\+"/.should match inhalt.join("\n")
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'when 20273 41803 (Pharmacodes) is given' do
|
59
|
+
let(:cli) do
|
60
|
+
options = Gtin2atc::Options.new
|
61
|
+
options.parser.parse!('20273 41803'.split(' '))
|
62
|
+
Gtin2atc::Builder.new(options.opts)
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should produce a correct csv' do
|
66
|
+
# @res = buildr_capture(:stdout){ cli.run }
|
67
|
+
cli.run
|
68
|
+
check_csv(CSV_NAME)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
48
72
|
context 'when --log is given' do
|
49
73
|
let(:cli) do
|
50
74
|
options = Gtin2atc::Options.new
|
@@ -78,8 +102,8 @@ describe Gtin2atc::Builder do
|
|
78
102
|
check_csv(CSV_NAME)
|
79
103
|
inhalt = IO.readlines(CSV_NAME)
|
80
104
|
inhalt.size.should eq 2+1 # one header lines + two items
|
81
|
-
inhalt[1].chomp.should eq '7680147690482,N07BC02,41803,KETALGIN Inj Lös 10 mg/ml'
|
82
|
-
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 mg O,P"'
|
106
|
+
inhalt[2].chomp.should eq '7680353660163,B03AE10,20273,KENDURAL Depottabl,'
|
83
107
|
end
|
84
108
|
end
|
85
109
|
|
@@ -151,9 +175,10 @@ describe Gtin2atc::Builder do
|
|
151
175
|
Gtin2atc::Builder.new(options.opts)
|
152
176
|
end
|
153
177
|
|
154
|
-
it 'should produce
|
178
|
+
it 'should produce many report files' do
|
155
179
|
@res = buildr_capture(:stdout){ cli.run }
|
156
180
|
Dir.glob(Gtin2atc::WorkDir + '/compare_all_*.txt').size.should == 5
|
181
|
+
Dir.glob(Gtin2atc::WorkDir + '/pharmacode_gtin_not_found.txt').size.should == 1
|
157
182
|
Dir.glob(Gtin2atc::WorkDir + '/compare_swissmedic_to_swisssindex_*.txt').size.should == 5
|
158
183
|
Dir.glob(Gtin2atc::WorkDir + '/compare_bag_to_swissindex_*.txt').size.should == 5
|
159
184
|
Dir.glob(Gtin2atc::WorkDir + '/compare_bag_to_swissmedic_*.txt').size.should == 5
|
data/spec/data/atc.csv
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
A|ALIMENTÄRES SYSTEM UND STOFFWECHSEL||
|
2
|
+
A01AA01|Natriumfluorid|1,1 mg O 0.5 mg Fluorid|
|
3
|
+
A01AA03|Olaflur|1,1 mg O|
|
4
|
+
A01AB02|Wasserstoffperoxid|60 mg O|
|
5
|
+
A01AB33|Nystatin|500 000 IE O|
|
6
|
+
A06AA01|Dickflüssiges Paraffin|15 g O|
|
7
|
+
B03AA07|Eisen(II)sulfat|0,2 g O Fe2+|
|
8
|
+
B03AE10|Verschiedene Kombinationen||
|
9
|
+
D11AC03|Selen-haltige Verbindungen||
|
10
|
+
G03GA01|Choriongonadotrophin|7,5 TSD E P zur Ovulationsauslösung|
|
11
|
+
J01FA01|Erythromycin|1 g O; 2 g O Erythromycinethylsuccinat-Tabletten; 2 g P; 1 g O Kinder DDD für Erythromycinethylsuccinat-haltige Mittel|
|
12
|
+
N02BE01|Paracetamol|3 g O,P,R; 0,75 g O Kinder DDD; 0,375 g R Säuglings DDD; 0,75 g R Kinder DDD|
|
13
|
+
N05CP01|Baldrianwurzel|7 g O Droge; 6,5 ml O Tinktur|
|
14
|
+
N07BC02|Methadon|25 mg O,P|
|
15
|
+
S01EB02|Carbachol|0,4 ml|
|
16
|
+
S01EB06|Neostigmin|40 mg Salbe; 0,4 ml|
|
17
|
+
S01XA28|Hyaluronsäure|0,4 ml AT|
|
18
|
+
S01XC20|Kombinationen|Standarddosis: 0,4 ml AT; 0,4 g AS|
|