oddb2xml 2.7.7 → 2.7.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d94c5e970a0c4917bfd547d1c71b6c889cd9ec4420e2d986eb53023bbdd2d94
4
- data.tar.gz: 2a242506a97171bbb882f5daa9e634ff1485e32bed2116d4e2dd3ffb1d948850
3
+ metadata.gz: 23dea260483ed3a99e62764331bf43924c5f095855e06c13b76d6d37e5f8d13a
4
+ data.tar.gz: ae24f986d8853676f62e41d2de071bece17540c5237d418ba14662708baf9057
5
5
  SHA512:
6
- metadata.gz: d3816794c1f84e301d091ddf35bbea6246da42bbb8fdce8bb9b9444b9cc8280e51f712ff3bc5b6b3166d2e78f942441e7600c9e86030034e93fe89bf5b5b0b91
7
- data.tar.gz: 5518a263cd2e9813b7625f2aab9e32ce455ec4ece55dc84bf8bb862f62f8a61b027ae9eb5396c92ef2a35de3acfa9e4024f6ead2a581c6c009a4cc559da75d16
6
+ metadata.gz: c5b46f3ba07e2ee63e9021b0e7cef091f2c98daca82a724a15c3819ca9e91f6504a2ff0e61ba4bbd03621cd4fcffe95d4b1596af1354e841cb9c35de818ce8fd
7
+ data.tar.gz: b76c38273ec98bae15054df8b685025a569c947d16e487daf6d393efeca0592cc506b24618776db7ee7a5b09f4d3bccc47db3ef576da446470b02d996838fee8
@@ -9,7 +9,7 @@
9
9
  Contributors: MEDEVIT <office@medevit.at> - initial API and implementation -->
10
10
  <xs:schema targetNamespace="http://elexis.ch/Elexis_Artikelstamm_v5"
11
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">
12
+ version="5" id="Elexis_Artikelstamm_v003" xmlns="http://elexis.ch/Elexis_Artikelstamm_v5" xmlns:xs="http://www.w3.org/2001/XMLSchema">
13
13
  <xs:element name="ARTIKELSTAMM">
14
14
  <xs:annotation>
15
15
  <xs:documentation xml:lang="EN">Information on
@@ -35,7 +35,10 @@
35
35
  type="DSCRType" minOccurs="1" maxOccurs="1">
36
36
  </xs:element>
37
37
  <xs:element name="DSCRF"
38
- type="DSCRType" minOccurs="1" maxOccurs="1">
38
+ type="DSCRType" minOccurs="0" maxOccurs="1">
39
+ </xs:element>
40
+ <xs:element name="DSCRI"
41
+ type="DSCRType" minOccurs="0" maxOccurs="1">
39
42
  </xs:element>
40
43
  <xs:element name="ATC"
41
44
  nillable="false" maxOccurs="1" minOccurs="0">
@@ -93,7 +96,10 @@
93
96
  type="DSCRType" minOccurs="1" maxOccurs="1">
94
97
  </xs:element>
95
98
  <xs:element name="DSCRF"
96
- type="DSCRType" minOccurs="1" maxOccurs="1">
99
+ type="DSCRType" minOccurs="0" maxOccurs="1">
100
+ </xs:element>
101
+ <xs:element name="DSCRI"
102
+ type="DSCRType" minOccurs="0" maxOccurs="1">
97
103
  </xs:element>
98
104
  <xs:element
99
105
  name="LIMITATION_PTS" type="xs:int" maxOccurs="1"
@@ -181,7 +187,10 @@
181
187
  </xs:annotation>
182
188
  </xs:element>
183
189
  <xs:element name="DSCRF"
184
- type="xs:string" minOccurs="1" maxOccurs="1">
190
+ type="xs:string" minOccurs="0" maxOccurs="1">
191
+ </xs:element>
192
+ <xs:element name="DSCRI"
193
+ type="xs:string" minOccurs="0" maxOccurs="1">
185
194
  </xs:element>
186
195
  <xs:element name="COMP"
187
196
  minOccurs="0">
@@ -280,6 +289,12 @@
280
289
  </xs:documentation>
281
290
  </xs:annotation>
282
291
  </xs:element>
292
+ <xs:element name="DOSAGE_FORMI" type="xs:string" minOccurs="0" maxOccurs="1">
293
+ <xs:annotation>
294
+ <xs:documentation>Die Darreichungsform dieses Items. zB Tablette(n) oder Spritze(n) in italienischer Sprache
295
+ </xs:documentation>
296
+ </xs:annotation>
297
+ </xs:element>
283
298
  <xs:element name="SL_ENTRY"
284
299
  type="xs:boolean" minOccurs="0" maxOccurs="1">
285
300
  <xs:annotation>
data/History.txt CHANGED
@@ -1,3 +1,6 @@
1
+ === 2.7.8 / 14.09.22
2
+ * Add fields for french and italian in artikelstamm whenever possible
3
+
1
4
  === 2.7.7/ 12.08.2022
2
5
  * Workaround for artikelstamm V3. Strip IKSCAT from A+ to A to be compatible with XSD
3
6
 
@@ -378,6 +378,7 @@ module Oddb2xml
378
378
  xml.LIMNIV lim[:niv]
379
379
  xml.DSCRD lim[:desc_de]
380
380
  xml.DSCRF lim[:desc_fr]
381
+ xml.DSCRI lim[:desc_it]
381
382
  xml.VDAT lim[:vdate]
382
383
  nbr_records += 1
383
384
  end
@@ -535,7 +536,9 @@ module Oddb2xml
535
536
  if lang == :de
536
537
  name = refdata && refdata[:desc_de] ? refdata[:desc_de] : obj[:sequence_name]
537
538
  elsif lang == :fr
538
- name = refdata && refdata[:desc_fr] ? refdata[:desc_fr] : obj[:sequence_name]
539
+ name = refdata[:desc_fr] if refdata && refdata[:desc_fr]
540
+ elsif lang == :it
541
+ name = refdata[:desc_it] if refdata && refdata[:desc_it]
539
542
  else
540
543
  return false
541
544
  end
