openapi: 3.0.2
info:
  title:
    DiGA Service Provider API
  description: |
    Ermöglicht die Einlösung und Abrechnung von Rezeptcodes im Zuge der Genehmigung von digitalen Gesundheitsanwendungen (DiGA).

    - In der API werden Nutzdaten grundsätzlich verschlüsselt übertragen.
      Die Nutzdaten werden mit Hilfe einer technischen Anlage beschrieben.

    - Um die Anzahl öffentlicher Endpunkte niedrig zu halten, ist die API routing- fähig zu gestalten. Hierzu verfügt die API grundsätzlich über die Attribute
        - iksender IK-Nummer des Senders (DiGA Hersteller)
        - ikempfaenger IK-Nummer des Empfängers (Krankenkasse)
      (zur Routing-Information) abzubilden.

  version: "1.0"

components:
  schemas:
    IkSender:
      type: string
      pattern: '^\d{9}$' 
      example: 123456789
      description: IK-Nummer des Senders (DiGA Hersteller)
    IkEmpfaenger:
      type: string
      pattern: '^\d{9}$'
      example: 123456789
      description: IK-Nummer des Empfängers (Krankenkasse)
    Verfahren:
      type: string
      example: EDRE0
      description: |
        Name des technischen Abrechnungsverfahren (Vergeben durch GKV-SV)
    NutzdatenRequest:
      type: string
      format: binary
      example: 0x01234ABEF... (kodiert als Byte Array)
      description: Verschlüsselte Nutzdaten-Nachricht (XML)
    NutzdatenResponse:
      type: string
      format: binary
      example: 0x01234ABEF... (kodiert als Byte Array)
      description: Verschlüsselte Antwort der Nutzdaten-Funktion (XML)

    DigaRequest:
      type: object
      properties:
        iksender:
          $ref: '#/components/schemas/IkSender'
        ikempfaenger:
          $ref: '#/components/schemas/IkEmpfaenger'
        verfahren:
          $ref: '#/components/schemas/Verfahren'
        nutzdaten:
          $ref: '#/components/schemas/NutzdatenRequest'

    DigaResponse:
      type: object
      properties:
        iksender:
          $ref: '#/components/schemas/IkSender'
        ikempfaenger:
          $ref: '#/components/schemas/IkEmpfaenger'
        verfahren:
          $ref: '#/components/schemas/Verfahren'
        nutzdaten:
          $ref: '#/components/schemas/NutzdatenResponse'

paths:

  /diga:
    post:
      tags:
        - Rezeptcode einlösen
        - Rezeptcode abrechnen
      summary: Abfrage zur Einlösung oder Abrechnung des Rezeptcodes
      description: |
        Führt eine Einlösung des Rezeptcodes oder die Abrechnung eines Rezeptcodes durch.
        Entscheidend ist das Element "nutzdaten" welches eine signierte und verschlüsselte XML-Struktur darstellt.
        Die Struktur wird durch ein XSD definiert.
        Es wird gemäß der Security Schnittstelle (Anlage 16 GGT) verschlüsselt.

      requestBody:
        content: 
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/DigaRequest'
            encoding:
              iksender:
                contentType: text/plain
              ikempfaenger:
                contentType: text/plain
              verfahren:
                contentType: text/plain
              nutzdaten:
                contentType: application/octet-stream
      responses:
        200:
          description: OK
          content: 
            multipart/form-data:
              schema:
                $ref: '#/components/schemas/DigaResponse'
              encoding:
                ikempfaenger:
                  contentType: text/plain
                iksender:
                  contentType: text/plain
                verfahren:
                  contentType: text/plain
                nutzdaten:
                  contentType: application/octet-stream
        400:
          description: Bad Request
        401:
          description: Unauthorized
        403:
          description: Forbidden
        500:
          description: |
            Internal Server Error - Während der Verarbeitung in der
            DIGAPI ist ein technischer Fehler aufgetreten.