oddb2xml 2.5.0 → 2.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Elexis_Artikelstamm_v003.xsd +387 -0
- data/Elexis_Artikelstamm_v5.xsd +513 -0
- data/Gemfile +2 -6
- data/History.txt +11 -0
- data/README.md +35 -27
- data/artikelstamm.md +68 -0
- data/bin/compare_v5 +41 -0
- data/bin/oddb2xml +3 -15
- data/data/article_overrides.yaml +51859 -0
- data/data/gtin2ignore.yaml +30510 -0
- data/data/product_overrides.yaml +4 -0
- data/lib/oddb2xml/builder.rb +543 -192
- data/lib/oddb2xml/cli.rb +82 -62
- data/lib/oddb2xml/compare.rb +189 -0
- data/lib/oddb2xml/compressor.rb +6 -3
- data/lib/oddb2xml/downloader.rb +79 -64
- data/lib/oddb2xml/extractor.rb +67 -40
- data/lib/oddb2xml/options.rb +76 -77
- data/lib/oddb2xml/parslet_compositions.rb +18 -1
- data/lib/oddb2xml/util.rb +25 -3
- data/lib/oddb2xml/version.rb +1 -1
- data/oddb2xml.gemspec +8 -5
- data/oddb2xml.xsd +1 -0
- data/spec/artikelstamm_spec.rb +383 -0
- data/spec/builder_spec.rb +147 -118
- data/spec/calc_spec.rb +3 -15
- data/spec/cli_spec.rb +24 -35
- data/spec/compare_spec.rb +24 -0
- data/spec/compressor_spec.rb +1 -3
- data/spec/data/Elexis_Artikelstamm_v5.xsd +513 -0
- data/spec/data/Preparations.xml +2200 -0
- data/spec/data/Publications.xls +0 -0
- data/spec/data/artikelstamm_N_010917.xml +39 -0
- data/spec/data/artikelstamm_N_011217.xml +17 -0
- data/spec/data/artikelstamm_P_010917.xml +86 -0
- data/spec/data/artikelstamm_P_011217.xml +63 -0
- data/spec/data/oddb2xml_files_lppv.txt +2 -0
- data/spec/data/refdata_NonPharma.xml +38 -0
- data/spec/data/refdata_Pharma.xml +220 -0
- data/spec/data/swissmedic_orphan.xlsx +0 -0
- data/spec/data/swissmedic_package.xlsx +0 -0
- data/spec/data/transfer.dat +59 -19
- data/spec/data/v5_first.xml +102 -0
- data/spec/data/v5_second.xml +184 -0
- data/spec/data_helper.rb +72 -0
- data/spec/downloader_spec.rb +19 -27
- data/spec/extractor_spec.rb +27 -33
- data/spec/fixtures/vcr_cassettes/artikelstamm.json +1 -0
- data/spec/options_spec.rb +73 -66
- data/spec/spec_helper.rb +73 -24
- data/test_options.rb +4 -2
- metadata +100 -21
- data/spec/data/XMLPublications.zip +0 -0
- data/spec/data/compressor/oddb_article.xml +0 -0
- data/spec/data/compressor/oddb_fi.xml +0 -0
- data/spec/data/compressor/oddb_fi_product.xml +0 -0
- data/spec/data/compressor/oddb_limitation.xml +0 -0
- data/spec/data/compressor/oddb_product.xml +0 -0
- data/spec/data/compressor/oddb_substance.xml +0 -0
data/spec/calc_spec.rb
CHANGED
@@ -608,17 +608,6 @@ Die HILFSSTOFFE sind Aqua ad iniectabilia und Natrii chloridum.
|
|
608
608
|
specify { expect(argenti.chemical_substance).to eq nil }
|
609
609
|
end
|
610
610
|
end
|
611
|
-
context 'shire Subcuvia' do
|
612
|
-
# def initialize(column_c = nil, size = nil, unit = nil, active_substance = nil, composition= nil)
|
613
|
-
substance = 'immunoglobulinum humanum normale'
|
614
|
-
composition = 'proteina 160 mg cum immunoglobulinum humanum normale min. 95 %, glycinum, natrii chloridum, aqua ad iniectabilia, q.s. ad solutionem pro 1 ml.'
|
615
|
-
info = Calc.new('Subcuvia, Injektionslösung', '5', 'ml', substance, composition)
|
616
|
-
specify { expect(info.compositions.first.substances.first.name).to eq 'Proteina' }
|
617
|
-
specify { expect(info.compositions.first.substances[1].name).to eq 'Cum Immunoglobulinum Humanum Normale' }
|
618
|
-
specify { expect(info.compositions.first.substances[1].is_active_agent).to eq true }
|
619
|
-
specify { expect(info.pkg_size).to eq '5' }
|
620
|
-
end
|
621
|
-
|
622
611
|
end
|
623
612
|
|
624
613
|
describe Oddb2xml::Calc do
|
@@ -631,9 +620,8 @@ describe Oddb2xml::Calc do
|
|
631
620
|
Dir.chdir(Oddb2xml::WorkDir)
|
632
621
|
VCR.eject_cassette; VCR.insert_cassette('oddb2xml')
|
633
622
|
@run_time_options = '--calc --skip-download'
|
634
|
-
@options = Oddb2xml::Options.
|
635
|
-
@
|
636
|
-
@res = buildr_capture(:stdout){ Oddb2xml::Cli.new(@options.opts).run }
|
623
|
+
@options = Oddb2xml::Options.parse(@run_time_options)
|
624
|
+
@res = buildr_capture(:stdout){ Oddb2xml::Cli.new(@options).run }
|
637
625
|
expect(File.exists?(Oddb_calc_xml)).to eq true
|
638
626
|
@doc = REXML::Document.new File.read(Oddb_calc_xml)
|
639
627
|
@nokogiri = Nokogiri::XML(File.read(Oddb_calc_xml))
|
@@ -802,7 +790,7 @@ describe Oddb2xml::Calc do
|
|
802
790
|
|
803
791
|
it 'should create correct entries for Caverject' do
|
804
792
|
expect(XPath.match( @doc, "//ARTICLE[GTIN='7680556740075']/NAME").first.text).to eq "Caverject DC 20, Injektionspräparat"
|
805
|
-
expect(XPath.match( @doc, "//ARTICLE[GTIN='7680556740075']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE").size).to eq
|
793
|
+
expect(XPath.match( @doc, "//ARTICLE[GTIN='7680556740075']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE").size).to eq 5
|
806
794
|
expect(XPath.match( @doc, "//ARTICLE[GTIN='7680556740075']/COMPOSITIONS/COMPOSITION/EXCIPIENS/SUBSTANCE_NAME").first.text).to eq "pro Vitro"
|
807
795
|
end
|
808
796
|
end
|
data/spec/cli_spec.rb
CHANGED
@@ -48,20 +48,17 @@ describe Oddb2xml::Cli do
|
|
48
48
|
context 'when -x address option is given' do
|
49
49
|
before(:all) do
|
50
50
|
cleanup_directories_before_run
|
51
|
-
options = Oddb2xml::Options.
|
52
|
-
|
53
|
-
@cli = Oddb2xml::Cli.new(options.opts)
|
51
|
+
options = Oddb2xml::Options.parse('-e')
|
52
|
+
# @cli = Oddb2xml::Cli.new(options); @cli.run
|
54
53
|
@cli_output = buildr_capture(:stdout) { @cli.run }
|
55
54
|
end
|
56
55
|
end
|
57
56
|
context 'when -o fi option is given' do
|
58
57
|
before(:all) do
|
59
58
|
cleanup_directories_before_run
|
60
|
-
options = Oddb2xml::Options.
|
61
|
-
|
62
|
-
@
|
63
|
-
# @cli_output = buildr_capture(:stdout) { @cli.run }
|
64
|
-
@cli.run
|
59
|
+
options = Oddb2xml::Options.parse('-o fi')
|
60
|
+
@cli = Oddb2xml::Cli.new(options);
|
61
|
+
@cli_output = buildr_capture(:stdout) { @cli.run }
|
65
62
|
end
|
66
63
|
# it_behaves_like 'any interface for product'
|
67
64
|
it 'should have nonpharma option' do
|
@@ -72,14 +69,13 @@ describe Oddb2xml::Cli do
|
|
72
69
|
context 'when -t md option is given' do
|
73
70
|
before(:all) do
|
74
71
|
cleanup_directories_before_run
|
75
|
-
options = Oddb2xml::Options.
|
76
|
-
|
77
|
-
@cli = Oddb2xml::Cli.new(options.opts)
|
72
|
+
options = Oddb2xml::Options.parse('-t md')
|
73
|
+
@cli = Oddb2xml::Cli.new(options)
|
78
74
|
@cli_output = buildr_capture(:stdout) { @cli.run }
|
79
75
|
end
|
80
76
|
it_behaves_like 'any interface for product'
|
81
77
|
it 'should have tag_suffix option' do
|
82
|
-
expect(@cli).to have_option(:tag_suffix=> '
|
78
|
+
expect(@cli).to have_option(:tag_suffix=> 'md')
|
83
79
|
end
|
84
80
|
it 'should not create a compressed file' do
|
85
81
|
expect(Dir.glob(File.join(Oddb2xml::WorkDir, 'oddb_*.tar.gz')).first).to be_nil
|
@@ -113,9 +109,8 @@ describe Oddb2xml::Cli do
|
|
113
109
|
context 'when -c tar.gz option is given' do
|
114
110
|
before(:all) do
|
115
111
|
cleanup_directories_before_run
|
116
|
-
options = Oddb2xml::Options.
|
117
|
-
|
118
|
-
@cli = Oddb2xml::Cli.new(options.opts)
|
112
|
+
options = Oddb2xml::Options.parse('-c tar.gz')
|
113
|
+
@cli = Oddb2xml::Cli.new(options)
|
119
114
|
@cli_output = buildr_capture(:stdout) { @cli.run }
|
120
115
|
# @cli_output = @cli.run # to debug
|
121
116
|
end
|
@@ -144,9 +139,8 @@ describe Oddb2xml::Cli do
|
|
144
139
|
context 'when -c zip option is given' do
|
145
140
|
before(:all) do
|
146
141
|
cleanup_directories_before_run
|
147
|
-
options = Oddb2xml::Options.
|
148
|
-
|
149
|
-
@cli = Oddb2xml::Cli.new(options.opts)
|
142
|
+
options = Oddb2xml::Options.parse('-c zip')
|
143
|
+
@cli = Oddb2xml::Cli.new(options)
|
150
144
|
@cli_output = buildr_capture(:stdout) { @cli.run }
|
151
145
|
end
|
152
146
|
it_behaves_like 'any interface for product'
|
@@ -170,9 +164,8 @@ describe Oddb2xml::Cli do
|
|
170
164
|
context 'when -f dat option is given' do
|
171
165
|
before(:all) do
|
172
166
|
cleanup_directories_before_run
|
173
|
-
options = Oddb2xml::Options.
|
174
|
-
|
175
|
-
@cli = Oddb2xml::Cli.new(options.opts)
|
167
|
+
options = Oddb2xml::Options.parse('-f dat')
|
168
|
+
@cli = Oddb2xml::Cli.new(options)
|
176
169
|
@cli_output = buildr_capture(:stdout) { @cli.run }
|
177
170
|
end
|
178
171
|
it_behaves_like 'any interface for product'
|
@@ -195,9 +188,8 @@ describe Oddb2xml::Cli do
|
|
195
188
|
context 'when -a nonpharma option is given' do
|
196
189
|
before(:all) do
|
197
190
|
cleanup_directories_before_run
|
198
|
-
options = Oddb2xml::Options.
|
199
|
-
|
200
|
-
@cli = Oddb2xml::Cli.new(options.opts)
|
191
|
+
options = Oddb2xml::Options.parse('-a nonpharma')
|
192
|
+
@cli = Oddb2xml::Cli.new(options)
|
201
193
|
@cli_output = buildr_capture(:stdout) { @cli.run }
|
202
194
|
end
|
203
195
|
it_behaves_like 'any interface for product'
|
@@ -227,14 +219,13 @@ describe Oddb2xml::Cli do
|
|
227
219
|
context 'when -t _swiss option is given' do
|
228
220
|
before(:all) do
|
229
221
|
cleanup_directories_before_run
|
230
|
-
options = Oddb2xml::Options.
|
231
|
-
|
232
|
-
@cli = Oddb2xml::Cli.new(options.opts)
|
222
|
+
options = Oddb2xml::Options.parse('-t _swiss')
|
223
|
+
@cli = Oddb2xml::Cli.new(options)
|
233
224
|
@cli_output = buildr_capture(:stdout) { @cli.run }
|
234
225
|
end
|
235
226
|
it_behaves_like 'any interface for product'
|
236
227
|
it 'should have tag_suffix option' do
|
237
|
-
expect(@cli).to have_option(:tag_suffix=> '
|
228
|
+
expect(@cli).to have_option(:tag_suffix=> '_swiss')
|
238
229
|
end
|
239
230
|
it 'should not create any compressed file' do
|
240
231
|
expect(@cli_output).to match(/Pharma/)
|
@@ -259,9 +250,8 @@ describe Oddb2xml::Cli do
|
|
259
250
|
context 'when -o fi option is given' do
|
260
251
|
before(:all) do
|
261
252
|
cleanup_directories_before_run
|
262
|
-
options = Oddb2xml::Options.
|
263
|
-
|
264
|
-
@cli = Oddb2xml::Cli.new(options.opts)
|
253
|
+
options = Oddb2xml::Options.parse('-o fi')
|
254
|
+
@cli = Oddb2xml::Cli.new(options)
|
265
255
|
@cli_output = buildr_capture(:stdout) { @cli.run }
|
266
256
|
end
|
267
257
|
it_behaves_like 'any interface for product'
|
@@ -293,9 +283,8 @@ describe Oddb2xml::Cli do
|
|
293
283
|
context 'when -x address option is given' do
|
294
284
|
before(:all) do
|
295
285
|
cleanup_directories_before_run
|
296
|
-
options = Oddb2xml::Options.
|
297
|
-
|
298
|
-
@cli = Oddb2xml::Cli.new(options.opts)
|
286
|
+
options = Oddb2xml::Options.parse('-x address')
|
287
|
+
@cli = Oddb2xml::Cli.new(options)
|
299
288
|
@cli_output = buildr_capture(:stdout) { @cli.run }
|
300
289
|
end
|
301
290
|
it_behaves_like 'any interface for address'
|
@@ -320,4 +309,4 @@ describe Oddb2xml::Cli do
|
|
320
309
|
end.to_a.length).to equal expected
|
321
310
|
end
|
322
311
|
end if false # TODO: pending medreg
|
323
|
-
end
|
312
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require "rexml/document"
|
4
|
+
require "oddb2xml/compare"
|
5
|
+
|
6
|
+
describe Oddb2xml::CompareV5 do
|
7
|
+
|
8
|
+
context 'when comparing v5' do
|
9
|
+
before(:all) do
|
10
|
+
@first = File.join(Oddb2xml::SpecData, 'v5_first.xml')
|
11
|
+
@second = File.join(Oddb2xml::SpecData, 'v5_second.xml')
|
12
|
+
expect(File.exist?(@second)).to eq true
|
13
|
+
expect(File.exist?(@first)).to eq true
|
14
|
+
@result = Oddb2xml::CompareV5.new(@first, @second).compare
|
15
|
+
end
|
16
|
+
it 'should return true' do
|
17
|
+
expected = {"PRODUCTS"=>{"NR_COMPARED"=>1, "PRODNO"=>0, "SALECD"=>0, "DSCR"=>1, "DSCRF"=>0, "ATC"=>0, "SUBSTANCE"=>1},
|
18
|
+
"LIMITATIONS"=>{"NR_COMPARED"=>3, "LIMNAMEBAG"=>0, "DSCR"=>0, "DSCRF"=>0, "LIMITATION_PTS"=>1},
|
19
|
+
"ITEMS"=>{"NR_COMPARED"=>4, "PHARMATYPE"=>0, "GTIN"=>0, "SALECD"=>0, "DSCR"=>0, "DSCRF"=>0, "PEXF"=>2, "PPUB"=>2, "PKG_SIZE"=>0,
|
20
|
+
"MEASURE"=>0, "DOSAGE_FORM"=>3, "PRODNO"=>0, "PHAR"=>0, "IKSCAT"=>0}}
|
21
|
+
expect(@result).to eq(expected)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/spec/compressor_spec.rb
CHANGED
@@ -4,17 +4,15 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
shared_examples_for 'any compressor' do
|
6
6
|
it 'should create compress file' do
|
7
|
-
allow(File).to receive(:unlink).and_return(false)
|
8
7
|
@compressor.contents << File.join(Oddb2xml::SpecCompressor, 'oddb_article.xml')
|
9
8
|
@compressor.contents << File.join(Oddb2xml::SpecCompressor, 'oddb_product.xml')
|
10
9
|
@compressor.contents << File.join(Oddb2xml::SpecCompressor, 'oddb_substance.xml')
|
11
10
|
@compressor.contents << File.join(Oddb2xml::SpecCompressor, 'oddb_limitation.xml')
|
12
11
|
@compressor.contents << File.join(Oddb2xml::SpecCompressor, 'oddb_fi.xml')
|
13
12
|
@compressor.contents << File.join(Oddb2xml::SpecCompressor, 'oddb_fi_product.xml')
|
14
|
-
expect(@compressor.finalize!).
|
13
|
+
expect(@compressor.finalize!).not_to be nil
|
15
14
|
compress_file = @compressor.instance_variable_get(:@compress_file)
|
16
15
|
expect(File.exists?(compress_file)).to eq(true)
|
17
|
-
allow(File).to receive(:unlink).and_call_original
|
18
16
|
@compressor = nil
|
19
17
|
end
|
20
18
|
end
|
@@ -0,0 +1,513 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- Copyright (c) 2016 MEDEVIT. All rights reserved. This program and the
|
3
|
+
accompanying materials are made available under the terms of the Eclipse
|
4
|
+
Public License v1.0 which accompanies this distribution, and is available
|
5
|
+
at http://www.eclipse.org/legal/epl-v10.html v002 - Ergänzung K Komplementärprodukt
|
6
|
+
bei generic type, Consider ATC code of length 8 (on vet.med. articles) Relax
|
7
|
+
ADDSCR occurence to 0 .. 1 v003 - PRODNO hinzugefügt LIMNAMEBAG zur formal-kennzeichnung
|
8
|
+
von identen limitations v4 - Major refactoring, see https://redmine.medelexis.ch/issues/4405
|
9
|
+
Contributors: MEDEVIT <office@medevit.at> - initial API and implementation -->
|
10
|
+
<xs:schema targetNamespace="http://elexis.ch/Elexis_Artikelstamm_v5"
|
11
|
+
elementFormDefault="qualified" attributeFormDefault="unqualified"
|
12
|
+
version="4" id="Elexis_Artikelstamm_v003" xmlns="http://elexis.ch/Elexis_Artikelstamm_v5" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
13
|
+
<xs:element name="ARTIKELSTAMM">
|
14
|
+
<xs:annotation>
|
15
|
+
<xs:documentation xml:lang="EN">Information on
|
16
|
+
medicaments
|
17
|
+
</xs:documentation>
|
18
|
+
</xs:annotation>
|
19
|
+
<xs:complexType>
|
20
|
+
<xs:sequence>
|
21
|
+
<xs:element name="PRODUCTS" minOccurs="1"
|
22
|
+
maxOccurs="1">
|
23
|
+
<xs:complexType>
|
24
|
+
<xs:sequence>
|
25
|
+
<xs:element name="PRODUCT" minOccurs="0"
|
26
|
+
maxOccurs="unbounded">
|
27
|
+
<xs:complexType>
|
28
|
+
<xs:sequence>
|
29
|
+
<xs:element name="PRODNO"
|
30
|
+
type="PRODNOType" minOccurs="1" maxOccurs="1">
|
31
|
+
</xs:element>
|
32
|
+
<xs:element name="SALECD" type="SALECDType" minOccurs="1" maxOccurs="1">
|
33
|
+
</xs:element>
|
34
|
+
<xs:element name="DSCR"
|
35
|
+
type="DSCRType" minOccurs="1" maxOccurs="1">
|
36
|
+
</xs:element>
|
37
|
+
<xs:element name="DSCRF"
|
38
|
+
type="DSCRType" minOccurs="1" maxOccurs="1">
|
39
|
+
</xs:element>
|
40
|
+
<xs:element name="ATC"
|
41
|
+
nillable="false" maxOccurs="1" minOccurs="0">
|
42
|
+
<xs:annotation>
|
43
|
+
<xs:documentation
|
44
|
+
xml:lang="EN">
|
45
|
+
ATC Code beinhaltet
|
46
|
+
Information ob Item
|
47
|
+
ein Impfstoff ist.
|
48
|
+
Dies ist der Fall
|
49
|
+
wenn der ATC Code
|
50
|
+
mit J07 startet.
|
51
|
+
</xs:documentation>
|
52
|
+
</xs:annotation>
|
53
|
+
<xs:simpleType>
|
54
|
+
<xs:restriction
|
55
|
+
base="xs:string">
|
56
|
+
<xs:maxLength
|
57
|
+
value="8" />
|
58
|
+
</xs:restriction>
|
59
|
+
</xs:simpleType>
|
60
|
+
</xs:element>
|
61
|
+
<xs:element name="LIMNAMEBAG"
|
62
|
+
type="xs:string" minOccurs="0" maxOccurs="1">
|
63
|
+
</xs:element>
|
64
|
+
|
65
|
+
<xs:element name="SUBSTANCE"
|
66
|
+
type="xs:string" minOccurs="0" maxOccurs="1">
|
67
|
+
</xs:element>
|
68
|
+
<xs:element name="SUBSTANCEF"
|
69
|
+
type="xs:string" minOccurs="0" maxOccurs="1">
|
70
|
+
</xs:element>
|
71
|
+
</xs:sequence>
|
72
|
+
</xs:complexType>
|
73
|
+
<xs:unique name="uniqueProdno">
|
74
|
+
<xs:selector xpath="PRODNO" />
|
75
|
+
<xs:field xpath="." />
|
76
|
+
</xs:unique>
|
77
|
+
</xs:element>
|
78
|
+
</xs:sequence>
|
79
|
+
</xs:complexType>
|
80
|
+
</xs:element>
|
81
|
+
<xs:element name="LIMITATIONS" minOccurs="1"
|
82
|
+
maxOccurs="1">
|
83
|
+
<xs:complexType>
|
84
|
+
<xs:sequence>
|
85
|
+
<xs:element name="LIMITATION" minOccurs="0"
|
86
|
+
maxOccurs="unbounded">
|
87
|
+
<xs:complexType>
|
88
|
+
<xs:sequence>
|
89
|
+
<xs:element name="LIMNAMEBAG"
|
90
|
+
type="xs:string" minOccurs="1" maxOccurs="1">
|
91
|
+
</xs:element>
|
92
|
+
<xs:element name="DSCR"
|
93
|
+
type="DSCRType" minOccurs="1" maxOccurs="1">
|
94
|
+
</xs:element>
|
95
|
+
<xs:element name="DSCRF"
|
96
|
+
type="DSCRType" minOccurs="1" maxOccurs="1">
|
97
|
+
</xs:element>
|
98
|
+
<xs:element
|
99
|
+
name="LIMITATION_PTS" type="xs:int" maxOccurs="1"
|
100
|
+
minOccurs="0">
|
101
|
+
<xs:annotation>
|
102
|
+
<xs:documentation>
|
103
|
+
Limitationspunkte
|
104
|
+
</xs:documentation>
|
105
|
+
</xs:annotation>
|
106
|
+
</xs:element>
|
107
|
+
</xs:sequence>
|
108
|
+
</xs:complexType>
|
109
|
+
</xs:element>
|
110
|
+
</xs:sequence>
|
111
|
+
</xs:complexType>
|
112
|
+
</xs:element>
|
113
|
+
|
114
|
+
<xs:element name="ITEMS" minOccurs="1" maxOccurs="1">
|
115
|
+
<xs:complexType>
|
116
|
+
<xs:sequence>
|
117
|
+
<xs:element name="ITEM" minOccurs="0"
|
118
|
+
maxOccurs="unbounded">
|
119
|
+
<xs:complexType>
|
120
|
+
<xs:annotation>
|
121
|
+
<xs:documentation>
|
122
|
+
Packungsgröße verrechnet,
|
123
|
+
also Anzahl der beinhalteten
|
124
|
+
Elemente (bspw. 100
|
125
|
+
Tabletten)
|
126
|
+
</xs:documentation>
|
127
|
+
</xs:annotation>
|
128
|
+
<xs:sequence>
|
129
|
+
|
130
|
+
<xs:element name="GTIN"
|
131
|
+
nillable="false" minOccurs="0" maxOccurs="1">
|
132
|
+
<xs:annotation>
|
133
|
+
<xs:documentation
|
134
|
+
xml:lang="EN">
|
135
|
+
Reference number
|
136
|
+
(GTIN = Global trade
|
137
|
+
item number)
|
138
|
+
</xs:documentation>
|
139
|
+
</xs:annotation>
|
140
|
+
<xs:simpleType>
|
141
|
+
<xs:restriction
|
142
|
+
base="xs:string">
|
143
|
+
|
144
|
+
</xs:restriction>
|
145
|
+
</xs:simpleType>
|
146
|
+
</xs:element>
|
147
|
+
<xs:element name="PHAR"
|
148
|
+
nillable="false" minOccurs="0" maxOccurs="1">
|
149
|
+
<xs:annotation>
|
150
|
+
<xs:documentation
|
151
|
+
xml:lang="EN">
|
152
|
+
Pharmacode
|
153
|
+
</xs:documentation>
|
154
|
+
</xs:annotation>
|
155
|
+
<xs:simpleType>
|
156
|
+
<xs:restriction
|
157
|
+
base="xs:integer" />
|
158
|
+
</xs:simpleType>
|
159
|
+
</xs:element>
|
160
|
+
|
161
|
+
|
162
|
+
<xs:element name="SALECD" type="SALECDType" minOccurs="1" maxOccurs="1">
|
163
|
+
<xs:annotation>
|
164
|
+
<xs:documentation></xs:documentation>
|
165
|
+
</xs:annotation>
|
166
|
+
</xs:element>
|
167
|
+
<xs:element name="DSCR"
|
168
|
+
nillable="false" type="DSCRType" minOccurs="1"
|
169
|
+
maxOccurs="1">
|
170
|
+
<xs:annotation>
|
171
|
+
<xs:documentation
|
172
|
+
xml:lang="EN">
|
173
|
+
Product description,
|
174
|
+
e.g. Adalat retard
|
175
|
+
Tabletten 20 mg
|
176
|
+
</xs:documentation>
|
177
|
+
</xs:annotation>
|
178
|
+
</xs:element>
|
179
|
+
<xs:element name="DSCRF"
|
180
|
+
type="xs:string" minOccurs="1" maxOccurs="1">
|
181
|
+
</xs:element>
|
182
|
+
<xs:element name="COMP"
|
183
|
+
minOccurs="0">
|
184
|
+
<xs:annotation>
|
185
|
+
<xs:documentation
|
186
|
+
xml:lang="EN">
|
187
|
+
Manufacturer
|
188
|
+
</xs:documentation>
|
189
|
+
</xs:annotation>
|
190
|
+
<xs:complexType>
|
191
|
+
<xs:sequence>
|
192
|
+
<xs:element
|
193
|
+
name="NAME" minOccurs="0" maxOccurs="1">
|
194
|
+
<xs:annotation>
|
195
|
+
<xs:documentation>
|
196
|
+
CompanyName
|
197
|
+
</xs:documentation>
|
198
|
+
</xs:annotation>
|
199
|
+
<xs:simpleType>
|
200
|
+
<xs:restriction
|
201
|
+
base="xs:string">
|
202
|
+
<xs:maxLength
|
203
|
+
value="101" />
|
204
|
+
</xs:restriction>
|
205
|
+
</xs:simpleType>
|
206
|
+
</xs:element>
|
207
|
+
<xs:element
|
208
|
+
name="GLN" nillable="false" minOccurs="0" maxOccurs="1">
|
209
|
+
<xs:annotation>
|
210
|
+
<xs:documentation
|
211
|
+
xml:lang="EN">
|
212
|
+
Company
|
213
|
+
GLN
|
214
|
+
</xs:documentation>
|
215
|
+
</xs:annotation>
|
216
|
+
<xs:simpleType>
|
217
|
+
<xs:restriction
|
218
|
+
base="xs:string">
|
219
|
+
<xs:maxLength
|
220
|
+
value="13" />
|
221
|
+
</xs:restriction>
|
222
|
+
</xs:simpleType>
|
223
|
+
</xs:element>
|
224
|
+
</xs:sequence>
|
225
|
+
</xs:complexType>
|
226
|
+
</xs:element>
|
227
|
+
<xs:element name="PEXF"
|
228
|
+
type="xs:double" minOccurs="0" maxOccurs="1">
|
229
|
+
<xs:annotation>
|
230
|
+
<xs:documentation>
|
231
|
+
Exfactorypreis in
|
232
|
+
Franken und Rappen
|
233
|
+
(exkl. MWSt)
|
234
|
+
</xs:documentation>
|
235
|
+
</xs:annotation>
|
236
|
+
</xs:element>
|
237
|
+
<xs:element name="PPUB"
|
238
|
+
type="xs:double" minOccurs="0" maxOccurs="1">
|
239
|
+
<xs:annotation>
|
240
|
+
<xs:documentation>
|
241
|
+
Publikumspreis in
|
242
|
+
Franken und Rappen
|
243
|
+
(inkl.MWSt)
|
244
|
+
</xs:documentation>
|
245
|
+
</xs:annotation>
|
246
|
+
</xs:element>
|
247
|
+
<xs:element name="PKG_SIZE"
|
248
|
+
type="xs:int" maxOccurs="1" minOccurs="0">
|
249
|
+
</xs:element>
|
250
|
+
<xs:element name="MEASURE" type="xs:string" minOccurs="0" maxOccurs="1">
|
251
|
+
<xs:annotation>
|
252
|
+
<xs:documentation>
|
253
|
+
Measurement Unit,
|
254
|
+
e.g. Pills or
|
255
|
+
milliliters
|
256
|
+
</xs:documentation>
|
257
|
+
</xs:annotation>
|
258
|
+
</xs:element>
|
259
|
+
<xs:element
|
260
|
+
name="MEASUREF" type="xs:string" minOccurs="0"
|
261
|
+
maxOccurs="1">
|
262
|
+
</xs:element>
|
263
|
+
<xs:element name="DOSAGE_FORM" type="xs:string" minOccurs="0" maxOccurs="1">
|
264
|
+
<xs:annotation>
|
265
|
+
<xs:documentation>
|
266
|
+
Die Darreichungsform
|
267
|
+
dieses Items. zB
|
268
|
+
Tablette(n) oder
|
269
|
+
Spritze(n)
|
270
|
+
</xs:documentation>
|
271
|
+
</xs:annotation>
|
272
|
+
</xs:element>
|
273
|
+
<xs:element name="DOSAGE_FORMF" type="xs:string" minOccurs="0" maxOccurs="1">
|
274
|
+
<xs:annotation>
|
275
|
+
<xs:documentation>Die Darreichungsform dieses Items. zB Tablette(n) oder Spritze(n) in französicher Sprache
|
276
|
+
</xs:documentation>
|
277
|
+
</xs:annotation>
|
278
|
+
</xs:element>
|
279
|
+
<xs:element name="SL_ENTRY"
|
280
|
+
type="xs:boolean" minOccurs="0" maxOccurs="1">
|
281
|
+
<xs:annotation>
|
282
|
+
<xs:documentation>
|
283
|
+
Item ist in der
|
284
|
+
Spezialitätenliste
|
285
|
+
(SL) eingetragen
|
286
|
+
</xs:documentation>
|
287
|
+
</xs:annotation>
|
288
|
+
</xs:element>
|
289
|
+
<xs:element name="IKSCAT"
|
290
|
+
maxOccurs="1" minOccurs="0">
|
291
|
+
<xs:annotation>
|
292
|
+
<xs:documentation>
|
293
|
+
Abgabekategorie
|
294
|
+
</xs:documentation>
|
295
|
+
</xs:annotation>
|
296
|
+
|
297
|
+
<xs:simpleType>
|
298
|
+
<xs:annotation>
|
299
|
+
<xs:documentation>
|
300
|
+
Abgabekategorie,
|
301
|
+
A-E A:
|
302
|
+
verschärft
|
303
|
+
rezeptpflichtig
|
304
|
+
B:
|
305
|
+
Rezeptpflichtig
|
306
|
+
C: erhältlich in
|
307
|
+
Apotheken ohne
|
308
|
+
Rezept D:
|
309
|
+
erhältlich in
|
310
|
+
Apotheken und
|
311
|
+
Drogerien E:
|
312
|
+
keine
|
313
|
+
Kategorisierung
|
314
|
+
</xs:documentation>
|
315
|
+
</xs:annotation>
|
316
|
+
<xs:restriction
|
317
|
+
base="xs:string">
|
318
|
+
<xs:enumeration
|
319
|
+
value="A">
|
320
|
+
</xs:enumeration>
|
321
|
+
<xs:enumeration
|
322
|
+
value="B">
|
323
|
+
</xs:enumeration>
|
324
|
+
<xs:enumeration
|
325
|
+
value="C">
|
326
|
+
</xs:enumeration>
|
327
|
+
<xs:enumeration
|
328
|
+
value="D">
|
329
|
+
</xs:enumeration>
|
330
|
+
<xs:enumeration
|
331
|
+
value="E">
|
332
|
+
</xs:enumeration>
|
333
|
+
</xs:restriction>
|
334
|
+
</xs:simpleType>
|
335
|
+
</xs:element>
|
336
|
+
<xs:element name="GENERIC_TYPE"
|
337
|
+
maxOccurs="1" minOccurs="0">
|
338
|
+
|
339
|
+
<xs:simpleType>
|
340
|
+
<xs:annotation>
|
341
|
+
<xs:documentation>
|
342
|
+
O Original G
|
343
|
+
Generikum K
|
344
|
+
Komplementärprodukt
|
345
|
+
</xs:documentation>
|
346
|
+
</xs:annotation>
|
347
|
+
<xs:restriction
|
348
|
+
base="xs:string">
|
349
|
+
<xs:enumeration
|
350
|
+
value="O">
|
351
|
+
</xs:enumeration>
|
352
|
+
<xs:enumeration
|
353
|
+
value="G">
|
354
|
+
</xs:enumeration>
|
355
|
+
<xs:enumeration
|
356
|
+
value="K">
|
357
|
+
</xs:enumeration>
|
358
|
+
</xs:restriction>
|
359
|
+
</xs:simpleType>
|
360
|
+
</xs:element>
|
361
|
+
<xs:element name="HAS_GENERIC"
|
362
|
+
type="xs:boolean" minOccurs="0" maxOccurs="1">
|
363
|
+
<xs:annotation>
|
364
|
+
<xs:documentation>
|
365
|
+
Generikum zu diesem
|
366
|
+
Produkt vorhanden
|
367
|
+
ja/nein
|
368
|
+
</xs:documentation>
|
369
|
+
</xs:annotation>
|
370
|
+
</xs:element>
|
371
|
+
<xs:element name="LPPV"
|
372
|
+
type="xs:boolean" maxOccurs="1" minOccurs="0">
|
373
|
+
<xs:annotation>
|
374
|
+
<xs:documentation>
|
375
|
+
Ist eingetragen in
|
376
|
+
Liste
|
377
|
+
pharmazeutischer
|
378
|
+
Präparate mit
|
379
|
+
spezieller
|
380
|
+
Verwendung (LPPV)
|
381
|
+
</xs:documentation>
|
382
|
+
</xs:annotation>
|
383
|
+
</xs:element>
|
384
|
+
|
385
|
+
<xs:element name="DEDUCTIBLE"
|
386
|
+
type="xs:int" maxOccurs="1" minOccurs="0">
|
387
|
+
<xs:annotation>
|
388
|
+
<xs:documentation>
|
389
|
+
Selbstbehalt für
|
390
|
+
SL-Produkte in
|
391
|
+
prozent
|
392
|
+
</xs:documentation>
|
393
|
+
</xs:annotation>
|
394
|
+
</xs:element>
|
395
|
+
<xs:element name="NARCOTIC"
|
396
|
+
type="xs:boolean" maxOccurs="1" minOccurs="0">
|
397
|
+
<xs:annotation>
|
398
|
+
<xs:documentation>
|
399
|
+
Produkt ist
|
400
|
+
Betäubungsmittel
|
401
|
+
ja/nein
|
402
|
+
</xs:documentation>
|
403
|
+
</xs:annotation>
|
404
|
+
</xs:element>
|
405
|
+
<xs:element name="NARCOTIC_CAS"
|
406
|
+
type="xs:string" maxOccurs="1" minOccurs="0">
|
407
|
+
<xs:annotation>
|
408
|
+
<xs:documentation>
|
409
|
+
Wenn
|
410
|
+
Betäubungsmittel
|
411
|
+
(NARCOTIC == true)
|
412
|
+
dann CAS Register
|
413
|
+
Nummer des Artikels
|
414
|
+
</xs:documentation>
|
415
|
+
</xs:annotation>
|
416
|
+
</xs:element>
|
417
|
+
|
418
|
+
|
419
|
+
<xs:element name="PRODNO"
|
420
|
+
minOccurs="0" maxOccurs="1" type="PRODNOType">
|
421
|
+
<xs:annotation>
|
422
|
+
<xs:documentation>
|
423
|
+
Produktnummer des
|
424
|
+
Artikels
|
425
|
+
</xs:documentation>
|
426
|
+
</xs:annotation>
|
427
|
+
</xs:element>
|
428
|
+
</xs:sequence>
|
429
|
+
|
430
|
+
|
431
|
+
|
432
|
+
<xs:attribute name="PHARMATYPE">
|
433
|
+
<xs:annotation>
|
434
|
+
<xs:documentation>
|
435
|
+
If a PRODNO is defined,
|
436
|
+
the PharmaType is P
|
437
|
+
</xs:documentation>
|
438
|
+
</xs:annotation>
|
439
|
+
<xs:simpleType>
|
440
|
+
<xs:restriction
|
441
|
+
base="xs:string">
|
442
|
+
<xs:enumeration
|
443
|
+
value="N">
|
444
|
+
</xs:enumeration>
|
445
|
+
<xs:enumeration
|
446
|
+
value="P">
|
447
|
+
</xs:enumeration>
|
448
|
+
</xs:restriction>
|
449
|
+
</xs:simpleType>
|
450
|
+
</xs:attribute>
|
451
|
+
</xs:complexType>
|
452
|
+
</xs:element>
|
453
|
+
</xs:sequence>
|
454
|
+
</xs:complexType>
|
455
|
+
</xs:element>
|
456
|
+
</xs:sequence>
|
457
|
+
<xs:attribute name="CREATION_DATETIME" type="xs:dateTime"
|
458
|
+
use="required">
|
459
|
+
<xs:annotation>
|
460
|
+
<xs:documentation>Erstellungszeitpunkt des QuellDatensatzes (siehe DATA_SOURCE)
|
461
|
+
</xs:documentation>
|
462
|
+
</xs:annotation>
|
463
|
+
</xs:attribute>
|
464
|
+
|
465
|
+
<xs:attribute name="BUILD_DATETIME" type="xs:dateTime">
|
466
|
+
<xs:annotation>
|
467
|
+
<xs:documentation>Der Zeitpunkt zu dem dieser Datensatz erstellt wurde.
|
468
|
+
</xs:documentation>
|
469
|
+
</xs:annotation>
|
470
|
+
</xs:attribute>
|
471
|
+
<xs:attribute name="DATA_SOURCE" type="DATASOURCEType">
|
472
|
+
<xs:annotation>
|
473
|
+
<xs:documentation></xs:documentation>
|
474
|
+
</xs:annotation></xs:attribute>
|
475
|
+
</xs:complexType>
|
476
|
+
</xs:element>
|
477
|
+
|
478
|
+
|
479
|
+
|
480
|
+
|
481
|
+
|
482
|
+
|
483
|
+
<xs:simpleType name="PRODNOType">
|
484
|
+
<xs:restriction base="xs:string"></xs:restriction>
|
485
|
+
</xs:simpleType>
|
486
|
+
|
487
|
+
<xs:simpleType name="DSCRType">
|
488
|
+
<xs:restriction base="xs:string"></xs:restriction>
|
489
|
+
</xs:simpleType>
|
490
|
+
|
491
|
+
|
492
|
+
|
493
|
+
<xs:simpleType name="DATASOURCEType">
|
494
|
+
<xs:annotation>
|
495
|
+
<xs:documentation>The data source this Artikelstamm is generated from.
|
496
|
+
</xs:documentation>
|
497
|
+
</xs:annotation>
|
498
|
+
<xs:restriction base="xs:string">
|
499
|
+
<xs:enumeration value="oddb2xml"></xs:enumeration>
|
500
|
+
<xs:enumeration value="medindex"></xs:enumeration>
|
501
|
+
</xs:restriction>
|
502
|
+
</xs:simpleType>
|
503
|
+
|
504
|
+
<xs:simpleType name="SALECDType">
|
505
|
+
<xs:annotation>
|
506
|
+
<xs:documentation>Bedeutung ist 'A' = Aktiv,'I' = inaktiv == Ausser Handel</xs:documentation>
|
507
|
+
</xs:annotation>
|
508
|
+
<xs:restriction base="xs:string">
|
509
|
+
<xs:enumeration value="I"></xs:enumeration>
|
510
|
+
<xs:enumeration value="A"></xs:enumeration>
|
511
|
+
</xs:restriction>
|
512
|
+
</xs:simpleType>
|
513
|
+
</xs:schema>
|