@@ -557,7 +560,7 @@ module Oddb2xml
557
560
  @missing.each do |obj|
558
561
  ean = obj[:ean13]
559
562
  next unless check_name(obj, :de)
560
- next unless check_name(obj, :fr)
563
+ # next unless check_name(obj, :fr)
561
564
  next if /^Q/i.match?(obj[:atc])
562
565
  if obj[:prodno]
563
566
  next if emitted.index(obj[:prodno])
@@ -568,7 +571,10 @@ module Oddb2xml
568
571
  xml.GTIN ean
569
572
  xml.PRODNO obj[:prodno] if obj[:prodno]
570
573
  xml.DSCRD check_name(obj, :de)
571
- xml.DSCRF check_name(obj, :fr)
574
+ xml.DSCRF check_name(obj, :fr) if check_name(obj, :fr)
575
+ binding.pry if check_name(obj, :de) && check_name(obj, :de).eql?('Varilrix Trockensub c solv')
576
+
577
+ xml.DSCRI check_name(obj, :it) if check_name(obj, :it)
572
578
  xml.ATC obj[:atc_code] unless obj[:atc_code].empty?
573
579
  xml.IT obj[:ith_swissmedic] if obj[:ith_swissmedic]
574
580
  xml.CPT
@@ -592,6 +598,7 @@ module Oddb2xml
592
598
  xml.PRODNO ppac[:prodno] if ppac[:prodno] && !ppac[:prodno].empty?
593
599
  xml.DSCRD check_name(obj, :de)
594
600
  xml.DSCRF check_name(obj, :fr)
601
+ xml.DSCRI check_name(obj, :it)
595
602
  # xml.BNAMD
596
603
  # xml.BNAMF
597
604
  # xml.ADNAMD
@@ -945,10 +952,10 @@ module Oddb2xml
945
952
  end
946
953
  xml.DSCRD obj[:desc_de] if obj[:desc_de] && !obj[:desc_de].empty?
947
954
  xml.DSCRF obj[:desc_fr] if obj[:desc_fr] && !obj[:desc_fr].empty?
948
- xml.DSCRF obj[:desc_de] if !obj[:desc_fr] || obj[:desc_fr].empty?
955
+ xml.DSCRI obj[:desc_it] if obj[:desc_it] && !obj[:desc_it].empty?
949
956
  xml.SORTD obj[:desc_de].upcase if obj[:desc_de] && !obj[:desc_de].empty?
950
957
  xml.SORTF obj[:desc_fr].upcase if obj[:desc_fr] && !obj[:desc_fr].empty?
951
- xml.SORTF obj[:desc_de].upcase if !obj[:desc_fr] || obj[:desc_fr].empty?
958
+ xml.SORTI obj[:desc_it].upcase if obj[:desc_it] && !obj[:desc_it].empty?
952
959
  # xml.QTYUD
953
960
  # xml.QTYUF
954
961
  # xml.IMG
@@ -959,6 +966,7 @@ module Oddb2xml
959
966
  if obj[:seq]
960
967
  xml.SYN1D obj[:seq][:name_de] unless obj[:seq][:name_de].empty?
961
968
  xml.SYN1F obj[:seq][:name_fr] unless obj[:seq][:name_fr].empty?
969
+ xml.SYN1I obj[:seq][:name_it] unless obj[:seq][:name_it].empty?
962
970
  end
963
971
  if obj[:seq]
964
972
  case obj[:seq][:deductible]
@@ -1512,15 +1520,21 @@ module Oddb2xml
1512
1520
  xml.GTIN pkg_gtin.to_s.rjust(13, "0")
1513
1521
  xml.SALECD("A")
1514
1522
  # maxLength for DSCR is 50 for Artikelstamm v3
1515
- xml.DSCR(name) # for description for zur_rose
1523
+ xml.DSCR(name) # for g for zur_rose
1516
1524
  name_fr = item[:name_fr] + " " + item[:desc_fr].strip + " " + package[:desc_fr] if package && package[:desc_fr]
1517
1525
  name_fr ||= @refdata[pkg_gtin] ? @refdata[pkg_gtin][:desc_fr] : nil
1518
1526
  # Zugelassenen Packungen has only german names
1519
1527
  name_fr ||= (obj[:name_fr] + ", " + obj[:desc_fr]).strip if obj[:name_fr]
1520
1528
  # ZuRorse has only german names
1521
1529
  name_fr ||= (item[:name_fr] + ", " + item[:desc_fr]) if item
1522
- name_fr ||= name
1523
- xml.DSCRF(name_fr)
1530
+ xml.DSCRF(name_fr) if name_fr
1531
+ name_it = item[:name_it] + " " + item[:desc_it].strip + " " + package[:desc_it] if package && package[:desc_it]
1532
+ name_it ||= @refdata[pkg_gtin] ? @refdata[pkg_gtin][:desc_it] : nil
1533
+ # Zugelassenen Packungen has only german names
1534
+ name_it ||= (obj[:name_it] + ", " + obj[:desc_it]).strip if obj[:name_it]
1535
+ # ZuRorse has only german names
1536
+ name_it ||= (item[:name_it] + ", " + item[:desc_it]) if item
1537
+ xml.DSCRI(name_it) if name_it
1524
1538
  if obj[:company_name] || obj[:company_ean]
1525
1539
  xml.COMP do # Manufacturer
1526
1540
  xml.NAME obj[:company_name][0..99] # limit to 100 chars as in XSD
@@ -1562,10 +1576,10 @@ module Oddb2xml
1562
1576
  measure = info.pkg_size
1563
1577
  end
1564
1578
  xml.MEASURE measure
1565
- xml.MEASUREF measure
1566
1579
  # Die Darreichungsform dieses Items. zB Tablette(n) oder Spritze(n)
1567
1580
  xml.DOSAGE_FORM info.galenic_form.descriptions["de"] if info.galenic_form.descriptions["de"]
1568
1581
  xml.DOSAGE_FORMF info.galenic_form.descriptions["fr"] if info.galenic_form.descriptions["fr"]
1582
+ xml.DOSAGE_FORMI info.galenic_form.descriptions["it"] if info.galenic_form.descriptions["it"]
1569
1583
  end
