swagger: '2.0'
info:
  title: ProCommerce API für Adsystemhaus-Shop
  description: >-
    Stellt Services zum Abgleich von Daten zwischen ProCommerce und Shopware zur
    Verfügung
  version: '20170529'
host: '217.86.175.93:50009'
schemes:
  - https
security:
  - ApiBasicAuth: []
basePath: /procommerce/rest
produces:
  - application/json
securityDefinitions:
  ApiBasicAuth:
    type: basic
paths:
  /customers:
    get:
      summary: Kunden
      description: >
        Liefert Kunden zurück.


        Die Objekte werden aufsteigend sortiert nach dem letzten Änderungsdatum
        zurückgeliefert um beim gestückelten Abruf Lücken in der Übertragung zu
        verhindern.
      security:
        - ApiBasicAuth: []
      parameters:
        - name: skip
          in: query
          description: >-
            Auch "Offset". Gibt an, wieviele Datensätze aus der Gesamtmenge für
            die Rückgabe übersprungen werden sollen.
          required: false
          type: number
          format: integer
        - name: take
          in: query
          description: >-
            Auch "Limit". Gibt an, wieviele Datensätze zurückgegeben werden
            sollen.
          required: false
          type: number
          format: integer
        - name: since
          in: query
          description: >
            Einschränkung - schränkt auf solche Datensätze ein, deren
            Änderungsdatum gleich oder neuer dem

            übergebenen Wert ist. Das Änderungsdatum muss auf allen in der
            Rückgabe enthaltenen Informationen basieren.

            (Format: "yyyy-MM-dd HH:mm:ss", z.B. 2015-06-15 16:45:23)
          required: false
          type: string
          format: date-time
      tags:
        - Kunden
      responses:
        '200':
          description: Rückgabeojekt für Kategorien
          schema:
            $ref: '#/definitions/CustomerReturn'
        default:
          description: Unerwarteter Fehler
          schema:
            $ref: '#/definitions/Error'
  /customerGroups:
    get:
      summary: Kundengruppen (Preislisten)
      description: >
        Liefert Kundengruppen (Preislisten) zurück.


        Die Objekte werden aufsteigend sortiert nach dem letzten Änderungsdatum
        zurückgeliefert um beim gestückelten Abruf Lücken in der Übertragung zu
        verhindern.
      security:
        - ApiBasicAuth: []
      parameters:
        - name: skip
          in: query
          description: >-
            Auch "Offset". Gibt an, wieviele Datensätze aus der Gesamtmenge für
            die Rückgabe übersprungen werden sollen.
          required: false
          type: number
          format: integer
        - name: take
          in: query
          description: >-
            Auch "Limit". Gibt an, wieviele Datensätze zurückgegeben werden
            sollen.
          required: false
          type: number
          format: integer
        - name: since
          in: query
          description: >
            Einschränkung - schränkt auf solche Datensätze ein, deren
            Änderungsdatum gleich oder neuer dem

            übergebenen Wert ist. Das Änderungsdatum muss auf allen in der
            Rückgabe enthaltenen Informationen basieren.

            (Format: "yyyy-MM-dd HH:mm:ss", z.B. 2015-06-15 16:45:23)
          required: false
          type: string
          format: date-time
      tags:
        - Kundengruppen
      responses:
        '200':
          description: Rückgabeobjekt für Kundengruppen
          schema:
            $ref: '#/definitions/CustomerGroupReturn'
        default:
          description: Unerwarteter Fehler
          schema:
            $ref: '#/definitions/Error'
  /validatedOrders:
    post:
      summary: >-
        Validierung eines Auftrags und Ermittlung der Versandkosten und
        Verfügbarkeiten und Preise
      description: >
        Ermittelt zu einem übergebenen Warenkorb die Verfügbarkeit der Artikel
        und ermittelt die anfallenden Versandkosten. Zudem werden die Preise in
        Warenkorbpositionen (OrderDetail->Price) korrigiert zurückgeliefert,
        falls sich bspw. durch die Dosisartikelpreisfindung Abweichungen
        ergeben. Legt den Auftrag _nicht_ im System an.
      security:
        - ApiBasicAuth: []
      parameters:
        - name: order
          in: body
          description: >-
            Der zu validierende Auftrag wird übergeben. Versandkosten und
            ArticleAvailibilities sind in der Übergabe nicht gesetzt.
          required: true
          schema:
            $ref: '#/definitions/Order'
      tags:
        - Aufträge
      responses:
        '200':
          description: >
            Validierte Order. 

            Die Felder in OrderDetail->articleAvailibility einer jeden
            Auftragsposition sind nach den dort beschriebenen Regeln befüllt.
            Das Feld Order->invoiceShipping ist mit den ermittelten
            Versandkosten befüllt. Zudem werden die Preise in
            Warenkorbpositionen (OrderDetail->Price) korrigiert zurückgeliefert,
            falls sich bspw. durch die Dosisartikelpreisfindung Abweichungen
            ergeben.
          schema:
            $ref: '#/definitions/Order'
        default:
          description: Unerwarteter Fehler
          schema:
            $ref: '#/definitions/Error'
  /orders:
    post:
      summary: Erfassung eines Auftrags
      description: >
        Erfasst den übergebenen Auftrag.

        Liefert die selbe Antwort wie validatedOrders, legt aber zusätzlich den
        Auftrag im System an.
      security:
        - ApiBasicAuth: []
      parameters:
        - name: order
          in: body
          description: >-
            Der zu erfassende Auftrag wird übergeben. ArticleAvailibilities sind
            in der Übergabe nicht gesetzt.
          required: true
          schema:
            $ref: '#/definitions/Order'
      tags:
        - Aufträge
      responses:
        '200':
          description: |
            Erfasster Auftrag. Liefert die selbe Antwort wie validatedOrders.
          schema:
            $ref: '#/definitions/Order'
        default:
          description: Unerwarteter Fehler
          schema:
            $ref: '#/definitions/Error'
  /orderStates:
    get:
      summary: >-
        (initial keine Umsetzung - reiner Ausblick) - Liefert den Status von
        Aufträgen
      description: >
        Schnittstellenmethode ist initial nicht gefordert und somit weder im
        Shop noch in ProCommerce umzusetzen.


        Erhält ein Anfrageobjekt und liefert die angefragten Auftragsstatus
        zurück.
      security:
        - ApiBasicAuth: []
      parameters:
        - name: orderStatesFilter
          in: body
          description: Das Anfrageobjekt wird übergeben.
          required: true
          schema:
            $ref: '#/definitions/OrderStatesFilter'
      tags:
        - Aufträge
      responses:
        '200':
          description: |
            Liefert die angefragten Auftragsstatusinformationen.
          schema:
            $ref: '#/definitions/OrderStatesReturn'
        default:
          description: Unerwarteter Fehler
          schema:
            $ref: '#/definitions/Error'
  /categories:
    get:
      summary: Kategorien
      description: >
        Liefert strukturierte Kategorien für die Artikel zurück.


        Wird auch für Hauslisten verwendet.


        Die Objekte werden aufsteigend sortiert nach dem letzten Änderungsdatum
        zurückgeliefert um beim gestückelten Abruf Lücken in der Übertragung zu
        verhindern.
      security:
        - ApiBasicAuth: []
      parameters:
        - name: skip
          in: query
          description: >-
            Auch "Offset". Gibt an, wieviele Datensätze aus der Gesamtmenge für
            die Rückgabe übersprungen werden sollen.
          required: false
          type: number
          format: integer
        - name: take
          in: query
          description: >-
            Auch "Limit". Gibt an, wieviele Datensätze zurückgegeben werden
            sollen.
          required: false
          type: number
          format: integer
        - name: since
          in: query
          description: >
            Einschränkung - schränkt auf solche Datensätze ein, deren
            Änderungsdatum gleich oder neuer dem

            übergebenen Wert ist. Das Änderungsdatum muss auf allen in der
            Rückgabe enthaltenen Informationen basieren.

            (Format: "yyyy-MM-dd HH:mm:ss", z.B. 2015-06-15 16:45:23)
          required: false
          type: string
          format: date-time
      tags:
        - Kategorien
      responses:
        '200':
          description: Rückgabeojekt für Kategorien
          schema:
            $ref: '#/definitions/CategoryReturn'
        default:
          description: Unerwarteter Fehler
          schema:
            $ref: '#/definitions/Error'
  /articles:
    get:
      summary: Artikel
      description: >
        Liefert Artikel.


        Artikel sind über categories zu Kategorie-Ids zugeordnet.


        Die Objekte werden aufsteigend sortiert nach dem letzten Änderungsdatum
        zurückgeliefert um beim gestückelten Abruf Lücken in der Übertragung zu
        verhindern.
      security:
        - ApiBasicAuth: []
      parameters:
        - name: skip
          in: query
          description: >-
            Auch "Offset". Gibt an, wieviele Datensätze aus der Gesamtmenge für
            die Rückgabe übersprungen werden sollen.
          required: false
          type: number
          format: integer
        - name: take
          in: query
          description: >-
            Auch "Limit". Gibt an, wieviele Datensätze zurückgegeben werden
            sollen.
          required: false
          type: number
          format: integer
        - name: since
          in: query
          description: >
            Einschränkung - schränkt auf solche Datensätze ein, deren
            Änderungsdatum gleich oder neuer dem

            übergebenen Wert ist. Ändert sich bspw. ein Preis zu einem Artikel
            am 05.07.2016, so ist der Artikel zurückzuliefern, falls mit
            since=2016-07-01 00:00:00 angefragt wird

            (Format: "yyyy-MM-dd HH:mm:ss", z.B. 2015-06-15 16:45:23)
          required: false
          type: string
          format: date-time
      tags:
        - Artikel
      responses:
        '200':
          description: Rückgabeojekt für Artikel
          schema:
            $ref: '#/definitions/ArticleReturn'
        default:
          description: Unerwarteter Fehler
          schema:
            $ref: '#/definitions/Error'
  '/articleAvailibilities/{articleNumbers}':
    get:
      summary: Artikelverfügbarkeiten
      description: |
        Liefert Artikelverfügbarkeiten
      security:
        - ApiBasicAuth: []
      parameters:
        - name: articleNumbers
          in: path
          description: >-
            Die Artikelnummern der Artikel, für die die Verfügbarkeit ermittelt
            werden soll
          required: true
          type: array
          items:
            type: string
          collectionFormat: csv
      tags:
        - Verfügbarkeit
      responses:
        '200':
          description: Rückgabeojekt für Artikel
          schema:
            $ref: '#/definitions/ArticleAvailibilityReturn'
        default:
          description: Unerwarteter Fehler
          schema:
            $ref: '#/definitions/Error'
  /articleZippedImages:
    get:
      summary: Artikelbilder
      produces:
        - application/zip
      description: >
        Liefert die angefragten Artikelbilder in einem zip zurück. Selektion
        erfolgt auf Basis der aufsteigend nach Änderungsdatum sortierten
        Bildmenge.
      security:
        - ApiBasicAuth: []
      parameters:
        - name: skip
          in: query
          description: >-
            Auch "Offset". Gibt an, wieviele Bilder aus der Gesamtmenge für die
            Rückgabe übersprungen werden sollen.
          required: false
          type: number
          format: integer
        - name: take
          in: query
          description: 'Auch "Limit". Gibt an, wieviele Bilder zurückgegeben werden sollen.'
          required: false
          type: number
          format: integer
        - name: since
          in: query
          description: >
            Einschränkung - schränkt auf solche Bilder ein, deren Änderungsdatum
            gleich oder neuer dem

            übergebenen Wert ist. Ändert sich bspw. ein Bild am 05.07.2016, so
            ist das Bild zurückzuliefern, falls mit since=2016-07-01 00:00:00
            angefragt wird

            (Format: "yyyy-MM-dd HH:mm:ss", z.B. 2015-06-15 16:45:23)
          required: false
          type: string
          format: date-time
      tags:
        - Artikelbilder
      responses:
        '200':
          description: Rückgabeobjekt für Artikelbilder
          schema:
            type: file
        '204':
          description: Keine Bilder seit dem gegebenen Zeitpunkt vorhanden oder take = 0
        default:
          description: Unerwarteter Fehler
          schema:
            $ref: '#/definitions/Error'
  /discountGroups:
    get:
      summary: DiscountGroups
      description: >
        Liefert DiscountGroups zurück.


        Die Objekte werden aufsteigend sortiert nach dem letzten Änderungsdatum
        zurückgeliefert um beim gestückelten Abruf Lücken in der Übertragung zu
        verhindern.

        Initial werden die definierten Parameter skip, take und since ignoriert
        und stets alle DiscountGroups zurückgeliefert.
      security:
        - ApiBasicAuth: []
      parameters:
        - name: skip
          in: query
          description: >-
            Auch "Offset". Gibt an, wieviele Datensätze aus der Gesamtmenge für
            die Rückgabe übersprungen werden sollen.
          required: false
          type: number
          format: integer
        - name: take
          in: query
          description: >-
            Auch "Limit". Gibt an, wieviele Datensätze zurückgegeben werden
            sollen.
          required: false
          type: number
          format: integer
        - name: since
          in: query
          description: >
            Einschränkung - schränkt auf solche Datensätze ein, deren
            Änderungsdatum gleich oder neuer dem

            übergebenen Wert ist. Das Änderungsdatum muss auf allen in der
            Rückgabe enthaltenen Informationen basieren.

            (Format: "yyyy-MM-dd HH:mm:ss", z.B. 2015-06-15 16:45:23)
          required: false
          type: string
          format: date-time
      tags:
        - Artikel
      responses:
        '200':
          description: Rückgabeojekt für DiscountGroups
          schema:
            $ref: '#/definitions/DiscountGroupReturn'
        default:
          description: Unerwarteter Fehler
          schema:
            $ref: '#/definitions/Error'
