Developer


techn. Dokumentation der Media-Soap-Api und Msv3-Rest-Api - Stand Januar 2021


  • Deutsch
  • Englisch
  • Französisch
  • Russisch
  • Italienisch
  • Niederländisch
  • Tschechisch
  • Dänisch
  • Spanisch
  • Griechisch
  • Norwegisch
  • Polnisch
  • Portugiesisch
  • Schwedisch
  • Slowenisch

Die Schnittstelle steht über SOAP zur Verfügung. Es wird lediglich ein Zugang benötigt. Ein Testzugang oder eine Test-SOAP-Umgebung existieren nicht. Der direkte Zugriff bzw. eine Verlinkung auf die PDF-Beipackzettel ist nicht möglich. Die SOAP-Definitionsdatei (WSDL) ist unter folgendem URL abrufbar:

https://api.gebrauchs.info/interface/gebrauchsinfo.wsdl

  1. rpcTest - grundsätzliche Testanfrage, um ein SOAP-Handshake zu probieren

  2. getPZNList - Abfrage aller PZNs, zu denen ein PDF-Beipackzettel verfügbar ist

  3. getPDFLink - Abfrage eines Deeplinks des PDF-Beipackzettels zur angegebenen PZN

  4. getLMIVList - Abfrage aller PZNs, zu denen ein PDF-LMIV* verfügbar ist

  5. getLMIVLink - Abfrage eines Deeplinks des LMIV-PDF zur angegebenen PZN

  6. getBIOZIDList - Abfrage aller PZNs, zu denen ein PDF-Biozid verfügbar ist

  7. getAdditionalListBiozid - Abfrage aller PZNs, zu denen bei den zusätzlichen Artikeltexten die N-Nummern enthalten sind

  8. getBIOZIDLink - Abfrage eines Deeplinks des PDF-Biozid zur angegebenen PZN

  9. getRXList - Abfrage aller PZNs, zu denen ein PDF-RX verfügbar ist

  10. getRXLink - Abfrage eines Deeplinks des PDF-RX zur angegebenen PZN

  11. getAdditionalList - Abfrage aller PZNs, zu denen eine zus. Artikelinformation verfügbar ist

  12. getAdditionalData - Abfrage von zusätzlichen Artikelinformationen (Anwendungsgebiet etc.)

  13. getRatingsPznTimeList - Abfrage aller PZNs, zu denen Produktbewertungen vorliegen

  14. getRatingNumber - Abfrage Anzahl/Bestand von Produktbewertungen zur angegebenen PZN

  15. getAverageRatingNumber - optimierte Abfrage Anzahl und Durchschnitts-Bewertung von Produktbewertungen zur angegebenen PZN

  16. getRatings - Abfrage der Produktbewertungen zur angegebenen PZN

  17. insertRating - Eintrag einer Produktbewertung zur angegebenen PZN

  18. checkItx - Prüfung auf Produkt-Wechselwirkungen

  19. getWirkstoffeList - Abfrage aller PZNs, zu denen Wirkstoffe verfügbar sind

  20. getWirkstoffe - qualifizierte Liste von Wirkstoffen und Bestandteilen eines Artikel

  21. getArtikelMitWirkstoff - Suche von Artikeln mit bestimmten Wirkstoffen

  22. getArtikelMitWirkstoffKombi - Suche von Artikeln gleicher Wirkstoffkombination

  23. getInciList - Abfrage aller PZNs, zu denen INCI-Inhaltsstoffe verfügbar sind

  24. getInci - detaillierte Liste von Inci-Inhaltsstoffen und Komponenten eines Artikel

  25. getGPSR - GPSR-Daten eines Artikels / Herstellers

  26. getGpsrPznList - Abfrage aller PZNs, zu denen GPSR-Daten verfügbar sind

  27. getGpsrHerstellerList - Abfrage aller Hersteller-Keys, zu denen GPSR-Daten verfügbar sind

Um unnötige Anfragen an die Schnittstelle zu vermeiden, Ihre Web-Applikation nicht zu verlangsamen und dem Endanwender keine funktionslosen PDF-Links anzubieten, sollten Sie mindestens einmal täglich eine Gesamtliste aller zur Verfügung stehenden PZN-Beipackzettel abfragen - ein bis maximal dreimal pro Tag ist absolut ausreichend. Dazu dient die Funktion „getPZNList“, die PZNs und den Zeitstempel der jeweiligen Datenerstellung / -änderung (bei PZN/Std-Beipackzettel, LMIV, BIOZID, RX) als eine Liste/Array (je nach Anbindungstechnologie) zurückliefert. Diese PZN-Liste sollten Sie vorhalten und vor Anfrage eines PDF-Deeplinks prüfen.

Die PZN-Listen sind auch als aktuelle CSV-Dateien verfügbar.