1570
1584
  xml.SL_ENTRY "true" if sl_gtins.index(pkg_gtin)
1571
1585
  xml.IKSCAT package[:swissmedic_category][0] if package[:swissmedic_category] && package[:swissmedic_category].length > 0
@@ -1633,7 +1647,8 @@ module Oddb2xml
1633
1647
  emit_salecd(xml, ean13, obj)
1634
1648
  description = obj[:desc_de] || obj[:description] # for description for zur_rose
1635
1649
  xml.DSCR(description)
1636
- xml.DSCRF(obj[:desc_fr] || "--missing--")
1650
+ xml.DSCRF(obj[:desc_fr]) if obj[:desc_fr] && !obj[:desc_fr].empty?
1651
+ xml.DSCRI(obj[:desc_it]) if obj[:desc_it] && !obj[:desc_it].empty?
1637
1652
  if obj[:company_ean] && !obj[:company_ean].empty?
1638
1653
  xml.COMP do
1639
1654
  xml.GLN obj[:company_ean]
@@ -1737,6 +1752,7 @@ module Oddb2xml
1737
1752
  nr_products += 1
1738
1753
  xml.PRODUCT do
1739
1754
  xml.PRODNO prodno
1755
+
1740
1756
  if sequence
1741
1757
  xml.SALECD("A") # these products are always active!
1742
1758
  name_de = "#{sequence[:name_de]} #{sequence[:desc_de]}".strip if sequence[:name_de]
@@ -1746,9 +1762,10 @@ module Oddb2xml
1746
1762
  sequence[:desc_de]
1747
1763
  end
1748
1764
  name_fr = "#{sequence[:name_fr]} #{sequence[:desc_fr]}".strip if sequence[:name_fr]
1749
- name_fr ||= (ppac && ppac[:sequence_name])
1765
+ name_it = "#{sequence[:name_it]} #{sequence[:desc_it]}".strip if sequence[:name_it]
1750
1766
  override(xml, prodno, :DSCR, name_de.strip)
1751
- override(xml, prodno, :DSCRF, name_fr.strip)
1767
+ override(xml, prodno, :DSCRF, name_fr.strip) if name_fr && !name_fr.empty?
1768
+ override(xml, prodno, :DSCRI, name_it.strip) if name_it && !name_it.empty?
1752
1769
  # use overriden ATC if possibel
1753
1770
  atc = sequence[:atc] || sequence[:atc_code]
1754
1771
  xml.ATC atc if atc && !atc.empty?
@@ -1762,7 +1779,6 @@ module Oddb2xml
1762
1779
  xml.comment "Chapter70 hack prodno #{prodno} #{obj[:description].encode(xml: :text).gsub("--", "-")}"
1763
1780
  xml.SALECD("A") # these products are always active!
1764
1781
  xml.DSCR obj[:description]
1765
- xml.DSCRF ""
1766
1782
  if @limitations.index(obj[:code])
1767
1783
  xml.LIMNAMEBAG obj[:code]
1768
1784
  used_limitations << obj[:code]
@@ -1794,7 +1810,8 @@ module Oddb2xml
1794
1810
  xml.comment "Chapter70 2 hack" if lim[:chap70]
1795
1811
  xml.LIMNAMEBAG lim[:code] # original LIMCD
1796
1812
  xml.DSCR Oddb2xml.html_decode(lim[:desc_de])
1797
- xml.DSCRF Oddb2xml.html_decode(lim[:desc_fr])
1813
+ xml.DSCRF Oddb2xml.html_decode(lim[:desc_fr]) if lim[:desc_fr]
1814
+ xml.DSCRI Oddb2xml.html_decode(lim[:desc_it]) if lim[:desc_it]
1798
1815
  xml.LIMITATION_PTS(lim[:value].to_s.length > 1 ? lim[:value] : 1)
1799
1816
  end
1800
1817
  end
@@ -51,14 +51,17 @@ module Oddb2xml
51
51
  item[:product_key] = seq.ProductCommercial
52
52
  item[:desc_de] = (desc = seq.DescriptionDe) ? desc : ""
53
53
  item[:desc_fr] = (desc = seq.DescriptionFr) ? desc : ""
54
+ item[:desc_it] = (desc = seq.DescriptionIt) ? desc : ""
54
55
  item[:name_de] = (name = seq.NameDe) ? name : ""
55
56
  item[:name_fr] = (name = seq.NameFr) ? name : ""
57
+ item[:name_it] = (name = seq.NameIt) ? name : ""
56
58
  item[:swissmedic_number5] = (num5 = seq.SwissmedicNo5) ? num5.rjust(5, "0") : ""
57
59
  item[:org_gen_code] = (orgc = seq.OrgGenCode) ? orgc : ""
58
60
  item[:deductible] = (ddbl = seq.FlagSB20) ? ddbl : ""
59
61
  item[:atc_code] = (atcc = seq.AtcCode) ? atcc : ""
60
62
  item[:comment_de] = (info = seq.CommentDe) ? info : ""
61
63
  item[:comment_fr] = (info = seq.CommentFr) ? info : ""
64
+ item[:comment_it] = (info = seq.CommentIt) ? info : ""
62
65
  item[:it_code] = ""
63
66
  seq.ItCodes.ItCode.each do |itc|
64
67
  if item[:it_code].to_s.empty?
@@ -111,8 +114,10 @@ module Oddb2xml
111
114
  ean13: ean13,
112
115
  name_de: (desc = seq.NameDe) ? desc : "",
113
116
  name_fr: (desc = seq.NameFr) ? desc : "",
117
+ name_it: (desc = seq.NameIt) ? desc : "",
114
118
  desc_de: (desc = pac.DescriptionDe) ? desc : "",
115
119
  desc_fr: (desc = pac.DescriptionFr) ? desc : "",
120
+ desc_it: (desc = pac.DescriptionIt) ? desc : "",
116
121
  sl_entry: true,
117
122
  swissmedic_category: (cat = pac.SwissmedicCategory) ? cat : "",
118
123
  swissmedic_number8: (num = pac.SwissmedicNo8) ? num : "",
