oddb2xml 2.5.0 → 2.5.1
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/.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>
|