oddb2xml is a ruby gem developed and maintained by yweese GmbH.
The source code is available under https://github.com/zdavatz/oddb2xml.
It might be installed (Ruby >= 1.9 required) via "gem install oddb2xml".
Under http://dev.ywesee.com/Main/Oddb2xml you find more information on how the data is generated.
In this XSD file we refer to the following sources:
# swissINDEX
## Pharma: https://index.ws.e-mediat.net/Swissindex/Pharma/ws_Pharma_V101.asmx?WSDL"
## NonPharma https://index.ws.e-mediat.net/Swissindex/NonPharma/ws_NonPharma_V101.asmx?WSDL"
# Preparations.xml
## Extracted from http://bag.e-mediat.net/SL2007.Web.External/File.axd?file=XMLPublications.zip
# Packungen.xls https://www.swissmedic.ch/arzneimittel/00156/00221/00222/00230/index.html?lang=de
# Prices (ZurRose) http://zurrose.com/fileadmin/main/lib/download.php?file=/fileadmin/user_upload/downloads/ProduktUpdate/IGM11_mit_MwSt/Vollstamm/transfer.dat
# https://raw.github.com/zdavatz/oddb2xml_files/master/BM_Update.txt
see Anhang 1, 4, 5 und 6 zur AMZV; SR 821.212.22. http://www.admin.ch/opc/de/classified-compilation/20011693/
# LPPV: https://raw.github.com/zdavatz/oddb2xml_files/master/LPPV.txt
# https://www.medregbm.admin.ch/Publikation/CreateExcelListBetriebs
# https://www.medregbm.admin.ch/Publikation/CreateExcelListMedizinalPersons
# (epha-)interactions https://download.epha.ch/cleaned/matrix.csv
For historical reasons the generated *.XML have not a common layout and some fields have different meanings in different files.
The two files oddb_article and oddb_product are not normalized. There if for one swissmedic IKSNR several
packages are available you will find an entry inside oddb_article and oddb_product for each of them.
The GTIN (Global Trade Item Number, aka EAN13) is emitted as field GTIN in oddb_product.xml. Inside
oddb_article you find it as element BC inside ARTBAR (Article barcode).
Some comments for invidual fields:
NINCD: possible values are 10 => BAG-XML (SL/LS), 13 -> MiGel, 20 => (LPPV) Limitation, empty => NonPharma)
GENCD: possible values are 'O' for original and 'G' for generic, 'K' for Komplementärmedizin.
Since decembre 2015 we found some products with a 'C' which probably stands for Co-Marketing
We don't have a list of possible generics for a given original.
It is however possible find generics via ch.oddb.org where a sophisticated algorithm searches for similar medicaments
taking into account all ATC-codes and galenic information.
PHAR Pharmacode: Taken from swissINDEX or ZurRose characters 3..9
PEXF Price Ex-Factory (exkl. VAT): Taken from the ZurRose.dat characters 60..65
PPUB Public Price (inkl. VAT): Taken from the ZurRose.dat characters 66..71
SLOPLUS Selbsbehalt/deductilbe, where 1 => 20%, 2 => 10%, '' => not known
REF_DATA 1 in oddb_article if coming from a refdata source (migel, bag, swissmedic), else 0
FIRST import all data from swissINDEX
* DSCRD German name
* DSCRF French name (Products/article only from ZurRose do not have a french name)
* GTIN
* PHAR
* Status
* Since STDATE
* Bezeichnung (DE / FR)
* QTY Quantity, e.g. 3 Flaschen 5 ml. The EAN13 specified that this package contains 3 bottles. Think of it as
as description of volume/size of the content.
The QTY is present in the oddb_product.xml, but not in the oddb_article.xml
In oddb_calc.xml you find QTY/UNIT, where QTY is a float and unit something like ml, mg, etc.
* ATC
* company_name (only for migel)
* GLN company_ean, field COMPNO in oddb_article
then you add the following flags via Preparations.xml
* Ex-Factory Price
* Public Price
* SL Price valid from
* decuctible/SLOPLUS
* Original / Generic
* all Limitations (go into oddb_limitations.xml)
* narcotics (FlagNarcosis) emitted as element BG with value 'Y' or 'N'
then you add the following flags via Packungen.xls
* Abgabekategorie (column 'N') as field SMCAT with the possible value
see also https://www.swissmedic.ch/arzneimittel/00156/00221/00222/00230/index.html?lang=de
A Einmalige Abgabe auf ärztliche oder tierärztliche Verschreibung
B Abgabe auf ärztliche oder tierärztliche Verschreibung
C Abgabe nach Fachberatung durch Medizinalpersonen
D Abgabe nach Fachberatung
E Abgabe ohne Fachberatung
* IT IT-Number aka Index Therapeuticus: column 'E' from packages.xlsx
* ATC (if missing from swissINDEX) -> Field SubstanceSwissmedic in oddb_article.xml
* Wirkstoff (column 'O') -> Field SubstanceSwissmedic in oddb_article.xml
* Composition (column 'P') -> Field CompositionSwissmedic in oddb_product.xml
* Packungsgrösse (column 'L') -> Field PackGrSwissmedic in oddb_article.xml
* Packungseinheit(column 'L') -> Field EinheitSwissmedic in oddb_article.xml
In oddb_product.xml PRODNO must be exactly 7 digits long. For all drugs appearing in the Packungen.xlsx the
PRODNO is defined as IKSNR (column A Zulassungsnummer) + SEQ (column b Dosisstärkenummer) and the DSCRD is
taken vom refdata.
Bedeutung ist 'A' = Aktiv,'I' = inaktiv == Ausser Handel
meaning is 'A' = active,'I' = inactive == out of trade
possible values are 10 => BAG-XML (SL/LS), 13 -> MiGel, 20 => (LPPV) Limitation, empty => NonPharma)