@@ -161,6 +166,7 @@ module Oddb2xml
161
166
  niv: (niv = lim.LimitationNiveau) ? niv : "",
162
167
  desc_de: (dsc = lim.DescriptionDe) ? dsc : "",
163
168
  desc_fr: (dsc = lim.DescriptionFr) ? dsc : "",
169
+ desc_it: (dsc = lim.DescriptionIt) ? dsc : "",
164
170
  vdate: (dat = lim.ValidFromDate) ? dat : ""
165
171
  }
166
172
  deleted = false
@@ -223,6 +229,7 @@ module Oddb2xml
223
229
  item[:last_change] = (date = Time.parse(pac.DT).to_s) ? date : "" # Date and time of last data change
224
230
  item[:desc_de] = (dscr = pac.NAME_DE) ? dscr : ""
225
231
  item[:desc_fr] = (dscr = pac.NAME_FR) ? dscr : ""
232
+ item[:desc_it] = item[:desc_de] # refdata has no italian name
226
233
  item[:atc_code] = (code = pac.ATC) ? code.to_s : ""
227
234
  item[:company_name] = (nam = pac.AUTH_HOLDER_NAME) ? nam : ""
228
235
  item[:company_ean] = (gln = pac.AUTH_HOLDER_GLN) ? gln : ""
@@ -368,6 +375,7 @@ module Oddb2xml
368
375
  company_ean: row[7],
369
376
  data_origin: "migel"
370
377
  }
378
+ data
371
379
  end
372
380
  data
373
381
  end
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "2.7.7"
2
+ VERSION = "2.7.8"
3
3
  end
data/oddb2xml.xsd CHANGED
@@ -48,6 +48,7 @@
48
48
  FIRST import all data from swissINDEX
49
49
  * DSCRD German name
50
50
  * DSCRF French name (Products/article only from ZurRose do not have a french name)
51
+ * DSCRI Italian name (Products/article only from ZurRose do not have a french name)
51
52
  * GTIN