Diese Abfragen sind analog zu den Funktionen der Calls für PDF-Beipackzettel. Sie sind ebenfalls in jeweils zwei Funktionen unterteilt. Eine Funktion dient zur Listenabfrage der verfügbaren PZNs (getLMIVList, getBIOZIDList, getRXList, getAdditionalListBiozid) und eine Funktion dient zur Abfrage eines Links zum Artikel-PDF für LMIV, Biozid oder RX (getLMIVLink, getBIOZIDLink, getRXLink)(PZNS aus getAdditionalListBiozid dienen zur Abfrage bei getAdditionalData). Es gilt hier die gleiche Parametrierung wie beim Standard-Call PDF-Beipackzettel (Links sind ebenfalls 24h gültig).

PZN-Listen auch als CSV-Dateien verfügbar

Nach Übergabe der Zugangsdaten und der bestimmten PZN liefert die Funktion ein String-Array folgender Elemente zurück, sofern zusätzliche Artikelinformationen vorhanden sind.

homoeopathikum, bioprodukt → 0=nein 1=ja

biokontrollstation, beschreibung, anwendungsgebiete, gegenanzeigen, vorsichtsmassnahmen, wechselwirkungen, warnhinweise, dosierungsanleitung, anwendungsfehler, nebenwirkungen, haltbarkeit, wirkstoff_und_bestandteile, ausstelldatum_beipackzettel → Text, pflichttext

PZN-Liste auch als CSV-Datei verfügbar

Mit getAdditionalListBiozid erhalten Sie alle PZNs zu denen in den Daten des getAdditionalData-Calls eine Biozid-NNummer enthalten ist.

Dient zur Performance-Optimierung von Abfragen für Produkbewertungen. Dieser Call liefert eine qualifizierte PZN-Liste mit Zeitstempel-Info zur letzten Bewertung pro PZN.

Diese Daten sind nur als Call und nicht zusätzlich als CSV-Liste abrufbar.

Liefert die Anzahl von gültigen Produktbewertungen zur angegebenen PZN. Nutzbar als Hilfsfunktion für den Aufbau einer Paginierung, da das Ergebnis-Objekt/-Array ggf. kleiner ist, als das umfassende Rückgabe-Objekt aller Produktbewertungen.

Liefert die Gesamtanzahl von gültigen Produktbewertungen zur angegebenen PZN ("ratingNumber") und deren Durchschnittstwert zur Berwertung ("ratingAverage") als Fließkommazahl mit einer Nachkommastelle. Ersetzt die Calls getRatingNumber und getRatings, wenn nur die Durchschnitts-Bewertung benötigt wird.

Nach Übergabe der Zugangsdaten und der bestimmten PZN liefert die Funktion ein String-Array folgender Elemente zurück, sofern Produkbewertungen vorhanden sind:

titel → Betreff

beschreibung → Anmerkungstext (inkl. evtl. Linefeeds und HTML)

autor → Autor (optionales Feld - kann leer sein)

sterne → Zahlenwert zwischen 1 und 5

zeitpunkt → Unix-Timestamp

Es kann Einfluss auf die Sortierung und den Bereich der Ergebnismenge (für Paginierung) genommen werden. Parameter offset und limit verhalten sich ähnlich zu SQL-Statements. Für die Sortierung (Parameter order) sind momentan folgende Werte gültig:

1 = Zeitpunkt absteigend

2 = Zeitpunkt aufsteigen

3 = Sterne absteigend

4 = Sterne aufsteigend

Die Daten müssen URL-Encoded und im UTF-8-Format übertragen werden. Die Felder sterne, titel, beschreibung sind Pflichtfelder. Der Wert für sterne muss zwischen 1 bis 5 liegen. Das Feld autor ist ein optionales Feld, welches leer übertragen werden kann.

Die Prüfung auf Produkt-Wechselwirkungen erfolgt auf Grundlage der beliebig übergeben PZNs, unabhängig von deren Menge. Im Fall eines Treffers bzw. einer oder mehrerer Interkationen erfolgt die Rückgabe eines umfangreichen Ergebnisses. Dieses umfasst zunächst neben dem übermittelten PZNs auch deren Artikelnamen, damit beim User eine sofortige Sichtprüfung der Artikel stattfinden kann. Des weiteren werden Themengebiete mit Volltexten zurück geliefert (z.B. Maßnahmen, Beschreibung der Wechselwirkung usw.) und Meta-Informationen, welches Datum des internen Datensatzes, Hinweistexte und ein Farbscoring beinhaltet. Mögliche Werte für das Scroing sind: gelb (Vorsicht), orange (Warnung), rot (Gefahr).

