oddb2xml 2.7.7 → 2.7.8

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 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