52
53
  GTIN may be 8, 12, 13 or 14 chars long (https://en.wikipedia.org/wiki/Global_Trade_Item_Number)
53
54
  The EAN-8 code is an eight-digit barcode used usually for very small articles, such as a battery for hearing aid, where fitting a larger code onto the item would be difficult
@@ -128,6 +129,15 @@
128
129
  </xs:simpleType>
129
130
  </xs:element>
130
131
 
132
+ <xs:element name="DSCRI">
133
+ <xs:simpleType>
134
+ <xs:restriction base="xs:string">
135
+ <xs:minLength value="3" />
136
+ <xs:maxLength value="120" />
137
+ </xs:restriction>
138
+ </xs:simpleType>
139
+ </xs:element>
140
+
131
141
  <xs:element name="ART">
132
142
  <xs:complexType>
133
143
  <xs:sequence>
@@ -157,12 +167,15 @@
157
167
  <xs:element ref="ns1:BG"/>
158
168
  </xs:sequence>
159
169
  <xs:element ref="ns1:DSCRD"/>
160
- <xs:element ref="ns1:DSCRF"/>
170
+ <xs:element ref="ns1:DSCRF" minOccurs="0" />
171
+ <xs:element ref="ns1:DSCRI" minOccurs="0"/>
161
172
  <xs:element ref="ns1:SORTD"/>
162
- <xs:element ref="ns1:SORTF"/>
173
+ <xs:element ref="ns1:SORTF" minOccurs="0"/>
174
+ <xs:element ref="ns1:SORTI" minOccurs="0"/>
163
175
  <xs:sequence minOccurs="0">
164
176
  <xs:element ref="ns1:SYN1D"/>
165
177
  <xs:element ref="ns1:SYN1F"/>
178
+ <xs:element ref="ns1:SYN1I"/>
166
179
  <xs:element ref="ns1:SLOPLUS"/>
167
180
  </xs:sequence>
168
181
  <xs:element ref="ns1:ARTCOMP"/>
@@ -245,8 +258,10 @@
245
258
  </xs:element>
246
259
  <xs:element name="SORTD" type="xs:string"/>
247
260
  <xs:element name="SORTF" type="xs:string"/>
261
+ <xs:element name="SORTI" type="xs:string"/>
248
262
  <xs:element name="SYN1D" type="xs:string"/>
249
263
  <xs:element name="SYN1F" type="xs:string"/>
264
+ <xs:element name="SYN1I" type="xs:string"/>
250
265
  <xs:element name="SLOPLUS">
251
266
  <xs:simpleType>
252
267
  <xs:restriction base="xs:byte">
@@ -346,8 +361,10 @@
346
361
  <xs:element ref="ns1:QTYMD"/>
347
362
  <xs:element ref="ns1:DSCRDMD"/>
348
363
  <xs:element ref="ns1:DSCRFMD"/>
364
+ <xs:element ref="ns1:DSCRIMD"/>
349
365
  <xs:element ref="ns1:SORTDMD"/>
350
366
  <xs:element ref="ns1:SORTFMD"/>
367
+ <xs:element ref="ns1:SORTIMD"/>
351
368
  <xs:sequence minOccurs="0">
352
369
  <xs:element ref="ns1:SYN1DMD"/>
353
370
  <xs:element ref="ns1:SYN1FMD"/>
@@ -399,8 +416,10 @@
399
416
  </xs:element>
400
417
  <xs:element name="SORTDMD" type="xs:string"/>
401
418
  <xs:element name="SORTFMD" type="xs:string"/>
419
+ <xs:element name="SORTIMD" type="xs:string"/>
402
420
  <xs:element name="SYN1DMD" type="xs:string"/>
403
421
  <xs:element name="SYN1FMD" type="xs:string"/>
422
+ <xs:element name="SYN1IMD" type="xs:string"/>
404
423
  <xs:element name="SLOPLUSMD">
405
424
  <xs:simpleType>
406
425
  <xs:restriction base="xs:byte">
@@ -722,6 +741,7 @@
722
741
  <xs:element ref="ns1:LIMNIV"/>
723
742
  <xs:element name="DSCRD" type="xs:string"/>
724
743
  <xs:element name="DSCRF" type="xs:string"/>
744
+ <xs:element name="DSCRI" type="xs:string"/>
725
745
  <xs:element ref="ns1:VDAT"/>
726
746
  </xs:sequence>
727
747
  <xs:attribute name="DT" use="required"/>
@@ -780,6 +800,7 @@
780
800
  <xs:element ref="ns1:LIMNIVMD"/>
781
801
  <xs:element name="DSCRDMD" type="xs:string"/>
782
802
  <xs:element name="DSCRFMD" type="xs:string"/>
803
+ <xs:element name="DSCRIMD" type="xs:string"/>
783
804
  <xs:element ref="ns1:VDATMD"/>
784
805
  </xs:sequence>
785
806
  <xs:attribute name="DT" use="required"/>
@@ -844,7 +865,8 @@
844
865
  <xs:element minOccurs="0" ref="ns1:PRODNO"/>
845
866
  <xs:sequence minOccurs="0">
846
867
  <xs:element ref="ns1:DSCRD"/>
847
- <xs:element ref="ns1:DSCRF"/>
868
+ <xs:element ref="ns1:DSCRF" minOccurs="0"/>
869
+ <xs:element ref="ns1:DSCRI" minOccurs="0"/>
848
870
  </xs:sequence>
849
871
  <xs:element minOccurs="0" ref="ns1:ADINFD"/>
850
872
  <xs:element minOccurs="0" ref="ns1:ADINFF"/>
@@ -920,6 +942,7 @@
920
942
  <xs:sequence minOccurs="0">
921
943
  <xs:element ref="ns1:DSCRDMD"/>
922
944
  <xs:element ref="ns1:DSCRFMD"/>
945
+ <xs:element ref="ns1:DSCRIMD"/>
923
946
  </xs:sequence>
924
947
  <xs:element minOccurs="0" ref="ns1:ADINFDMD"/>
925
948
  <xs:element minOccurs="0" ref="ns1:ADINFFMD"/>
@@ -1088,6 +1111,7 @@
1088
1111
  <xs:element name="ITMD" type="xs:string"/>
1089
1112
  <xs:element name="DSCRDMD" type="xs:string"/>
1090
1113
  <xs:element name="DSCRFMD" type="xs:string"/>
1114
+ <xs:element name="DSCRIMD" type="xs:string"/>
1091
1115
  <xs:element name="VDATMD" type="xs:NMTOKEN"/>
1092
1116
  <xs:element name="RESULTMD">
1093
1117
  <xs:complexType>
data/shell.nix CHANGED
@@ -4,6 +4,8 @@ with import <nixpkgs> {};
4
4
  stdenv.mkDerivation {
5
5
  name = "env";
6
6
  buildInputs = [
7
+ ruby_3_0
8
+ rubyPackages_3_0.safe_yaml
7
9
  ruby_3_0.devEnv
8
10
  git
9
11
  python
@@ -11,8 +11,8 @@ describe Oddb2xml::Builder do
11
11
  expect(@inhalt).not_to be nil
12
12
  unless @inhalt.index(expected_value)
13
13
  puts expected_value
14
+ binding.pry # TODO: Must not be active in production!!
14
15
  end
15
- # binding.irb unless @inhalt.index(expected_value)
16
16
  expect(@inhalt.index(expected_value)).not_to be nil
17
17
  end
18
18
 
@@ -67,6 +67,7 @@ describe Oddb2xml::Builder do
67
67
  <SALECD>A</SALECD>
68
68
  <DSCR>3M MEDIPORE+PAD Absorbtionsverb 10x15cm 8 x 25 Stk</DSCR>
69
69
  <DSCRF>3M MEDIPORE+PAD compr absorb 10x15cm 8 x 25 pce</DSCRF>
70
+ <DSCRI>3M MEDIPORE+PAD Absorbtionsverb 10x15cm 8 x 25 Stk</DSCRI>
70
71
  <COMP>
71
72
  <GLN>7610182000007</GLN>
72
73
  </COMP>
@@ -79,7 +80,6 @@ describe Oddb2xml::Builder do
79
80
  <PRODNO>5815801</PRODNO>
80
81
  <SALECD>A</SALECD>
81
82
  <DSCR>PRIORIX TETRA Trockensub c Solv Fertspr</DSCR>
82
- <DSCRF>Priorix-Tetra, Pulver und Lösungsmittel zur Herstellung einer Injektionslösung</DSCRF>
83
83
  <ATC>J07BD54</ATC>
84
84
  </PRODUCT>)
85
85
  expect(@inhalt.index(expected)).not_to be nil
@@ -118,7 +118,6 @@ describe Oddb2xml::Builder do
118
118
  <PRODNO>5559401</PRODNO>
119
119
  <SALECD>A</SALECD>
120
120
  <DSCR>Nutriflex Lipid plus, Infusionsemulsion, 1250ml</DSCR>
121
- <DSCRF/>
122
121
  <ATC>B05BA10</ATC>
123
122
  </PRODUCT>)
124
123
  expect(@inhalt.index(expected)).not_to be nil
@@ -200,6 +199,7 @@ describe Oddb2xml::Builder do
200
199
  <SALECD>A</SALECD>
201
200
  <DSCR>Dibase 10'000 Tropfen 10000 IE/ml Fl 10 ml</DSCR>
202
201
  <DSCRF>Dibase 10'000 gouttes 10000 UI/ml fl 10 ml</DSCRF>
202
+ <DSCRI>Dibase 10'000 gouttes 10000 UI/ml fl 10 ml</DSCRI>
203
203
  <COMP>
204
204
  <NAME>Gebro Pharma AG</NAME>
205
205
  <GLN>7612053000000</GLN>
@@ -208,7 +208,6 @@ describe Oddb2xml::Builder do
208
208
  <PPUB>9.25</PPUB>
209
209
  <PKG_SIZE>1</PKG_SIZE>
210
210
  <MEASURE>Flasche(n)</MEASURE>
211
- <MEASUREF>Flasche(n)</MEASUREF>
212
211
  <DOSAGE_FORM>orale Tropflösung</DOSAGE_FORM>
213
212
  <SL_ENTRY>true</SL_ENTRY>
214
213
  <IKSCAT>D</IKSCAT>
@@ -232,6 +231,7 @@ describe Oddb2xml::Builder do
232
231
  <SALECD>A</SALECD>
233
232
  <DSCR>Carbaderm Creme Tb 300 ml</DSCR>
234
233
  <DSCRF>Carbaderm crème tb 300 ml</DSCRF>
234
+ <DSCRI>Carbaderm crème tb 300 ml</DSCRI>
235
235
  <PEXF>14.61</PEXF>
236
236
  <PPUB>26.95</PPUB>
237
237
  <SL_ENTRY>true</SL_ENTRY>
@@ -244,7 +244,6 @@ describe Oddb2xml::Builder do
244
244
  <PHAR>0055805</PHAR>
245
245
  <SALECD>A</SALECD>
246
246
  <DSCR>TENSOPLAST Kompressionsbinde 5cmx4.5m</DSCR>
247
- <DSCRF>--missing--</DSCRF>
248
247
  <PEXF>0.00</PEXF>
249
248
  <PPUB>22.95</PPUB>
250
249
  </ITEM>),