Zur Optimierung Ihrer Api-Requests und Anzeige / Performance auf Ihrer Webseite können Sie eine PZN-Liste abrufen. Nur zu diesen PZNs können weitere Wirkstoff-bezogene Funktionen dieser Schnittstelle ausgeführt werden bzw. werden weiterführende Daten geliefert. Die Abfrage dieser Liste sollte max. einmal Täglich erfolgen.

PZN-Liste auch als CSV-Datei verfügbar

Abfrage einer qualifizierten Liste zu einem Artikel. Sie erhalten Informationen zum Namen des Inhaltsstoffes, Klassifizierung als Wirkstoff oder Hilfsstoff, Alkoholgehalt, Bezugsangabe, Komponentenlabel (Hinweis zu Einnahme/Dosierung) und Stofftag. Der Stofftag dient zum Einen zur internen Verarbeitung wie z.B. Sortierung, Gruppierung oder Suchen. Vor allem kann er bei den zusätzlichen Artikeltexten im Feld „wirkstoff_und_bestandteile“ (getAdditionalData) als Ersetzungs-Tag verwendet werden. Im besagten Textblock werden die Inhaltsstoffe in einer HTML-Table geliefert. Namen von Inhaltsstoffen, die als „Wirkstoffe“ gekennzeichnet sind, werden mit einem Pseudo-HTML-Tag versehen. Beispiel raw-text:
<tr>
<td>68501</td>
<td><DICLOFENAC>Diclofenac</DICLOFENAC></td>
<td>18,61mg</td>
<td>Wirkstoff</td>
...
<td>DICLOFENAC</td>
</tr>

Liefert PZNs aller Artikel, die den angefragten Wirkstoff ebenfalls beinhalten. Die zu übergebene „Stoffid“ wird im vorherigen Call „getWirkstoffe“ geliefert. Wird der Parameter „pzn“ mit einer gültigen PZN übergeben (ursprünglicher Artikel / Produktdetailseite von dem aus die Suche gestartet wird), so erscheint diese nicht in der Ergebnismenge. Soll diese ebenfalls in der Ergebnismenge enthalten sein, so übergeben Sie 0 als Pzn.

Beispiele finden Sie unter Produkte-Seite oder über eine Artikel-Suche im Head-Bereich

Liefert PZNs aller Artikel, die die gleiche Wirkstoffkombination beinhalten. Eine Berücksichtigung der Wirkstoffmengen / Packungsgrößen erfolgt nicht.

Beispiele finden Sie unter Produkte-Seite oder über eine Artikel-Suche im Head-Bereich

Abfrage einer detaillierten Liste zu einem Artikel. Sie erhalten mitunter Informationen zum Namen des Inhaltsstoffes, Cas/Enecs-Nummern, Kurzinfo, Komponenten-Herkunft etc.

Abfrage einer detaillierten Liste zu einem Artikel / Hersteller. Sie erhalten mitunter Informationen zum Namen / Firmierung des Herstellers, Email, Telefon, Webseite, Adresse, Logo-Link etc.
Die Abfrage ist anhand der PZN oder des Hersteller-Keys möglich.

key → PZN oder Hersteller-Key

type → "pzn" oder "manufacturer"

Abfrage einer "unqualifizierten" Liste (ohne Timestamp) für PZNs oder Hersteller-Schlüssel/Keys zu denen GPSR-Daten vorliegen.

<?php

ini_set('soap.wsdl_cache_enabled', 0);
ini_set('display_errors', 1);
error_reporting(E_ALL);

$url = 'https://api.gebrauchs.info/interface/gebrauchsinfo.wsdl';
$usr = 'BENUTZERNAME';
$pwd = 'PASSWORT';

try {

	$client = new SOAPClient($url);

	//1. TEST
	print $client->rpcTest('TEST/WSDL')."<br />\n";

	//2. PZN-LISTE
	$pznliste = $client->getPZNList($usr, $pwd);

	if(count($pznliste) > 0) {

		echo '<pre>';
		var_dump( $pznliste );
		echo '</pre>';
		echo count($pznliste)." Elemente<br />\n";
	}
	else {

		echo "PZN-Liste leer<br />\n";
	}
	
	//3. PDF-LINKABFRAGE
	$link = $client->getPDFLink($usr, $pwd, '0429186', 'd');
	echo '<a href="'.$link.'">'.$link.'</a>';
}
catch (SOAPFault $f) {

	print $f->faultstring;
}
Code-Snippet wurde in die Zwischenablage kopiert!
<?php

ini_set('soap.wsdl_cache_enabled', 0);
ini_set('display_errors', 1);
error_reporting(E_ALL);

$url = 'https://api.gebrauchs.info/interface/gebrauchsinfo.wsdl';
$usr = 'BENUTZERNAME';
$pwd = 'PASSWORT';