definitions:
  Address:
    type: object
    properties:
      countryId:
        type: string
        description: ISOCode (typischer Wert 'DE')
      stateId:
        type: string
        description: Bundesland; typischerweise mit 0 belegt
      company:
        type: string
        description: Firma
      department:
        type: string
        description: Abteilung
      salutation:
        type: string
        description: Anrede (nur die Werte "Herr" und "Frau" werden unterstützt.)
      firstName:
        type: string
        description: Vorname
      lastName:
        type: string
        description: Nachname
      street:
        type: string
        description: Straße
      streetNumber:
        type: string
        description: Hausnummer
      zipCode:
        type: string
        description: Postleitzahl
      city:
        type: string
        description: Ort
      phone:
        type: string
        description: Telefon - nur bei billingAddress (Rechnungsadresse) gesetzt
      fax:
        type: string
        description: Fax - nur bei billingAddress (Rechnungsadresse) gesetzt
      vatId:
        type: string
        description: Steuernummer - nur bei billingAddress (Rechnungsadresse) gesetzt
      birthday:
        type: string
        format: date-time
        description: Geburtstag - nur bei billingAddress (Rechnungsadresse) gesetzt
      attribute:
        type: array
        items:
          $ref: '#/definitions/Attribute'
        description: >-
          freie Attribute zum Objekt. Zum Zeitpunkt der Spezifikationserstellung
          nicht relevant.
  OrderDetail:
    type: object
    description: >-
      Warenkorbposition; Member articleAvailibility ist nur gesetzt in der
      Rückgabe der Endpunkte validatedOrders und orders.
    properties:
      tax:
        type: number
        description: Steuersatz in Prozent für diesen Artikel
      articleNumber:
        type: string
        description: Artikelnummer (typischerweise die PZN)
      pcRezept:
        type: boolean
        description: >-
          Gibt an, ob die Auftragsposition 'per communitatem' bestellt wird.
          Aufträge mit solchen Positionen sind bei Adsystemhaus Apotheke
          versandkostenfrei.
      price:
        type: number
        description: Preis eines Artikel im Shop netto
      quantity:
        type: number
        description: bestellte Menge des Artikel
      articleAvailibility:
        $ref: '#/definitions/ArticleAvailibility'
      articleName:
        type: string
        description: Artikelbezeichnung
      unit:
        type: string
        description: >-
          Mengeneinheit des Artikels. Mögliche Werte / Definition siehe Feld
          MainDetail->unit.
      attribute:
        type: array
        items:
          $ref: '#/definitions/Attribute'
        description: >-
          freie Attribute zum Objekt. Zum Zeitpunkt der Spezifikationserstellung
          nicht relevant.
  Order:
    type: object
    properties:
      orderNumber:
        type: string
        description: Auftragsnummer des Shops
      customerNumber:
        type: string
        description: Kundennummer
      customer:
        type: string
        description: >-
          Nutzer-Id (Email-Adresse) der Nutzers, der die Bestellung ausgelöst
          hat
      invoiceShipping:
        type: number
        description: Versandkosten netto
      basketPosition:
        type: array
        items:
          $ref: '#/definitions/OrderDetail'
        description: Ein Array von Warenkorbpositionen
      billingAddress:
        $ref: '#/definitions/Address'
      shippingAddress:
        $ref: '#/definitions/Address'
      comment:
        type: string
        description: 'Kommentar des Nutzers, der bei einer Bestellung übergeben werden kann'
  ArticleAvailibilityReturn:
    type: object
    properties:
      meta:
        $ref: '#/definitions/MetaReturn'
      articleAvailibilities:
        type: array
        items:
          $ref: '#/definitions/ArticleAvailibility'
        description: Ein Array von Artikelverfügbarkeiten.
  OrderStatesFilter:
    type: object
    properties:
      meta:
        $ref: '#/definitions/MetaReturn'
      since:
        description: >
          Einschränkung - schränkt auf solche Datensätze ein, deren
          Änderungsdatum gleich oder neuer dem

          übergebenen Wert ist.

          (Format: "yyyy-MM-dd HH:mm:ss", z.B. 2015-06-15 16:45:23)
        type: string
        format: date-time
      orderNumber:
        type: string
        description: 'Auftragsnummer des Shops, wie in /orders übergeben'
  OrderStatesReturn:
    type: object
    properties:
      meta:
        $ref: '#/definitions/MetaReturn'
      categories:
        type: array
        items:
          $ref: '#/definitions/OrderState'
        description: Ein Array von OrderStates.
  OrderState:
    type: object
    properties:
      orderNumber:
        type: string
        description: 'Auftragsnummer des Shops, wie in /orders übergeben'
      orderStatus:
        type: string
        description: |
          Bestellstatus des Auftrags<br>
          Mögliche Werte:<br>
          - "Offen"<br>
          - "In Bearbeitung (Wartet)"<br>
          - "Komplett abgeschlossen"<br>
          - "Teilweise abgeschlossen"<br>
          - "Storniert / Abgelehnt"<br>
          - "Zur Lieferung bereit"<br>
          - "Teilweise ausgeliefert"<br>
          - "Komplett ausgeliefert"<br>
          - "Klärung notwendig"<br>
      trackingNumbers:
        type: array
        items:
          $ref: '#/definitions/Tracking'
        description: >-
          Trackingnummern der Lieferungen zu diesem Auftrag (optional; zur
          späteren Verwendung; kann vorerst leer bleiben)
  Tracking:
    type: object
    properties:
      trackingUrl:
        type: string
        description: URL zur Lieferungsverfolgung
      trackingNumber:
        type: string
        description: Tracking-Nummer zur Lieferungsverfolgung
  CustomerGroupReturn:
    type: object
    properties:
      meta:
        $ref: '#/definitions/MetaReturn'
      customerGroups:
        type: array
        items:
          $ref: '#/definitions/CustomerGroup'
        description: Ein Array von Kundengruppen.
  CustomerReturn:
    type: object
    properties:
      meta:
        $ref: '#/definitions/MetaReturn'
      customers:
        type: array
        items:
          $ref: '#/definitions/Customer'
        description: Ein Array von Kunden.
  DiscountGroupReturn:
    type: object
    properties:
      meta:
        $ref: '#/definitions/MetaReturn'
      discountGroups:
        type: array
        items:
          $ref: '#/definitions/DiscountGroup'
        description: Ein Array von DiscountGroups.
  DiscountGroup:
    type: object
    properties:
      id:
        type: string
        description: ID der DiscountGroup
      name:
        type: string
        description: Name der DiscountGroup
      articleDiscounts:
        type: array
        items:
          $ref: '#/definitions/ArticleDiscount'
        description: Ein Array von ArticleDiscount (Artikelbezogenen Rabatten)
  ArticleDiscount:
    type: object
    properties:
      articleNumber:
        type: string
        description: Artikelnummer des rabattierten Artikels
      discount:
        type: number
        description: Rabatt des Artikels
  ArticleAvailibility:
    type: object
    properties:
      articleNumber:
        type: string
        description: 'Artikelnummer, auf die sich diese Verfügbarkeitinformation bezieht'
      procurable:
        type: boolean
        description: >-
          Ist dieser Artikel kurzfristig beschaffbar? (ja/nein); gibt an, ob der
          Artikel kurzfristig beschaffbar ist oder nicht. Kurzfristig
          beschaffbare Artikel gelten im Shop als verfügbar. Die Verfügbarkeit
          von nicht kurzfristig beschaffbaren Artikeln kann über
          articleAvailibilites abgefragt werden. Typischerweise gelten bei
          Adsystemhaus alle Artikel ausser Impfstoffen als kurzfristig beschaffbar.
      available:
        type: boolean
        description: >-
          Ist dieser Artikel verfügbar? (ja/nein); gibt an, ob der Artikel
          verfügbar ist. Angabe ist im Shop nur relevant bei procurable=false.
      shippingDate:
        type: string
        format: date-time
        description: >-
          Liefertermin; optional; gibt den vorraussichtlichen Liefertermin an.
          Falls der Artikel nicht verfügbar ist, soll der voraussichtliche
          Termin der Wiederverfügbarkeit zurückgegeben werden, insofern
          vorhanden. Angabe ist im Shop nur relevant bei procurable=false und
          available=false.
  CustomerGroup:
    type: object
    properties:
      groupKey:
        type: string
        description: >-
          ID der Kundengruppe (Preisliste). <br> Maximale Länge 5 Zeichen aus
          a-zA-Z0-9.<br> Ist für die Standardpreisliste mit 'EK' belegt.
      name:
        type: string
        description: Bezeichung der Kundengruppe
      deleted:
        type: boolean
        description: Wurde diese Kundengruppe gelöscht?
      fallbackGroupKey:
        type: string
        description: >-
          ID der Preisliste/Kundengruppe, die gilt, wenn in dieser Preisliste
          kein Preis zu einem Artikel gefunden wird.  Maximale Länge 5 Zeichen
          aus a-zA-Z0-9.<br> Falls dieses Feld nicht gesetzt ist, wird im Shop
          die Standardpreisliste 'EK' als Default-Fallback herangezogen.  In der
          Standardpreisliste mit groupKey 'EK' darf dieses Feld nicht gesetzt
          sein bzw. wird es im Shop dort nicht ausgewertet.<br>
  Customer:
    type: object
    properties:
      customerNumber:
        type: string
        description: Kundennummer
      active:
        type: boolean
        description: >-
          Status des Kunden. Falls false gilt der Kunde als gesperrt, falls true
          darf der Kunde den Shop benutzen
      deleted:
        type: boolean
        description: >-
          Bei deleted=false oder Fehlen des Attributs deleted gilt der Kunde als
          nicht gelöscht. Bei deleted=true gilt der Kunde als gelöscht und kann
          somit den Shop in Folge nicht mehr benutzen.
      groupKey:
        type: string
        description: >-
          ID der Preisliste/Kundengruppe, der dieser Kunde zugeordnet ist. 
          Maximale Länge 5 Zeichen aus a-zA-Z0-9. Ist für die Standardpreisliste
          mit 'EK' belegt.
      preisbezug:
        type: string
        description: >-
          ID der discountgroup, die für diesen Kunden auf die Preise aus
          customerGroup EK (=1) angewendet wird. (optional)
      hausliste:
        type: string
        description: >-
          ID der Kategorie, die die Hausliste für diesen Kunden darstellt.
          Optional.
      warengruppen:
        type: array
        items:
          type: string
        description: |
          Ein Array von Warengruppen (Bezeichnungen identisch zur Bezeichnung der Warengruppe beim Kunden).
      email:
        type: string
        description: E-Mail-Adresse
      hashPassword:
        type: string
        description: >-
          das mit Bcrypt gehashte Passwort für den Kundenlogin (enstprechend der
          PHP Funktion password_hash)
      billingAddress:
        $ref: '#/definitions/Address'
      shippingAddress:
        $ref: '#/definitions/Address'
  ArticleReturn:
    type: object
    properties:
      meta:
        $ref: '#/definitions/MetaReturn'
      articles:
        type: array
        items:
          $ref: '#/definitions/Article'
        description: >-
          Ein Array von Artikeln. Artikel werden nach modificationDate
          aufsteigend und nach PZN aufsteigend sortiert zurückgeliefert.
  CategoryReturn:
    type: object
    properties:
      meta:
        $ref: '#/definitions/MetaReturn'
      categories:
        type: array
        items:
          $ref: '#/definitions/Category'
        description: >
          Ein Array von Kategorien.

          In der Schnittstelle zwischen ABDARest zu ProCommerce werden die
          manuell in der Konfiguration definierten Kategorien werdenin den
          ersten Arraypositionen geliefert, in Folge werden die ABDA-basierenden
          Kategorien nach modificationDate aufsteigend und Id aufsteigend
          sortiert zurückgeliefert.
  Article:
    type: object
    properties:
      name:
        type: string
        description: Name / Bezeichnung des Artikels
      active:
        type: boolean
        description: Soll dieser Artikel im Shop gekauft werden können?
      deleted:
        type: boolean
        description: Wurde dieser Artikel gelöscht?
      tax:
        type: number
        description: Steuersatz in Prozent für diesen Artikel
      supplier:
        $ref: '#/definitions/Supplier'
      categories:
        type: array
        items:
          type: string
        description: >-
          IDs der Kategorien in denen der Artikel dargestellt werden soll;
          typischerweise der ATC-Code. <br> Beginnt typischerweise mit X, falls
          die Kategorie per Konfiguration zusätzlich definiert wurde.<br>
          Anmerkung: Führt auch die Hauslisten-Kategorien mit auf, in denen
          dieser Artikel enthalten ist.
      warengruppe:
        type: string
        description: Bezeichnung der Warengruppe (identisch zur Bezeichnung der Warengruppe beim Kunden)
      images:
        type: array
        items:
          type: string
        description: >-
          Namen der Bilder, die zum Artikel gehören<br> Endet typischerweise mit
          .jpg<br>
      mainDetail:
        $ref: '#/definitions/MainDetail'
      descriptionLong:
        type: string
        description: Beschreibung des Artikels
      propertyValues:
        type: array
        items:
          $ref: '#/definitions/PropertyValue'
      procurable:
        type: boolean
        description: >-
          Ist dieser Artikel kurzfristig beschaffbar? (ja/nein); gibt an, ob der
          Artikel kurzfristig beschaffbar ist oder nicht. Kurzfristig
          beschaffbare Artikel gelten im Shop als verfügbar. Die Verfügbarkeit
          von nicht kurzfristig beschaffbaren Artikeln kann über
          articleAvailibilites abgefragt werden. Typischerweise gelten bei
          Adsystemhaus alle Artikel ausser Impfstoffen als kurzfristig beschaffbar.
      modificationDate:
        type: string
        format: date-time
        description: Zeitpunkt der letzten Aktualisierung dieses Datensatzes
  Supplier:
    type: object
    properties:
      Key_ADR:
        type: number
        description: ID des Suppliers (Hersteller/Lieferant)
      Firmenname:
        type: string
        description: Firmenname/Bezeichnung des Suppliers
  PropertyValue:
    type: object
    properties:
      option:
        type: string
        description: >
          Bezeichnung der Option. Mögliche Werte: 'Apothekenpflicht',
          'Rezeptpflicht', 'Darreichungsform', 'Vertriebsstatus',
          'Verkehrsstatus', 'Reimport', 'Mwst', 'Tierarzneimittel',
          'Arzneimittel', 'Medizinprodukt', 'Kuehlkette', 'BTM',
          'Droge_Chemikalie', 'TFG', 'AMPreisV_AMG', 'AMPreisV_SGB', 'T_Rezept'
      value:
        type: string
        description: >
          Wert der Option ('ja', 'nein' oder 'Globuli', ....)<br>

          Mögliche Werte bei Option 'Apothekenpflicht': 'ja', 'nein',
          'nein/Ausnahmeregel'<br>

          Mögliche Werte bei Option 'Rezeptpflicht': 'ja', 'nein',
          'ja/Ausnahmeregel', 'nein/Ausnahmeregel'<br>

          Mögliche Werte bei Option 'Darreichungsform': freier Text mit bis zu
          60 Zeichen, z.B. 'Globuli'<br>

          Mögliche Werte bei Option 'Vertriebsstatus': 'keine Angabe', 'außer
          Vertrieb', 'im Vertrieb', 'zurückgezogen'<br>

          Mögliche Werte bei Option 'Verkehrsstatus': 'keine Angabe', 'nicht
          verkehrsfähig', 'verkehrsfähig', 'Verkehrsfähigkeit in Prüfung'<br>

          Mögliche Werte bei Option 'Reimport': 'ja', 'nein'<br>

          Mögliche Werte bei Option 'Mwst': 'keine Angabe', 'voll',
          'ermaessigt', 'ohne'<br>

          Mögliche Werte bei Option 'Tierarzneimittel': 'keine Angabe', 'nein',
          'ja'<br>

          Mögliche Werte bei Option 'Arzneimittel': 'keine Angabe', 'nein',
          'ja'<br>

          Mögliche Werte bei Option 'Medizinprodukt': 'keine Angabe', 'nein',
          'ja'<br>

          Mögliche Werte bei Option 'Kuehlkette': 'keine Angabe', 'nein',
          'ja'<br>

          Mögliche Werte bei Option 'BTM': 'keine Angabe', 'nein', 'ja', 'ja,
          ausgenommene Zubereitung'<br>

          Mögliche Werte bei Option 'Droge_Chemikalie': 'keine Angabe', 'nein',
          'ja'<br>

          Mögliche Werte bei Option 'TFG' (Transfusionsgesetz) : 'keine Angabe',
          'nein', 'ja'<br>

          Mögliche Werte bei Option 'AMPreisV_AMG': 'keine Angabe', 'nein',
          'ja', 'Rezepturzuschlag'<br>

          Mögliche Werte bei Option 'AMPreisV_SGB': 'keine Angabe', 'nein',
          'ja', 'Rezepturzuschlag'<br>

          Mögliche Werte bei Option 'T_Rezept': 'keine Angabe', 'nein', 'ja'<br>
      key:
        type: string
        description: Schlüssel zum Wert (~ABDA-Enumerations-Schlüssel)
  MainDetail:
    type: object
    properties:
      number:
        type: string
        description: Artikelnummer (typischerweise die PZN)
      prices:
        type: array
        items:
          $ref: '#/definitions/Price'
      unit:
        type: string
        description: |
          Schlüssel für die Einheit des Artikels. <br>
          Mögliche Werte:<br>
          cm ( → Zentimeter),<br>
          Fl ( → Flasche),<br>
          g ( → Gramm),<br>
          IE ( → Internationale Einheiten),<br>
          kg ( → Kilogramm),<br>
          l ( → Liter),<br>
          m ( → Meter),<br>
          mg ( → Milligramm),<br>
          ml ( → Milliliter),<br>
          mm ( → Millimeter),<br>
          P ( → Packung),<br>
          Sp ( → Sprühstöße),<br>
          St ( → Stück),<br>
          µg ( → Mikrogramm),<br>
          Liter,<br>
          Packung,<br>
          Stück,<br>
          Flasche,<br>
          Internationale Einheiten,<br>
          Sprühstöße<br>
      purchaseUnit:
        type: string
        description: 'Verpackungsgröße (numerisch, z.B. 50)'
      purchasePrice:
        type: number
        description: Apothekeneinkaufspreis
      packUnit:
        type: string
        description: >-
          Verpackungsgröße (zusätzlich zu purchaseUnit; nur belegt, wenn nicht
          numerisch, z.B. '5x10')
      referenceUnit:
        type: string
        description: 'kleinste Einheit (für Grundpreisberechnung), typischerweise 1'
      attribute:
        type: array
        items:
          $ref: '#/definitions/Attribute'
        description: |
          Definierte Attibute-Namen sind: <br>
           'Anwendungshinweise' - Hinweise "Anwendungshinweise" zum Artikel<br>
           'Gegenanzeigen' - Hinweise "Gegenanzeigen" zum Artikel<br>
           'Wichtige Hinweise' - Hinweise "Wichtige Hinweise" zum Artikel<br>
           'Nebenwirkungen' - Hinweise "Nebenwirkungen" zum Artikel <br>
           'Aufbewahrung' - Hinweise "Aufbewahrung" zum Artikel<br> 
           'Key_FAM' - Schlüssel des Fertigarzneimittels; wird im Shop benötigt zur Anzeige alternativer Packungsgrößen)<br>
           'Original_Key_WAR' - Der Key_WAR gemäß ABDA - die Kategorie ist typischerweise gleich zu diesem Wert, für Adsystemhaus es gibt es 2 Ausnahmen <br>
           'Gdat_Preise' - Gültigkeitsdatum Preise im ABDA-Format YYYYMMDD des Fertigarzneimittels; wird im Shop benötigt zur Anzeige alternativer Packungsgrößen)<br>
           'PZN_Nachfolger' - Verweis auf Nachfolge-PZN<br>
           'Lagertemperatur_max' - Lagertemperatur, maximal<br>
           'GTIN' - Global Trade Item Number des Artikels<br>
  Attribute:
    type: object
    description: frei definierbares Attribut.
    properties:
      attributename:
        type: string
        description: Name des Attributs.
      attributevalue:
        type: string
        description: Wert des Attributs.
  Price:
    type: object
    description: >-
      Einer einzelner Preis zu einem Artikel. Wird je Staffelstufe (bei
      Staffelpreisen) und Kundengruppe geliefert. Kundenwarengruppenrabatte sind
      in die hier übergebenen Preise bereits eingerechnet.
    properties:
      groupKey:
        type: string
        description: >
          ID der Preisliste/Kundengruppe, für die dieser Preis gilt. 

          Maximale Länge 5 Zeichen aus a-zA-Z0-9.<br> <br>

          Für PC zu Shopware gilt:

          Ist für die Standardpreisliste mit "1" (EK) belegt.

          Ist mit dem Schlüssel der Preisliste/Kundengruppe für alle anderen
          Preislisten/Kundengruppen belegt.

          Die Kundengruppen/Preislisten-Hierarchie 

          (sowie das Mapping der Schlüssel auf den Klarnamen) steht über den
          Service Pricelists zur Verfügung)<br> <br>

          Für ABDA-REST zu PC gilt:

          Ist mit dem Schlüssel der Preisliste/Kundengruppe für alle anderen
          Preislisten/Kundengruppen belegt.<br> <br>

          Mögliche Werte:<br>

          EK       => Prio1: Apothekenverkaufspreis, Prio2: UVP<br>

          ApU      => Abgabepreis pharmazeutischer Unternehmer<br>

          Apo_Ek   => Apothekeneinkaufspreis<br>

          Apo_Vk   => Apothekenverkaufspreis<br>

          UVP      => Unverbindliche Preisempfehlung<br>
      from:
        type: number
        description: >-
          untere Anzahl bei Staffelpreis (wird inkl. gewertet). Wird nicht
          übertragen, falls kein Staffelpreis. Wird bei Abruf aus ABDATA-Quellen
          nicht übertragen.
      to:
        type: number
        description: >-
          obere Anzahl bei Staffelpreis (wird inkl. gewertet). Wird nicht
          übertragen, falls kein Staffelpreis. Wird bei Abruf aus ABDATA-Quellen
          nicht übertragen. Ist mit '-1' zu belegen für höchste Staffel (z.B.
          folgende  Abschnitte (1,10) (11,20) (21,-1)). -1 steht hierbei für
          'beliebig'.
      price:
        type: number
        description: Verkaufspreis in netto
      pseudoprice:
        type: number
        description: Pseudopreis in netto
      baseprice:
        type: number
        description: >-
          Einkaufspreis in netto (Attribut ist nicht verpflichtend bei Übergabe
          in den Shop)
  Category:
    type: object
    properties:
      id:
        type: string
        description: >-
          ID der Kategorie; typischerweise ATC-Code. Beginnt typischerweise mit
          X, falls die Kategorie per Konfiguration zusätzlich definiert wurde.
      name:
        type: string
        description: Bezeichnung und Anzeigename der Kategorie.
      parent:
        type: string
        description: >-
          id der übergeordneten Kategorie. Ist dieser Wert null, so handelt es
          sich um eine Top-Level-Kategorie. Bei Hauslisten (d.h. bei attribute
          hausliste=true) muss dieser Wert null sein.
      active:
        type: boolean
        description: >-
          Status der Kategorie. Falls true soll diese Kategorie im Shop
          angezeigt werden. Falls false, soll diese Kategorie nicht im Shop
          angezeigt werden.
      deleted:
        type: boolean
        description: Wurde diese Kategorie gelöscht?
      hausliste:
        type: boolean
        description: >-
          soll true gesetzt sein, wenn es sich bei dieser Kategorie um eine
          Hausliste handelt. Das heisst diese Kategorie wird grundlegend für
          alle Nutzer des Shops ausgeblendet - und nur für den Nutzer (customer)
          eingeblendet, dessen Attribut hausListe mit dem Wert der id dieser
          Kategorie belegt ist.
      modificationDate:
        type: string
        format: date-time
        description: Zeitpunkt der letzten Aktualisierung dieses Datensatzes
  MetaReturn:
    type: object
    description: Meta-Daten zum Ergebnis.
    properties:
      skip:
        description: >-
          Auch "Offset". Gibt an, wieviele Datensätze aus der Gesamtmenge für
          die Rückgabe übersprungen wurden.
        type: number
        format: integer
      take:
        description: 'Auch "Limit". Gibt an, wieviele Datensätze angefragt wurden.'
        type: number
        format: integer
      since:
        description: |
          Einschränkung - die gewünschte zeitliche Einschränkung aus der Anfrage
        type: string
        format: date-time
      total:
        description: Anzahl der Datensätze insgesamt.
        type: number
        format: integer
      debugInfos:
        description: optionale Debuginformationen
        type: string
  Error:
    type: object
    properties:
      code:
        type: integer
        format: int32
      message:
        type: string
      fields:
        type: string