@@ -253,6 +252,7 @@ describe Oddb2xml::Builder do
253
252
  <SALECD>A</SALECD>
254
253
  <DSCR>LANSOYL Gel 225 g</DSCR>
255
254
  <DSCRF>LANSOYL gel 225 g</DSCRF>
255
+ <DSCRI>LANSOYL Gel 225 g</DSCRI>
256
256
  <COMP>
257
257
  <NAME>Actipharm SA</NAME>
258
258
  <GLN>7601001002012</GLN>
@@ -261,7 +261,6 @@ describe Oddb2xml::Builder do
261
261
  <PPUB>16.25</PPUB>
262
262
  <PKG_SIZE>225</PKG_SIZE>
263
263
  <MEASURE>g</MEASURE>
264
- <MEASUREF>g</MEASUREF>
265
264
  <DOSAGE_FORM>Gelée</DOSAGE_FORM>
266
265
  <IKSCAT>D</IKSCAT>
267
266
  <LPPV>true</LPPV>
@@ -273,6 +272,7 @@ describe Oddb2xml::Builder do
273
272
  <SALECD>A</SALECD>
274
273
  <DSCR>3TC Filmtabl 150 mg 60 Stk</DSCR>
275
274
  <DSCRF>3TC cpr pell 150 mg 60 pce</DSCRF>
275
+ <DSCRI>3TC cpr pell 150 mg 60 pce</DSCRI>
276
276
  <COMP>
277
277
  <NAME>ViiV Healthcare GmbH</NAME>
278
278
  <GLN>7601001392175</GLN>
@@ -281,7 +281,6 @@ describe Oddb2xml::Builder do
281
281
  <PPUB>205.3</PPUB>
282
282
  <PKG_SIZE>60</PKG_SIZE>
283
283
  <MEASURE>Tablette(n)</MEASURE>
284
- <MEASUREF>Tablette(n)</MEASUREF>
285
284
  <DOSAGE_FORM>Filmtabletten</DOSAGE_FORM>
286
285
  <DOSAGE_FORMF>Comprimés filmés</DOSAGE_FORMF>
287
286
  <SL_ENTRY>true</SL_ENTRY>
@@ -296,6 +295,7 @@ describe Oddb2xml::Builder do
296
295
  <SALECD>A</SALECD>
297
296
  <DSCR>Hirudoid Creme 3 mg/g 40 g</DSCR>
298
297
  <DSCRF>Hirudoid crème 3 mg/g 40 g</DSCRF>
298
+ <DSCRI>Hirudoid crema 3 mg/g 40 g</DSCRI>
299
299
  <COMP>
300
300
  <NAME>Medinova AG</NAME>
301
301
  <GLN>7601001002258</GLN>
@@ -304,7 +304,6 @@ describe Oddb2xml::Builder do
304
304
  <PPUB>8.8</PPUB>
305
305
  <PKG_SIZE>40</PKG_SIZE>
306
306
  <MEASURE>g</MEASURE>
307
- <MEASUREF>g</MEASUREF>
308
307
  <DOSAGE_FORM>Creme</DOSAGE_FORM>
309
308
  <SL_ENTRY>true</SL_ENTRY>
310
309
  <IKSCAT>D</IKSCAT>
@@ -317,6 +316,7 @@ describe Oddb2xml::Builder do
317
316
  <SALECD>A</SALECD>
318
317
  <DSCR>Hirudoid Creme 3 mg/g 100 g</DSCR>
319
318
  <DSCRF>Hirudoid crème 3 mg/g 100 g</DSCRF>
319
+ <DSCRI>Hirudoid crema 3 mg/g 100 g</DSCRI>
320
320
  <COMP>
321
321
  <NAME>Medinova AG</NAME>
322
322
  <GLN>7601001002258</GLN>
@@ -332,6 +332,7 @@ describe Oddb2xml::Builder do
332
332
  <SALECD>A</SALECD>
333
333
  <DSCR>ANCOPIR Inj Lös 5 Amp 2 ml</DSCR>
334
334
  <DSCRF>Ancopir, sol inj</DSCRF>
335
+ <DSCRI>Ancopir, sol inj</DSCRI>
335
336
  <COMP>
336
337
  <NAME>Dr. Grossmann AG, Pharmaca</NAME>
337
338
  <GLN/>
@@ -340,7 +341,6 @@ describe Oddb2xml::Builder do
340
341
  <PPUB>8.55</PPUB>
341
342
  <PKG_SIZE>5</PKG_SIZE>
342
343
  <MEASURE>Ampulle(n)</MEASURE>
343
- <MEASUREF>Ampulle(n)</MEASUREF>
344
344
  <DOSAGE_FORM>Injektionslösung</DOSAGE_FORM>
345
345
  <DOSAGE_FORMF>Solution injectable</DOSAGE_FORMF>
346
346
  <SL_ENTRY>true</SL_ENTRY>