try {

	$client = new SOAPClient($url);

	//1. TEST
	print $client->rpcTest('TEST/WSDL')."<br />\n";

	//2. INTERAKTIONSCHECK
	$pzns = array(6312077, 1235544, 106, 112);

	echo '<pre>';
	$itx = $client->checkItx($usr, $pwd, $pzns);
	echo '</pre>';
}
catch (SOAPFault $f) {

	print $f->faultstring;
}
Code-Snippet wurde in die Zwischenablage kopiert!

Es handelt sich um eine Rest-Schnittstelle, die in der Benamung der Funktionen und Parameter stark an die MSV3-Schnittstelle angelehnt ist. Die Api kann in einem Sandbox-Testmodus und einen Produktiv-Modus ausgeführt werden. Dazu wird bei jeder relevanten Api-Funktion der Parameter "mode" übergeben (gültige Werte sind "live" und "sandbox").

Im Sandbox-Modus werden die Anfragen (bspw. wie "bestellen") mit fiktiven gültigen Szenarien beantwortet, aber die Anfrage wird intern beim Großhandel nicht ausgeführt. Von einigen Großhandel-Anbietern erhalten Sie dazu verschiedene Test-Accounts, um ebenso verschiedene positive sowie negative Antworten zu erhalten oder inhaltlich verschiedene Haupt- und Verbund-Szenarien durchlaufen zu können. Solche Details hinsichtlich Accounts und Einstellungen sind mit dem jeweiligen Großhandel zu klären.
Eine weiterer Unterschied zwischen den Modi liegt im Anfrage-Limit der Großhändler. Einige beschränkten die Anfragen an "Ihre" MSV3-Schnittstelle - i.d.R. liegen diese zwischen 150-350 Anfragen pro Tag (z.B. bei Gehe, Noweda, Spangropharm). Dies ist beim jeweiligen Großhandel zu erfragen.

Die Haupt-Url für diese Schnittstelle ist: https://msv3.gebrauchs.info/interface/

Zur Ansteuerung der gewünschten Api-Funtkion wird der Funktionsname an die o.g. Domain angehangen.

Für die Bestell-Funktion gilt dann bspw: https://msv3.gebrauchs.info/interface/bestellen

Alle weiteren Parameter werden als Post-Variablen übergeben. Der API-Response erfolgt im JSON-Format. Aktuell werden die MSV3-Schnittstellen zu Alliance-Healthcare, Gehe, Noweda, Phoenix, Sanacorp, Spangropharm unterstützt. Weitere folgen oder auf Anfrage.

Hier finden Sie eine PHP-Klasse und -Client zur Anbindung der MSV3-Schnittstelle von Gebrauchs.Info:

