PharmaAutopilot
...

Ihre erste Bestellung in 5 Minuten

Diese Anleitung fuehrt Sie vom Einstieg bis zur bestaetigten Arzneimittelbestellung mit dem MSV3 Smart Gateway.

Voraussetzungen

  • Ein MSV3-Gateway-API-Schluessel (pk_live_... fuer Produktion, pk_test_... fuer Sandbox)
  • MSV3-Zugangsdaten Ihres Grosshaendlers (Benutzername + Passwort)
  • Node.js 18+, Python 3.10+, Java 17+ oder curl

Schritt 1 - SDK installieren

TypeScript / Node.js

npm install @msv3/sdk

Python

pip install msv3

Java (Maven)

<dependency>
    <groupId>dev.msv3</groupId>
    <artifactId>msv3-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

curl

Keine Installation erforderlich. Umgebungsvariablen setzen:

export MSV3_API_KEY="pk_live_abc123"
export MSV3_USER="Now00079800"
export MSV3_PASS="ihr-passwort"
export MSV3_BASE="https://api.msv3gateway.example.com"

Schritt 2 - Verbindung testen

Ueberpruefen Sie, ob Ihre Zugangsdaten den Grosshaendler erreichen.

import { Msv3Client } from '@msv3/sdk';

const client = new Msv3Client({ apiKey: 'pk_live_abc123' });

const creds = {
  wholesaler: 'noweda',
  username: 'Now00079800',
  password: 'ihr-passwort',
};

const result = await client.connection.test(creds);
console.log(`Verbunden mit ${result.wholesaler} in ${result.latency_ms}ms`);

Erwartete Antwort:

{
  "connected": true,
  "wholesaler": "noweda",
  "latency_ms": 142
}

Schritt 3 - Verfuegbarkeit pruefen

Echtzeit-Verfuegbarkeit fuer bis zu 50 PZNs gleichzeitig abfragen.

const availability = await client.availability.check(creds, {
  items: [
    { pzn: '761271', quantity: 5 },
    { pzn: '10203595', quantity: 1 },
  ],
});

for (const item of availability.items) {
  const status = item.available ? 'verfuegbar' : 'nicht verfuegbar';
  console.log(`PZN ${item.pzn}: ${status}`);
}

Erwartete Antwort:

{
  "wholesaler": "noweda",
  "response_type": "standard",
  "items": [
    {
      "pzn": "761271",
      "quantity_requested": 5,
      "available": true,
      "deliveries": [
        {
          "type": "normal",
          "quantity": 5,
          "tour": "00345H",
          "estimated_at": "2026-04-28T10:00:00"
        }
      ]
    }
  ]
}

Schritt 4 - Bestellung aufgeben

Bestellung mit backorder (Nachlieferung) fuer einen Artikel aufgeben.

const order = await client.orders.create(creds, {
  items: [
    {
      pzn: '761271',
      quantity: 3,
      delivery_preference: 'backorder',
    },
    {
      pzn: '10203595',
      quantity: 1,
      delivery_preference: 'normal',
    },
  ],
});

console.log(`Bestellstatus: ${order.status}`);
console.log(`Anforderungs-ID: ${order.request_id}`);

for (const item of order.items) {
  console.log(
    `PZN ${item.pzn}: ${item.quantity_confirmed}/${item.quantity_ordered} bestaetigt`
  );
}

Erwartete Antwort:

{
  "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "confirmed",
  "wholesaler": "noweda",
  "dry_run": false,
  "items": [
    {
      "pzn": "761271",
      "quantity_ordered": 3,
      "quantity_confirmed": 3,
      "delivery_preference": "backorder",
      "deliveries": [
        {
          "type": "normal",
          "quantity": 3,
          "tour": "00345H",
          "estimated_at": "2026-04-28T10:00:00"
        }
      ]
    }
  ]
}

Nachtbetrieb: Befindet sich das Grosshaendlersystem ausserhalb der Geschaeftszeiten, lautet der Status queued_night_mode und das items-Array ist leer. Die Bestellung wird automatisch zum naechsten Bestellfenster uebermittelt.

Liefervorgaben

WertMSV3-BezeichnungBedeutung
normalNormalSofort liefern, was verfuegbar ist
backorderMaxNachlieferungFehlmengen nachliefern
groupedMaxVerbundSammellieferung mit anderen Positionen
dispositionMaxDispoDisposition durch den Grosshaendler

Probelauf (Dry Run): ?dry_run=true anhaengen oder { dryRun: true } (TS) / dry_run=True (Python) / create(creds, request, true) (Java) uebergeben, um die Bestellung zu validieren ohne sie tatsaechlich aufzugeben.


Schritt 5 - Bestellstatus pruefen

Verwenden Sie die request_id aus der Bestellantwort, um den aktuellen Status abzurufen.

const status = await client.orders.status(creds, order.request_id);
console.log(`Bestellung ${status.order_id}: ${status.status}`);

if (status.status === 'available') {
  for (const item of status.items) {
    console.log(`  PZN ${item.pzn}: ${item.quantity_ordered} Stueck bestellt`);
  }
}

Statuswerte

  • available - Bestelldetails vorhanden
  • expired - Antwort des Grosshaendlers nicht mehr gespeichert
  • unknown - Grosshaendler kennt diese Bestell-ID nicht

Naechste Schritte