@@ -353,6 +353,7 @@ describe Oddb2xml::Builder do
353
353
  <SALECD>A</SALECD>
354
354
  <DSCR>FERRO-GRADUMET Depottabl 30 Stk</DSCR>
355
355
  <DSCRF>FERRO-GRADUMET cpr dépôt 30 pce</DSCRF>
356
+ <DSCRI>FERRO-GRADUMET Depottabl 30 Stk</DSCRI>
356
357
  <COMP>
357
358
  <NAME>Farmaceutica Teofarma Suisse SA</NAME>
358
359
  <GLN>7601001374539</GLN>
@@ -361,7 +362,6 @@ describe Oddb2xml::Builder do
361
362
  <PPUB>13.80</PPUB>
362
363
  <PKG_SIZE>30</PKG_SIZE>
363
364
  <MEASURE>Tablette(n)</MEASURE>
364
- <MEASUREF>Tablette(n)</MEASUREF>
365
365
  <DOSAGE_FORM>Tupfer</DOSAGE_FORM>
366
366
  <DOSAGE_FORMF>Compresse</DOSAGE_FORMF>
367
367
  <IKSCAT>C</IKSCAT>
@@ -372,6 +372,7 @@ describe Oddb2xml::Builder do
372
372
  <SALECD>A</SALECD>
373
373
  <DSCR>3TC Filmtabl 150 mg</DSCR>
374
374
  <DSCRF>3TC cpr pell 150 mg</DSCRF>
375
+ <DSCRI>3TC cpr pell 150 mg</DSCRI>
375
376
  <ATC>J05AF05</ATC>
376
377
  <SUBSTANCE>Lamivudinum</SUBSTANCE>
377
378
  </PRODUCT>),
@@ -380,13 +381,13 @@ describe Oddb2xml::Builder do
380
381
  <SALECD>A</SALECD>
381
382
  <DSCR>SEROCYTOL Herz-Gefässe Supp 3 Stk</DSCR>
382
383
  <DSCRF>SEROCYTOL Coeur-Vaisseaux supp 3 pce</DSCRF>
384
+ <DSCRI>SEROCYTOL Herz-Gefässe Supp 3 Stk</DSCRI>
383
385
  <COMP>
384
386
  <NAME>Serolab SA (succursale de Remaufens)</NAME>
385
387
  <GLN>7640128710004</GLN>
386
388
  </COMP>
387
389
  <PKG_SIZE>3</PKG_SIZE>
388
390
  <MEASURE>Suppositorien</MEASURE>
389
- <MEASUREF>Suppositorien</MEASUREF>
390
391
  <DOSAGE_FORM>suppositoire</DOSAGE_FORM>
391
392
  <IKSCAT>B</IKSCAT>
392
393
  <PRODNO>0027701</PRODNO>
@@ -396,6 +397,7 @@ describe Oddb2xml::Builder do
396
397
  <SALECD>A</SALECD>
397
398
  <DSCR>Humalog Inj Lös Durchstf 10 ml</DSCR>
398
399
  <DSCRF>Humalog sol inj flac 10 ml</DSCRF>
400
+ <DSCRI>Humalog sol iniez fiala 10 ml</DSCRI>
399
401
  <COMP>
400
402
  <NAME>Eli Lilly (Suisse) SA</NAME>
401
403
  <GLN>7601001261853</GLN>
@@ -404,7 +406,6 @@ describe Oddb2xml::Builder do
404
406
  <PPUB>51.3</PPUB>
405
407
  <PKG_SIZE>1</PKG_SIZE>
406
408
  <MEASURE>Flasche(n)</MEASURE>
407
- <MEASUREF>Flasche(n)</MEASUREF>
408
409
  <DOSAGE_FORM>Injektionslösung</DOSAGE_FORM>
409
410
  <DOSAGE_FORMF>Solution injectable</DOSAGE_FORMF>
410
411
  <SL_ENTRY>true</SL_ENTRY>
@@ -418,6 +419,7 @@ describe Oddb2xml::Builder do
418
419
  <SALECD>I</SALECD>
419
420
  <DSCR>SEROCYTOL Kolon Supp 3 Stk</DSCR>
420
421
  <DSCRF>SEROCYTOL Côlon supp 3 pce</DSCRF>
422
+ <DSCRI>SEROCYTOL Kolon Supp 3 Stk</DSCRI>
421
423
  <COMP>
422
424
  <GLN>7640128710004</GLN>
423
425
  </COMP>
@@ -429,6 +431,7 @@ describe Oddb2xml::Builder do
429
431
  <SALECD>A</SALECD>
430
432
  <DSCR>Varilrix Trockensub c solv</DSCR>
431
433
  <DSCRF>Varilrix subst sèche c solv</DSCRF>
434
+ <DSCRI>Varilrix sost secca c solv</DSCRI>
432
435
  <ATC>J07BK01</ATC>
433
436
  <LIMNAMEBAG>0808</LIMNAMEBAG>
434
437
  <SUBSTANCE>Vaccinum virus varicellae vivus attenuat. (Stamm OKA)</SUBSTANCE>
@@ -438,6 +441,7 @@ describe Oddb2xml::Builder do
438
441
  <SALECD>A</SALECD>
439
442
  <DSCR>Varilrix Trockensub c solv Fertspr 0.500 ml</DSCR>
440
443
  <DSCRF>Varilrix subst sèche c solv ser prê 0.500 ml</DSCRF>
444
+ <DSCRI>Varilrix sost secca c solv sir preriempita 0.500 ml</DSCRI>
441
445
  <COMP>
442
446
  <NAME>GlaxoSmithKline AG</NAME>
443
447
  <GLN>7601001000674</GLN>
@@ -454,14 +458,12 @@ describe Oddb2xml::Builder do
454
458
  <!--Chapter70 hack prodno 2069639 Ceres Urtinkturen gemäss L2 mit - im Kommentar-->
455
459
  <SALECD>A</SALECD>
456
460
  <DSCR>Ceres Urtinkturen gemäss L2 mit -- im Kommentar</DSCR>
457
- <DSCRF/>
458
461
  </PRODUCT>),