Die offiziellen Dokumentationen der MSV3-Normen finden Sie hier. Sie geben einen Überblick über die Parameter der einzelnen Calls:

  • mode - live, sandbox
  • provider - anzag, gehe, noweda, phoenix, sanacorp, spangropharm, fiebig, 11950 (für Heumann), 5074 (für Heunet), 17760 (für Aristo), 15685 (für Kohlpharma)
  • branchnumber - Filialnummer vom Großhandel (i.d.R. zweistellig mit führernder Null - wenn nicht vorgegeben, dann
  • username - Api-Benutzername von Gebrauchs.info
  • password - Api-Passwort von Gebrauchs.info
  • msv3_username - Api-Benutzername vom Großhandel
  • msv3_password - Api-Passwort vom Großhandel
  • uuid-string - 36 Zeichen - ([0-9a-fA-F])8-([0-9a-fA-F])4-([0-9a-fA-F])4-([0-9a-fA-F])4-([0-9a-fA-F])12
  • lieferscheinnummer - 1-30 Zeichen - [a-zA-Z0-9#+\*/\-_]*
  • barcodeReferenz - 1-30 Zeichen - [0-9]*[\*+#_\?][a-zA-Z0-9#+\*/\-_\?]*

weitere Details zu MSV3-internen Funktionslogiken und Parametern entnehmen Sie bitte den o.g. Dokumentationen der MSV3-Normen 1.0 und 2.0.

Dies ist eine optinale Funktion, um unabhängig von Ihrem Account eines Großhandels, zunächst die Verbindung zum MSV3-Dienst von Gebrauchs.info zu testen.

Request-Url: https://msv3.gebrauchs.info/interface/test

---------------

Post-Parameter: 

'testStr' => 'optional - wird bei der Antwort mit zurückgeliefert' 

Dient zur Authentifizierung der Gebrauchs.info MSV3-Schnittstelle. Vor Nutzung aller folgenden MSV3-Funktionen ist hierdurch eine einmalige Authentifizierung erforderlich. Bei erfolgreicher Durchführung wird ein Auth-Token zurückgeliefert, der bei den folgenden MSV3-Funktionen zu übergeben ist. Die Zugangsdaten von Gebrauchs.info müssen dann im weiteren nicht verwendet bzw. an die Schnittstelle übertragen werden. Der Auth-Token ist maximal 24h gültig.

Request-Url: https://msv3.gebrauchs.info/interface/getAuthToken

---------------

Post-Parameter:

'username' => 'string *', 
'password' => 'string *'

Dies ist der 2. Schritt von möglichen Verbindungstests. Wenn die Verbindung zur Schnittstelle von Gebrauchs.info erfolgreich ist, kann hiermit die Verbindung / der Account des Großhandels geprüft werden. Wenn kein Fehler zurück gemeldet wird, gibt dies an, dass der Service korrekt erreichbar und die Authentifizierung erfolgreich war.

Request-Url: https://msv3.gebrauchs.info/interface/verbindungTesten

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *'

Noch vor der Erstellung und Übertragung einer Bestellung an den pharmazeutischen Großhandel, kann mit dieser Funktion für einen Artikel eine Bestandsanfrage beim Großhandel durchgeführt werden. Diese Art der Anfrage soll nicht dazu benutzt werden, systematisch eine große Anzahl von Artikeln abzufragen! Dafür ist die VerfügbarkeitsanfrageBulk vorgesehen. Da der Detaillierungsgrad der Rückmeldung unterschiedlich sein kann, wird grundsätzlich unterschieden zwischen spezifischen (mit Mengen- und ggf. Terminangabe) und unspezifischen Rückmeldungen auf die Verfügbarkeitsanfrage.

Request-Url: https://msv3.gebrauchs.info/interface/verfuegbarkeitAnfragen

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *',
'pzn' => 'number', 
'amount' => 'number'

Zum Abgleich mit Ihrem Warensortiment (z.B. für den Online-Versandhandel) kann hier eine gesamte Artikel-Verfügbarkeitsliste abgefragt werden. Dies ist mit dem jeweiligen Großhandel zu klären, ob die Filialnummer berücksichtigt wird, oder interne Einstellungen beim Großhandel greifen. Bulk-Verfügbarkeitsanfragen enthalten keine angefragte Menge und die Rückmeldung enthält nur die Information "verfügbar" oder "nicht verfügbar". Ggf. geben einige wenige Großhändler Zeitfenster für die Abfrage diese Funktion vor - dies ist mit dem jeweligen Großhandel abzuklären.

Request-Url: https://msv3.gebrauchs.info/interface/verfuegbarkeitAnfragenBulk

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *',

Hierdurch erfolgt eine Waren-Bestellung mit spezifischer Anfrage zu einem jeweiligen pharmazeutischen Großhandel.
Der GH gibt eine Rückmeldung über die Lieferbereitschaft der einzelnen Artikel. Bei den Bestellpositionen handelt es sich um einzelne Artikel. Für die Angabe von Artikeln wird die PZN verwendet. Zusätzlich erfolgt die Angabe der jeweiligen Bestellmenge.
Der Bestellvorgang ist abgeschlossen, wenn die Bestellung erfolgreich übermittelt und vom Großhandel quittiert wurde. Eine Erweiterung der Lieferung ist durch erneute Bestellungen möglich. Dabei wächst die Menge der gelieferten Artikel stetig an.
Zur eindeutigen Identifikation einer Bestellung übermittelt die Apotheke eine technische ID. Dabei handelt es sich um eine vom Apothekensystem erstellte Kennung (GUID), die vom Apothekensystem verwendet werden kann (und daher intern vorgehalten werden sollte), um bei Problemfällen den Eingangsstatus und die Rückmeldungen einer früheren Bestellung erneut abfragen zu können (siehe bestellstatusAbfragen).

Es werden keine zusätzlichen Infos wie Charge, Verfall zurückgemeldet. Für jede Bestellung gilt, dass zusätzliches Wannensplitting aus logistischen Gründen (z.B. Kühlware, Opiate, Großvolumen) dem Großhandel vorbehalten ist.

Beim Parameter "Auftragsart" ist standardmäßig bei jedem Großhandel die Option "NORMAL" verfügbar. Weitere Optionen wie "VERSAND" sind mit dem Großhandel zu klären und explizit durch diesen im Account aktivieren zu lassen. Dies kann entscheidenden Einfluss auf Wannenverdichtung, -aufdruck und Lieferscheine haben.

Request-Url: https://msv3.gebrauchs.info/interface/bestellen

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *',
'basket' => 'mixed - Auftraege max. 1000, Positionen max. 1000'

---------------

Basket-Parameter: 

'BestellSupportId' => 'int - 1 bis 999999',
'UUID' => 'uuid-string - optional - ID für Call "bestellstatusabfragen"',	
'Auftraege' => array(    
                    array(
                        'Auftragsart' => 'NORMAL, STAPEL, SONDER, VERSAND',
                        'Auftragskennung' => 'string - DruckbareKennung [A-Z0-9+\-_]{1,20}'
                        'AuftragsSupportID' => 'int - 1 bis 999999',
                        'UUID' => 'uuid-string - optional',
                        'GebindeId' => 'string - bei Auftragsart=VERSAND - sonst nicht erlaubt'
                        'Positionen' => array(
                                            array(
                                                    'Pzn' => 'int', 
                                                    'Menge' => 'int', 
                                                    'Liefervorgabe' => 'Normal, MaxVerbund, 
                                                                        MaxNachlieferung, MaxDispo'
                                            ),
                                            ...
                                        ),
                                        ...
                    ),						
                    ...
               )

Die Rückmeldungen einer Bestellung können unter Angabe der ID einer Bestellung (1.UUID des Calls "bestellen") nachträglich abgefragt werden. Damit kann nach Verbindungsabbrüchen sicher geprüft werden, ob eine Bestellung wie gewünscht übermittelt wurde und die fehlenden Rückmeldungen abrufen. Die Rückmeldungen entsprechen exakt der ursprünglichen Bestellantwort beim Call "bestellen".
Für den Fall, dass dem Großhandel die ID der Bestellung nicht bekannt ist, kann davon ausgegangen sein, dass die Bestellung nicht erfolgreich war.

Die ID einer Bestellanfrage soll mindestens für Bestellungen des gleichen Kalendertags abrufbar sein.

Bestellungen mit der Antwort Nachtdienst=1 können nicht abgefragt werden. Sie werden ausserhalb der individuellen Annahme-Zeitfenster des Großhandels zwar angenommen aber nicht direkt ausgeführt. Die Ausführung kann u.U. am Folgewerktag ausgeführt werden. Zeitfenster für Bestellannahmen sind beim Großhandel zu erfragen bzw. zu definieren.
Es können nur Rückmeldungen zu erfolgreich abgeschlossenen Bestellungen erfragt werden.

Request-Url: https://msv3.gebrauchs.info/interface/bestellstatusAbfragen

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *',
'bestellid' => 'uuid-string - siehe 1.UUID bei Call "bestellen"'

Mit dieser Funktion kann zu einer zeitlich begrenzt gültigen DokumentenId (GUID) ein PDF-Dokument herunter geladen werden. Aktuell wird diese Funktion für die optional zurückgelieferten Lieferavis-PDFs sowie optional zurückgelieferte Retourenbelege-PDFs des Großhandels benutzt.

Request-Url: https://msv3.gebrauchs.info/interface/dokumentAbfragen

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *',
'dokumentId' => 'uuid-string'

Anfrage eines Rücknahme-Angebotes anhand der Übergabe von spezifischen Artikel-Postionen.
Der Großhandel bestätigt die Übermittlung mit einer ReferenzID, auf die in weiterem Kontakt-Verlauf bezug genommen werden kann / soll. Eine detaillierte Verhandlung über ein Rücknahmeangebot soll laut MSV3-Dokumentation dann via Telefon/Mail/Fax mit dem Großhandel erfolgen.
Da derzeit keine Angaben zu Chargen übertragen werden, ist es nicht nötig, eine PZN in einer Anfrage mehrfach zu übertragen.

Request-Url: https://msv3.gebrauchs.info/interface/ruecknahmeangebotAnfordern

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *',
'articles' => 'mixed - max. 1000'

---------------

Articles-Parameter:

array(
    array('Pzn' => 'int', 'Menge' => 'int'),
    ...
)

Sobald bei der Abwicklung einer Bestellung die Bestandteile (Positionen), die in einer Lieferung zusammengefasst werden und für die ein gemeinsames physisches Begleitdokument erstellt wird, bereitgestellt sind, stellt der Großhandel ein Lieferavis mit den betroffenen Positionen (PZN, bestellte Menge, im Rahmen dieser Lieferung gelieferte Menge, weitere Informationen) bereit. Dieses elektronische Dokument ist unabhängig von der weiteren Behandlung der Ware von der Apotheke abrufbar. Die Apotheke quittiert den Empfang des Lieferavis.

Lieferavise werden auf Seiten des Großhandel für mindestens 7 Tage vorgehalten. Die Abfrage neuer Dokumente erfolgt aktiv durch die Apotheke. Die Abfrage erfolgt maximal alle 30 Minuten während der Öffnungszeiten. Manuell ausgelöste Abfragen - bspw. durch den Scan eines Lieferscheins – sind zusätzlich oder alternativ möglich.

Request-Url: https://msv3.gebrauchs.info/interface/lieferavisAbfrageNeu

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *'

Nach dem Abruf von neuen Lieferavis mit der Funktion lieferavisAbfrageNeu werden diese unter Angabe der jeweiligen Lieferscheinnummer bestätigt. Nur bestätigte Lieferavis werden beim nächsten Abruf mit der Funktion lieferavisAbfrageNeu nicht mehr mitgeliefert.

Request-Url: https://msv3.gebrauchs.info/interface/lieferavisBestaetigen

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *',
'lieferscheinnummer' => 'string *'

Ist im Problemfall ein in der Apotheke abgescannter aktueller Lieferschein auch nach Aufruf der Funktion lieferavisAbfrageNeu dem Apothekensystem nicht bekannt, kann jedes Lieferavis der letzten 7 Tage einzeln erneut abgerufen werden. Diese Funktion darf laut Dokumentation der MSV3-Normen ausschließlich bei Problemfällen (wie z.B. ein oder mehrere Lieferscheine unbekannt) aufgerufen werden.

Request-Url: https://msv3.gebrauchs.info/interface/lieferavisAbfrageHist

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *',
'lieferscheinnummer' => 'string *', 
'barcodeReferenz' => 'string *'

Das Retourenavis wird über 2 fachliche Funktionen umgesetzt. Optional stellt die Apotheke eine unverbindliche Retourenanfrage und bekommt dafür Rückmeldung für mögliche Retourenmengen. Die konkreten Retournierungen werden über eine Retourenankündigung durchgeführt. In Erweiterung zur Retourenanfrage enthält die Ankündigung in der Rückmeldung noch eine vom Großhandel generierte ReferenzID der Retoure pro Position, Informationen zur Abholung, sowie die optionale Möglichkeit, den Retourenschein als PDF herunterzuladen. Das technische Verfahren zum Abholen des Belegs ist an das Abholen der Lieferscheinkopie angelehnt.

Request-Url: https://msv3.gebrauchs.info/interface/retourenavisAnfragen

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *',
'positionen' => 'mixed - max. 999',
'retoureSupportID' => 'int - 1 bis 999999'

---------------

Positionen-Parameter: 

array(
    array(
        'Lieferscheinnummer' => 'string *', 
        'Pzn' => 'int', 
        'Menge' => 'int', 
        'Grund' => 'Bestellfehler, BerechnetNichtGeliefert, Beschaedigt, ZuvielGeliefert, VerfallZuKurz'
    ),
    ...
)

Die Apotheke übermittelt für den Fall, dass eine vom Großhandel gelieferte Ware wieder retourniert werden soll, eine Retourenankündigung. Dabei muss für jede Position die Lieferscheinnummer übermittelt werden, mit der die Ware vom Großhandel geliefert wurde. Der Großhandel meldet in der Antwort für jede Position, ob diese akzeptiert wird und wann eine Abholung der Retouren erfolgt (Zeitpunkt oder Tour). Neben der technischen Antwort kann vom Großhandel ein beizulegender Retourenschein im PDF-Format erzeugt werden und die ID dieses Dokumentes zurückgeliefert werden. Alternativ druckt die Apotheke den Retourenbeleg. Dieser Retourenbeleg muss aber in jedem Fall die vom Großhandel übermittelte ReferenzID in 2D-Barcode und Klarschrift enthalten. In einer Retourenankündigung können maximal 999 Positionen enthalten sein. Die optionalen Felder für Charge und Verfall sollen vor allem dann gefüllt werden, wenn diese vorher auch durch ein elektronisches Lieferavis übermittelt wurden.

Request-Url: https://msv3.gebrauchs.info/interface/retourenavisAnkuendigen

---------------

Post-Parameter:

'auth_token' => 'string', 
'msv3_username' => 'string *', 
'msv3_password' => 'string *', 
'mode' => 'string *', 
'provider' => 'string *', 
'branchnumber' => 'number *',
'positionen' => 'mixed - max. 999',
'retoureSupportID' => 'int - 1 bis 999999',
'kopfdaten' => 'mixed - max. 999',

---------------

Positionen-Parameter: 

array(
    array(
        'Lieferscheinnummer' => 'string *', 
        'Pzn' => 'int', 
        'Menge' => 'int', 
        'Grund' => 'Bestellfehler, BerechnetNichtGeliefert, Beschaedigt, ZuvielGeliefert, VerfallZuKurz'
    ),
    ...
)

---------------

Kopfdaten-Parameter: 

array(
    'Amtsgericht' => 'string - 0-100 Zeichen',
    'Handelsregisternummer' => 'string - 0-100 Zeichen',
    'UmsatzsteuerID' => 'string - 0-100 Zeichen',
    'Steuernummer' => 'string - 0-100 Zeichen',
    'Bankname' => 'string - 0-100 Zeichen',
    'BIC' => 'string - 0-100 Zeichen',
    'IBAN' => 'string - 0-100 Zeichen'
)

Die Beschreibungstexte der einzelnen MSV3-Funktionen sind teilweise aus den Dokumentationen der MSV3-Normen 1.0 und 2.0 der Dateg GmbH übernommen. Siehe PDF-Verlinkung unter MSV3 - Technologie.

Die Artikel-Suche wird über REST zur Verfügung gestellt. Es existiert sowohl ein Test- als auch Produktiv-System. Die Endpoints dafür lauten wie folgt:

https://search.gebrauchs.info/interface/
https://devsearch.gebrauchs.info/interface/

Die Authentifizierung erfolgt über Credentials, die als Post-Parmeter übrmittelt werden - Zugangsdaten erhalten Sie in Absprachen mit dem Support. Ein Austausch von Datenfeeds ist nicht erforderlich. Es werden die Produkte des offiziellen ABDATA-Artikelstamms ausgespielt. Diese belaufen sich auf mehr als. 700.000 Artikeldatensätze. Alle Parameter der Api-Requests werden als POST-Variablen übermittelt. Der API-Response erfolg im JSON-Format.

Die Such-Anfrage erfordert die POST-Parameter "term" (Suchbegriff), "username" (Api Benutzername) und "password" (Api Passwort). Der Parameter "term" kann rein numerisch (PZN, EAN - führende Nullen sind irrelevant) oder alphanumerisch sein. Es werden nur Pzns zurück geliefert in unsortierter Weise pro Listen-Dimension.
Das Ergebnis kann bis zu drei Listen-Dimensionen aufweisen, die jeweils nur Pzns enthalten - mindestens aber eine Listen-Dimension "products" sofern mindestens ein Ergebis gefunden wird.

{
   "prime":[
	  2483617
   ],
   "promo":[
	  2860876,
	  3999961,
	  7134287
   ],
   "products":[
	  2860876,
	  3999961,
	  7134287,
	  11134962,
	  09289433,
	  ...
   ]
}

Die Dimension "prime" und "promo" sind als optionale Ergebnis-Dimensionen zu behandeln. Promo enthält Reimport- und Nachfolger-Pzns sofern es solche im Suchergebnis gibt.
Prime enhält die Pzn, nach der direkt gesucht wurde oder die PZN, wenn nach einer Ean gesucht wurde.
Dadurch kann im Endanwender-System (eShop) eine Priorisierung der Ergebnis-Pzns erfolgen.
Zum Beispiel "prime"-Pzn als erster Artikel in der Übersicht, "promo" (Nachfolge-Pzn & Reimporte) als zweite Ebene in der Übersicht und die Pzns der Dimension "products" folgend.
Pzns der Dimensionen "prime" und "promo" sind auch in der allgemeinen Dimension "products" enthalten.
Sollten alle Dimensionen verwendet werden, könnte eine MySQL-basierte Abfrage im Endanwender-System wie folgt aussehen (Duplikate werden durch die UNION-Struktur automatisch aufgelöst):

					
(SELECT * FROM `Products` WHERE `Pzn` = Prime-Pzn AND XYZ GROUP BY XYZ ORDER BY XYZ)	
UNION					
(SELECT * FROM `Products` WHERE `Pzn` IN ( Promo-Pzns ) AND XYZ GROUP BY XYZ ORDER BY XYZ)	
UNION
(SELECT * FROM `Products` WHERE `Pzn` IN ( Products-Pzns ) AND XYZ GROUP BY XYZ ORDER BY XYZ)	
					

Wie im SQL-Beispiel zu ersehen, erfolgt die Sortierung (OrderBy) und die weitere Einschränkung (Where-Clause) der Pzns der jeweiligen Dimension im Endanwender-System. Die Suchen werden im gesamt verfügbaren ABDATA Artikelstamm ausgeführt und alle inhaltlichen Treffer ausgespielt - unabhängig aller Kennzeichnungen, wie Rezeptpflicht, Ausserhandel, BTM usw.

<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

define('SANDBOX', true);

$api_user = '';
$api_pass = '';
$api_term = 'umklabo';

if(SANDBOX) {
				
	$curlServiceUrl = 'https://devsearch.gebrauchs.info/interface/';
}
else {
	
	$curlServiceUrl = 'https://search.gebrauchs.info/interface/';	
}

$postData = array('term' => $api_term, 'username' => $api_user, 'password' => $api_pass);

$ch = curl_init($curlServiceUrl);
curl_setopt($ch, CURLOPT_VERBOSE, SANDBOX);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($ch, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

if(isset($postData) && is_countable($postData) && count($postData) > 0) {
	
	$curlPostData = http_build_query($postData);
	
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPostData);
}

$response = curl_exec($ch);

$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch); 

if($http_code <= 400) {

	if(!empty($response)) {

		$result = json_decode($response, true);

		// dimensions => prime, promo, products
		if(is_countable($result) && count($result) > 0) {
			
			var_dump($result);
		}
	}
}
Code-Snippet wurde in die Zwischenablage kopiert!