459
462
  "Chapter 70 item" => %(<ITEM PHARMATYPE="P">
460
463
  <GTIN>2500000588532</GTIN>
461
464
  <PHAR>2069639</PHAR>
462
465
  <SALECD>A</SALECD>
463
466
  <DSCR>EINF ARZNEI Ceres Urtinktur spez 20ml</DSCR>
464
- <DSCRF>--missing--</DSCRF>
465
467
  <PEXF>23.44</PEXF>
466
468
  <PPUB>31.30</PPUB>
467
469
  <!--Chapter70 hack 2500000588532 EINF ARZNEI Ceres Urtinktur spez 20ml-->
@@ -480,7 +482,6 @@ Der behandelnde Arzt ist verpflichtet, die erforderlichen Daten laufend im vorge
480
482
  <PRODNO>1336901</PRODNO>
481
483
  <SALECD>A</SALECD>
482
484
  <DSCR>Pethidin HCl Amino 100 mg/2 ml, Injektionslösung</DSCR>
483
- <DSCRF/>
484
485
  <ATC>N02AB02</ATC>
485
486
  </PRODUCT>)}
486
487
 
data/spec/builder_spec.rb CHANGED
@@ -35,7 +35,7 @@ ARTICLE_ZURROSE_ELEMENTS = [
35
35
  ["ARTICLE/ART/ARTINS/NINCD", "20"]
36
36
  ]
37
37
 
38
- ARTICLE_NAROPIN = %(<REF_DATA>1</REF_DATA>
38
+ ARTICLE_NAROPIN = %( <REF_DATA>1</REF_DATA>
39
39
  <SMCAT>B</SMCAT>
40
40
  <SMNO>54015011</SMNO>
41
41
  <PRODNO>5401501</PRODNO>
@@ -44,8 +44,10 @@ ARTICLE_NAROPIN = %(<REF_DATA>1</REF_DATA>
44
44
  <BG>N</BG>
45
45
  <DSCRD>NAROPIN Inj Lös 0.2 % 10ml Duofit Amp 5 Stk</DSCRD>
46
46
  <DSCRF>NAROPIN sol inj 0.2 % 10ml amp duofit 5 pce</DSCRF>
47
+ <DSCRI>NAROPIN Inj Lös 0.2 % 10ml Duofit Amp 5 Stk</DSCRI>
47
48
  <SORTD>NAROPIN INJ LÖS 0.2 % 10ML DUOFIT AMP 5 STK</SORTD>
48
49
  <SORTF>NAROPIN SOL INJ 0.2 % 10ML AMP DUOFIT 5 PCE</SORTF>
50
+ <SORTI>NAROPIN INJ LÖS 0.2 % 10ML DUOFIT AMP 5 STK</SORTI>
49
51
  <ARTCOMP>
50
52
  <COMPNO>7601001402539</COMPNO>
51
53
  </ARTCOMP>
@@ -54,7 +56,8 @@ ARTICLE_NAROPIN = %(<REF_DATA>1</REF_DATA>
54
56
  <BC>7680540150118</BC>
55
57
  <BCSTAT>A</BCSTAT>
56
58
  </ARTBAR>
57
- </ART>)
59
+ </ART>
60
+ )
58
61
 
59
62
  ARTICLE_COMMON_ELEMENTS = [
60
63
  ["ARTICLE/ART/REF_DATA", "1"],
@@ -568,11 +571,10 @@ describe Oddb2xml::Builder do
568
571
 
569
572
  it "should generate ATC for 7680002770014" do
570
573
  oddb_product_xml = IO.read(File.join(Oddb2xml::WORK_DIR, "oddb_product.xml"))
571
- text = %(<GTIN>7680002770014</GTIN>
574
+ text = %(<GTIN>7680002770021</GTIN>
572
575
  <PRODNO>0027701</PRODNO>
573
- <DSCRD>SEROCYTOL Herz-Gefässe Supp 3 Stk</DSCRD>
574
- <DSCRF>SEROCYTOL Coeur-Vaisseaux supp 3 pce</DSCRF>
575
- <ATC>J06AA99</ATC>
576
+ <DSCRD>Coeur-Vaisseaux Sérocytol, suppositoire</DSCRD>
577
+ <ATC>J06AA</ATC>
576
578
  <IT>08.07.</IT>
577
579
  <CPT/>)
578
580
  expect(oddb_product_xml.index(text)).to be >= 1
@@ -583,7 +585,6 @@ describe Oddb2xml::Builder do
583
585
  text2 = %( <GTIN>7680002770021</GTIN>
584
586
  <PRODNO>0027701</PRODNO>
585
587
  <DSCRD>Coeur-Vaisseaux Sérocytol, suppositoire</DSCRD>
586
- <DSCRF>Coeur-Vaisseaux Sérocytol, suppositoire</DSCRF>
587
588
  <ATC>J06AA</ATC>
588
589
  <IT>08.07.</IT>
589
590
  <CPT/>)
@@ -72,6 +72,7 @@ describe Oddb2xml::RefdataExtractor do
72
72
  no8: "62069008",
73
73
  desc_de: "LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk",
74
74
  desc_fr: "LEVETIRACETAM DESITIN mini cpr pel 250 mg 30 pce",
75
+ desc_it: "LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk",
75
76
  atc_code: "N03AX14",
76
77
  last_change: "2017-12-08 00:00:00 +0000",
77
78
  company_name: "Desitin Pharma GmbH",
@@ -98,6 +99,7 @@ describe Oddb2xml::RefdataExtractor do
98
99
  data_origin: "refdata",
99
100
  desc_de: "TUBEGAZE Verband weiss Nr 12 20m Finger gross",
100
101
  desc_fr: "TUBEGAZE pans tubul blanc Nr 12 20m doigts grands",
102
+ desc_it: "TUBEGAZE Verband weiss Nr 12 20m Finger gross",
101
103
  atc_code: "",
102
104
  company_name: "IVF HARTMANN AG",
103
105
  company_ean: "7601001000896"}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oddb2xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.7
4
+ version: 2.7.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yasuhiro Asaka, Zeno R.R. Davatz, Niklaus Giger